From f12d6c6fa2b0f159e51f84929aec6414b1b0006e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxmili=C3=A1n=20Holomek?= Date: Sat, 27 Jun 2026 10:11:22 +0200 Subject: [PATCH] build(vite): migrate fancyadmin assets from webpack to Vite - Replace webpack-style `~` tilde imports with bare specifiers in SCSS - Add `_jquery-global.js` to expose jQuery globals before legacy plugins load - Add `_registerFancyadminComponents.js` for self-registering FancyAdmin JS components - Update `@layout.latte` to use `{asset 'portal:js/portal.js'}` instead of conditional HMR/prod CSS links - Remove stale hashed font/OTF files from dist (now emitted by Vite at build time) --- assets/js/_jquery-global.js | 12 ++ assets/js/_registerFancyadminComponents.js | 13 ++ assets/js/_registerStandaloneBuiltins.js | 10 + assets/js/admin.js | 8 + assets/js/app.js | 21 ++- assets/js/datagrid.js | 4 +- assets/js/datagrid/datagrid.js | 11 ++ assets/scss/_fontawesome.scss | 10 +- assets/scss/_variables.scss | 6 +- assets/scss/app.scss | 6 +- dist/admin/89937b93a1c3ac41f5a9.otf | Bin 133600 -> 0 bytes dist/admin/css/admin.css | 17 -- dist/admin/fonts/275dd55e10ba966bcb9b.ttf | Bin 132152 -> 0 bytes dist/admin/fonts/7c8d04cd831df3033c8a.ttf | Bin 168644 -> 0 bytes dist/admin/fonts/9a42f2741ca78a25feaa.ttf | Bin 761340 -> 0 bytes dist/admin/fonts/9d7a6e03c6e3ed49c7ac.ttf | Bin 132204 -> 0 bytes dist/admin/fonts/9fb9e3d1e42a353d678c.woff2 | Bin 285540 -> 0 bytes dist/admin/fonts/b65ac3b8da9f6efd3346.ttf | Bin 1000084 -> 0 bytes dist/admin/fonts/cf56c1b149d0a5e8d7c6.ttf | Bin 168060 -> 0 bytes dist/admin/fonts/e6f4e254e8b705435dd6.woff2 | Bin 352752 -> 0 bytes dist/admin/fonts/fc2b5060f7accec5cf74.ttf | Bin 168260 -> 0 bytes dist/admin/js/admin.js | 1 - package.json | 28 +-- src/UI/Presenters/@layout.latte | 12 +- vite.config.mjs | 103 +++++++++++ webpack.config.js | 191 -------------------- 26 files changed, 192 insertions(+), 261 deletions(-) create mode 100644 assets/js/_jquery-global.js create mode 100644 assets/js/_registerFancyadminComponents.js create mode 100644 assets/js/_registerStandaloneBuiltins.js create mode 100644 assets/js/admin.js delete mode 100644 dist/admin/89937b93a1c3ac41f5a9.otf delete mode 100644 dist/admin/css/admin.css delete mode 100644 dist/admin/fonts/275dd55e10ba966bcb9b.ttf delete mode 100644 dist/admin/fonts/7c8d04cd831df3033c8a.ttf delete mode 100644 dist/admin/fonts/9a42f2741ca78a25feaa.ttf delete mode 100644 dist/admin/fonts/9d7a6e03c6e3ed49c7ac.ttf delete mode 100644 dist/admin/fonts/9fb9e3d1e42a353d678c.woff2 delete mode 100644 dist/admin/fonts/b65ac3b8da9f6efd3346.ttf delete mode 100644 dist/admin/fonts/cf56c1b149d0a5e8d7c6.ttf delete mode 100644 dist/admin/fonts/e6f4e254e8b705435dd6.woff2 delete mode 100644 dist/admin/fonts/fc2b5060f7accec5cf74.ttf delete mode 100644 dist/admin/js/admin.js create mode 100644 vite.config.mjs delete mode 100644 webpack.config.js diff --git a/assets/js/_jquery-global.js b/assets/js/_jquery-global.js new file mode 100644 index 0000000..7fe6d68 --- /dev/null +++ b/assets/js/_jquery-global.js @@ -0,0 +1,12 @@ +// jQuery must be exposed as a global BEFORE any legacy jQuery plugin (jquery-ui-bundle, +// @regru/jquery-menu-aim, nette.ajax.js, …) is evaluated. ES module imports are hoisted +// and evaluated depth-first in source order, so importing this module FIRST guarantees +// the globals exist before those plugin modules run. +import jQuery from 'jquery'; + +window.$ = jQuery; +window.jquery = jQuery; +window.jQuery = jQuery; +globalThis.jQuery = jQuery; + +export default jQuery; diff --git a/assets/js/_registerFancyadminComponents.js b/assets/js/_registerFancyadminComponents.js new file mode 100644 index 0000000..48159b1 --- /dev/null +++ b/assets/js/_registerFancyadminComponents.js @@ -0,0 +1,13 @@ +// Registers FancyAdmin's own JS components (referenced as "~UI/..." in +// AdtJsComponents.init() calls), so each consuming project doesn't have to. +// +// Imported first by app.js — runs before app.js's init() calls, and merges into +// the shared registry (see ComponentLoader.registerModules), so the consumer can +// still register its own 'app' components and 'builtin' allowlist separately. +// +// The glob is relative to this file (assets/js/) → resolves to the package's src/UI. +import AdtJsComponents from 'adt-js-components'; + +AdtJsComponents.registerModules({ + fancyadmin: import.meta.glob('../../src/UI/**/index.js'), +}); diff --git a/assets/js/_registerStandaloneBuiltins.js b/assets/js/_registerStandaloneBuiltins.js new file mode 100644 index 0000000..da9d605 --- /dev/null +++ b/assets/js/_registerStandaloneBuiltins.js @@ -0,0 +1,10 @@ +// Built-in adt-js-components used by FancyAdmin's own standalone build (admin.js). +// In a real consuming project this allowlist lives in the project; here it's only +// for the package's standalone build. Separate module so it's evaluated before +// app.js's init() calls (static imports are hoisted, so a registerModules() call in +// admin.js's body would run too late). +import AdtJsComponents from 'adt-js-components'; + +AdtJsComponents.registerModules({ + builtin: import.meta.glob('../../node_modules/adt-js-components/src/{Messaging,Notifications,Translate}/index.js'), +}); diff --git a/assets/js/admin.js b/assets/js/admin.js new file mode 100644 index 0000000..704b7ff --- /dev/null +++ b/assets/js/admin.js @@ -0,0 +1,8 @@ +// Standalone Vite entry for the FancyAdmin package — the equivalent of the old +// webpack 'admin' build (which bundled assets/js/app.js). +// +// app.js self-registers FancyAdmin's own components ('fancyadmin' scope). For the +// standalone build we additionally register the built-ins it uses, first, so the +// registration runs before app.js's init() calls (imports are hoisted). +import './_registerStandaloneBuiltins'; +import './app'; diff --git a/assets/js/app.js b/assets/js/app.js index f7fd5d6..55f609a 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1,22 +1,25 @@ +// +// jQuery as a global — MUST be first so it is set before the legacy plugins below +// (and bundled deps like nette.ajax.js) are evaluated. Imports are hoisted. +// +import $ from './_jquery-global'; + +// +// Register FancyAdmin's own JS components (before the init() calls below). +// +import './_registerFancyadminComponents'; + // // SCSS styles // import '../scss/app.scss'; // -// Old non-modular JS vendor files +// Legacy non-modular jQuery plugins (rely on the global set above). // -// import jQuery from 'jquery'; -import $ from 'jquery'; import 'jquery-ui-bundle'; import '@regru/jquery-menu-aim'; -window.$ = $; -window.jquery = $; -window.jQuery = $; - -global.jQuery = $; - // import {Chart} from "chart.js/auto"; import Nette from 'nette-forms'; import './dependentSelectBox' diff --git a/assets/js/datagrid.js b/assets/js/datagrid.js index e130a3a..f349ac8 100644 --- a/assets/js/datagrid.js +++ b/assets/js/datagrid.js @@ -1,4 +1,6 @@ -datagridSortable = function($el) { +// Explicit global: ublaboo renders inline scripts that call datagridSortable(). +// ESM modules are strict, so the previous implicit global assignment threw. +window.datagridSortable = function($el) { if (typeof $.fn.sortable === 'undefined') { return; } diff --git a/assets/js/datagrid/datagrid.js b/assets/js/datagrid/datagrid.js index 6788cec..83d9f80 100644 --- a/assets/js/datagrid/datagrid.js +++ b/assets/js/datagrid/datagrid.js @@ -915,3 +915,14 @@ dataGridRegisterExtension('datagrid.reset-filter-by-column', { } } }); + +// Expose datagrid helpers as globals for ublaboo's inline scripts. Under webpack these +// top-level `var`s were implicit globals; ESM modules are scoped, so expose explicitly. +window.datagridFitlerMultiSelect = datagridFitlerMultiSelect; +window.datagridGroupActionMultiSelect = datagridGroupActionMultiSelect; +window.datagridShiftGroupSelection = datagridShiftGroupSelection; +window.datagridSortableTree = datagridSortableTree; +window.getEventDomPath = getEventDomPath; +if (typeof datagridSortable !== 'undefined') { + window.datagridSortable = datagridSortable; +} diff --git a/assets/scss/_fontawesome.scss b/assets/scss/_fontawesome.scss index b08e7b7..0cf975b 100644 --- a/assets/scss/_fontawesome.scss +++ b/assets/scss/_fontawesome.scss @@ -1,5 +1,5 @@ -$fa-font-path: '~@fortawesome/fontawesome-pro/webfonts'; - -@import '~@fortawesome/fontawesome-pro/scss/fontawesome'; -@import '~@fortawesome/fontawesome-pro/scss/solid'; -@import '~@fortawesome/fontawesome-pro/scss/sharp-solid'; \ No newline at end of file +// FontAwesome's own $fa-font-path default ("../webfonts") is used as-is; the build +// copies the webfonts to that location relative to the emitted CSS. +@import '@fortawesome/fontawesome-pro/scss/fontawesome'; +@import '@fortawesome/fontawesome-pro/scss/solid'; +@import '@fortawesome/fontawesome-pro/scss/sharp-solid'; \ No newline at end of file diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss index 052a9ff..f92ed4a 100644 --- a/assets/scss/_variables.scss +++ b/assets/scss/_variables.scss @@ -1,9 +1,9 @@ -@import '~bootstrap/scss/functions'; +@import 'bootstrap/scss/functions'; // Default variable overrides come here -@import "~bootstrap/scss/variables"; -@import "~bootstrap/scss/mixins"; +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/mixins"; /* ==================== diff --git a/assets/scss/app.scss b/assets/scss/app.scss index 2bfd04c..f7c9f9b 100644 --- a/assets/scss/app.scss +++ b/assets/scss/app.scss @@ -1,8 +1,8 @@ @import 'variables'; -@import '~bootstrap/scss/bootstrap'; +@import 'bootstrap/scss/bootstrap'; -@import '~select2/src/scss/core'; -//@import '~select2-bootstrap-5-theme/src/include-all'; +@import 'select2/src/scss/core'; +//@import 'select2-bootstrap-5-theme/src/include-all'; @import 'fontawesome'; //@import 'daterangepicker'; @import 'jquery-ui/datepicker'; diff --git a/dist/admin/89937b93a1c3ac41f5a9.otf b/dist/admin/89937b93a1c3ac41f5a9.otf deleted file mode 100644 index cf83f0146091cdd72626ab3339ccddbe8293fd08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133600 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 diff --git a/dist/admin/css/admin.css b/dist/admin/css/admin.css deleted file mode 100644 index c89f35b..0000000 --- a/dist/admin/css/admin.css +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Bootstrap v5.3.3 (https://getbootstrap.com/) - * Copyright 2011-2024 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(5.2, 44, 101.2);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(10, 54, 33.6);--bs-info-text-emphasis: rgb(5.2, 80.8, 96);--bs-warning-text-emphasis: rgb(102, 77.2, 2.8);--bs-danger-text-emphasis: rgb(88, 21.2, 27.6);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(206.6, 226, 254.6);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(209, 231, 220.8);--bs-info-bg-subtle: rgb(206.6, 244.4, 252);--bs-warning-bg-subtle: rgb(255, 242.6, 205.4);--bs-danger-bg-subtle: rgb(248, 214.6, 217.8);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(158.2, 197, 254.2);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(163, 207, 186.6);--bs-info-border-subtle: rgb(158.2, 233.8, 249);--bs-warning-border-subtle: rgb(255, 230.2, 155.8);--bs-danger-border-subtle: rgb(241, 174.2, 180.6);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 51, 51, 51;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #333333;--bs-body-color-rgb: 51, 51, 51;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: rgb(10.4, 88, 202.4);--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: rgb(255, 242.6, 205.4);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(13, 110, 253, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(109.8, 168, 253.8);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(117, 183, 152.4);--bs-info-text-emphasis: rgb(109.8, 223.2, 246);--bs-warning-text-emphasis: rgb(255, 217.8, 106.2);--bs-danger-text-emphasis: rgb(234, 133.8, 143.4);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(2.6, 22, 50.6);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(5, 27, 16.8);--bs-info-bg-subtle: rgb(2.6, 40.4, 48);--bs-warning-bg-subtle: rgb(51, 38.6, 1.4);--bs-danger-bg-subtle: rgb(44, 10.6, 13.8);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(7.8, 66, 151.8);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(15, 81, 50.4);--bs-info-border-subtle: rgb(7.8, 121.2, 144);--bs-warning-border-subtle: rgb(153, 115.8, 4.2);--bs-danger-border-subtle: rgb(132, 31.8, 41.4);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(109.8, 168, 253.8);--bs-link-hover-color: rgb(138.84, 185.4, 254.04);--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: #dee2e6;--bs-highlight-bg: rgb(102, 77.2, 2.8);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(117, 183, 152.4);--bs-form-valid-border-color: rgb(117, 183, 152.4);--bs-form-invalid-color: rgb(234, 133.8, 143.4);--bs-form-invalid-border-color: rgb(234, 133.8, 143.4)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(51,51,51,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 226, 254.6);--bs-table-border-color: rgb(165.28, 180.8, 203.68);--bs-table-striped-bg: rgb(196.27, 214.7, 241.87);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 203.4, 229.14);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 209.05, 235.505);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(225.6, 227.4, 229);--bs-table-border-color: rgb(180.48, 181.92, 183.2);--bs-table-striped-bg: rgb(214.32, 216.03, 217.55);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(203.04, 204.66, 206.1);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(208.68, 210.345, 211.825);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(209, 231, 220.8);--bs-table-border-color: rgb(167.2, 184.8, 176.64);--bs-table-striped-bg: rgb(198.55, 219.45, 209.76);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(188.1, 207.9, 198.72);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(193.325, 213.675, 204.24);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(206.6, 244.4, 252);--bs-table-border-color: rgb(165.28, 195.52, 201.6);--bs-table-striped-bg: rgb(196.27, 232.18, 239.4);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(185.94, 219.96, 226.8);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(191.105, 226.07, 233.1);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 242.6, 205.4);--bs-table-border-color: rgb(204, 194.08, 164.32);--bs-table-striped-bg: rgb(242.25, 230.47, 195.13);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 218.34, 184.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 224.405, 189.995);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(248, 214.6, 217.8);--bs-table-border-color: rgb(198.4, 171.68, 174.24);--bs-table-striped-bg: rgb(235.6, 203.87, 206.91);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 193.14, 196.02);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 198.505, 201.465);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(198.4, 199.2, 200);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: rgb(77.4, 80.6, 83.8);--bs-table-striped-bg: rgb(44.1, 47.9, 51.7);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(55.2, 58.8, 62.4);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(49.65, 53.35, 57.05);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--bs-border-width));padding-bottom:calc(0.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--bs-border-width));padding-bottom:calc(0.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--bs-border-width));padding-bottom:calc(0.25rem + var(--bs-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:rgb(134,182.5,254);outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23343a40%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(134,182.5,254);outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23dee2e6%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:rgb(134,182.5,254);outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27m6 10 3 3 6-6%27/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%272%27 fill=%27%23fff%27/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27M6 10h8%27/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%280, 0, 0, 0.25%29%27/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgb%28134, 182.5, 254%29%27/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27%23fff%27/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%28255, 255, 255, 0.25%29%27/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(182.4,211.5,254.4)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(182.4,211.5,254.4)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3e%3cpath fill=%27%23198754%27 d=%27M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z%27/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3e%3cpath fill=%27%23198754%27 d=%27M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z%27/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 25px;--bs-btn-padding-y: 15px;--bs-btn-font-family: ;--bs-btn-font-size:0.9rem;--bs-btn-font-weight: 400;--bs-btn-line-height: normal;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: 20px;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(11.05, 93.5, 215.05);--bs-btn-hover-border-color: rgb(10.4, 88, 202.4);--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(10.4, 88, 202.4);--bs-btn-active-border-color: rgb(9.75, 82.5, 189.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(91.8, 99.45, 106.25);--bs-btn-hover-border-color: rgb(86.4, 93.6, 100);--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(86.4, 93.6, 100);--bs-btn-active-border-color: rgb(81, 87.75, 93.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(21.25, 114.75, 71.4);--bs-btn-hover-border-color: rgb(20, 108, 67.2);--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(20, 108, 67.2);--bs-btn-active-border-color: rgb(18.75, 101.25, 63);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(49.3, 209.95, 242.25);--bs-btn-hover-border-color: rgb(37.2, 207.3, 241.5);--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(61.4, 212.6, 243);--bs-btn-active-border-color: rgb(37.2, 207.3, 241.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(255, 202.3, 44.2);--bs-btn-hover-border-color: rgb(255, 199.2, 31.8);--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(255, 205.4, 56.6);--bs-btn-active-border-color: rgb(255, 199.2, 31.8);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(187, 45.05, 58.65);--bs-btn-hover-border-color: rgb(176, 42.4, 55.2);--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(176, 42.4, 55.2);--bs-btn-active-border-color: rgb(165, 39.75, 51.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(66.3, 69.7, 73.1);--bs-btn-hover-border-color: rgb(55.2, 58.8, 62.4);--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(77.4, 80.6, 83.8);--bs-btn-active-border-color: rgb(55.2, 58.8, 62.4);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:20px}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:18.75px;padding-left:18.75px}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25rem;--bs-navbar-toggler-padding-x: 0.75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%2833, 37, 41, 0.75%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, 0.55);--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%28255, 255, 255, 0.55%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%28255, 255, 255, 0.55%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27%23212529%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27M2 5L8 11L14 5%27/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27rgb%285.2, 44, 101.2%29%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27M2 5L8 11L14 5%27/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27rgb%28109.8, 168, 253.8%29%27%3e%3cpath fill-rule=%27evenodd%27 d=%27M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27rgb%28109.8, 168, 253.8%29%27%3e%3cpath fill-rule=%27evenodd%27 d=%27M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23000%27%3e%3cpath d=%27M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z%27/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z%27/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin:calc(-0.5*var(--bs-offcanvas-padding-y)) calc(-0.5*var(--bs-offcanvas-padding-x)) calc(-0.5*var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #333333 55%, rgba(0, 0, 0, 0.8) 75%, #333333 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(51,51,51,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:rgba(0,0,0,0) rgba(0,0,0,0) #888 rgba(0,0,0,0);border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:rgba(0,0,0,0);border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:rgb(246.5,246.5,246.5);border:1px solid #dee2e6;border-radius:.375rem;outline:0;background-image:-webkit-linear-gradient(top, white 50%, #eeeeee 100%);background-image:-o-linear-gradient(top, white 50%, #eeeeee 100%);background-image:linear-gradient(to bottom, white 50%, #eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #dee2e6;border-top-right-radius:.375rem;border-bottom-right-radius:.375rem;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFCCCCCC", GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #dee2e6;border-radius:0;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:rgba(0,0,0,0);border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:rgba(0,0,0,0) rgba(0,0,0,0) #888 rgba(0,0,0,0);border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, white 0%, #eeeeee 50%);background-image:-o-linear-gradient(top, white 0%, #eeeeee 50%);background-image:linear-gradient(to bottom, white 0%, #eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eeeeee 50%, white 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, white 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, white 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFFFFFFF", GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #dee2e6;border-radius:.375rem;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #dee2e6;border-radius:.375rem;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #dee2e6;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid rgba(0,0,0,0)}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:gray}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*! - * Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license (Commercial License) - * Copyright 2024 Fonticons, Inc. - */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Pro");font-weight:var(--fa-style, 900)}.fa-solid,.fa-regular,.fa-brands,.fas,.far,.fab,.fal,.fat,.fad,.fass,.fasr,.fasl,.fast,.fasds,.fa-light,.fa-thin,.fa-duotone,.fa-sharp,.fa-sharp-duotone,.fa-sharp-solid,.fa-classic,.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas,.far,.fal,.fat,.fa-solid,.fa-regular,.fa-light,.fa-thin,.fa-classic{font-family:"Font Awesome 6 Pro"}.fab,.fa-brands{font-family:"Font Awesome 6 Brands"}.fad,.fa-classic.fa-duotone,.fa-duotone{font-family:"Font Awesome 6 Duotone"}.fasds,.fa-sharp-duotone{font-family:"Font Awesome 6 Sharp Duotone"}.fasds,.fa-sharp-duotone{font-weight:900}.fass,.fasr,.fasl,.fast,.fa-sharp{font-family:"Font Awesome 6 Sharp"}.fass,.fa-sharp{font-weight:900}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-0.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-0.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1*var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, 0.1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, 0.08em);padding:var(--fa-border-padding, 0.2em 0.25em 0.15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, 0.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, 0.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media(prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1, 1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0)}57%{transform:scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em))}64%{transform:scale(1, 1) translateY(0)}100%{transform:scale(1, 1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, 0.4)}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity, 0.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scale(-1, 1)}.fa-flip-vertical{transform:scale(1, -1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1, -1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0::before{content:"\30 "}.fa-1::before{content:"\31 "}.fa-2::before{content:"\32 "}.fa-3::before{content:"\33 "}.fa-4::before{content:"\34 "}.fa-5::before{content:"\35 "}.fa-6::before{content:"\36 "}.fa-7::before{content:"\37 "}.fa-8::before{content:"\38 "}.fa-9::before{content:"\39 "}.fa-fill-drip::before{content:""}.fa-arrows-to-circle::before{content:""}.fa-circle-chevron-right::before{content:""}.fa-chevron-circle-right::before{content:""}.fa-wagon-covered::before{content:""}.fa-line-height::before{content:""}.fa-bagel::before{content:""}.fa-transporter-7::before{content:""}.fa-at::before{content:"\@"}.fa-rectangles-mixed::before{content:""}.fa-phone-arrow-up-right::before{content:""}.fa-phone-arrow-up::before{content:""}.fa-phone-outgoing::before{content:""}.fa-trash-can::before{content:""}.fa-trash-alt::before{content:""}.fa-circle-l::before{content:""}.fa-head-side-goggles::before{content:""}.fa-head-vr::before{content:""}.fa-text-height::before{content:""}.fa-user-xmark::before{content:""}.fa-user-times::before{content:""}.fa-face-hand-yawn::before{content:""}.fa-gauge-simple-min::before{content:""}.fa-tachometer-slowest::before{content:""}.fa-stethoscope::before{content:""}.fa-coffin::before{content:""}.fa-message::before{content:""}.fa-comment-alt::before{content:""}.fa-salad::before{content:""}.fa-bowl-salad::before{content:""}.fa-info::before{content:""}.fa-robot-astromech::before{content:""}.fa-ring-diamond::before{content:""}.fa-fondue-pot::before{content:""}.fa-theta::before{content:""}.fa-face-hand-peeking::before{content:""}.fa-square-user::before{content:""}.fa-down-left-and-up-right-to-center::before{content:""}.fa-compress-alt::before{content:""}.fa-explosion::before{content:""}.fa-file-lines::before{content:""}.fa-file-alt::before{content:""}.fa-file-text::before{content:""}.fa-wave-square::before{content:""}.fa-ring::before{content:""}.fa-building-un::before{content:""}.fa-dice-three::before{content:""}.fa-tire-pressure-warning::before{content:""}.fa-wifi-fair::before{content:""}.fa-wifi-2::before{content:""}.fa-calendar-days::before{content:""}.fa-calendar-alt::before{content:""}.fa-mp3-player::before{content:""}.fa-anchor-circle-check::before{content:""}.fa-tally-4::before{content:""}.fa-rectangle-history::before{content:""}.fa-building-circle-arrow-right::before{content:""}.fa-volleyball::before{content:""}.fa-volleyball-ball::before{content:""}.fa-sun-haze::before{content:""}.fa-text-size::before{content:""}.fa-ufo::before{content:""}.fa-fork::before{content:""}.fa-utensil-fork::before{content:""}.fa-arrows-up-to-line::before{content:""}.fa-mobile-signal::before{content:""}.fa-barcode-scan::before{content:""}.fa-sort-down::before{content:""}.fa-sort-desc::before{content:""}.fa-folder-arrow-down::before{content:""}.fa-folder-download::before{content:""}.fa-circle-minus::before{content:""}.fa-minus-circle::before{content:""}.fa-face-icicles::before{content:""}.fa-shovel::before{content:""}.fa-door-open::before{content:""}.fa-films::before{content:""}.fa-right-from-bracket::before{content:""}.fa-sign-out-alt::before{content:""}.fa-face-glasses::before{content:""}.fa-nfc::before{content:""}.fa-atom::before{content:""}.fa-soap::before{content:""}.fa-icons::before{content:""}.fa-heart-music-camera-bolt::before{content:""}.fa-microphone-lines-slash::before{content:""}.fa-microphone-alt-slash::before{content:""}.fa-closed-captioning-slash::before{content:""}.fa-calculator-simple::before{content:""}.fa-calculator-alt::before{content:""}.fa-bridge-circle-check::before{content:""}.fa-sliders-up::before{content:""}.fa-sliders-v::before{content:""}.fa-location-minus::before{content:""}.fa-map-marker-minus::before{content:""}.fa-pump-medical::before{content:""}.fa-fingerprint::before{content:""}.fa-ski-boot::before{content:""}.fa-standard-definition::before{content:""}.fa-rectangle-sd::before{content:""}.fa-h1::before{content:""}.fa-hand-point-right::before{content:""}.fa-magnifying-glass-location::before{content:""}.fa-search-location::before{content:""}.fa-message-bot::before{content:""}.fa-forward-step::before{content:""}.fa-step-forward::before{content:""}.fa-face-smile-beam::before{content:""}.fa-smile-beam::before{content:""}.fa-light-ceiling::before{content:""}.fa-message-exclamation::before{content:""}.fa-comment-alt-exclamation::before{content:""}.fa-bowl-scoop::before{content:""}.fa-bowl-shaved-ice::before{content:""}.fa-square-x::before{content:""}.fa-building-memo::before{content:""}.fa-utility-pole-double::before{content:""}.fa-flag-checkered::before{content:""}.fa-chevrons-up::before{content:""}.fa-chevron-double-up::before{content:""}.fa-football::before{content:""}.fa-football-ball::before{content:""}.fa-user-vneck::before{content:""}.fa-school-circle-exclamation::before{content:""}.fa-crop::before{content:""}.fa-angles-down::before{content:""}.fa-angle-double-down::before{content:""}.fa-users-rectangle::before{content:""}.fa-people-roof::before{content:""}.fa-square-arrow-right::before{content:""}.fa-arrow-square-right::before{content:""}.fa-location-plus::before{content:""}.fa-map-marker-plus::before{content:""}.fa-lightbulb-exclamation-on::before{content:""}.fa-people-line::before{content:""}.fa-beer-mug-empty::before{content:""}.fa-beer::before{content:""}.fa-crate-empty::before{content:""}.fa-diagram-predecessor::before{content:""}.fa-transporter::before{content:""}.fa-calendar-circle-user::before{content:""}.fa-arrow-up-long::before{content:""}.fa-long-arrow-up::before{content:""}.fa-person-carry-box::before{content:""}.fa-person-carry::before{content:""}.fa-fire-flame-simple::before{content:""}.fa-burn::before{content:""}.fa-person::before{content:""}.fa-male::before{content:""}.fa-laptop::before{content:""}.fa-file-csv::before{content:""}.fa-menorah::before{content:""}.fa-union::before{content:""}.fa-chevrons-left::before{content:""}.fa-chevron-double-left::before{content:""}.fa-circle-heart::before{content:""}.fa-heart-circle::before{content:""}.fa-truck-plane::before{content:""}.fa-record-vinyl::before{content:""}.fa-bring-forward::before{content:""}.fa-square-p::before{content:""}.fa-face-grin-stars::before{content:""}.fa-grin-stars::before{content:""}.fa-sigma::before{content:""}.fa-camera-movie::before{content:""}.fa-bong::before{content:""}.fa-clarinet::before{content:""}.fa-truck-flatbed::before{content:""}.fa-spaghetti-monster-flying::before{content:""}.fa-pastafarianism::before{content:""}.fa-arrow-down-up-across-line::before{content:""}.fa-arrows-rotate-reverse::before{content:""}.fa-leaf-heart::before{content:""}.fa-house-building::before{content:""}.fa-cheese-swiss::before{content:""}.fa-spoon::before{content:""}.fa-utensil-spoon::before{content:""}.fa-jar-wheat::before{content:""}.fa-envelopes-bulk::before{content:""}.fa-mail-bulk::before{content:""}.fa-file-circle-exclamation::before{content:""}.fa-bow-arrow::before{content:""}.fa-cart-xmark::before{content:""}.fa-hexagon-xmark::before{content:""}.fa-times-hexagon::before{content:""}.fa-xmark-hexagon::before{content:""}.fa-circle-h::before{content:""}.fa-hospital-symbol::before{content:""}.fa-merge::before{content:""}.fa-pager::before{content:""}.fa-cart-minus::before{content:""}.fa-address-book::before{content:""}.fa-contact-book::before{content:""}.fa-pan-frying::before{content:""}.fa-grid::before{content:""}.fa-grid-3::before{content:""}.fa-football-helmet::before{content:""}.fa-hand-love::before{content:""}.fa-trees::before{content:""}.fa-strikethrough::before{content:""}.fa-page::before{content:""}.fa-k::before{content:"K"}.fa-diagram-previous::before{content:""}.fa-gauge-min::before{content:""}.fa-tachometer-alt-slowest::before{content:""}.fa-folder-grid::before{content:""}.fa-eggplant::before{content:""}.fa-excavator::before{content:""}.fa-ram::before{content:""}.fa-landmark-flag::before{content:""}.fa-lips::before{content:""}.fa-pencil::before{content:""}.fa-pencil-alt::before{content:""}.fa-backward::before{content:""}.fa-caret-right::before{content:""}.fa-comments::before{content:""}.fa-paste::before{content:""}.fa-file-clipboard::before{content:""}.fa-desktop-arrow-down::before{content:""}.fa-code-pull-request::before{content:""}.fa-pumpkin::before{content:""}.fa-clipboard-list::before{content:""}.fa-pen-field::before{content:""}.fa-blueberries::before{content:""}.fa-truck-ramp-box::before{content:""}.fa-truck-loading::before{content:""}.fa-note::before{content:""}.fa-arrow-down-to-square::before{content:""}.fa-user-check::before{content:""}.fa-cloud-xmark::before{content:""}.fa-vial-virus::before{content:""}.fa-book-blank::before{content:""}.fa-book-alt::before{content:""}.fa-golf-flag-hole::before{content:""}.fa-message-arrow-down::before{content:""}.fa-comment-alt-arrow-down::before{content:""}.fa-face-unamused::before{content:""}.fa-sheet-plastic::before{content:""}.fa-circle-9::before{content:""}.fa-blog::before{content:""}.fa-user-ninja::before{content:""}.fa-pencil-slash::before{content:""}.fa-bowling-pins::before{content:""}.fa-person-arrow-up-from-line::before{content:""}.fa-down-right::before{content:""}.fa-scroll-torah::before{content:""}.fa-torah::before{content:""}.fa-webhook::before{content:""}.fa-blinds-open::before{content:""}.fa-fence::before{content:""}.fa-up::before{content:""}.fa-arrow-alt-up::before{content:""}.fa-broom-ball::before{content:""}.fa-quidditch::before{content:""}.fa-quidditch-broom-ball::before{content:""}.fa-drumstick::before{content:""}.fa-square-v::before{content:""}.fa-face-awesome::before{content:""}.fa-gave-dandy::before{content:""}.fa-dial-off::before{content:""}.fa-toggle-off::before{content:""}.fa-face-smile-horns::before{content:""}.fa-box-archive::before{content:""}.fa-archive::before{content:""}.fa-grapes::before{content:""}.fa-person-drowning::before{content:""}.fa-dial-max::before{content:""}.fa-circle-m::before{content:""}.fa-calendar-image::before{content:""}.fa-circle-caret-down::before{content:""}.fa-caret-circle-down::before{content:""}.fa-arrow-down-9-1::before{content:""}.fa-sort-numeric-desc::before{content:""}.fa-sort-numeric-down-alt::before{content:""}.fa-face-grin-tongue-squint::before{content:""}.fa-grin-tongue-squint::before{content:""}.fa-shish-kebab::before{content:""}.fa-spray-can::before{content:""}.fa-alarm-snooze::before{content:""}.fa-scarecrow::before{content:""}.fa-truck-monster::before{content:""}.fa-gift-card::before{content:""}.fa-w::before{content:"W"}.fa-code-pull-request-draft::before{content:""}.fa-square-b::before{content:""}.fa-elephant::before{content:""}.fa-earth-africa::before{content:""}.fa-globe-africa::before{content:""}.fa-rainbow::before{content:""}.fa-circle-notch::before{content:""}.fa-tablet-screen-button::before{content:""}.fa-tablet-alt::before{content:""}.fa-paw::before{content:""}.fa-message-question::before{content:""}.fa-cloud::before{content:""}.fa-trowel-bricks::before{content:""}.fa-square-3::before{content:""}.fa-face-flushed::before{content:""}.fa-flushed::before{content:""}.fa-hospital-user::before{content:""}.fa-microwave::before{content:""}.fa-chf-sign::before{content:""}.fa-tent-arrow-left-right::before{content:""}.fa-cart-circle-arrow-up::before{content:""}.fa-trash-clock::before{content:""}.fa-reflect-both::before{content:""}.fa-gavel::before{content:""}.fa-legal::before{content:""}.fa-sprinkler-ceiling::before{content:""}.fa-browsers::before{content:""}.fa-trillium::before{content:""}.fa-table-cells-unlock::before{content:""}.fa-music-slash::before{content:""}.fa-truck-ramp::before{content:""}.fa-binoculars::before{content:""}.fa-microphone-slash::before{content:""}.fa-box-tissue::before{content:""}.fa-circle-c::before{content:""}.fa-star-christmas::before{content:""}.fa-chart-bullet::before{content:""}.fa-motorcycle::before{content:""}.fa-tree-christmas::before{content:""}.fa-tire-flat::before{content:""}.fa-sunglasses::before{content:""}.fa-badge::before{content:""}.fa-message-pen::before{content:""}.fa-comment-alt-edit::before{content:""}.fa-message-edit::before{content:""}.fa-bell-concierge::before{content:""}.fa-concierge-bell::before{content:""}.fa-pen-ruler::before{content:""}.fa-pencil-ruler::before{content:""}.fa-file-mp3::before{content:""}.fa-arrow-progress::before{content:""}.fa-chess-rook-piece::before{content:""}.fa-chess-rook-alt::before{content:""}.fa-square-root::before{content:""}.fa-album-collection-circle-plus::before{content:""}.fa-people-arrows::before{content:""}.fa-people-arrows-left-right::before{content:""}.fa-sign-post::before{content:""}.fa-face-angry-horns::before{content:""}.fa-mars-and-venus-burst::before{content:""}.fa-tombstone::before{content:""}.fa-square-caret-right::before{content:""}.fa-caret-square-right::before{content:""}.fa-scissors::before{content:""}.fa-cut::before{content:""}.fa-list-music::before{content:""}.fa-sun-plant-wilt::before{content:""}.fa-toilets-portable::before{content:""}.fa-hockey-puck::before{content:""}.fa-mustache::before{content:""}.fa-hyphen::before{content:"\-"}.fa-table::before{content:""}.fa-user-chef::before{content:""}.fa-message-image::before{content:""}.fa-comment-alt-image::before{content:""}.fa-users-medical::before{content:""}.fa-sensor-triangle-exclamation::before{content:""}.fa-sensor-alert::before{content:""}.fa-magnifying-glass-arrow-right::before{content:""}.fa-tachograph-digital::before{content:""}.fa-digital-tachograph::before{content:""}.fa-face-mask::before{content:""}.fa-pickleball::before{content:""}.fa-star-sharp-half::before{content:""}.fa-users-slash::before{content:""}.fa-clover::before{content:""}.fa-meat::before{content:""}.fa-reply::before{content:""}.fa-mail-reply::before{content:""}.fa-star-and-crescent::before{content:""}.fa-empty-set::before{content:""}.fa-house-fire::before{content:""}.fa-square-minus::before{content:""}.fa-minus-square::before{content:""}.fa-helicopter::before{content:""}.fa-bird::before{content:""}.fa-compass::before{content:""}.fa-square-caret-down::before{content:""}.fa-caret-square-down::before{content:""}.fa-heart-half-stroke::before{content:""}.fa-heart-half-alt::before{content:""}.fa-file-circle-question::before{content:""}.fa-truck-utensils::before{content:""}.fa-laptop-code::before{content:""}.fa-joystick::before{content:""}.fa-grill-fire::before{content:""}.fa-rectangle-vertical-history::before{content:""}.fa-swatchbook::before{content:""}.fa-prescription-bottle::before{content:""}.fa-bars::before{content:""}.fa-navicon::before{content:""}.fa-keyboard-left::before{content:""}.fa-people-group::before{content:""}.fa-hourglass-end::before{content:""}.fa-hourglass-3::before{content:""}.fa-heart-crack::before{content:""}.fa-heart-broken::before{content:""}.fa-face-beam-hand-over-mouth::before{content:""}.fa-droplet-percent::before{content:""}.fa-humidity::before{content:""}.fa-square-up-right::before{content:""}.fa-external-link-square-alt::before{content:""}.fa-face-kiss-beam::before{content:""}.fa-kiss-beam::before{content:""}.fa-corn::before{content:""}.fa-roller-coaster::before{content:""}.fa-photo-film-music::before{content:""}.fa-radar::before{content:""}.fa-sickle::before{content:""}.fa-film::before{content:""}.fa-coconut::before{content:""}.fa-ruler-horizontal::before{content:""}.fa-shield-cross::before{content:""}.fa-cassette-tape::before{content:""}.fa-square-terminal::before{content:""}.fa-people-robbery::before{content:""}.fa-lightbulb::before{content:""}.fa-caret-left::before{content:""}.fa-comment-middle::before{content:""}.fa-trash-can-list::before{content:""}.fa-block::before{content:""}.fa-circle-exclamation::before{content:""}.fa-exclamation-circle::before{content:""}.fa-school-circle-xmark::before{content:""}.fa-arrow-right-from-bracket::before{content:""}.fa-sign-out::before{content:""}.fa-face-frown-slight::before{content:""}.fa-circle-chevron-down::before{content:""}.fa-chevron-circle-down::before{content:""}.fa-sidebar-flip::before{content:""}.fa-unlock-keyhole::before{content:""}.fa-unlock-alt::before{content:""}.fa-temperature-list::before{content:""}.fa-cloud-showers-heavy::before{content:""}.fa-headphones-simple::before{content:""}.fa-headphones-alt::before{content:""}.fa-sitemap::before{content:""}.fa-pipe-section::before{content:""}.fa-space-station-moon-construction::before{content:""}.fa-space-station-moon-alt::before{content:""}.fa-circle-dollar-to-slot::before{content:""}.fa-donate::before{content:""}.fa-memory::before{content:""}.fa-face-sleeping::before{content:""}.fa-road-spikes::before{content:""}.fa-fire-burner::before{content:""}.fa-squirrel::before{content:""}.fa-arrow-up-to-line::before{content:""}.fa-arrow-to-top::before{content:""}.fa-flag::before{content:""}.fa-face-cowboy-hat::before{content:""}.fa-hanukiah::before{content:""}.fa-chart-scatter-3d::before{content:""}.fa-display-chart-up::before{content:""}.fa-square-code::before{content:""}.fa-feather::before{content:""}.fa-volume-low::before{content:""}.fa-volume-down::before{content:""}.fa-xmark-to-slot::before{content:""}.fa-times-to-slot::before{content:""}.fa-vote-nay::before{content:""}.fa-box-taped::before{content:""}.fa-box-alt::before{content:""}.fa-comment-slash::before{content:""}.fa-swords::before{content:""}.fa-cloud-sun-rain::before{content:""}.fa-album::before{content:""}.fa-circle-n::before{content:""}.fa-compress::before{content:""}.fa-wheat-awn::before{content:""}.fa-wheat-alt::before{content:""}.fa-ankh::before{content:""}.fa-hands-holding-child::before{content:""}.fa-asterisk::before{content:"\*"}.fa-key-skeleton-left-right::before{content:""}.fa-comment-lines::before{content:""}.fa-luchador-mask::before{content:""}.fa-luchador::before{content:""}.fa-mask-luchador::before{content:""}.fa-square-check::before{content:""}.fa-check-square::before{content:""}.fa-shredder::before{content:""}.fa-book-open-cover::before{content:""}.fa-book-open-alt::before{content:""}.fa-sandwich::before{content:""}.fa-peseta-sign::before{content:""}.fa-square-parking-slash::before{content:""}.fa-parking-slash::before{content:""}.fa-train-tunnel::before{content:""}.fa-heading::before{content:""}.fa-header::before{content:""}.fa-ghost::before{content:""}.fa-face-anguished::before{content:""}.fa-hockey-sticks::before{content:""}.fa-abacus::before{content:""}.fa-film-simple::before{content:""}.fa-film-alt::before{content:""}.fa-list::before{content:""}.fa-list-squares::before{content:""}.fa-tree-palm::before{content:""}.fa-square-phone-flip::before{content:""}.fa-phone-square-alt::before{content:""}.fa-user-beard-bolt::before{content:""}.fa-cart-plus::before{content:""}.fa-gamepad::before{content:""}.fa-border-center-v::before{content:""}.fa-circle-dot::before{content:""}.fa-dot-circle::before{content:""}.fa-clipboard-medical::before{content:""}.fa-face-dizzy::before{content:""}.fa-dizzy::before{content:""}.fa-egg::before{content:""}.fa-up-to-line::before{content:""}.fa-arrow-alt-to-top::before{content:""}.fa-house-medical-circle-xmark::before{content:""}.fa-watch-fitness::before{content:""}.fa-clock-nine-thirty::before{content:""}.fa-campground::before{content:""}.fa-folder-plus::before{content:""}.fa-jug::before{content:""}.fa-futbol::before{content:""}.fa-futbol-ball::before{content:""}.fa-soccer-ball::before{content:""}.fa-snow-blowing::before{content:""}.fa-paintbrush::before{content:""}.fa-paint-brush::before{content:""}.fa-lock::before{content:""}.fa-arrow-down-from-line::before{content:""}.fa-arrow-from-top::before{content:""}.fa-gas-pump::before{content:""}.fa-signal-bars-slash::before{content:""}.fa-signal-alt-slash::before{content:""}.fa-monkey::before{content:""}.fa-rectangle-pro::before{content:""}.fa-pro::before{content:""}.fa-house-night::before{content:""}.fa-hot-tub-person::before{content:""}.fa-hot-tub::before{content:""}.fa-globe-pointer::before{content:""}.fa-blanket::before{content:""}.fa-map-location::before{content:""}.fa-map-marked::before{content:""}.fa-house-flood-water::before{content:""}.fa-comments-question-check::before{content:""}.fa-tree::before{content:""}.fa-arrows-cross::before{content:""}.fa-backpack::before{content:""}.fa-square-small::before{content:""}.fa-folder-arrow-up::before{content:""}.fa-folder-upload::before{content:""}.fa-bridge-lock::before{content:""}.fa-crosshairs-simple::before{content:""}.fa-sack-dollar::before{content:""}.fa-pen-to-square::before{content:""}.fa-edit::before{content:""}.fa-square-sliders::before{content:""}.fa-sliders-h-square::before{content:""}.fa-car-side::before{content:""}.fa-message-middle-top::before{content:""}.fa-comment-middle-top-alt::before{content:""}.fa-lightbulb-on::before{content:""}.fa-knife::before{content:""}.fa-utensil-knife::before{content:""}.fa-share-nodes::before{content:""}.fa-share-alt::before{content:""}.fa-display-chart-up-circle-dollar::before{content:""}.fa-wave-sine::before{content:""}.fa-heart-circle-minus::before{content:""}.fa-circle-w::before{content:""}.fa-circle-calendar::before{content:""}.fa-calendar-circle::before{content:""}.fa-hourglass-half::before{content:""}.fa-hourglass-2::before{content:""}.fa-microscope::before{content:""}.fa-sunset::before{content:""}.fa-sink::before{content:""}.fa-calendar-exclamation::before{content:""}.fa-truck-container-empty::before{content:""}.fa-hand-heart::before{content:""}.fa-bag-shopping::before{content:""}.fa-shopping-bag::before{content:""}.fa-arrow-down-z-a::before{content:""}.fa-sort-alpha-desc::before{content:""}.fa-sort-alpha-down-alt::before{content:""}.fa-mitten::before{content:""}.fa-reply-clock::before{content:""}.fa-reply-time::before{content:""}.fa-person-rays::before{content:""}.fa-right::before{content:""}.fa-arrow-alt-right::before{content:""}.fa-circle-f::before{content:""}.fa-users::before{content:""}.fa-face-pleading::before{content:""}.fa-eye-slash::before{content:""}.fa-flask-vial::before{content:""}.fa-police-box::before{content:""}.fa-cucumber::before{content:""}.fa-head-side-brain::before{content:""}.fa-hand::before{content:""}.fa-hand-paper::before{content:""}.fa-person-biking-mountain::before{content:""}.fa-biking-mountain::before{content:""}.fa-utensils-slash::before{content:""}.fa-print-magnifying-glass::before{content:""}.fa-print-search::before{content:""}.fa-turn-right::before{content:""}.fa-folder-bookmark::before{content:""}.fa-arrow-turn-left-down::before{content:""}.fa-om::before{content:""}.fa-pi::before{content:""}.fa-flask-round-potion::before{content:""}.fa-flask-potion::before{content:""}.fa-face-shush::before{content:""}.fa-worm::before{content:""}.fa-house-circle-xmark::before{content:""}.fa-plug::before{content:""}.fa-calendar-circle-exclamation::before{content:""}.fa-square-i::before{content:""}.fa-chevron-up::before{content:""}.fa-face-saluting::before{content:""}.fa-gauge-simple-low::before{content:""}.fa-tachometer-slow::before{content:""}.fa-face-persevering::before{content:""}.fa-circle-camera::before{content:""}.fa-camera-circle::before{content:""}.fa-hand-spock::before{content:""}.fa-spider-web::before{content:""}.fa-circle-microphone::before{content:""}.fa-microphone-circle::before{content:""}.fa-book-arrow-up::before{content:""}.fa-popsicle::before{content:""}.fa-command::before{content:""}.fa-blinds::before{content:""}.fa-stopwatch::before{content:""}.fa-saxophone::before{content:""}.fa-square-2::before{content:""}.fa-field-hockey-stick-ball::before{content:""}.fa-field-hockey::before{content:""}.fa-arrow-up-square-triangle::before{content:""}.fa-sort-shapes-up-alt::before{content:""}.fa-face-scream::before{content:""}.fa-square-m::before{content:""}.fa-camera-web::before{content:""}.fa-webcam::before{content:""}.fa-comment-arrow-down::before{content:""}.fa-lightbulb-cfl::before{content:""}.fa-window-frame-open::before{content:""}.fa-face-kiss::before{content:""}.fa-kiss::before{content:""}.fa-bridge-circle-xmark::before{content:""}.fa-period::before{content:"\."}.fa-face-grin-tongue::before{content:""}.fa-grin-tongue::before{content:""}.fa-up-to-dotted-line::before{content:""}.fa-thought-bubble::before{content:""}.fa-skeleton-ribs::before{content:""}.fa-raygun::before{content:""}.fa-flute::before{content:""}.fa-acorn::before{content:""}.fa-video-arrow-up-right::before{content:""}.fa-grate-droplet::before{content:""}.fa-seal-exclamation::before{content:""}.fa-chess-bishop::before{content:""}.fa-message-sms::before{content:""}.fa-coffee-beans::before{content:""}.fa-hat-witch::before{content:""}.fa-face-grin-wink::before{content:""}.fa-grin-wink::before{content:""}.fa-clock-three-thirty::before{content:""}.fa-ear-deaf::before{content:""}.fa-deaf::before{content:""}.fa-deafness::before{content:""}.fa-hard-of-hearing::before{content:""}.fa-alarm-clock::before{content:""}.fa-eclipse::before{content:""}.fa-face-relieved::before{content:""}.fa-road-circle-check::before{content:""}.fa-dice-five::before{content:""}.fa-octagon-minus::before{content:""}.fa-minus-octagon::before{content:""}.fa-square-rss::before{content:""}.fa-rss-square::before{content:""}.fa-face-zany::before{content:""}.fa-tricycle::before{content:""}.fa-land-mine-on::before{content:""}.fa-square-arrow-up-left::before{content:""}.fa-i-cursor::before{content:""}.fa-chart-mixed-up-circle-dollar::before{content:""}.fa-salt-shaker::before{content:""}.fa-stamp::before{content:""}.fa-file-plus::before{content:""}.fa-draw-square::before{content:""}.fa-toilet-paper-under-slash::before{content:""}.fa-toilet-paper-reverse-slash::before{content:""}.fa-stairs::before{content:""}.fa-drone-front::before{content:""}.fa-drone-alt::before{content:""}.fa-glass-empty::before{content:""}.fa-dial-high::before{content:""}.fa-user-helmet-safety::before{content:""}.fa-user-construction::before{content:""}.fa-user-hard-hat::before{content:""}.fa-i::before{content:"I"}.fa-hryvnia-sign::before{content:""}.fa-hryvnia::before{content:""}.fa-arrow-down-left-and-arrow-up-right-to-center::before{content:""}.fa-pills::before{content:""}.fa-face-grin-wide::before{content:""}.fa-grin-alt::before{content:""}.fa-tooth::before{content:""}.fa-basketball-hoop::before{content:""}.fa-objects-align-bottom::before{content:""}.fa-v::before{content:"V"}.fa-sparkles::before{content:""}.fa-squid::before{content:""}.fa-leafy-green::before{content:""}.fa-circle-arrow-up-right::before{content:""}.fa-calendars::before{content:""}.fa-bangladeshi-taka-sign::before{content:""}.fa-bicycle::before{content:""}.fa-hammer-war::before{content:""}.fa-circle-d::before{content:""}.fa-spider-black-widow::before{content:""}.fa-staff-snake::before{content:""}.fa-rod-asclepius::before{content:""}.fa-rod-snake::before{content:""}.fa-staff-aesculapius::before{content:""}.fa-pear::before{content:""}.fa-head-side-cough-slash::before{content:""}.fa-file-mov::before{content:""}.fa-triangle::before{content:""}.fa-apartment::before{content:""}.fa-truck-medical::before{content:""}.fa-ambulance::before{content:""}.fa-pepper::before{content:""}.fa-piano::before{content:""}.fa-gun-squirt::before{content:""}.fa-wheat-awn-circle-exclamation::before{content:""}.fa-snowman::before{content:""}.fa-user-alien::before{content:""}.fa-shield-check::before{content:""}.fa-mortar-pestle::before{content:""}.fa-road-barrier::before{content:""}.fa-chart-candlestick::before{content:""}.fa-briefcase-blank::before{content:""}.fa-school::before{content:""}.fa-igloo::before{content:""}.fa-bracket-round::before{content:"\("}.fa-parenthesis::before{content:"\("}.fa-joint::before{content:""}.fa-horse-saddle::before{content:""}.fa-mug-marshmallows::before{content:""}.fa-filters::before{content:""}.fa-bell-on::before{content:""}.fa-angle-right::before{content:""}.fa-dial-med::before{content:""}.fa-horse::before{content:""}.fa-q::before{content:"Q"}.fa-monitor-waveform::before{content:""}.fa-monitor-heart-rate::before{content:""}.fa-link-simple::before{content:""}.fa-whistle::before{content:""}.fa-g::before{content:"G"}.fa-wine-glass-crack::before{content:""}.fa-fragile::before{content:""}.fa-slot-machine::before{content:""}.fa-notes-medical::before{content:""}.fa-car-wash::before{content:""}.fa-escalator::before{content:""}.fa-comment-image::before{content:""}.fa-temperature-half::before{content:""}.fa-temperature-2::before{content:""}.fa-thermometer-2::before{content:""}.fa-thermometer-half::before{content:""}.fa-dong-sign::before{content:""}.fa-donut::before{content:""}.fa-doughnut::before{content:""}.fa-capsules::before{content:""}.fa-poo-storm::before{content:""}.fa-poo-bolt::before{content:""}.fa-tally-1::before{content:""}.fa-file-vector::before{content:""}.fa-face-frown-open::before{content:""}.fa-frown-open::before{content:""}.fa-square-dashed::before{content:""}.fa-bag-shopping-plus::before{content:""}.fa-square-j::before{content:""}.fa-hand-point-up::before{content:""}.fa-money-bill::before{content:""}.fa-arrow-up-big-small::before{content:""}.fa-sort-size-up::before{content:""}.fa-barcode-read::before{content:""}.fa-baguette::before{content:""}.fa-bowl-soft-serve::before{content:""}.fa-face-holding-back-tears::before{content:""}.fa-square-up::before{content:""}.fa-arrow-alt-square-up::before{content:""}.fa-train-subway-tunnel::before{content:""}.fa-subway-tunnel::before{content:""}.fa-square-exclamation::before{content:""}.fa-exclamation-square::before{content:""}.fa-semicolon::before{content:"\;"}.fa-bookmark::before{content:""}.fa-fan-table::before{content:""}.fa-align-justify::before{content:""}.fa-battery-low::before{content:""}.fa-battery-1::before{content:""}.fa-credit-card-front::before{content:""}.fa-brain-arrow-curved-right::before{content:""}.fa-mind-share::before{content:""}.fa-umbrella-beach::before{content:""}.fa-helmet-un::before{content:""}.fa-location-smile::before{content:""}.fa-map-marker-smile::before{content:""}.fa-arrow-left-to-line::before{content:""}.fa-arrow-to-left::before{content:""}.fa-bullseye::before{content:""}.fa-sushi::before{content:""}.fa-nigiri::before{content:""}.fa-message-captions::before{content:""}.fa-comment-alt-captions::before{content:""}.fa-trash-list::before{content:""}.fa-bacon::before{content:""}.fa-option::before{content:""}.fa-raccoon::before{content:""}.fa-hand-point-down::before{content:""}.fa-arrow-up-from-bracket::before{content:""}.fa-head-side-gear::before{content:""}.fa-trash-plus::before{content:""}.fa-file-cad::before{content:""}.fa-objects-align-top::before{content:""}.fa-folder::before{content:""}.fa-folder-blank::before{content:""}.fa-face-anxious-sweat::before{content:""}.fa-credit-card-blank::before{content:""}.fa-file-waveform::before{content:""}.fa-file-medical-alt::before{content:""}.fa-microchip-ai::before{content:""}.fa-mug::before{content:""}.fa-plane-up-slash::before{content:""}.fa-radiation::before{content:""}.fa-pen-circle::before{content:""}.fa-bag-seedling::before{content:""}.fa-chart-simple::before{content:""}.fa-crutches::before{content:""}.fa-circle-parking::before{content:""}.fa-parking-circle::before{content:""}.fa-mars-stroke::before{content:""}.fa-leaf-oak::before{content:""}.fa-square-bolt::before{content:""}.fa-vial::before{content:""}.fa-gauge::before{content:""}.fa-dashboard::before{content:""}.fa-gauge-med::before{content:""}.fa-tachometer-alt-average::before{content:""}.fa-wand-magic-sparkles::before{content:""}.fa-magic-wand-sparkles::before{content:""}.fa-lambda::before{content:""}.fa-e::before{content:"E"}.fa-pizza::before{content:""}.fa-bowl-chopsticks-noodles::before{content:""}.fa-h3::before{content:""}.fa-pen-clip::before{content:""}.fa-pen-alt::before{content:""}.fa-bridge-circle-exclamation::before{content:""}.fa-badge-percent::before{content:""}.fa-rotate-reverse::before{content:""}.fa-user::before{content:""}.fa-sensor::before{content:""}.fa-comma::before{content:"\,"}.fa-school-circle-check::before{content:""}.fa-toilet-paper-under::before{content:""}.fa-toilet-paper-reverse::before{content:""}.fa-light-emergency::before{content:""}.fa-arrow-down-to-arc::before{content:""}.fa-dumpster::before{content:""}.fa-van-shuttle::before{content:""}.fa-shuttle-van::before{content:""}.fa-building-user::before{content:""}.fa-light-switch::before{content:""}.fa-square-caret-left::before{content:""}.fa-caret-square-left::before{content:""}.fa-highlighter::before{content:""}.fa-wave-pulse::before{content:""}.fa-heart-rate::before{content:""}.fa-key::before{content:""}.fa-arrow-left-to-bracket::before{content:""}.fa-hat-santa::before{content:""}.fa-tamale::before{content:""}.fa-box-check::before{content:""}.fa-bullhorn::before{content:""}.fa-steak::before{content:""}.fa-location-crosshairs-slash::before{content:""}.fa-location-slash::before{content:""}.fa-person-dolly::before{content:""}.fa-globe::before{content:""}.fa-synagogue::before{content:""}.fa-file-chart-column::before{content:""}.fa-file-chart-line::before{content:""}.fa-person-half-dress::before{content:""}.fa-folder-image::before{content:""}.fa-calendar-pen::before{content:""}.fa-calendar-edit::before{content:""}.fa-road-bridge::before{content:""}.fa-face-smile-tear::before{content:""}.fa-message-plus::before{content:""}.fa-comment-alt-plus::before{content:""}.fa-location-arrow::before{content:""}.fa-c::before{content:"C"}.fa-tablet-button::before{content:""}.fa-person-dress-fairy::before{content:""}.fa-rectangle-history-circle-user::before{content:""}.fa-building-lock::before{content:""}.fa-chart-line-up::before{content:""}.fa-mailbox::before{content:""}.fa-sign-posts::before{content:""}.fa-truck-bolt::before{content:""}.fa-pizza-slice::before{content:""}.fa-money-bill-wave::before{content:""}.fa-chart-area::before{content:""}.fa-area-chart::before{content:""}.fa-house-flag::before{content:""}.fa-circle-three-quarters-stroke::before{content:""}.fa-person-circle-minus::before{content:""}.fa-scalpel::before{content:""}.fa-ban::before{content:""}.fa-cancel::before{content:""}.fa-bell-exclamation::before{content:""}.fa-circle-bookmark::before{content:""}.fa-bookmark-circle::before{content:""}.fa-egg-fried::before{content:""}.fa-face-weary::before{content:""}.fa-uniform-martial-arts::before{content:""}.fa-camera-rotate::before{content:""}.fa-sun-dust::before{content:""}.fa-comment-text::before{content:""}.fa-spray-can-sparkles::before{content:""}.fa-air-freshener::before{content:""}.fa-signal-bars::before{content:""}.fa-signal-alt::before{content:""}.fa-signal-alt-4::before{content:""}.fa-signal-bars-strong::before{content:""}.fa-diamond-exclamation::before{content:""}.fa-star::before{content:""}.fa-dial-min::before{content:""}.fa-repeat::before{content:""}.fa-cross::before{content:""}.fa-page-caret-down::before{content:""}.fa-file-caret-down::before{content:""}.fa-box::before{content:""}.fa-venus-mars::before{content:""}.fa-clock-seven-thirty::before{content:""}.fa-arrow-pointer::before{content:""}.fa-mouse-pointer::before{content:""}.fa-clock-four-thirty::before{content:""}.fa-signal-bars-good::before{content:""}.fa-signal-alt-3::before{content:""}.fa-cactus::before{content:""}.fa-lightbulb-gear::before{content:""}.fa-maximize::before{content:""}.fa-expand-arrows-alt::before{content:""}.fa-charging-station::before{content:""}.fa-shapes::before{content:""}.fa-triangle-circle-square::before{content:""}.fa-plane-tail::before{content:""}.fa-gauge-simple-max::before{content:""}.fa-tachometer-fastest::before{content:""}.fa-circle-u::before{content:""}.fa-shield-slash::before{content:""}.fa-square-phone-hangup::before{content:""}.fa-phone-square-down::before{content:""}.fa-arrow-up-left::before{content:""}.fa-transporter-1::before{content:""}.fa-peanuts::before{content:""}.fa-shuffle::before{content:""}.fa-random::before{content:""}.fa-person-running::before{content:""}.fa-running::before{content:""}.fa-mobile-retro::before{content:""}.fa-grip-lines-vertical::before{content:""}.fa-bin-bottles-recycle::before{content:""}.fa-arrow-up-from-square::before{content:""}.fa-file-dashed-line::before{content:""}.fa-page-break::before{content:""}.fa-bracket-curly-right::before{content:"\}"}.fa-spider::before{content:""}.fa-clock-three::before{content:""}.fa-hands-bound::before{content:""}.fa-scalpel-line-dashed::before{content:""}.fa-scalpel-path::before{content:""}.fa-file-invoice-dollar::before{content:""}.fa-pipe-smoking::before{content:""}.fa-face-astonished::before{content:""}.fa-window::before{content:""}.fa-plane-circle-exclamation::before{content:""}.fa-ear::before{content:""}.fa-file-lock::before{content:""}.fa-diagram-venn::before{content:""}.fa-arrow-down-from-bracket::before{content:""}.fa-x-ray::before{content:""}.fa-goal-net::before{content:""}.fa-coffin-cross::before{content:""}.fa-octopus::before{content:""}.fa-spell-check::before{content:""}.fa-location-xmark::before{content:""}.fa-map-marker-times::before{content:""}.fa-map-marker-xmark::before{content:""}.fa-circle-quarter-stroke::before{content:""}.fa-lasso::before{content:""}.fa-slash::before{content:""}.fa-person-to-portal::before{content:""}.fa-portal-enter::before{content:""}.fa-calendar-star::before{content:""}.fa-computer-mouse::before{content:""}.fa-mouse::before{content:""}.fa-arrow-right-to-bracket::before{content:""}.fa-sign-in::before{content:""}.fa-pegasus::before{content:""}.fa-files-medical::before{content:""}.fa-cannon::before{content:""}.fa-nfc-lock::before{content:""}.fa-person-ski-lift::before{content:""}.fa-ski-lift::before{content:""}.fa-square-6::before{content:""}.fa-shop-slash::before{content:""}.fa-store-alt-slash::before{content:""}.fa-wind-turbine::before{content:""}.fa-sliders-simple::before{content:""}.fa-grid-round::before{content:""}.fa-badge-sheriff::before{content:""}.fa-server::before{content:""}.fa-virus-covid-slash::before{content:""}.fa-intersection::before{content:""}.fa-shop-lock::before{content:""}.fa-family::before{content:""}.fa-hourglass-start::before{content:""}.fa-hourglass-1::before{content:""}.fa-user-hair-buns::before{content:""}.fa-blender-phone::before{content:""}.fa-hourglass-clock::before{content:""}.fa-person-seat-reclined::before{content:""}.fa-paper-plane-top::before{content:""}.fa-paper-plane-alt::before{content:""}.fa-send::before{content:""}.fa-message-arrow-up::before{content:""}.fa-comment-alt-arrow-up::before{content:""}.fa-lightbulb-exclamation::before{content:""}.fa-layer-minus::before{content:""}.fa-layer-group-minus::before{content:""}.fa-chart-pie-simple-circle-currency::before{content:""}.fa-circle-e::before{content:""}.fa-building-wheat::before{content:""}.fa-gauge-max::before{content:""}.fa-tachometer-alt-fastest::before{content:""}.fa-person-breastfeeding::before{content:""}.fa-apostrophe::before{content:"\'"}.fa-file-png::before{content:""}.fa-fire-hydrant::before{content:""}.fa-right-to-bracket::before{content:""}.fa-sign-in-alt::before{content:""}.fa-video-plus::before{content:""}.fa-square-right::before{content:""}.fa-arrow-alt-square-right::before{content:""}.fa-comment-smile::before{content:""}.fa-venus::before{content:""}.fa-passport::before{content:""}.fa-thumbtack-slash::before{content:""}.fa-thumb-tack-slash::before{content:""}.fa-inbox-in::before{content:""}.fa-inbox-arrow-down::before{content:""}.fa-heart-pulse::before{content:""}.fa-heartbeat::before{content:""}.fa-circle-8::before{content:""}.fa-clouds-moon::before{content:""}.fa-clock-ten-thirty::before{content:""}.fa-people-carry-box::before{content:""}.fa-people-carry::before{content:""}.fa-folder-user::before{content:""}.fa-trash-can-xmark::before{content:""}.fa-temperature-high::before{content:""}.fa-microchip::before{content:""}.fa-left-long-to-line::before{content:""}.fa-crown::before{content:""}.fa-weight-hanging::before{content:""}.fa-xmarks-lines::before{content:""}.fa-file-prescription::before{content:""}.fa-table-cells-lock::before{content:""}.fa-calendar-range::before{content:""}.fa-flower-daffodil::before{content:""}.fa-hand-back-point-up::before{content:""}.fa-weight-scale::before{content:""}.fa-weight::before{content:""}.fa-arrow-up-to-arc::before{content:""}.fa-star-exclamation::before{content:""}.fa-books::before{content:""}.fa-user-group::before{content:""}.fa-user-friends::before{content:""}.fa-arrow-up-a-z::before{content:""}.fa-sort-alpha-up::before{content:""}.fa-layer-plus::before{content:""}.fa-layer-group-plus::before{content:""}.fa-play-pause::before{content:""}.fa-block-question::before{content:""}.fa-snooze::before{content:""}.fa-zzz::before{content:""}.fa-scanner-image::before{content:""}.fa-tv-retro::before{content:""}.fa-square-t::before{content:""}.fa-farm::before{content:""}.fa-barn-silo::before{content:""}.fa-chess-knight::before{content:""}.fa-bars-sort::before{content:""}.fa-pallet-boxes::before{content:""}.fa-palette-boxes::before{content:""}.fa-pallet-alt::before{content:""}.fa-face-laugh-squint::before{content:""}.fa-laugh-squint::before{content:""}.fa-code-simple::before{content:""}.fa-bolt-slash::before{content:""}.fa-panel-fire::before{content:""}.fa-binary-circle-check::before{content:""}.fa-comment-minus::before{content:""}.fa-burrito::before{content:""}.fa-violin::before{content:""}.fa-objects-column::before{content:""}.fa-square-chevron-down::before{content:""}.fa-chevron-square-down::before{content:""}.fa-comment-plus::before{content:""}.fa-triangle-instrument::before{content:""}.fa-triangle-music::before{content:""}.fa-wheelchair::before{content:""}.fa-user-pilot-tie::before{content:""}.fa-piano-keyboard::before{content:""}.fa-bed-empty::before{content:""}.fa-circle-arrow-up::before{content:""}.fa-arrow-circle-up::before{content:""}.fa-toggle-on::before{content:""}.fa-rectangle-vertical::before{content:""}.fa-rectangle-portrait::before{content:""}.fa-person-walking::before{content:""}.fa-walking::before{content:""}.fa-l::before{content:"L"}.fa-signal-stream::before{content:""}.fa-down-to-bracket::before{content:""}.fa-circle-z::before{content:""}.fa-stars::before{content:""}.fa-fire::before{content:""}.fa-bed-pulse::before{content:""}.fa-procedures::before{content:""}.fa-house-day::before{content:""}.fa-shuttle-space::before{content:""}.fa-space-shuttle::before{content:""}.fa-shirt-long-sleeve::before{content:""}.fa-chart-pie-simple::before{content:""}.fa-chart-pie-alt::before{content:""}.fa-face-laugh::before{content:""}.fa-laugh::before{content:""}.fa-folder-open::before{content:""}.fa-album-collection-circle-user::before{content:""}.fa-candy::before{content:""}.fa-bowl-hot::before{content:""}.fa-soup::before{content:""}.fa-flatbread::before{content:""}.fa-heart-circle-plus::before{content:""}.fa-code-fork::before{content:""}.fa-city::before{content:""}.fa-signal-bars-weak::before{content:""}.fa-signal-alt-1::before{content:""}.fa-microphone-lines::before{content:""}.fa-microphone-alt::before{content:""}.fa-clock-twelve::before{content:""}.fa-pepper-hot::before{content:""}.fa-citrus-slice::before{content:""}.fa-sheep::before{content:""}.fa-unlock::before{content:""}.fa-colon-sign::before{content:""}.fa-headset::before{content:""}.fa-badger-honey::before{content:""}.fa-h4::before{content:""}.fa-store-slash::before{content:""}.fa-road-circle-xmark::before{content:""}.fa-signal-slash::before{content:""}.fa-user-minus::before{content:""}.fa-mars-stroke-up::before{content:""}.fa-mars-stroke-v::before{content:""}.fa-champagne-glasses::before{content:""}.fa-glass-cheers::before{content:""}.fa-taco::before{content:""}.fa-hexagon-plus::before{content:""}.fa-plus-hexagon::before{content:""}.fa-clipboard::before{content:""}.fa-house-circle-exclamation::before{content:""}.fa-file-arrow-up::before{content:""}.fa-file-upload::before{content:""}.fa-wifi::before{content:""}.fa-wifi-3::before{content:""}.fa-wifi-strong::before{content:""}.fa-messages::before{content:""}.fa-comments-alt::before{content:""}.fa-bath::before{content:""}.fa-bathtub::before{content:""}.fa-umbrella-simple::before{content:""}.fa-umbrella-alt::before{content:""}.fa-rectangle-history-circle-plus::before{content:""}.fa-underline::before{content:""}.fa-prescription-bottle-pill::before{content:""}.fa-user-pen::before{content:""}.fa-user-edit::before{content:""}.fa-binary-slash::before{content:""}.fa-square-o::before{content:""}.fa-caduceus::before{content:""}.fa-signature::before{content:""}.fa-stroopwafel::before{content:""}.fa-bold::before{content:""}.fa-anchor-lock::before{content:""}.fa-building-ngo::before{content:""}.fa-transporter-3::before{content:""}.fa-engine-warning::before{content:""}.fa-engine-exclamation::before{content:""}.fa-circle-down-right::before{content:""}.fa-square-k::before{content:""}.fa-manat-sign::before{content:""}.fa-money-check-pen::before{content:""}.fa-money-check-edit::before{content:""}.fa-not-equal::before{content:""}.fa-border-top-left::before{content:""}.fa-border-style::before{content:""}.fa-map-location-dot::before{content:""}.fa-map-marked-alt::before{content:""}.fa-tilde::before{content:"\~"}.fa-jedi::before{content:""}.fa-square-poll-vertical::before{content:""}.fa-poll::before{content:""}.fa-arrow-down-square-triangle::before{content:""}.fa-sort-shapes-down-alt::before{content:""}.fa-mug-hot::before{content:""}.fa-dog-leashed::before{content:""}.fa-car-battery::before{content:""}.fa-battery-car::before{content:""}.fa-face-downcast-sweat::before{content:""}.fa-mailbox-flag-up::before{content:""}.fa-memo-circle-info::before{content:""}.fa-gift::before{content:""}.fa-dice-two::before{content:""}.fa-volume::before{content:""}.fa-volume-medium::before{content:""}.fa-transporter-5::before{content:""}.fa-gauge-circle-bolt::before{content:""}.fa-coin-front::before{content:""}.fa-file-slash::before{content:""}.fa-message-arrow-up-right::before{content:""}.fa-treasure-chest::before{content:""}.fa-chess-queen::before{content:""}.fa-paintbrush-fine::before{content:""}.fa-paint-brush-alt::before{content:""}.fa-paint-brush-fine::before{content:""}.fa-paintbrush-alt::before{content:""}.fa-glasses::before{content:""}.fa-hood-cloak::before{content:""}.fa-square-quote::before{content:""}.fa-up-left::before{content:""}.fa-bring-front::before{content:""}.fa-chess-board::before{content:""}.fa-burger-cheese::before{content:""}.fa-cheeseburger::before{content:""}.fa-building-circle-check::before{content:""}.fa-repeat-1::before{content:""}.fa-arrow-down-to-line::before{content:""}.fa-arrow-to-bottom::before{content:""}.fa-grid-5::before{content:""}.fa-swap-arrows::before{content:""}.fa-right-long-to-line::before{content:""}.fa-person-chalkboard::before{content:""}.fa-mars-stroke-right::before{content:""}.fa-mars-stroke-h::before{content:""}.fa-hand-back-fist::before{content:""}.fa-hand-rock::before{content:""}.fa-grid-round-5::before{content:""}.fa-tally::before{content:""}.fa-tally-5::before{content:""}.fa-square-caret-up::before{content:""}.fa-caret-square-up::before{content:""}.fa-cloud-showers-water::before{content:""}.fa-chart-bar::before{content:""}.fa-bar-chart::before{content:""}.fa-hands-bubbles::before{content:""}.fa-hands-wash::before{content:""}.fa-less-than-equal::before{content:""}.fa-train::before{content:""}.fa-up-from-dotted-line::before{content:""}.fa-eye-low-vision::before{content:""}.fa-low-vision::before{content:""}.fa-traffic-light-go::before{content:""}.fa-face-exhaling::before{content:""}.fa-sensor-fire::before{content:""}.fa-user-unlock::before{content:""}.fa-hexagon-divide::before{content:""}.fa-00::before{content:""}.fa-crow::before{content:""}.fa-cassette-betamax::before{content:""}.fa-betamax::before{content:""}.fa-sailboat::before{content:""}.fa-window-restore::before{content:""}.fa-nfc-magnifying-glass::before{content:""}.fa-file-binary::before{content:""}.fa-circle-v::before{content:""}.fa-square-plus::before{content:""}.fa-plus-square::before{content:""}.fa-bowl-scoops::before{content:""}.fa-mistletoe::before{content:""}.fa-custard::before{content:""}.fa-lacrosse-stick::before{content:""}.fa-hockey-mask::before{content:""}.fa-sunrise::before{content:""}.fa-subtitles::before{content:""}.fa-panel-ews::before{content:""}.fa-torii-gate::before{content:""}.fa-cloud-exclamation::before{content:""}.fa-message-lines::before{content:""}.fa-comment-alt-lines::before{content:""}.fa-frog::before{content:""}.fa-bucket::before{content:""}.fa-floppy-disk-pen::before{content:""}.fa-image::before{content:""}.fa-window-frame::before{content:""}.fa-microphone::before{content:""}.fa-cow::before{content:""}.fa-file-zip::before{content:""}.fa-square-ring::before{content:""}.fa-down-from-line::before{content:""}.fa-arrow-alt-from-top::before{content:""}.fa-caret-up::before{content:""}.fa-shield-xmark::before{content:""}.fa-shield-times::before{content:""}.fa-screwdriver::before{content:""}.fa-circle-sort-down::before{content:""}.fa-sort-circle-down::before{content:""}.fa-folder-closed::before{content:""}.fa-house-tsunami::before{content:""}.fa-square-nfi::before{content:""}.fa-forklift::before{content:""}.fa-arrow-up-from-ground-water::before{content:""}.fa-bracket-square-right::before{content:"\]"}.fa-martini-glass::before{content:""}.fa-glass-martini-alt::before{content:""}.fa-rotate-left::before{content:""}.fa-rotate-back::before{content:""}.fa-rotate-backward::before{content:""}.fa-undo-alt::before{content:""}.fa-table-columns::before{content:""}.fa-columns::before{content:""}.fa-square-a::before{content:""}.fa-tick::before{content:""}.fa-lemon::before{content:""}.fa-head-side-mask::before{content:""}.fa-handshake::before{content:""}.fa-gem::before{content:""}.fa-dolly::before{content:""}.fa-dolly-box::before{content:""}.fa-smoking::before{content:""}.fa-minimize::before{content:""}.fa-compress-arrows-alt::before{content:""}.fa-refrigerator::before{content:""}.fa-monument::before{content:""}.fa-octagon-xmark::before{content:""}.fa-times-octagon::before{content:""}.fa-xmark-octagon::before{content:""}.fa-align-slash::before{content:""}.fa-snowplow::before{content:""}.fa-angles-right::before{content:""}.fa-angle-double-right::before{content:""}.fa-truck-ramp-couch::before{content:""}.fa-truck-couch::before{content:""}.fa-cannabis::before{content:""}.fa-circle-play::before{content:""}.fa-play-circle::before{content:""}.fa-arrow-up-right-and-arrow-down-left-from-center::before{content:""}.fa-location-arrow-up::before{content:""}.fa-tablets::before{content:""}.fa-360-degrees::before{content:""}.fa-ethernet::before{content:""}.fa-euro-sign::before{content:""}.fa-eur::before{content:""}.fa-euro::before{content:""}.fa-chair::before{content:""}.fa-circle-check::before{content:""}.fa-check-circle::before{content:""}.fa-square-dashed-circle-plus::before{content:""}.fa-hand-holding-circle-dollar::before{content:""}.fa-money-simple-from-bracket::before{content:""}.fa-bat::before{content:""}.fa-circle-stop::before{content:""}.fa-stop-circle::before{content:""}.fa-head-side-headphones::before{content:""}.fa-phone-rotary::before{content:""}.fa-arrow-up-to-bracket::before{content:""}.fa-compass-drafting::before{content:""}.fa-drafting-compass::before{content:""}.fa-plate-wheat::before{content:""}.fa-calendar-circle-minus::before{content:""}.fa-chopsticks::before{content:""}.fa-car-wrench::before{content:""}.fa-car-mechanic::before{content:""}.fa-icicles::before{content:""}.fa-person-shelter::before{content:""}.fa-neuter::before{content:""}.fa-id-badge::before{content:""}.fa-kazoo::before{content:""}.fa-marker::before{content:""}.fa-bin-bottles::before{content:""}.fa-face-laugh-beam::before{content:""}.fa-laugh-beam::before{content:""}.fa-square-arrow-down-left::before{content:""}.fa-battery-bolt::before{content:""}.fa-tree-large::before{content:""}.fa-helicopter-symbol::before{content:""}.fa-aperture::before{content:""}.fa-universal-access::before{content:""}.fa-gear-complex::before{content:""}.fa-file-magnifying-glass::before{content:""}.fa-file-search::before{content:""}.fa-up-right::before{content:""}.fa-circle-chevron-up::before{content:""}.fa-chevron-circle-up::before{content:""}.fa-user-police::before{content:""}.fa-lari-sign::before{content:""}.fa-volcano::before{content:""}.fa-teddy-bear::before{content:""}.fa-stocking::before{content:""}.fa-person-walking-dashed-line-arrow-right::before{content:""}.fa-image-slash::before{content:""}.fa-mask-snorkel::before{content:""}.fa-smoke::before{content:""}.fa-sterling-sign::before{content:""}.fa-gbp::before{content:""}.fa-pound-sign::before{content:""}.fa-battery-exclamation::before{content:""}.fa-viruses::before{content:""}.fa-square-person-confined::before{content:""}.fa-user-tie::before{content:""}.fa-up-to-bracket::before{content:""}.fa-arrow-down-long::before{content:""}.fa-long-arrow-down::before{content:""}.fa-tent-arrow-down-to-line::before{content:""}.fa-certificate::before{content:""}.fa-crystal-ball::before{content:""}.fa-reply-all::before{content:""}.fa-mail-reply-all::before{content:""}.fa-suitcase::before{content:""}.fa-person-skating::before{content:""}.fa-skating::before{content:""}.fa-star-shooting::before{content:""}.fa-binary-lock::before{content:""}.fa-filter-circle-dollar::before{content:""}.fa-funnel-dollar::before{content:""}.fa-camera-retro::before{content:""}.fa-circle-arrow-down::before{content:""}.fa-arrow-circle-down::before{content:""}.fa-comment-pen::before{content:""}.fa-comment-edit::before{content:""}.fa-file-import::before{content:""}.fa-arrow-right-to-file::before{content:""}.fa-banjo::before{content:""}.fa-square-arrow-up-right::before{content:""}.fa-external-link-square::before{content:""}.fa-light-emergency-on::before{content:""}.fa-kerning::before{content:""}.fa-box-open::before{content:""}.fa-square-f::before{content:""}.fa-scroll::before{content:""}.fa-spa::before{content:""}.fa-arrow-left-from-line::before{content:""}.fa-arrow-from-right::before{content:""}.fa-strawberry::before{content:""}.fa-location-pin-lock::before{content:""}.fa-pause::before{content:""}.fa-clock-eight-thirty::before{content:""}.fa-plane-engines::before{content:""}.fa-plane-alt::before{content:""}.fa-hill-avalanche::before{content:""}.fa-temperature-empty::before{content:""}.fa-temperature-0::before{content:""}.fa-thermometer-0::before{content:""}.fa-thermometer-empty::before{content:""}.fa-bomb::before{content:""}.fa-gauge-low::before{content:""}.fa-tachometer-alt-slow::before{content:""}.fa-registered::before{content:""}.fa-trash-can-plus::before{content:""}.fa-address-card::before{content:""}.fa-contact-card::before{content:""}.fa-vcard::before{content:""}.fa-scale-unbalanced-flip::before{content:""}.fa-balance-scale-right::before{content:""}.fa-globe-snow::before{content:""}.fa-subscript::before{content:""}.fa-diamond-turn-right::before{content:""}.fa-directions::before{content:""}.fa-integral::before{content:""}.fa-burst::before{content:""}.fa-house-laptop::before{content:""}.fa-laptop-house::before{content:""}.fa-face-tired::before{content:""}.fa-tired::before{content:""}.fa-money-bills::before{content:""}.fa-blinds-raised::before{content:""}.fa-smog::before{content:""}.fa-ufo-beam::before{content:""}.fa-hydra::before{content:""}.fa-circle-caret-up::before{content:""}.fa-caret-circle-up::before{content:""}.fa-user-vneck-hair-long::before{content:""}.fa-square-a-lock::before{content:""}.fa-crutch::before{content:""}.fa-gas-pump-slash::before{content:""}.fa-cloud-arrow-up::before{content:""}.fa-cloud-upload::before{content:""}.fa-cloud-upload-alt::before{content:""}.fa-palette::before{content:""}.fa-transporter-4::before{content:""}.fa-chart-mixed-up-circle-currency::before{content:""}.fa-objects-align-right::before{content:""}.fa-arrows-turn-right::before{content:""}.fa-vest::before{content:""}.fa-pig::before{content:""}.fa-inbox-full::before{content:""}.fa-circle-envelope::before{content:""}.fa-envelope-circle::before{content:""}.fa-triangle-person-digging::before{content:""}.fa-construction::before{content:""}.fa-ferry::before{content:""}.fa-bullseye-arrow::before{content:""}.fa-arrows-down-to-people::before{content:""}.fa-seedling::before{content:""}.fa-sprout::before{content:""}.fa-clock-seven::before{content:""}.fa-left-right::before{content:""}.fa-arrows-alt-h::before{content:""}.fa-boxes-packing::before{content:""}.fa-circle-arrow-left::before{content:""}.fa-arrow-circle-left::before{content:""}.fa-flashlight::before{content:""}.fa-file-jpg::before{content:""}.fa-group-arrows-rotate::before{content:""}.fa-bowl-food::before{content:""}.fa-square-9::before{content:""}.fa-candy-cane::before{content:""}.fa-arrow-down-wide-short::before{content:""}.fa-sort-amount-asc::before{content:""}.fa-sort-amount-down::before{content:""}.fa-square-dollar::before{content:""}.fa-dollar-square::before{content:""}.fa-usd-square::before{content:""}.fa-phone-arrow-right::before{content:""}.fa-hand-holding-seedling::before{content:""}.fa-message-check::before{content:""}.fa-comment-alt-check::before{content:""}.fa-cloud-bolt::before{content:""}.fa-thunderstorm::before{content:""}.fa-chart-line-up-down::before{content:""}.fa-text-slash::before{content:""}.fa-remove-format::before{content:""}.fa-watch::before{content:""}.fa-circle-down-left::before{content:""}.fa-text::before{content:""}.fa-projector::before{content:""}.fa-face-smile-wink::before{content:""}.fa-smile-wink::before{content:""}.fa-tombstone-blank::before{content:""}.fa-tombstone-alt::before{content:""}.fa-chess-king-piece::before{content:""}.fa-chess-king-alt::before{content:""}.fa-circle-6::before{content:""}.fa-waves-sine::before{content:""}.fa-left::before{content:""}.fa-arrow-alt-left::before{content:""}.fa-file-word::before{content:""}.fa-file-powerpoint::before{content:""}.fa-square-down::before{content:""}.fa-arrow-alt-square-down::before{content:""}.fa-objects-align-center-vertical::before{content:""}.fa-arrows-left-right::before{content:""}.fa-arrows-h::before{content:""}.fa-house-lock::before{content:""}.fa-cloud-arrow-down::before{content:""}.fa-cloud-download::before{content:""}.fa-cloud-download-alt::before{content:""}.fa-wreath::before{content:""}.fa-children::before{content:""}.fa-meter-droplet::before{content:""}.fa-chalkboard::before{content:""}.fa-blackboard::before{content:""}.fa-user-large-slash::before{content:""}.fa-user-alt-slash::before{content:""}.fa-signal-strong::before{content:""}.fa-signal-4::before{content:""}.fa-lollipop::before{content:""}.fa-lollypop::before{content:""}.fa-list-tree::before{content:""}.fa-envelope-open::before{content:""}.fa-draw-circle::before{content:""}.fa-cat-space::before{content:""}.fa-handshake-simple-slash::before{content:""}.fa-handshake-alt-slash::before{content:""}.fa-rabbit-running::before{content:""}.fa-rabbit-fast::before{content:""}.fa-memo-pad::before{content:""}.fa-mattress-pillow::before{content:""}.fa-alarm-plus::before{content:""}.fa-alicorn::before{content:""}.fa-comment-question::before{content:""}.fa-gingerbread-man::before{content:""}.fa-guarani-sign::before{content:""}.fa-burger-fries::before{content:""}.fa-mug-tea::before{content:""}.fa-border-top::before{content:""}.fa-arrows-rotate::before{content:""}.fa-refresh::before{content:""}.fa-sync::before{content:""}.fa-circle-book-open::before{content:""}.fa-book-circle::before{content:""}.fa-arrows-to-dotted-line::before{content:""}.fa-fire-extinguisher::before{content:""}.fa-magnifying-glass-arrows-rotate::before{content:""}.fa-garage-open::before{content:""}.fa-shelves-empty::before{content:""}.fa-cruzeiro-sign::before{content:""}.fa-watch-apple::before{content:""}.fa-watch-calculator::before{content:""}.fa-list-dropdown::before{content:""}.fa-cabinet-filing::before{content:""}.fa-burger-soda::before{content:""}.fa-square-arrow-up::before{content:""}.fa-arrow-square-up::before{content:""}.fa-greater-than-equal::before{content:""}.fa-pallet-box::before{content:""}.fa-face-confounded::before{content:""}.fa-shield-halved::before{content:""}.fa-shield-alt::before{content:""}.fa-truck-plow::before{content:""}.fa-book-atlas::before{content:""}.fa-atlas::before{content:""}.fa-virus::before{content:""}.fa-grid-round-2::before{content:""}.fa-comment-middle-top::before{content:""}.fa-wave::before{content:""}.fa-envelope-circle-check::before{content:""}.fa-layer-group::before{content:""}.fa-restroom-simple::before{content:""}.fa-arrows-to-dot::before{content:""}.fa-border-outer::before{content:""}.fa-hashtag-lock::before{content:""}.fa-clock-two-thirty::before{content:""}.fa-archway::before{content:""}.fa-heart-circle-check::before{content:""}.fa-house-chimney-crack::before{content:""}.fa-house-damage::before{content:""}.fa-file-zipper::before{content:""}.fa-file-archive::before{content:""}.fa-ticket-perforated::before{content:""}.fa-heart-half::before{content:""}.fa-comment-check::before{content:""}.fa-square::before{content:""}.fa-memo::before{content:""}.fa-martini-glass-empty::before{content:""}.fa-glass-martini::before{content:""}.fa-couch::before{content:""}.fa-cedi-sign::before{content:""}.fa-italic::before{content:""}.fa-glass-citrus::before{content:""}.fa-calendar-lines-pen::before{content:""}.fa-table-cells-column-lock::before{content:""}.fa-church::before{content:""}.fa-person-snowmobiling::before{content:""}.fa-snowmobile::before{content:""}.fa-face-hushed::before{content:""}.fa-comments-dollar::before{content:""}.fa-tickets-simple::before{content:""}.fa-pickaxe::before{content:""}.fa-link-simple-slash::before{content:""}.fa-democrat::before{content:""}.fa-face-confused::before{content:""}.fa-pinball::before{content:""}.fa-z::before{content:"Z"}.fa-person-skiing::before{content:""}.fa-skiing::before{content:""}.fa-deer::before{content:""}.fa-input-pipe::before{content:""}.fa-road-lock::before{content:""}.fa-a::before{content:"A"}.fa-bookmark-slash::before{content:""}.fa-temperature-arrow-down::before{content:""}.fa-temperature-down::before{content:""}.fa-mace::before{content:""}.fa-feather-pointed::before{content:""}.fa-feather-alt::before{content:""}.fa-sausage::before{content:""}.fa-trash-can-clock::before{content:""}.fa-p::before{content:"P"}.fa-broom-wide::before{content:""}.fa-snowflake::before{content:""}.fa-stomach::before{content:""}.fa-newspaper::before{content:""}.fa-rectangle-ad::before{content:""}.fa-ad::before{content:""}.fa-guitar-electric::before{content:""}.fa-arrow-turn-down-right::before{content:""}.fa-moon-cloud::before{content:""}.fa-bread-slice-butter::before{content:""}.fa-circle-arrow-right::before{content:""}.fa-arrow-circle-right::before{content:""}.fa-user-group-crown::before{content:""}.fa-users-crown::before{content:""}.fa-circle-i::before{content:""}.fa-toilet-paper-check::before{content:""}.fa-filter-circle-xmark::before{content:""}.fa-locust::before{content:""}.fa-sort::before{content:""}.fa-unsorted::before{content:""}.fa-list-ol::before{content:""}.fa-list-1-2::before{content:""}.fa-list-numeric::before{content:""}.fa-chart-waterfall::before{content:""}.fa-sparkle::before{content:""}.fa-face-party::before{content:""}.fa-kidneys::before{content:""}.fa-wifi-exclamation::before{content:""}.fa-chart-network::before{content:""}.fa-person-dress-burst::before{content:""}.fa-dice-d4::before{content:""}.fa-money-check-dollar::before{content:""}.fa-money-check-alt::before{content:""}.fa-vector-square::before{content:""}.fa-bread-slice::before{content:""}.fa-language::before{content:""}.fa-wheat-awn-slash::before{content:""}.fa-face-kiss-wink-heart::before{content:""}.fa-kiss-wink-heart::before{content:""}.fa-dagger::before{content:""}.fa-podium::before{content:""}.fa-diamonds-4::before{content:""}.fa-memo-circle-check::before{content:""}.fa-route-highway::before{content:""}.fa-down-to-line::before{content:""}.fa-arrow-alt-to-bottom::before{content:""}.fa-filter::before{content:""}.fa-square-g::before{content:""}.fa-circle-phone::before{content:""}.fa-phone-circle::before{content:""}.fa-clipboard-prescription::before{content:""}.fa-user-nurse-hair::before{content:""}.fa-question::before{content:"\?"}.fa-file-signature::before{content:""}.fa-toggle-large-on::before{content:""}.fa-up-down-left-right::before{content:""}.fa-arrows-alt::before{content:""}.fa-dryer-heat::before{content:""}.fa-dryer-alt::before{content:""}.fa-house-chimney-user::before{content:""}.fa-hand-holding-heart::before{content:""}.fa-arrow-up-small-big::before{content:""}.fa-sort-size-up-alt::before{content:""}.fa-train-track::before{content:""}.fa-puzzle-piece::before{content:""}.fa-money-check::before{content:""}.fa-star-half-stroke::before{content:""}.fa-star-half-alt::before{content:""}.fa-file-exclamation::before{content:""}.fa-code::before{content:""}.fa-whiskey-glass::before{content:""}.fa-glass-whiskey::before{content:""}.fa-moon-stars::before{content:""}.fa-building-circle-exclamation::before{content:""}.fa-clothes-hanger::before{content:""}.fa-mobile-notch::before{content:""}.fa-mobile-iphone::before{content:""}.fa-magnifying-glass-chart::before{content:""}.fa-arrow-up-right-from-square::before{content:""}.fa-external-link::before{content:""}.fa-cubes-stacked::before{content:""}.fa-images-user::before{content:""}.fa-won-sign::before{content:""}.fa-krw::before{content:""}.fa-won::before{content:""}.fa-image-polaroid-user::before{content:""}.fa-virus-covid::before{content:""}.fa-square-ellipsis::before{content:""}.fa-pie::before{content:""}.fa-chess-knight-piece::before{content:""}.fa-chess-knight-alt::before{content:""}.fa-austral-sign::before{content:""}.fa-cloud-plus::before{content:""}.fa-f::before{content:"F"}.fa-leaf::before{content:""}.fa-bed-bunk::before{content:""}.fa-road::before{content:""}.fa-taxi::before{content:""}.fa-cab::before{content:""}.fa-person-circle-plus::before{content:""}.fa-chart-pie::before{content:""}.fa-pie-chart::before{content:""}.fa-bolt-lightning::before{content:""}.fa-clock-eight::before{content:""}.fa-sack-xmark::before{content:""}.fa-file-xls::before{content:""}.fa-file-excel::before{content:""}.fa-file-contract::before{content:""}.fa-fish-fins::before{content:""}.fa-circle-q::before{content:""}.fa-building-flag::before{content:""}.fa-face-grin-beam::before{content:""}.fa-grin-beam::before{content:""}.fa-object-ungroup::before{content:""}.fa-face-disguise::before{content:""}.fa-circle-arrow-down-right::before{content:""}.fa-alien-8bit::before{content:""}.fa-alien-monster::before{content:""}.fa-hand-point-ribbon::before{content:""}.fa-poop::before{content:""}.fa-object-exclude::before{content:""}.fa-telescope::before{content:""}.fa-location-pin::before{content:""}.fa-map-marker::before{content:""}.fa-square-list::before{content:""}.fa-kaaba::before{content:""}.fa-toilet-paper::before{content:""}.fa-helmet-safety::before{content:""}.fa-hard-hat::before{content:""}.fa-hat-hard::before{content:""}.fa-comment-code::before{content:""}.fa-sim-cards::before{content:""}.fa-starship::before{content:""}.fa-eject::before{content:""}.fa-circle-right::before{content:""}.fa-arrow-alt-circle-right::before{content:""}.fa-plane-circle-check::before{content:""}.fa-seal::before{content:""}.fa-user-cowboy::before{content:""}.fa-hexagon-vertical-nft::before{content:""}.fa-face-rolling-eyes::before{content:""}.fa-meh-rolling-eyes::before{content:""}.fa-bread-loaf::before{content:""}.fa-rings-wedding::before{content:""}.fa-object-group::before{content:""}.fa-french-fries::before{content:""}.fa-chart-line::before{content:""}.fa-line-chart::before{content:""}.fa-calendar-arrow-down::before{content:""}.fa-calendar-download::before{content:""}.fa-send-back::before{content:""}.fa-mask-ventilator::before{content:""}.fa-tickets::before{content:""}.fa-signature-lock::before{content:""}.fa-arrow-right::before{content:""}.fa-signs-post::before{content:""}.fa-map-signs::before{content:""}.fa-octagon-plus::before{content:""}.fa-plus-octagon::before{content:""}.fa-cash-register::before{content:""}.fa-person-circle-question::before{content:""}.fa-melon-slice::before{content:""}.fa-space-station-moon::before{content:""}.fa-message-smile::before{content:""}.fa-comment-alt-smile::before{content:""}.fa-cup-straw::before{content:""}.fa-left-from-line::before{content:""}.fa-arrow-alt-from-right::before{content:""}.fa-h::before{content:"H"}.fa-basket-shopping-simple::before{content:""}.fa-shopping-basket-alt::before{content:""}.fa-hands-holding-heart::before{content:""}.fa-hands-heart::before{content:""}.fa-clock-nine::before{content:""}.fa-hammer-brush::before{content:""}.fa-tarp::before{content:""}.fa-face-sleepy::before{content:""}.fa-hand-horns::before{content:""}.fa-screwdriver-wrench::before{content:""}.fa-tools::before{content:""}.fa-arrows-to-eye::before{content:""}.fa-circle-three-quarters::before{content:""}.fa-trophy-star::before{content:""}.fa-trophy-alt::before{content:""}.fa-plug-circle-bolt::before{content:""}.fa-face-thermometer::before{content:""}.fa-grid-round-4::before{content:""}.fa-sign-posts-wrench::before{content:""}.fa-shirt-running::before{content:""}.fa-book-circle-arrow-up::before{content:""}.fa-face-nauseated::before{content:""}.fa-heart::before{content:""}.fa-file-chart-pie::before{content:""}.fa-mars-and-venus::before{content:""}.fa-house-user::before{content:""}.fa-home-user::before{content:""}.fa-circle-arrow-down-left::before{content:""}.fa-dumpster-fire::before{content:""}.fa-hexagon-minus::before{content:""}.fa-minus-hexagon::before{content:""}.fa-left-to-line::before{content:""}.fa-arrow-alt-to-left::before{content:""}.fa-house-crack::before{content:""}.fa-paw-simple::before{content:""}.fa-paw-alt::before{content:""}.fa-arrow-left-long-to-line::before{content:""}.fa-brackets-round::before{content:""}.fa-parentheses::before{content:""}.fa-martini-glass-citrus::before{content:""}.fa-cocktail::before{content:""}.fa-user-shakespeare::before{content:""}.fa-arrow-right-to-arc::before{content:""}.fa-face-surprise::before{content:""}.fa-surprise::before{content:""}.fa-bottle-water::before{content:""}.fa-circle-pause::before{content:""}.fa-pause-circle::before{content:""}.fa-gauge-circle-plus::before{content:""}.fa-folders::before{content:""}.fa-angel::before{content:""}.fa-value-absolute::before{content:""}.fa-rabbit::before{content:""}.fa-toilet-paper-slash::before{content:""}.fa-circle-euro::before{content:""}.fa-apple-whole::before{content:""}.fa-apple-alt::before{content:""}.fa-kitchen-set::before{content:""}.fa-diamond-half::before{content:""}.fa-lock-keyhole::before{content:""}.fa-lock-alt::before{content:""}.fa-r::before{content:"R"}.fa-temperature-quarter::before{content:""}.fa-temperature-1::before{content:""}.fa-thermometer-1::before{content:""}.fa-thermometer-quarter::before{content:""}.fa-square-info::before{content:""}.fa-info-square::before{content:""}.fa-wifi-slash::before{content:""}.fa-toilet-paper-xmark::before{content:""}.fa-hands-holding-dollar::before{content:""}.fa-hands-usd::before{content:""}.fa-cube::before{content:""}.fa-arrow-down-triangle-square::before{content:""}.fa-sort-shapes-down::before{content:""}.fa-bitcoin-sign::before{content:""}.fa-shutters::before{content:""}.fa-shield-dog::before{content:""}.fa-solar-panel::before{content:""}.fa-lock-open::before{content:""}.fa-table-tree::before{content:""}.fa-house-chimney-heart::before{content:""}.fa-tally-3::before{content:""}.fa-elevator::before{content:""}.fa-money-bill-transfer::before{content:""}.fa-money-bill-trend-up::before{content:""}.fa-house-flood-water-circle-arrow-right::before{content:""}.fa-square-poll-horizontal::before{content:""}.fa-poll-h::before{content:""}.fa-circle::before{content:""}.fa-left-to-bracket::before{content:""}.fa-cart-circle-exclamation::before{content:""}.fa-sword::before{content:""}.fa-backward-fast::before{content:""}.fa-fast-backward::before{content:""}.fa-recycle::before{content:""}.fa-user-astronaut::before{content:""}.fa-interrobang::before{content:""}.fa-plane-slash::before{content:""}.fa-circle-dashed::before{content:""}.fa-trademark::before{content:""}.fa-basketball::before{content:""}.fa-basketball-ball::before{content:""}.fa-fork-knife::before{content:""}.fa-utensils-alt::before{content:""}.fa-satellite-dish::before{content:""}.fa-badge-check::before{content:""}.fa-circle-up::before{content:""}.fa-arrow-alt-circle-up::before{content:""}.fa-slider::before{content:""}.fa-mobile-screen-button::before{content:""}.fa-mobile-alt::before{content:""}.fa-clock-one-thirty::before{content:""}.fa-inbox-out::before{content:""}.fa-inbox-arrow-up::before{content:""}.fa-cloud-slash::before{content:""}.fa-volume-high::before{content:""}.fa-volume-up::before{content:""}.fa-users-rays::before{content:""}.fa-wallet::before{content:""}.fa-octagon-check::before{content:""}.fa-flatbread-stuffed::before{content:""}.fa-clipboard-check::before{content:""}.fa-cart-circle-plus::before{content:""}.fa-truck-clock::before{content:""}.fa-shipping-timed::before{content:""}.fa-pool-8-ball::before{content:""}.fa-file-audio::before{content:""}.fa-turn-down-left::before{content:""}.fa-lock-hashtag::before{content:""}.fa-chart-radar::before{content:""}.fa-staff::before{content:""}.fa-burger::before{content:""}.fa-hamburger::before{content:""}.fa-utility-pole::before{content:""}.fa-transporter-6::before{content:""}.fa-arrow-turn-left::before{content:""}.fa-wrench::before{content:""}.fa-bugs::before{content:""}.fa-vector-polygon::before{content:""}.fa-diagram-nested::before{content:""}.fa-rupee-sign::before{content:""}.fa-rupee::before{content:""}.fa-file-image::before{content:""}.fa-circle-question::before{content:""}.fa-question-circle::before{content:""}.fa-tickets-perforated::before{content:""}.fa-image-user::before{content:""}.fa-buoy::before{content:""}.fa-plane-departure::before{content:""}.fa-handshake-slash::before{content:""}.fa-book-bookmark::before{content:""}.fa-border-center-h::before{content:""}.fa-can-food::before{content:""}.fa-typewriter::before{content:""}.fa-arrow-right-from-arc::before{content:""}.fa-circle-k::before{content:""}.fa-face-hand-over-mouth::before{content:""}.fa-popcorn::before{content:""}.fa-house-water::before{content:""}.fa-house-flood::before{content:""}.fa-object-subtract::before{content:""}.fa-code-branch::before{content:""}.fa-warehouse-full::before{content:""}.fa-warehouse-alt::before{content:""}.fa-hat-cowboy::before{content:""}.fa-bridge::before{content:""}.fa-phone-flip::before{content:""}.fa-phone-alt::before{content:""}.fa-arrow-down-from-dotted-line::before{content:""}.fa-file-doc::before{content:""}.fa-square-quarters::before{content:""}.fa-truck-front::before{content:""}.fa-cat::before{content:""}.fa-trash-xmark::before{content:""}.fa-circle-caret-left::before{content:""}.fa-caret-circle-left::before{content:""}.fa-files::before{content:""}.fa-anchor-circle-exclamation::before{content:""}.fa-face-clouds::before{content:""}.fa-user-crown::before{content:""}.fa-basket-shopping-plus::before{content:""}.fa-truck-field::before{content:""}.fa-route::before{content:""}.fa-cart-circle-check::before{content:""}.fa-clipboard-question::before{content:""}.fa-panorama::before{content:""}.fa-comment-medical::before{content:""}.fa-teeth-open::before{content:""}.fa-user-tie-hair-long::before{content:""}.fa-file-circle-minus::before{content:""}.fa-head-side-medical::before{content:""}.fa-arrow-turn-right::before{content:""}.fa-tags::before{content:""}.fa-wine-glass::before{content:""}.fa-forward-fast::before{content:""}.fa-fast-forward::before{content:""}.fa-face-meh-blank::before{content:""}.fa-meh-blank::before{content:""}.fa-user-robot::before{content:""}.fa-square-parking::before{content:""}.fa-parking::before{content:""}.fa-card-diamond::before{content:""}.fa-face-zipper::before{content:""}.fa-face-raised-eyebrow::before{content:""}.fa-house-signal::before{content:""}.fa-square-chevron-up::before{content:""}.fa-chevron-square-up::before{content:""}.fa-bars-progress::before{content:""}.fa-tasks-alt::before{content:""}.fa-faucet-drip::before{content:""}.fa-arrows-to-line::before{content:""}.fa-dolphin::before{content:""}.fa-arrow-up-right::before{content:""}.fa-circle-r::before{content:""}.fa-cart-flatbed::before{content:""}.fa-dolly-flatbed::before{content:""}.fa-ban-smoking::before{content:""}.fa-smoking-ban::before{content:""}.fa-circle-sort-up::before{content:""}.fa-sort-circle-up::before{content:""}.fa-terminal::before{content:""}.fa-mobile-button::before{content:""}.fa-house-medical-flag::before{content:""}.fa-basket-shopping::before{content:""}.fa-shopping-basket::before{content:""}.fa-tape::before{content:""}.fa-chestnut::before{content:""}.fa-bus-simple::before{content:""}.fa-bus-alt::before{content:""}.fa-eye::before{content:""}.fa-face-sad-cry::before{content:""}.fa-sad-cry::before{content:""}.fa-heat::before{content:""}.fa-ticket-airline::before{content:""}.fa-ticket-perforated-plane::before{content:""}.fa-ticket-plane::before{content:""}.fa-boot-heeled::before{content:""}.fa-arrows-minimize::before{content:""}.fa-compress-arrows::before{content:""}.fa-audio-description::before{content:""}.fa-person-military-to-person::before{content:""}.fa-file-shield::before{content:""}.fa-hexagon::before{content:""}.fa-manhole::before{content:""}.fa-user-slash::before{content:""}.fa-pen::before{content:""}.fa-tower-observation::before{content:""}.fa-floppy-disks::before{content:""}.fa-toilet-paper-blank-under::before{content:""}.fa-toilet-paper-reverse-alt::before{content:""}.fa-file-code::before{content:""}.fa-signal::before{content:""}.fa-signal-5::before{content:""}.fa-signal-perfect::before{content:""}.fa-pump::before{content:""}.fa-bus::before{content:""}.fa-heart-circle-xmark::before{content:""}.fa-arrow-up-left-from-circle::before{content:""}.fa-house-chimney::before{content:""}.fa-home-lg::before{content:""}.fa-window-maximize::before{content:""}.fa-dryer::before{content:""}.fa-face-frown::before{content:""}.fa-frown::before{content:""}.fa-chess-bishop-piece::before{content:""}.fa-chess-bishop-alt::before{content:""}.fa-shirt-tank-top::before{content:""}.fa-diploma::before{content:""}.fa-scroll-ribbon::before{content:""}.fa-screencast::before{content:""}.fa-walker::before{content:""}.fa-prescription::before{content:""}.fa-shop::before{content:""}.fa-store-alt::before{content:""}.fa-floppy-disk::before{content:""}.fa-save::before{content:""}.fa-vihara::before{content:""}.fa-face-kiss-closed-eyes::before{content:""}.fa-scale-unbalanced::before{content:""}.fa-balance-scale-left::before{content:""}.fa-file-user::before{content:""}.fa-user-police-tie::before{content:""}.fa-face-tongue-money::before{content:""}.fa-tennis-ball::before{content:""}.fa-square-l::before{content:""}.fa-sort-up::before{content:""}.fa-sort-asc::before{content:""}.fa-calendar-arrow-up::before{content:""}.fa-calendar-upload::before{content:""}.fa-comment-dots::before{content:""}.fa-commenting::before{content:""}.fa-plant-wilt::before{content:""}.fa-scarf::before{content:""}.fa-album-circle-plus::before{content:""}.fa-user-nurse-hair-long::before{content:""}.fa-diamond::before{content:""}.fa-square-left::before{content:""}.fa-arrow-alt-square-left::before{content:""}.fa-face-grin-squint::before{content:""}.fa-grin-squint::before{content:""}.fa-circle-ellipsis-vertical::before{content:""}.fa-hand-holding-dollar::before{content:""}.fa-hand-holding-usd::before{content:""}.fa-grid-dividers::before{content:""}.fa-bacterium::before{content:""}.fa-hand-pointer::before{content:""}.fa-drum-steelpan::before{content:""}.fa-hand-scissors::before{content:""}.fa-hands-praying::before{content:""}.fa-praying-hands::before{content:""}.fa-face-pensive::before{content:""}.fa-user-music::before{content:""}.fa-arrow-rotate-right::before{content:""}.fa-arrow-right-rotate::before{content:""}.fa-arrow-rotate-forward::before{content:""}.fa-redo::before{content:""}.fa-messages-dollar::before{content:""}.fa-comments-alt-dollar::before{content:""}.fa-sensor-on::before{content:""}.fa-balloon::before{content:""}.fa-biohazard::before{content:""}.fa-chess-queen-piece::before{content:""}.fa-chess-queen-alt::before{content:""}.fa-location-crosshairs::before{content:""}.fa-location::before{content:""}.fa-mars-double::before{content:""}.fa-left-from-bracket::before{content:""}.fa-house-person-leave::before{content:""}.fa-house-leave::before{content:""}.fa-house-person-depart::before{content:""}.fa-ruler-triangle::before{content:""}.fa-card-club::before{content:""}.fa-child-dress::before{content:""}.fa-users-between-lines::before{content:""}.fa-lungs-virus::before{content:""}.fa-spinner-third::before{content:""}.fa-face-grin-tears::before{content:""}.fa-grin-tears::before{content:""}.fa-phone::before{content:""}.fa-computer-mouse-scrollwheel::before{content:""}.fa-mouse-alt::before{content:""}.fa-calendar-xmark::before{content:""}.fa-calendar-times::before{content:""}.fa-child-reaching::before{content:""}.fa-table-layout::before{content:""}.fa-narwhal::before{content:""}.fa-ramp-loading::before{content:""}.fa-calendar-circle-plus::before{content:""}.fa-toothbrush::before{content:""}.fa-border-inner::before{content:""}.fa-paw-claws::before{content:""}.fa-kiwi-fruit::before{content:""}.fa-traffic-light-slow::before{content:""}.fa-rectangle-code::before{content:""}.fa-head-side-virus::before{content:""}.fa-keyboard-brightness::before{content:""}.fa-books-medical::before{content:""}.fa-lightbulb-slash::before{content:""}.fa-house-blank::before{content:""}.fa-home-blank::before{content:""}.fa-square-5::before{content:""}.fa-square-heart::before{content:""}.fa-heart-square::before{content:""}.fa-puzzle::before{content:""}.fa-user-gear::before{content:""}.fa-user-cog::before{content:""}.fa-pipe-circle-check::before{content:""}.fa-arrow-up-1-9::before{content:""}.fa-sort-numeric-up::before{content:""}.fa-octagon-exclamation::before{content:""}.fa-dial-low::before{content:""}.fa-door-closed::before{content:""}.fa-laptop-mobile::before{content:""}.fa-phone-laptop::before{content:""}.fa-conveyor-belt-boxes::before{content:""}.fa-conveyor-belt-alt::before{content:""}.fa-shield-virus::before{content:""}.fa-starfighter-twin-ion-engine-advanced::before{content:""}.fa-starfighter-alt-advanced::before{content:""}.fa-dice-six::before{content:""}.fa-starfighter-twin-ion-engine::before{content:""}.fa-starfighter-alt::before{content:""}.fa-rocket-launch::before{content:""}.fa-mosquito-net::before{content:""}.fa-vent-damper::before{content:""}.fa-bridge-water::before{content:""}.fa-ban-bug::before{content:""}.fa-debug::before{content:""}.fa-person-booth::before{content:""}.fa-text-width::before{content:""}.fa-garage-car::before{content:""}.fa-square-kanban::before{content:""}.fa-hat-wizard::before{content:""}.fa-chart-kanban::before{content:""}.fa-pen-fancy::before{content:""}.fa-coffee-pot::before{content:""}.fa-mouse-field::before{content:""}.fa-person-digging::before{content:""}.fa-digging::before{content:""}.fa-shower-down::before{content:""}.fa-shower-alt::before{content:""}.fa-box-circle-check::before{content:""}.fa-brightness::before{content:""}.fa-car-side-bolt::before{content:""}.fa-file-xml::before{content:""}.fa-ornament::before{content:""}.fa-phone-arrow-down-left::before{content:""}.fa-phone-arrow-down::before{content:""}.fa-phone-incoming::before{content:""}.fa-cloud-word::before{content:""}.fa-hand-fingers-crossed::before{content:""}.fa-trash::before{content:""}.fa-gauge-simple::before{content:""}.fa-gauge-simple-med::before{content:""}.fa-tachometer-average::before{content:""}.fa-arrow-down-small-big::before{content:""}.fa-sort-size-down-alt::before{content:""}.fa-book-medical::before{content:""}.fa-face-melting::before{content:""}.fa-poo::before{content:""}.fa-pen-clip-slash::before{content:""}.fa-pen-alt-slash::before{content:""}.fa-quote-right::before{content:""}.fa-quote-right-alt::before{content:""}.fa-scroll-old::before{content:""}.fa-guitars::before{content:""}.fa-phone-xmark::before{content:""}.fa-hose::before{content:""}.fa-clock-six::before{content:""}.fa-shirt::before{content:""}.fa-t-shirt::before{content:""}.fa-tshirt::before{content:""}.fa-billboard::before{content:""}.fa-square-r::before{content:""}.fa-cubes::before{content:""}.fa-envelope-open-dollar::before{content:""}.fa-divide::before{content:""}.fa-sun-cloud::before{content:""}.fa-lamp-floor::before{content:""}.fa-square-7::before{content:""}.fa-tenge-sign::before{content:""}.fa-tenge::before{content:""}.fa-headphones::before{content:""}.fa-hands-holding::before{content:""}.fa-campfire::before{content:""}.fa-circle-ampersand::before{content:""}.fa-snowflakes::before{content:""}.fa-hands-clapping::before{content:""}.fa-republican::before{content:""}.fa-leaf-maple::before{content:""}.fa-arrow-left::before{content:""}.fa-person-circle-xmark::before{content:""}.fa-ruler::before{content:""}.fa-arrow-left-from-bracket::before{content:""}.fa-cup-straw-swoosh::before{content:""}.fa-temperature-sun::before{content:""}.fa-temperature-hot::before{content:""}.fa-align-left::before{content:""}.fa-dice-d6::before{content:""}.fa-restroom::before{content:""}.fa-high-definition::before{content:""}.fa-rectangle-hd::before{content:""}.fa-j::before{content:"J"}.fa-galaxy::before{content:""}.fa-users-viewfinder::before{content:""}.fa-file-video::before{content:""}.fa-cherries::before{content:""}.fa-up-right-from-square::before{content:""}.fa-external-link-alt::before{content:""}.fa-circle-sort::before{content:""}.fa-sort-circle::before{content:""}.fa-table-cells::before{content:""}.fa-th::before{content:""}.fa-bag-shopping-minus::before{content:""}.fa-file-pdf::before{content:""}.fa-siren::before{content:""}.fa-arrow-up-to-dotted-line::before{content:""}.fa-image-landscape::before{content:""}.fa-landscape::before{content:""}.fa-tank-water::before{content:""}.fa-curling-stone::before{content:""}.fa-curling::before{content:""}.fa-gamepad-modern::before{content:""}.fa-gamepad-alt::before{content:""}.fa-messages-question::before{content:""}.fa-book-bible::before{content:""}.fa-bible::before{content:""}.fa-o::before{content:"O"}.fa-suitcase-medical::before{content:""}.fa-medkit::before{content:""}.fa-briefcase-arrow-right::before{content:""}.fa-expand-wide::before{content:""}.fa-clock-eleven-thirty::before{content:""}.fa-rv::before{content:""}.fa-user-secret::before{content:""}.fa-otter::before{content:""}.fa-dreidel::before{content:""}.fa-person-dress::before{content:""}.fa-female::before{content:""}.fa-comment-dollar::before{content:""}.fa-business-time::before{content:""}.fa-briefcase-clock::before{content:""}.fa-flower-tulip::before{content:""}.fa-people-pants-simple::before{content:""}.fa-cloud-drizzle::before{content:""}.fa-table-cells-large::before{content:""}.fa-th-large::before{content:""}.fa-book-tanakh::before{content:""}.fa-tanakh::before{content:""}.fa-solar-system::before{content:""}.fa-seal-question::before{content:""}.fa-phone-volume::before{content:""}.fa-volume-control-phone::before{content:""}.fa-disc-drive::before{content:""}.fa-hat-cowboy-side::before{content:""}.fa-table-rows::before{content:""}.fa-rows::before{content:""}.fa-location-exclamation::before{content:""}.fa-map-marker-exclamation::before{content:""}.fa-face-fearful::before{content:""}.fa-clipboard-user::before{content:""}.fa-bus-school::before{content:""}.fa-film-slash::before{content:""}.fa-square-arrow-down-right::before{content:""}.fa-book-sparkles::before{content:""}.fa-book-spells::before{content:""}.fa-washing-machine::before{content:""}.fa-washer::before{content:""}.fa-child::before{content:""}.fa-lira-sign::before{content:""}.fa-user-visor::before{content:""}.fa-file-plus-minus::before{content:""}.fa-chess-clock-flip::before{content:""}.fa-chess-clock-alt::before{content:""}.fa-satellite::before{content:""}.fa-truck-fire::before{content:""}.fa-plane-lock::before{content:""}.fa-steering-wheel::before{content:""}.fa-tag::before{content:""}.fa-stretcher::before{content:""}.fa-book-section::before{content:""}.fa-book-law::before{content:""}.fa-inboxes::before{content:""}.fa-coffee-bean::before{content:""}.fa-circle-yen::before{content:""}.fa-brackets-curly::before{content:""}.fa-ellipsis-stroke-vertical::before{content:""}.fa-ellipsis-v-alt::before{content:""}.fa-comment::before{content:""}.fa-square-1::before{content:""}.fa-cake-candles::before{content:""}.fa-birthday-cake::before{content:""}.fa-cake::before{content:""}.fa-head-side::before{content:""}.fa-truck-ladder::before{content:""}.fa-envelope::before{content:""}.fa-dolly-empty::before{content:""}.fa-face-tissue::before{content:""}.fa-angles-up::before{content:""}.fa-angle-double-up::before{content:""}.fa-bin-recycle::before{content:""}.fa-paperclip::before{content:""}.fa-chart-line-down::before{content:""}.fa-arrow-right-to-city::before{content:""}.fa-lock-a::before{content:""}.fa-ribbon::before{content:""}.fa-lungs::before{content:""}.fa-person-pinball::before{content:""}.fa-arrow-up-9-1::before{content:""}.fa-sort-numeric-up-alt::before{content:""}.fa-apple-core::before{content:""}.fa-circle-y::before{content:""}.fa-h6::before{content:""}.fa-litecoin-sign::before{content:""}.fa-bottle-baby::before{content:""}.fa-circle-small::before{content:""}.fa-border-none::before{content:""}.fa-arrow-turn-down-left::before{content:""}.fa-circle-wifi-circle-wifi::before{content:""}.fa-circle-wifi-group::before{content:""}.fa-circle-nodes::before{content:""}.fa-parachute-box::before{content:""}.fa-reflect-horizontal::before{content:""}.fa-message-medical::before{content:""}.fa-comment-alt-medical::before{content:""}.fa-rugby-ball::before{content:""}.fa-comment-music::before{content:""}.fa-indent::before{content:""}.fa-tree-deciduous::before{content:""}.fa-tree-alt::before{content:""}.fa-puzzle-piece-simple::before{content:""}.fa-puzzle-piece-alt::before{content:""}.fa-truck-field-un::before{content:""}.fa-nfc-trash::before{content:""}.fa-hourglass::before{content:""}.fa-hourglass-empty::before{content:""}.fa-mountain::before{content:""}.fa-file-xmark::before{content:""}.fa-file-times::before{content:""}.fa-house-heart::before{content:""}.fa-home-heart::before{content:""}.fa-house-chimney-blank::before{content:""}.fa-meter-bolt::before{content:""}.fa-user-doctor::before{content:""}.fa-user-md::before{content:""}.fa-slash-back::before{content:"\\"}.fa-circle-info::before{content:""}.fa-info-circle::before{content:""}.fa-fishing-rod::before{content:""}.fa-hammer-crash::before{content:""}.fa-message-heart::before{content:""}.fa-cloud-meatball::before{content:""}.fa-camera-polaroid::before{content:""}.fa-camera::before{content:""}.fa-camera-alt::before{content:""}.fa-square-virus::before{content:""}.fa-cart-arrow-up::before{content:""}.fa-meteor::before{content:""}.fa-car-on::before{content:""}.fa-sleigh::before{content:""}.fa-arrow-down-1-9::before{content:""}.fa-sort-numeric-asc::before{content:""}.fa-sort-numeric-down::before{content:""}.fa-buoy-mooring::before{content:""}.fa-square-4::before{content:""}.fa-hand-holding-droplet::before{content:""}.fa-hand-holding-water::before{content:""}.fa-file-eps::before{content:""}.fa-tricycle-adult::before{content:""}.fa-waveform::before{content:""}.fa-water::before{content:""}.fa-star-sharp-half-stroke::before{content:""}.fa-star-sharp-half-alt::before{content:""}.fa-nfc-signal::before{content:""}.fa-plane-prop::before{content:""}.fa-calendar-check::before{content:""}.fa-clock-desk::before{content:""}.fa-calendar-clock::before{content:""}.fa-calendar-time::before{content:""}.fa-braille::before{content:""}.fa-prescription-bottle-medical::before{content:""}.fa-prescription-bottle-alt::before{content:""}.fa-plate-utensils::before{content:""}.fa-family-pants::before{content:""}.fa-hose-reel::before{content:""}.fa-house-window::before{content:""}.fa-landmark::before{content:""}.fa-truck::before{content:""}.fa-music-magnifying-glass::before{content:""}.fa-crosshairs::before{content:""}.fa-cloud-rainbow::before{content:""}.fa-person-cane::before{content:""}.fa-alien::before{content:""}.fa-tent::before{content:""}.fa-laptop-binary::before{content:""}.fa-vest-patches::before{content:""}.fa-people-dress-simple::before{content:""}.fa-check-double::before{content:""}.fa-arrow-down-a-z::before{content:""}.fa-sort-alpha-asc::before{content:""}.fa-sort-alpha-down::before{content:""}.fa-bowling-ball-pin::before{content:""}.fa-bell-school-slash::before{content:""}.fa-plus-large::before{content:""}.fa-money-bill-wheat::before{content:""}.fa-camera-viewfinder::before{content:""}.fa-screenshot::before{content:""}.fa-message-music::before{content:""}.fa-comment-alt-music::before{content:""}.fa-car-building::before{content:""}.fa-border-bottom-right::before{content:""}.fa-border-style-alt::before{content:""}.fa-octagon::before{content:""}.fa-comment-arrow-up-right::before{content:""}.fa-octagon-divide::before{content:""}.fa-cookie::before{content:""}.fa-arrow-rotate-left::before{content:""}.fa-arrow-left-rotate::before{content:""}.fa-arrow-rotate-back::before{content:""}.fa-arrow-rotate-backward::before{content:""}.fa-undo::before{content:""}.fa-tv-music::before{content:""}.fa-hard-drive::before{content:""}.fa-hdd::before{content:""}.fa-reel::before{content:""}.fa-face-grin-squint-tears::before{content:""}.fa-grin-squint-tears::before{content:""}.fa-dumbbell::before{content:""}.fa-rectangle-list::before{content:""}.fa-list-alt::before{content:""}.fa-tarp-droplet::before{content:""}.fa-alarm-exclamation::before{content:""}.fa-house-medical-circle-check::before{content:""}.fa-traffic-cone::before{content:""}.fa-grate::before{content:""}.fa-arrow-down-right::before{content:""}.fa-person-skiing-nordic::before{content:""}.fa-skiing-nordic::before{content:""}.fa-calendar-plus::before{content:""}.fa-person-from-portal::before{content:""}.fa-portal-exit::before{content:""}.fa-plane-arrival::before{content:""}.fa-cowbell-circle-plus::before{content:""}.fa-cowbell-more::before{content:""}.fa-circle-left::before{content:""}.fa-arrow-alt-circle-left::before{content:""}.fa-distribute-spacing-vertical::before{content:""}.fa-signal-bars-fair::before{content:""}.fa-signal-alt-2::before{content:""}.fa-sportsball::before{content:""}.fa-game-console-handheld-crank::before{content:""}.fa-train-subway::before{content:""}.fa-subway::before{content:""}.fa-chart-gantt::before{content:""}.fa-face-smile-upside-down::before{content:""}.fa-ball-pile::before{content:""}.fa-badge-dollar::before{content:""}.fa-money-bills-simple::before{content:""}.fa-money-bills-alt::before{content:""}.fa-list-timeline::before{content:""}.fa-indian-rupee-sign::before{content:""}.fa-indian-rupee::before{content:""}.fa-inr::before{content:""}.fa-crop-simple::before{content:""}.fa-crop-alt::before{content:""}.fa-money-bill-1::before{content:""}.fa-money-bill-alt::before{content:""}.fa-left-long::before{content:""}.fa-long-arrow-alt-left::before{content:""}.fa-keyboard-down::before{content:""}.fa-circle-up-right::before{content:""}.fa-cloud-bolt-moon::before{content:""}.fa-thunderstorm-moon::before{content:""}.fa-turn-left-up::before{content:""}.fa-dna::before{content:""}.fa-virus-slash::before{content:""}.fa-bracket-round-right::before{content:"\)"}.fa-circle-sterling::before{content:""}.fa-circle-5::before{content:""}.fa-minus::before{content:""}.fa-subtract::before{content:""}.fa-fire-flame::before{content:""}.fa-flame::before{content:""}.fa-right-to-line::before{content:""}.fa-arrow-alt-to-right::before{content:""}.fa-gif::before{content:""}.fa-chess::before{content:""}.fa-trash-slash::before{content:""}.fa-arrow-left-long::before{content:""}.fa-long-arrow-left::before{content:""}.fa-plug-circle-check::before{content:""}.fa-font-case::before{content:""}.fa-street-view::before{content:""}.fa-arrow-down-left::before{content:""}.fa-franc-sign::before{content:""}.fa-flask-round-poison::before{content:""}.fa-flask-poison::before{content:""}.fa-volume-off::before{content:""}.fa-book-circle-arrow-right::before{content:""}.fa-chart-user::before{content:""}.fa-user-chart::before{content:""}.fa-hands-asl-interpreting::before{content:""}.fa-american-sign-language-interpreting::before{content:""}.fa-asl-interpreting::before{content:""}.fa-hands-american-sign-language-interpreting::before{content:""}.fa-presentation-screen::before{content:""}.fa-presentation::before{content:""}.fa-circle-bolt::before{content:""}.fa-face-smile-halo::before{content:""}.fa-cart-circle-arrow-down::before{content:""}.fa-house-person-return::before{content:""}.fa-house-person-arrive::before{content:""}.fa-house-return::before{content:""}.fa-message-xmark::before{content:""}.fa-comment-alt-times::before{content:""}.fa-message-times::before{content:""}.fa-file-certificate::before{content:""}.fa-file-award::before{content:""}.fa-user-doctor-hair-long::before{content:""}.fa-camera-security::before{content:""}.fa-camera-home::before{content:""}.fa-gear::before{content:""}.fa-cog::before{content:""}.fa-droplet-slash::before{content:""}.fa-tint-slash::before{content:""}.fa-book-heart::before{content:""}.fa-mosque::before{content:""}.fa-duck::before{content:""}.fa-mosquito::before{content:""}.fa-star-of-david::before{content:""}.fa-flag-swallowtail::before{content:""}.fa-flag-alt::before{content:""}.fa-person-military-rifle::before{content:""}.fa-car-garage::before{content:""}.fa-cart-shopping::before{content:""}.fa-shopping-cart::before{content:""}.fa-book-font::before{content:""}.fa-shield-plus::before{content:""}.fa-vials::before{content:""}.fa-eye-dropper-full::before{content:""}.fa-distribute-spacing-horizontal::before{content:""}.fa-tablet-rugged::before{content:""}.fa-temperature-snow::before{content:""}.fa-temperature-frigid::before{content:""}.fa-moped::before{content:""}.fa-face-smile-plus::before{content:""}.fa-smile-plus::before{content:""}.fa-radio-tuner::before{content:""}.fa-radio-alt::before{content:""}.fa-face-swear::before{content:""}.fa-water-arrow-down::before{content:""}.fa-water-lower::before{content:""}.fa-scanner-touchscreen::before{content:""}.fa-circle-7::before{content:""}.fa-plug-circle-plus::before{content:""}.fa-person-ski-jumping::before{content:""}.fa-ski-jump::before{content:""}.fa-place-of-worship::before{content:""}.fa-water-arrow-up::before{content:""}.fa-water-rise::before{content:""}.fa-waveform-lines::before{content:""}.fa-waveform-path::before{content:""}.fa-split::before{content:""}.fa-film-canister::before{content:""}.fa-film-cannister::before{content:""}.fa-folder-xmark::before{content:""}.fa-folder-times::before{content:""}.fa-toilet-paper-blank::before{content:""}.fa-toilet-paper-alt::before{content:""}.fa-tablet-screen::before{content:""}.fa-tablet-android-alt::before{content:""}.fa-hexagon-vertical-nft-slanted::before{content:""}.fa-folder-music::before{content:""}.fa-display-medical::before{content:""}.fa-desktop-medical::before{content:""}.fa-share-all::before{content:""}.fa-peapod::before{content:""}.fa-chess-clock::before{content:""}.fa-axe::before{content:""}.fa-square-d::before{content:""}.fa-grip-vertical::before{content:""}.fa-mobile-signal-out::before{content:""}.fa-arrow-turn-up::before{content:""}.fa-level-up::before{content:""}.fa-u::before{content:"U"}.fa-arrow-up-from-dotted-line::before{content:""}.fa-square-root-variable::before{content:""}.fa-square-root-alt::before{content:""}.fa-light-switch-on::before{content:""}.fa-arrow-down-arrow-up::before{content:""}.fa-sort-alt::before{content:""}.fa-raindrops::before{content:""}.fa-dash::before{content:""}.fa-minus-large::before{content:""}.fa-clock::before{content:""}.fa-clock-four::before{content:""}.fa-input-numeric::before{content:""}.fa-truck-tow::before{content:""}.fa-backward-step::before{content:""}.fa-step-backward::before{content:""}.fa-pallet::before{content:""}.fa-car-bolt::before{content:""}.fa-arrows-maximize::before{content:""}.fa-expand-arrows::before{content:""}.fa-faucet::before{content:""}.fa-cloud-sleet::before{content:""}.fa-lamp-street::before{content:""}.fa-list-radio::before{content:""}.fa-pen-nib-slash::before{content:""}.fa-baseball-bat-ball::before{content:""}.fa-square-up-left::before{content:""}.fa-overline::before{content:""}.fa-s::before{content:"S"}.fa-timeline::before{content:""}.fa-keyboard::before{content:""}.fa-arrows-from-dotted-line::before{content:""}.fa-usb-drive::before{content:""}.fa-ballot::before{content:""}.fa-caret-down::before{content:""}.fa-location-dot-slash::before{content:""}.fa-map-marker-alt-slash::before{content:""}.fa-cards::before{content:""}.fa-house-chimney-medical::before{content:""}.fa-clinic-medical::before{content:""}.fa-boxing-glove::before{content:""}.fa-glove-boxing::before{content:""}.fa-temperature-three-quarters::before{content:""}.fa-temperature-3::before{content:""}.fa-thermometer-3::before{content:""}.fa-thermometer-three-quarters::before{content:""}.fa-bell-school::before{content:""}.fa-mobile-screen::before{content:""}.fa-mobile-android-alt::before{content:""}.fa-plane-up::before{content:""}.fa-folder-heart::before{content:""}.fa-circle-location-arrow::before{content:""}.fa-location-circle::before{content:""}.fa-face-head-bandage::before{content:""}.fa-sushi-roll::before{content:""}.fa-maki-roll::before{content:""}.fa-makizushi::before{content:""}.fa-car-bump::before{content:""}.fa-piggy-bank::before{content:""}.fa-racquet::before{content:""}.fa-car-mirrors::before{content:""}.fa-industry-windows::before{content:""}.fa-industry-alt::before{content:""}.fa-bolt-auto::before{content:""}.fa-battery-half::before{content:""}.fa-battery-3::before{content:""}.fa-flux-capacitor::before{content:""}.fa-mountain-city::before{content:""}.fa-coins::before{content:""}.fa-honey-pot::before{content:""}.fa-olive::before{content:""}.fa-khanda::before{content:""}.fa-filter-list::before{content:""}.fa-outlet::before{content:""}.fa-sliders::before{content:""}.fa-sliders-h::before{content:""}.fa-cauldron::before{content:""}.fa-people::before{content:""}.fa-folder-tree::before{content:""}.fa-network-wired::before{content:""}.fa-croissant::before{content:""}.fa-map-pin::before{content:""}.fa-hamsa::before{content:""}.fa-cent-sign::before{content:""}.fa-swords-laser::before{content:""}.fa-flask::before{content:""}.fa-person-pregnant::before{content:""}.fa-square-u::before{content:""}.fa-wand-sparkles::before{content:""}.fa-router::before{content:""}.fa-ellipsis-vertical::before{content:""}.fa-ellipsis-v::before{content:""}.fa-sword-laser-alt::before{content:""}.fa-ticket::before{content:""}.fa-power-off::before{content:""}.fa-coin::before{content:""}.fa-laptop-slash::before{content:""}.fa-right-long::before{content:""}.fa-long-arrow-alt-right::before{content:""}.fa-circle-b::before{content:""}.fa-person-dress-simple::before{content:""}.fa-pipe-collar::before{content:""}.fa-lights-holiday::before{content:""}.fa-citrus::before{content:""}.fa-flag-usa::before{content:""}.fa-laptop-file::before{content:""}.fa-tty::before{content:""}.fa-teletype::before{content:""}.fa-chart-tree-map::before{content:""}.fa-diagram-next::before{content:""}.fa-person-rifle::before{content:""}.fa-clock-five-thirty::before{content:""}.fa-pipe-valve::before{content:""}.fa-lightbulb-message::before{content:""}.fa-arrow-up-from-arc::before{content:""}.fa-face-spiral-eyes::before{content:""}.fa-compress-wide::before{content:""}.fa-circle-phone-hangup::before{content:""}.fa-phone-circle-down::before{content:""}.fa-gear-complex-code::before{content:""}.fa-house-medical-circle-exclamation::before{content:""}.fa-badminton::before{content:""}.fa-closed-captioning::before{content:""}.fa-person-hiking::before{content:""}.fa-hiking::before{content:""}.fa-right-from-line::before{content:""}.fa-arrow-alt-from-left::before{content:""}.fa-venus-double::before{content:""}.fa-images::before{content:""}.fa-calculator::before{content:""}.fa-shuttlecock::before{content:""}.fa-user-hair::before{content:""}.fa-eye-evil::before{content:""}.fa-people-pulling::before{content:""}.fa-n::before{content:"N"}.fa-swap::before{content:""}.fa-garage::before{content:""}.fa-cable-car::before{content:""}.fa-tram::before{content:""}.fa-shovel-snow::before{content:""}.fa-cloud-rain::before{content:""}.fa-face-lying::before{content:""}.fa-sprinkler::before{content:""}.fa-building-circle-xmark::before{content:""}.fa-person-sledding::before{content:""}.fa-sledding::before{content:""}.fa-game-console-handheld::before{content:""}.fa-ship::before{content:""}.fa-clock-six-thirty::before{content:""}.fa-battery-slash::before{content:""}.fa-tugrik-sign::before{content:""}.fa-arrows-down-to-line::before{content:""}.fa-download::before{content:""}.fa-angles-up-down::before{content:""}.fa-shelves::before{content:""}.fa-inventory::before{content:""}.fa-cloud-snow::before{content:""}.fa-face-grin::before{content:""}.fa-grin::before{content:""}.fa-delete-left::before{content:""}.fa-backspace::before{content:""}.fa-oven::before{content:""}.fa-cloud-binary::before{content:""}.fa-eye-dropper::before{content:""}.fa-eye-dropper-empty::before{content:""}.fa-eyedropper::before{content:""}.fa-comment-captions::before{content:""}.fa-comments-question::before{content:""}.fa-scribble::before{content:""}.fa-rotate-exclamation::before{content:""}.fa-file-circle-check::before{content:""}.fa-glass::before{content:""}.fa-loader::before{content:""}.fa-forward::before{content:""}.fa-user-pilot::before{content:""}.fa-mobile::before{content:""}.fa-mobile-android::before{content:""}.fa-mobile-phone::before{content:""}.fa-code-pull-request-closed::before{content:""}.fa-face-meh::before{content:""}.fa-meh::before{content:""}.fa-align-center::before{content:""}.fa-book-skull::before{content:""}.fa-book-dead::before{content:""}.fa-id-card::before{content:""}.fa-drivers-license::before{content:""}.fa-face-dotted::before{content:""}.fa-face-worried::before{content:""}.fa-outdent::before{content:""}.fa-dedent::before{content:""}.fa-court-sport::before{content:""}.fa-heart-circle-exclamation::before{content:""}.fa-house::before{content:""}.fa-home::before{content:""}.fa-home-alt::before{content:""}.fa-home-lg-alt::before{content:""}.fa-vector-circle::before{content:""}.fa-car-circle-bolt::before{content:""}.fa-calendar-week::before{content:""}.fa-flying-disc::before{content:""}.fa-laptop-medical::before{content:""}.fa-square-down-right::before{content:""}.fa-b::before{content:"B"}.fa-seat-airline::before{content:""}.fa-moon-over-sun::before{content:""}.fa-eclipse-alt::before{content:""}.fa-pipe::before{content:"\|"}.fa-file-medical::before{content:""}.fa-potato::before{content:""}.fa-dice-one::before{content:""}.fa-circle-a::before{content:""}.fa-helmet-battle::before{content:""}.fa-butter::before{content:""}.fa-blanket-fire::before{content:""}.fa-kiwi-bird::before{content:""}.fa-castle::before{content:""}.fa-golf-club::before{content:""}.fa-arrow-right-arrow-left::before{content:""}.fa-exchange::before{content:""}.fa-rotate-right::before{content:""}.fa-redo-alt::before{content:""}.fa-rotate-forward::before{content:""}.fa-utensils::before{content:""}.fa-cutlery::before{content:""}.fa-arrow-up-wide-short::before{content:""}.fa-sort-amount-up::before{content:""}.fa-chart-pie-simple-circle-dollar::before{content:""}.fa-balloons::before{content:""}.fa-mill-sign::before{content:""}.fa-bowl-rice::before{content:""}.fa-timeline-arrow::before{content:""}.fa-skull::before{content:""}.fa-game-board-simple::before{content:""}.fa-game-board-alt::before{content:""}.fa-circle-video::before{content:""}.fa-video-circle::before{content:""}.fa-chart-scatter-bubble::before{content:""}.fa-house-turret::before{content:""}.fa-banana::before{content:""}.fa-hand-holding-skull::before{content:""}.fa-people-dress::before{content:""}.fa-loveseat::before{content:""}.fa-couch-small::before{content:""}.fa-tower-broadcast::before{content:""}.fa-broadcast-tower::before{content:""}.fa-truck-pickup::before{content:""}.fa-block-quote::before{content:""}.fa-up-long::before{content:""}.fa-long-arrow-alt-up::before{content:""}.fa-stop::before{content:""}.fa-code-merge::before{content:""}.fa-money-check-dollar-pen::before{content:""}.fa-money-check-edit-alt::before{content:""}.fa-up-from-line::before{content:""}.fa-arrow-alt-from-bottom::before{content:""}.fa-upload::before{content:""}.fa-hurricane::before{content:""}.fa-grid-round-2-plus::before{content:""}.fa-people-pants::before{content:""}.fa-mound::before{content:""}.fa-windsock::before{content:""}.fa-circle-half::before{content:""}.fa-brake-warning::before{content:""}.fa-toilet-portable::before{content:""}.fa-compact-disc::before{content:""}.fa-file-arrow-down::before{content:""}.fa-file-download::before{content:""}.fa-saxophone-fire::before{content:""}.fa-sax-hot::before{content:""}.fa-camera-web-slash::before{content:""}.fa-webcam-slash::before{content:""}.fa-folder-medical::before{content:""}.fa-folder-gear::before{content:""}.fa-folder-cog::before{content:""}.fa-hand-wave::before{content:""}.fa-arrow-up-arrow-down::before{content:""}.fa-sort-up-down::before{content:""}.fa-caravan::before{content:""}.fa-shield-cat::before{content:""}.fa-message-slash::before{content:""}.fa-comment-alt-slash::before{content:""}.fa-bolt::before{content:""}.fa-zap::before{content:""}.fa-trash-can-check::before{content:""}.fa-glass-water::before{content:""}.fa-oil-well::before{content:""}.fa-table-cells-column-unlock::before{content:""}.fa-person-simple::before{content:""}.fa-arrow-turn-left-up::before{content:""}.fa-vault::before{content:""}.fa-mars::before{content:""}.fa-toilet::before{content:""}.fa-plane-circle-xmark::before{content:""}.fa-yen-sign::before{content:""}.fa-cny::before{content:""}.fa-jpy::before{content:""}.fa-rmb::before{content:""}.fa-yen::before{content:""}.fa-gear-code::before{content:""}.fa-notes::before{content:""}.fa-ruble-sign::before{content:""}.fa-rouble::before{content:""}.fa-rub::before{content:""}.fa-ruble::before{content:""}.fa-trash-undo::before{content:""}.fa-trash-arrow-turn-left::before{content:""}.fa-champagne-glass::before{content:""}.fa-glass-champagne::before{content:""}.fa-objects-align-center-horizontal::before{content:""}.fa-sun::before{content:""}.fa-trash-can-slash::before{content:""}.fa-trash-alt-slash::before{content:""}.fa-screen-users::before{content:""}.fa-users-class::before{content:""}.fa-guitar::before{content:""}.fa-square-arrow-left::before{content:""}.fa-arrow-square-left::before{content:""}.fa-square-8::before{content:""}.fa-face-smile-hearts::before{content:""}.fa-brackets-square::before{content:""}.fa-brackets::before{content:""}.fa-laptop-arrow-down::before{content:""}.fa-hockey-stick-puck::before{content:""}.fa-house-tree::before{content:""}.fa-signal-fair::before{content:""}.fa-signal-2::before{content:""}.fa-face-laugh-wink::before{content:""}.fa-laugh-wink::before{content:""}.fa-circle-dollar::before{content:""}.fa-dollar-circle::before{content:""}.fa-usd-circle::before{content:""}.fa-horse-head::before{content:""}.fa-arrows-repeat::before{content:""}.fa-repeat-alt::before{content:""}.fa-bore-hole::before{content:""}.fa-industry::before{content:""}.fa-image-polaroid::before{content:""}.fa-wave-triangle::before{content:""}.fa-turn-left-down::before{content:""}.fa-person-running-fast::before{content:""}.fa-circle-down::before{content:""}.fa-arrow-alt-circle-down::before{content:""}.fa-grill::before{content:""}.fa-arrows-turn-to-dots::before{content:""}.fa-chart-mixed::before{content:""}.fa-analytics::before{content:""}.fa-florin-sign::before{content:""}.fa-arrow-down-short-wide::before{content:""}.fa-sort-amount-desc::before{content:""}.fa-sort-amount-down-alt::before{content:""}.fa-less-than::before{content:"\<"}.fa-display-code::before{content:""}.fa-desktop-code::before{content:""}.fa-face-drooling::before{content:""}.fa-oil-temperature::before{content:""}.fa-oil-temp::before{content:""}.fa-square-question::before{content:""}.fa-question-square::before{content:""}.fa-air-conditioner::before{content:""}.fa-angle-down::before{content:""}.fa-mountains::before{content:""}.fa-omega::before{content:""}.fa-car-tunnel::before{content:""}.fa-person-dolly-empty::before{content:""}.fa-pan-food::before{content:""}.fa-head-side-cough::before{content:""}.fa-grip-lines::before{content:""}.fa-thumbs-down::before{content:""}.fa-user-lock::before{content:""}.fa-arrow-right-long::before{content:""}.fa-long-arrow-right::before{content:""}.fa-tickets-airline::before{content:""}.fa-tickets-perforated-plane::before{content:""}.fa-tickets-plane::before{content:""}.fa-tent-double-peak::before{content:""}.fa-anchor-circle-xmark::before{content:""}.fa-ellipsis::before{content:""}.fa-ellipsis-h::before{content:""}.fa-nfc-slash::before{content:""}.fa-chess-pawn::before{content:""}.fa-kit-medical::before{content:""}.fa-first-aid::before{content:""}.fa-grid-2-plus::before{content:""}.fa-bells::before{content:""}.fa-person-through-window::before{content:""}.fa-toolbox::before{content:""}.fa-globe-wifi::before{content:""}.fa-envelope-dot::before{content:""}.fa-envelope-badge::before{content:""}.fa-magnifying-glass-waveform::before{content:""}.fa-hands-holding-circle::before{content:""}.fa-bug::before{content:""}.fa-bowl-chopsticks::before{content:""}.fa-credit-card::before{content:""}.fa-credit-card-alt::before{content:""}.fa-circle-s::before{content:""}.fa-box-ballot::before{content:""}.fa-car::before{content:""}.fa-automobile::before{content:""}.fa-hand-holding-hand::before{content:""}.fa-user-tie-hair::before{content:""}.fa-podium-star::before{content:""}.fa-user-hair-mullet::before{content:""}.fa-business-front::before{content:""}.fa-party-back::before{content:""}.fa-trian-balbot::before{content:""}.fa-microphone-stand::before{content:""}.fa-book-open-reader::before{content:""}.fa-book-reader::before{content:""}.fa-family-dress::before{content:""}.fa-circle-x::before{content:""}.fa-cabin::before{content:""}.fa-mountain-sun::before{content:""}.fa-chart-simple-horizontal::before{content:""}.fa-arrows-left-right-to-line::before{content:""}.fa-hand-back-point-left::before{content:""}.fa-message-dots::before{content:""}.fa-comment-alt-dots::before{content:""}.fa-messaging::before{content:""}.fa-file-heart::before{content:""}.fa-beer-mug::before{content:""}.fa-beer-foam::before{content:""}.fa-dice-d20::before{content:""}.fa-drone::before{content:""}.fa-truck-droplet::before{content:""}.fa-file-circle-xmark::before{content:""}.fa-temperature-arrow-up::before{content:""}.fa-temperature-up::before{content:""}.fa-medal::before{content:""}.fa-person-fairy::before{content:""}.fa-bed::before{content:""}.fa-book-copy::before{content:""}.fa-square-h::before{content:""}.fa-h-square::before{content:""}.fa-square-c::before{content:""}.fa-clock-two::before{content:""}.fa-square-ellipsis-vertical::before{content:""}.fa-calendar-users::before{content:""}.fa-podcast::before{content:""}.fa-bee::before{content:""}.fa-temperature-full::before{content:""}.fa-temperature-4::before{content:""}.fa-thermometer-4::before{content:""}.fa-thermometer-full::before{content:""}.fa-bell::before{content:""}.fa-candy-bar::before{content:""}.fa-chocolate-bar::before{content:""}.fa-xmark-large::before{content:""}.fa-pinata::before{content:""}.fa-file-ppt::before{content:""}.fa-arrows-from-line::before{content:""}.fa-superscript::before{content:""}.fa-bowl-spoon::before{content:""}.fa-hexagon-check::before{content:""}.fa-plug-circle-xmark::before{content:""}.fa-star-of-life::before{content:""}.fa-phone-slash::before{content:""}.fa-traffic-light-stop::before{content:""}.fa-paint-roller::before{content:""}.fa-accent-grave::before{content:"\`"}.fa-handshake-angle::before{content:""}.fa-hands-helping::before{content:""}.fa-circle-0::before{content:""}.fa-dial-med-low::before{content:""}.fa-location-dot::before{content:""}.fa-map-marker-alt::before{content:""}.fa-crab::before{content:""}.fa-box-open-full::before{content:""}.fa-box-full::before{content:""}.fa-file::before{content:""}.fa-greater-than::before{content:"\>"}.fa-quotes::before{content:""}.fa-pretzel::before{content:""}.fa-t-rex::before{content:""}.fa-person-swimming::before{content:""}.fa-swimmer::before{content:""}.fa-arrow-down::before{content:""}.fa-user-robot-xmarks::before{content:""}.fa-message-quote::before{content:""}.fa-comment-alt-quote::before{content:""}.fa-candy-corn::before{content:""}.fa-folder-magnifying-glass::before{content:""}.fa-folder-search::before{content:""}.fa-notebook::before{content:""}.fa-circle-wifi::before{content:""}.fa-droplet::before{content:""}.fa-tint::before{content:""}.fa-bullseye-pointer::before{content:""}.fa-eraser::before{content:""}.fa-hexagon-image::before{content:""}.fa-earth-americas::before{content:""}.fa-earth::before{content:""}.fa-earth-america::before{content:""}.fa-globe-americas::before{content:""}.fa-file-svg::before{content:""}.fa-crate-apple::before{content:""}.fa-apple-crate::before{content:""}.fa-person-burst::before{content:""}.fa-game-board::before{content:""}.fa-hat-chef::before{content:""}.fa-hand-back-point-right::before{content:""}.fa-dove::before{content:""}.fa-snowflake-droplets::before{content:""}.fa-battery-empty::before{content:""}.fa-battery-0::before{content:""}.fa-grid-4::before{content:""}.fa-socks::before{content:""}.fa-face-sunglasses::before{content:""}.fa-inbox::before{content:""}.fa-square-0::before{content:""}.fa-section::before{content:""}.fa-square-this-way-up::before{content:""}.fa-box-up::before{content:""}.fa-gauge-high::before{content:""}.fa-tachometer-alt::before{content:""}.fa-tachometer-alt-fast::before{content:""}.fa-square-ampersand::before{content:""}.fa-envelope-open-text::before{content:""}.fa-lamp-desk::before{content:""}.fa-hospital::before{content:""}.fa-hospital-alt::before{content:""}.fa-hospital-wide::before{content:""}.fa-poll-people::before{content:""}.fa-whiskey-glass-ice::before{content:""}.fa-glass-whiskey-rocks::before{content:""}.fa-wine-bottle::before{content:""}.fa-chess-rook::before{content:""}.fa-user-bounty-hunter::before{content:""}.fa-bars-staggered::before{content:""}.fa-reorder::before{content:""}.fa-stream::before{content:""}.fa-diagram-sankey::before{content:""}.fa-cloud-hail-mixed::before{content:""}.fa-circle-up-left::before{content:""}.fa-dharmachakra::before{content:""}.fa-objects-align-left::before{content:""}.fa-oil-can-drip::before{content:""}.fa-face-smiling-hands::before{content:""}.fa-broccoli::before{content:""}.fa-route-interstate::before{content:""}.fa-ear-muffs::before{content:""}.fa-hotdog::before{content:""}.fa-transporter-empty::before{content:""}.fa-person-walking-with-cane::before{content:""}.fa-blind::before{content:""}.fa-angle-90::before{content:""}.fa-rectangle-terminal::before{content:""}.fa-kite::before{content:""}.fa-drum::before{content:""}.fa-scrubber::before{content:""}.fa-ice-cream::before{content:""}.fa-heart-circle-bolt::before{content:""}.fa-fish-bones::before{content:""}.fa-deer-rudolph::before{content:""}.fa-fax::before{content:""}.fa-paragraph::before{content:""}.fa-head-side-heart::before{content:""}.fa-square-e::before{content:""}.fa-meter-fire::before{content:""}.fa-cloud-hail::before{content:""}.fa-check-to-slot::before{content:""}.fa-vote-yea::before{content:""}.fa-money-from-bracket::before{content:""}.fa-star-half::before{content:""}.fa-car-bus::before{content:""}.fa-speaker::before{content:""}.fa-timer::before{content:""}.fa-boxes-stacked::before{content:""}.fa-boxes::before{content:""}.fa-boxes-alt::before{content:""}.fa-landmark-magnifying-glass::before{content:""}.fa-grill-hot::before{content:""}.fa-ballot-check::before{content:""}.fa-link::before{content:""}.fa-chain::before{content:""}.fa-ear-listen::before{content:""}.fa-assistive-listening-systems::before{content:""}.fa-file-minus::before{content:""}.fa-tree-city::before{content:""}.fa-play::before{content:""}.fa-font::before{content:""}.fa-cup-togo::before{content:""}.fa-coffee-togo::before{content:""}.fa-square-down-left::before{content:""}.fa-burger-lettuce::before{content:""}.fa-table-cells-row-lock::before{content:""}.fa-rupiah-sign::before{content:""}.fa-magnifying-glass::before{content:""}.fa-search::before{content:""}.fa-table-tennis-paddle-ball::before{content:""}.fa-ping-pong-paddle-ball::before{content:""}.fa-table-tennis::before{content:""}.fa-person-dots-from-line::before{content:""}.fa-diagnoses::before{content:""}.fa-chevrons-down::before{content:""}.fa-chevron-double-down::before{content:""}.fa-trash-can-arrow-up::before{content:""}.fa-trash-restore-alt::before{content:""}.fa-signal-good::before{content:""}.fa-signal-3::before{content:""}.fa-location-question::before{content:""}.fa-map-marker-question::before{content:""}.fa-floppy-disk-circle-xmark::before{content:""}.fa-floppy-disk-times::before{content:""}.fa-save-circle-xmark::before{content:""}.fa-save-times::before{content:""}.fa-naira-sign::before{content:""}.fa-peach::before{content:""}.fa-taxi-bus::before{content:""}.fa-bracket-curly::before{content:"\{"}.fa-bracket-curly-left::before{content:"\{"}.fa-lobster::before{content:""}.fa-cart-flatbed-empty::before{content:""}.fa-dolly-flatbed-empty::before{content:""}.fa-colon::before{content:"\:"}.fa-cart-arrow-down::before{content:""}.fa-wand::before{content:""}.fa-walkie-talkie::before{content:""}.fa-file-pen::before{content:""}.fa-file-edit::before{content:""}.fa-receipt::before{content:""}.fa-table-picnic::before{content:""}.fa-square-pen::before{content:""}.fa-pen-square::before{content:""}.fa-pencil-square::before{content:""}.fa-circle-microphone-lines::before{content:""}.fa-microphone-circle-alt::before{content:""}.fa-display-slash::before{content:""}.fa-desktop-slash::before{content:""}.fa-suitcase-rolling::before{content:""}.fa-person-circle-exclamation::before{content:""}.fa-transporter-2::before{content:""}.fa-user-hoodie::before{content:""}.fa-hands-holding-diamond::before{content:""}.fa-hand-receiving::before{content:""}.fa-money-bill-simple-wave::before{content:""}.fa-chevron-down::before{content:""}.fa-battery-full::before{content:""}.fa-battery::before{content:""}.fa-battery-5::before{content:""}.fa-bell-plus::before{content:""}.fa-book-arrow-right::before{content:""}.fa-hospitals::before{content:""}.fa-club::before{content:""}.fa-skull-crossbones::before{content:""}.fa-droplet-degree::before{content:""}.fa-dewpoint::before{content:""}.fa-code-compare::before{content:""}.fa-list-ul::before{content:""}.fa-list-dots::before{content:""}.fa-hand-holding-magic::before{content:""}.fa-watermelon-slice::before{content:""}.fa-circle-ellipsis::before{content:""}.fa-school-lock::before{content:""}.fa-tower-cell::before{content:""}.fa-sd-cards::before{content:""}.fa-jug-bottle::before{content:""}.fa-down-long::before{content:""}.fa-long-arrow-alt-down::before{content:""}.fa-envelopes::before{content:""}.fa-phone-office::before{content:""}.fa-ranking-star::before{content:""}.fa-chess-king::before{content:""}.fa-nfc-pen::before{content:""}.fa-person-harassing::before{content:""}.fa-magnifying-glass-play::before{content:""}.fa-hat-winter::before{content:""}.fa-brazilian-real-sign::before{content:""}.fa-landmark-dome::before{content:""}.fa-landmark-alt::before{content:""}.fa-bone-break::before{content:""}.fa-arrow-up::before{content:""}.fa-down-from-dotted-line::before{content:""}.fa-tv::before{content:""}.fa-television::before{content:""}.fa-tv-alt::before{content:""}.fa-border-left::before{content:""}.fa-circle-divide::before{content:""}.fa-shrimp::before{content:""}.fa-list-check::before{content:""}.fa-tasks::before{content:""}.fa-diagram-subtask::before{content:""}.fa-jug-detergent::before{content:""}.fa-circle-user::before{content:""}.fa-user-circle::before{content:""}.fa-square-y::before{content:""}.fa-user-doctor-hair::before{content:""}.fa-planet-ringed::before{content:""}.fa-mushroom::before{content:""}.fa-user-shield::before{content:""}.fa-megaphone::before{content:""}.fa-wreath-laurel::before{content:""}.fa-circle-exclamation-check::before{content:""}.fa-wind::before{content:""}.fa-box-dollar::before{content:""}.fa-box-usd::before{content:""}.fa-car-burst::before{content:""}.fa-car-crash::before{content:""}.fa-y::before{content:"Y"}.fa-user-headset::before{content:""}.fa-arrows-retweet::before{content:""}.fa-retweet-alt::before{content:""}.fa-person-snowboarding::before{content:""}.fa-snowboarding::before{content:""}.fa-square-chevron-right::before{content:""}.fa-chevron-square-right::before{content:""}.fa-lacrosse-stick-ball::before{content:""}.fa-truck-fast::before{content:""}.fa-shipping-fast::before{content:""}.fa-user-magnifying-glass::before{content:""}.fa-star-sharp::before{content:""}.fa-comment-heart::before{content:""}.fa-circle-1::before{content:""}.fa-circle-star::before{content:""}.fa-star-circle::before{content:""}.fa-fish::before{content:""}.fa-cloud-fog::before{content:""}.fa-fog::before{content:""}.fa-waffle::before{content:""}.fa-music-note::before{content:""}.fa-music-alt::before{content:""}.fa-hexagon-exclamation::before{content:""}.fa-cart-shopping-fast::before{content:""}.fa-object-union::before{content:""}.fa-user-graduate::before{content:""}.fa-starfighter::before{content:""}.fa-circle-half-stroke::before{content:""}.fa-adjust::before{content:""}.fa-arrow-right-long-to-line::before{content:""}.fa-square-arrow-down::before{content:""}.fa-arrow-square-down::before{content:""}.fa-diamond-half-stroke::before{content:""}.fa-clapperboard::before{content:""}.fa-square-chevron-left::before{content:""}.fa-chevron-square-left::before{content:""}.fa-phone-intercom::before{content:""}.fa-link-horizontal::before{content:""}.fa-chain-horizontal::before{content:""}.fa-mango::before{content:""}.fa-music-note-slash::before{content:""}.fa-music-alt-slash::before{content:""}.fa-circle-radiation::before{content:""}.fa-radiation-alt::before{content:""}.fa-face-tongue-sweat::before{content:""}.fa-globe-stand::before{content:""}.fa-baseball::before{content:""}.fa-baseball-ball::before{content:""}.fa-circle-p::before{content:""}.fa-award-simple::before{content:""}.fa-jet-fighter-up::before{content:""}.fa-diagram-project::before{content:""}.fa-project-diagram::before{content:""}.fa-pedestal::before{content:""}.fa-chart-pyramid::before{content:""}.fa-sidebar::before{content:""}.fa-snowman-head::before{content:""}.fa-frosty-head::before{content:""}.fa-copy::before{content:""}.fa-burger-glass::before{content:""}.fa-volume-xmark::before{content:""}.fa-volume-mute::before{content:""}.fa-volume-times::before{content:""}.fa-hand-sparkles::before{content:""}.fa-bars-filter::before{content:""}.fa-paintbrush-pencil::before{content:""}.fa-party-bell::before{content:""}.fa-user-vneck-hair::before{content:""}.fa-jack-o-lantern::before{content:""}.fa-grip::before{content:""}.fa-grip-horizontal::before{content:""}.fa-share-from-square::before{content:""}.fa-share-square::before{content:""}.fa-keynote::before{content:""}.fa-child-combatant::before{content:""}.fa-child-rifle::before{content:""}.fa-gun::before{content:""}.fa-square-phone::before{content:""}.fa-phone-square::before{content:""}.fa-hat-beach::before{content:""}.fa-plus::before{content:"\+"}.fa-add::before{content:"\+"}.fa-expand::before{content:""}.fa-computer::before{content:""}.fa-fort::before{content:""}.fa-cloud-check::before{content:""}.fa-xmark::before{content:""}.fa-close::before{content:""}.fa-multiply::before{content:""}.fa-remove::before{content:""}.fa-times::before{content:""}.fa-face-smirking::before{content:""}.fa-arrows-up-down-left-right::before{content:""}.fa-arrows::before{content:""}.fa-chalkboard-user::before{content:""}.fa-chalkboard-teacher::before{content:""}.fa-rhombus::before{content:""}.fa-claw-marks::before{content:""}.fa-peso-sign::before{content:""}.fa-face-smile-tongue::before{content:""}.fa-cart-circle-xmark::before{content:""}.fa-building-shield::before{content:""}.fa-circle-phone-flip::before{content:""}.fa-phone-circle-alt::before{content:""}.fa-baby::before{content:""}.fa-users-line::before{content:""}.fa-quote-left::before{content:""}.fa-quote-left-alt::before{content:""}.fa-tractor::before{content:""}.fa-down-from-bracket::before{content:""}.fa-key-skeleton::before{content:""}.fa-trash-arrow-up::before{content:""}.fa-trash-restore::before{content:""}.fa-arrow-down-up-lock::before{content:""}.fa-arrow-down-to-bracket::before{content:""}.fa-lines-leaning::before{content:""}.fa-square-q::before{content:""}.fa-ruler-combined::before{content:""}.fa-symbols::before{content:""}.fa-icons-alt::before{content:""}.fa-copyright::before{content:""}.fa-flask-gear::before{content:""}.fa-highlighter-line::before{content:""}.fa-bracket-square::before{content:"\["}.fa-bracket::before{content:"\["}.fa-bracket-left::before{content:"\["}.fa-island-tropical::before{content:""}.fa-island-tree-palm::before{content:""}.fa-arrow-right-from-line::before{content:""}.fa-arrow-from-left::before{content:""}.fa-h2::before{content:""}.fa-equals::before{content:"\="}.fa-cake-slice::before{content:""}.fa-shortcake::before{content:""}.fa-building-magnifying-glass::before{content:""}.fa-peanut::before{content:""}.fa-wrench-simple::before{content:""}.fa-blender::before{content:""}.fa-teeth::before{content:""}.fa-tally-2::before{content:""}.fa-shekel-sign::before{content:""}.fa-ils::before{content:""}.fa-shekel::before{content:""}.fa-sheqel::before{content:""}.fa-sheqel-sign::before{content:""}.fa-cars::before{content:""}.fa-axe-battle::before{content:""}.fa-user-hair-long::before{content:""}.fa-map::before{content:""}.fa-arrow-left-from-arc::before{content:""}.fa-file-circle-info::before{content:""}.fa-face-disappointed::before{content:""}.fa-lasso-sparkles::before{content:""}.fa-clock-eleven::before{content:""}.fa-rocket::before{content:""}.fa-siren-on::before{content:""}.fa-clock-ten::before{content:""}.fa-candle-holder::before{content:""}.fa-video-arrow-down-left::before{content:""}.fa-photo-film::before{content:""}.fa-photo-video::before{content:""}.fa-floppy-disk-circle-arrow-right::before{content:""}.fa-save-circle-arrow-right::before{content:""}.fa-folder-minus::before{content:""}.fa-planet-moon::before{content:""}.fa-face-eyes-xmarks::before{content:""}.fa-chart-scatter::before{content:""}.fa-circle-gf::before{content:""}.fa-display-arrow-down::before{content:""}.fa-store::before{content:""}.fa-arrow-trend-up::before{content:""}.fa-plug-circle-minus::before{content:""}.fa-olive-branch::before{content:""}.fa-angle::before{content:""}.fa-vacuum-robot::before{content:""}.fa-sign-hanging::before{content:""}.fa-sign::before{content:""}.fa-square-divide::before{content:""}.fa-folder-check::before{content:""}.fa-signal-stream-slash::before{content:""}.fa-bezier-curve::before{content:""}.fa-eye-dropper-half::before{content:""}.fa-store-lock::before{content:""}.fa-bell-slash::before{content:""}.fa-cloud-bolt-sun::before{content:""}.fa-thunderstorm-sun::before{content:""}.fa-camera-slash::before{content:""}.fa-comment-quote::before{content:""}.fa-tablet::before{content:""}.fa-tablet-android::before{content:""}.fa-school-flag::before{content:""}.fa-message-code::before{content:""}.fa-glass-half::before{content:""}.fa-glass-half-empty::before{content:""}.fa-glass-half-full::before{content:""}.fa-fill::before{content:""}.fa-message-minus::before{content:""}.fa-comment-alt-minus::before{content:""}.fa-angle-up::before{content:""}.fa-dinosaur::before{content:""}.fa-drumstick-bite::before{content:""}.fa-link-horizontal-slash::before{content:""}.fa-chain-horizontal-slash::before{content:""}.fa-holly-berry::before{content:""}.fa-nose::before{content:""}.fa-arrow-left-to-arc::before{content:""}.fa-chevron-left::before{content:""}.fa-bacteria::before{content:""}.fa-clouds::before{content:""}.fa-money-bill-simple::before{content:""}.fa-hand-lizard::before{content:""}.fa-table-pivot::before{content:""}.fa-filter-slash::before{content:""}.fa-trash-can-undo::before{content:""}.fa-trash-can-arrow-turn-left::before{content:""}.fa-trash-undo-alt::before{content:""}.fa-notdef::before{content:""}.fa-disease::before{content:""}.fa-person-to-door::before{content:""}.fa-turntable::before{content:""}.fa-briefcase-medical::before{content:""}.fa-genderless::before{content:""}.fa-chevron-right::before{content:""}.fa-signal-weak::before{content:""}.fa-signal-1::before{content:""}.fa-clock-five::before{content:""}.fa-retweet::before{content:""}.fa-car-rear::before{content:""}.fa-car-alt::before{content:""}.fa-pump-soap::before{content:""}.fa-computer-classic::before{content:""}.fa-frame::before{content:""}.fa-video-slash::before{content:""}.fa-battery-quarter::before{content:""}.fa-battery-2::before{content:""}.fa-ellipsis-stroke::before{content:""}.fa-ellipsis-h-alt::before{content:""}.fa-radio::before{content:""}.fa-baby-carriage::before{content:""}.fa-carriage-baby::before{content:""}.fa-face-expressionless::before{content:""}.fa-down-to-dotted-line::before{content:""}.fa-cloud-music::before{content:""}.fa-traffic-light::before{content:""}.fa-cloud-minus::before{content:""}.fa-thermometer::before{content:""}.fa-shield-minus::before{content:""}.fa-vr-cardboard::before{content:""}.fa-car-tilt::before{content:""}.fa-gauge-circle-minus::before{content:""}.fa-brightness-low::before{content:""}.fa-hand-middle-finger::before{content:""}.fa-percent::before{content:"\%"}.fa-percentage::before{content:"\%"}.fa-truck-moving::before{content:""}.fa-glass-water-droplet::before{content:""}.fa-conveyor-belt::before{content:""}.fa-location-check::before{content:""}.fa-map-marker-check::before{content:""}.fa-coin-vertical::before{content:""}.fa-display::before{content:""}.fa-person-sign::before{content:""}.fa-face-smile::before{content:""}.fa-smile::before{content:""}.fa-phone-hangup::before{content:""}.fa-signature-slash::before{content:""}.fa-thumbtack::before{content:""}.fa-thumb-tack::before{content:""}.fa-wheat-slash::before{content:""}.fa-trophy::before{content:""}.fa-clouds-sun::before{content:""}.fa-person-praying::before{content:""}.fa-pray::before{content:""}.fa-hammer::before{content:""}.fa-face-vomit::before{content:""}.fa-speakers::before{content:""}.fa-tty-answer::before{content:""}.fa-teletype-answer::before{content:""}.fa-mug-tea-saucer::before{content:""}.fa-diagram-lean-canvas::before{content:""}.fa-alt::before{content:""}.fa-dial::before{content:""}.fa-dial-med-high::before{content:""}.fa-hand-peace::before{content:""}.fa-circle-trash::before{content:""}.fa-trash-circle::before{content:""}.fa-rotate::before{content:""}.fa-sync-alt::before{content:""}.fa-circle-quarters::before{content:""}.fa-spinner::before{content:""}.fa-tower-control::before{content:""}.fa-arrow-up-triangle-square::before{content:""}.fa-sort-shapes-up::before{content:""}.fa-whale::before{content:""}.fa-robot::before{content:""}.fa-peace::before{content:""}.fa-party-horn::before{content:""}.fa-gears::before{content:""}.fa-cogs::before{content:""}.fa-sun-bright::before{content:""}.fa-sun-alt::before{content:""}.fa-warehouse::before{content:""}.fa-conveyor-belt-arm::before{content:""}.fa-lock-keyhole-open::before{content:""}.fa-lock-open-alt::before{content:""}.fa-square-fragile::before{content:""}.fa-box-fragile::before{content:""}.fa-square-wine-glass-crack::before{content:""}.fa-arrow-up-right-dots::before{content:""}.fa-square-n::before{content:""}.fa-splotch::before{content:""}.fa-face-grin-hearts::before{content:""}.fa-grin-hearts::before{content:""}.fa-meter::before{content:""}.fa-mandolin::before{content:""}.fa-dice-four::before{content:""}.fa-sim-card::before{content:""}.fa-transgender::before{content:""}.fa-transgender-alt::before{content:""}.fa-mercury::before{content:""}.fa-up-from-bracket::before{content:""}.fa-knife-kitchen::before{content:""}.fa-border-right::before{content:""}.fa-arrow-turn-down::before{content:""}.fa-level-down::before{content:""}.fa-spade::before{content:""}.fa-card-spade::before{content:""}.fa-line-columns::before{content:""}.fa-ant::before{content:""}.fa-arrow-right-to-line::before{content:""}.fa-arrow-to-right::before{content:""}.fa-person-falling-burst::before{content:""}.fa-flag-pennant::before{content:""}.fa-pennant::before{content:""}.fa-conveyor-belt-empty::before{content:""}.fa-user-group-simple::before{content:""}.fa-award::before{content:""}.fa-ticket-simple::before{content:""}.fa-ticket-alt::before{content:""}.fa-building::before{content:""}.fa-angles-left::before{content:""}.fa-angle-double-left::before{content:""}.fa-camcorder::before{content:""}.fa-video-handheld::before{content:""}.fa-pancakes::before{content:""}.fa-album-circle-user::before{content:""}.fa-subtitles-slash::before{content:""}.fa-qrcode::before{content:""}.fa-dice-d10::before{content:""}.fa-fireplace::before{content:""}.fa-browser::before{content:""}.fa-pen-paintbrush::before{content:""}.fa-pencil-paintbrush::before{content:""}.fa-fish-cooked::before{content:""}.fa-chair-office::before{content:""}.fa-magnifying-glass-music::before{content:""}.fa-nesting-dolls::before{content:""}.fa-clock-rotate-left::before{content:""}.fa-history::before{content:""}.fa-trumpet::before{content:""}.fa-face-grin-beam-sweat::before{content:""}.fa-grin-beam-sweat::before{content:""}.fa-fire-smoke::before{content:""}.fa-phone-missed::before{content:""}.fa-file-export::before{content:""}.fa-arrow-right-from-file::before{content:""}.fa-shield::before{content:""}.fa-shield-blank::before{content:""}.fa-arrow-up-short-wide::before{content:""}.fa-sort-amount-up-alt::before{content:""}.fa-arrows-repeat-1::before{content:""}.fa-repeat-1-alt::before{content:""}.fa-gun-slash::before{content:""}.fa-avocado::before{content:""}.fa-binary::before{content:""}.fa-glasses-round::before{content:""}.fa-glasses-alt::before{content:""}.fa-phone-plus::before{content:""}.fa-ditto::before{content:"\""}.fa-person-seat::before{content:""}.fa-house-medical::before{content:""}.fa-golf-ball-tee::before{content:""}.fa-golf-ball::before{content:""}.fa-circle-chevron-left::before{content:""}.fa-chevron-circle-left::before{content:""}.fa-house-chimney-window::before{content:""}.fa-scythe::before{content:""}.fa-pen-nib::before{content:""}.fa-ban-parking::before{content:""}.fa-parking-circle-slash::before{content:""}.fa-tent-arrow-turn-left::before{content:""}.fa-face-diagonal-mouth::before{content:""}.fa-diagram-cells::before{content:""}.fa-cricket-bat-ball::before{content:""}.fa-cricket::before{content:""}.fa-tents::before{content:""}.fa-wand-magic::before{content:""}.fa-magic::before{content:""}.fa-dog::before{content:""}.fa-pen-line::before{content:""}.fa-atom-simple::before{content:""}.fa-atom-alt::before{content:""}.fa-ampersand::before{content:"\&"}.fa-carrot::before{content:""}.fa-arrow-up-from-line::before{content:""}.fa-arrow-from-bottom::before{content:""}.fa-moon::before{content:""}.fa-pen-slash::before{content:""}.fa-wine-glass-empty::before{content:""}.fa-wine-glass-alt::before{content:""}.fa-square-star::before{content:""}.fa-cheese::before{content:""}.fa-send-backward::before{content:""}.fa-yin-yang::before{content:""}.fa-music::before{content:""}.fa-compass-slash::before{content:""}.fa-clock-one::before{content:""}.fa-file-music::before{content:""}.fa-code-commit::before{content:""}.fa-temperature-low::before{content:""}.fa-person-biking::before{content:""}.fa-biking::before{content:""}.fa-display-chart-up-circle-currency::before{content:""}.fa-skeleton::before{content:""}.fa-circle-g::before{content:""}.fa-circle-arrow-up-left::before{content:""}.fa-coin-blank::before{content:""}.fa-broom::before{content:""}.fa-vacuum::before{content:""}.fa-shield-heart::before{content:""}.fa-card-heart::before{content:""}.fa-lightbulb-cfl-on::before{content:""}.fa-melon::before{content:""}.fa-gopuram::before{content:""}.fa-earth-oceania::before{content:""}.fa-globe-oceania::before{content:""}.fa-container-storage::before{content:""}.fa-face-pouting::before{content:""}.fa-square-xmark::before{content:""}.fa-times-square::before{content:""}.fa-xmark-square::before{content:""}.fa-face-explode::before{content:""}.fa-exploding-head::before{content:""}.fa-hashtag::before{content:"\#"}.fa-up-right-and-down-left-from-center::before{content:""}.fa-expand-alt::before{content:""}.fa-oil-can::before{content:""}.fa-t::before{content:"T"}.fa-transformer-bolt::before{content:""}.fa-hippo::before{content:""}.fa-chart-column::before{content:""}.fa-cassette-vhs::before{content:""}.fa-vhs::before{content:""}.fa-infinity::before{content:""}.fa-vial-circle-check::before{content:""}.fa-chimney::before{content:""}.fa-object-intersect::before{content:""}.fa-person-arrow-down-to-line::before{content:""}.fa-voicemail::before{content:""}.fa-block-brick::before{content:""}.fa-wall-brick::before{content:""}.fa-fan::before{content:""}.fa-bags-shopping::before{content:""}.fa-paragraph-left::before{content:""}.fa-paragraph-rtl::before{content:""}.fa-person-walking-luggage::before{content:""}.fa-caravan-simple::before{content:""}.fa-caravan-alt::before{content:""}.fa-turtle::before{content:""}.fa-pencil-mechanical::before{content:""}.fa-up-down::before{content:""}.fa-arrows-alt-v::before{content:""}.fa-cloud-moon-rain::before{content:""}.fa-booth-curtain::before{content:""}.fa-calendar::before{content:""}.fa-box-heart::before{content:""}.fa-trailer::before{content:""}.fa-user-doctor-message::before{content:""}.fa-user-md-chat::before{content:""}.fa-bahai::before{content:""}.fa-haykal::before{content:""}.fa-lighthouse::before{content:""}.fa-amp-guitar::before{content:""}.fa-sd-card::before{content:""}.fa-volume-slash::before{content:""}.fa-border-bottom::before{content:""}.fa-wifi-weak::before{content:""}.fa-wifi-1::before{content:""}.fa-dragon::before{content:""}.fa-shoe-prints::before{content:""}.fa-circle-plus::before{content:""}.fa-plus-circle::before{content:""}.fa-face-grin-tongue-wink::before{content:""}.fa-grin-tongue-wink::before{content:""}.fa-hand-holding::before{content:""}.fa-plug-circle-exclamation::before{content:""}.fa-link-slash::before{content:""}.fa-chain-broken::before{content:""}.fa-chain-slash::before{content:""}.fa-unlink::before{content:""}.fa-clone::before{content:""}.fa-person-walking-arrow-loop-left::before{content:""}.fa-arrow-up-z-a::before{content:""}.fa-sort-alpha-up-alt::before{content:""}.fa-fire-flame-curved::before{content:""}.fa-fire-alt::before{content:""}.fa-tornado::before{content:""}.fa-file-circle-plus::before{content:""}.fa-delete-right::before{content:""}.fa-book-quran::before{content:""}.fa-quran::before{content:""}.fa-circle-quarter::before{content:""}.fa-anchor::before{content:""}.fa-border-all::before{content:""}.fa-function::before{content:""}.fa-face-angry::before{content:""}.fa-angry::before{content:""}.fa-people-simple::before{content:""}.fa-cookie-bite::before{content:""}.fa-arrow-trend-down::before{content:""}.fa-rss::before{content:""}.fa-feed::before{content:""}.fa-face-monocle::before{content:""}.fa-draw-polygon::before{content:""}.fa-scale-balanced::before{content:""}.fa-balance-scale::before{content:""}.fa-calendar-lines::before{content:""}.fa-calendar-note::before{content:""}.fa-arrow-down-big-small::before{content:""}.fa-sort-size-down::before{content:""}.fa-gauge-simple-high::before{content:""}.fa-tachometer::before{content:""}.fa-tachometer-fast::before{content:""}.fa-do-not-enter::before{content:""}.fa-shower::before{content:""}.fa-dice-d8::before{content:""}.fa-desktop::before{content:""}.fa-desktop-alt::before{content:""}.fa-m::before{content:"M"}.fa-spinner-scale::before{content:""}.fa-grip-dots-vertical::before{content:""}.fa-face-viewfinder::before{content:""}.fa-soft-serve::before{content:""}.fa-creemee::before{content:""}.fa-h5::before{content:""}.fa-hand-back-point-down::before{content:""}.fa-table-list::before{content:""}.fa-th-list::before{content:""}.fa-basket-shopping-minus::before{content:""}.fa-comment-sms::before{content:""}.fa-sms::before{content:""}.fa-rectangle::before{content:""}.fa-rectangle-landscape::before{content:""}.fa-clipboard-list-check::before{content:""}.fa-turkey::before{content:""}.fa-book::before{content:""}.fa-user-plus::before{content:""}.fa-ice-skate::before{content:""}.fa-check::before{content:""}.fa-battery-three-quarters::before{content:""}.fa-battery-4::before{content:""}.fa-tomato::before{content:""}.fa-sword-laser::before{content:""}.fa-house-circle-check::before{content:""}.fa-buildings::before{content:""}.fa-angle-left::before{content:""}.fa-cart-flatbed-boxes::before{content:""}.fa-dolly-flatbed-alt::before{content:""}.fa-diagram-successor::before{content:""}.fa-truck-arrow-right::before{content:""}.fa-square-w::before{content:""}.fa-arrows-split-up-and-left::before{content:""}.fa-lamp::before{content:""}.fa-airplay::before{content:""}.fa-hand-fist::before{content:""}.fa-fist-raised::before{content:""}.fa-shield-quartered::before{content:""}.fa-slash-forward::before{content:"\/"}.fa-location-pen::before{content:""}.fa-map-marker-edit::before{content:""}.fa-cloud-moon::before{content:""}.fa-pot-food::before{content:""}.fa-briefcase::before{content:""}.fa-person-falling::before{content:""}.fa-image-portrait::before{content:""}.fa-portrait::before{content:""}.fa-user-tag::before{content:""}.fa-rug::before{content:""}.fa-print-slash::before{content:""}.fa-earth-europe::before{content:""}.fa-globe-europe::before{content:""}.fa-cart-flatbed-suitcase::before{content:""}.fa-luggage-cart::before{content:""}.fa-hand-back-point-ribbon::before{content:""}.fa-rectangle-xmark::before{content:""}.fa-rectangle-times::before{content:""}.fa-times-rectangle::before{content:""}.fa-window-close::before{content:""}.fa-tire-rugged::before{content:""}.fa-lightbulb-dollar::before{content:""}.fa-cowbell::before{content:""}.fa-baht-sign::before{content:""}.fa-corner::before{content:""}.fa-chevrons-right::before{content:""}.fa-chevron-double-right::before{content:""}.fa-book-open::before{content:""}.fa-book-journal-whills::before{content:""}.fa-journal-whills::before{content:""}.fa-inhaler::before{content:""}.fa-handcuffs::before{content:""}.fa-snake::before{content:""}.fa-triangle-exclamation::before{content:""}.fa-exclamation-triangle::before{content:""}.fa-warning::before{content:""}.fa-note-medical::before{content:""}.fa-database::before{content:""}.fa-down-left::before{content:""}.fa-share::before{content:""}.fa-mail-forward::before{content:""}.fa-face-thinking::before{content:""}.fa-turn-down-right::before{content:""}.fa-bottle-droplet::before{content:""}.fa-mask-face::before{content:""}.fa-hill-rockslide::before{content:""}.fa-scanner-keyboard::before{content:""}.fa-circle-o::before{content:""}.fa-grid-horizontal::before{content:""}.fa-message-dollar::before{content:""}.fa-comment-alt-dollar::before{content:""}.fa-right-left::before{content:""}.fa-exchange-alt::before{content:""}.fa-columns-3::before{content:""}.fa-paper-plane::before{content:""}.fa-road-circle-exclamation::before{content:""}.fa-dungeon::before{content:""}.fa-hand-holding-box::before{content:""}.fa-input-text::before{content:""}.fa-window-flip::before{content:""}.fa-window-alt::before{content:""}.fa-align-right::before{content:""}.fa-scanner-gun::before{content:""}.fa-scanner::before{content:""}.fa-tire::before{content:""}.fa-engine::before{content:""}.fa-money-bill-1-wave::before{content:""}.fa-money-bill-wave-alt::before{content:""}.fa-life-ring::before{content:""}.fa-hands::before{content:""}.fa-sign-language::before{content:""}.fa-signing::before{content:""}.fa-circle-caret-right::before{content:""}.fa-caret-circle-right::before{content:""}.fa-turn-left::before{content:""}.fa-wheat::before{content:""}.fa-file-spreadsheet::before{content:""}.fa-audio-description-slash::before{content:""}.fa-bell-ring::before{content:""}.fa-calendar-day::before{content:""}.fa-water-ladder::before{content:""}.fa-ladder-water::before{content:""}.fa-swimming-pool::before{content:""}.fa-arrows-up-down::before{content:""}.fa-arrows-v::before{content:""}.fa-chess-pawn-piece::before{content:""}.fa-chess-pawn-alt::before{content:""}.fa-face-grimace::before{content:""}.fa-grimace::before{content:""}.fa-wheelchair-move::before{content:""}.fa-wheelchair-alt::before{content:""}.fa-turn-down::before{content:""}.fa-level-down-alt::before{content:""}.fa-square-s::before{content:""}.fa-rectangle-barcode::before{content:""}.fa-barcode-alt::before{content:""}.fa-person-walking-arrow-right::before{content:""}.fa-square-envelope::before{content:""}.fa-envelope-square::before{content:""}.fa-dice::before{content:""}.fa-unicorn::before{content:""}.fa-bowling-ball::before{content:""}.fa-pompebled::before{content:""}.fa-brain::before{content:""}.fa-watch-smart::before{content:""}.fa-book-user::before{content:""}.fa-sensor-cloud::before{content:""}.fa-sensor-smoke::before{content:""}.fa-clapperboard-play::before{content:""}.fa-bandage::before{content:""}.fa-band-aid::before{content:""}.fa-calendar-minus::before{content:""}.fa-circle-xmark::before{content:""}.fa-times-circle::before{content:""}.fa-xmark-circle::before{content:""}.fa-circle-4::before{content:""}.fa-gifts::before{content:""}.fa-album-collection::before{content:""}.fa-hotel::before{content:""}.fa-earth-asia::before{content:""}.fa-globe-asia::before{content:""}.fa-id-card-clip::before{content:""}.fa-id-card-alt::before{content:""}.fa-magnifying-glass-plus::before{content:""}.fa-search-plus::before{content:""}.fa-thumbs-up::before{content:""}.fa-cloud-showers::before{content:""}.fa-user-clock::before{content:""}.fa-onion::before{content:""}.fa-clock-twelve-thirty::before{content:""}.fa-arrow-down-to-dotted-line::before{content:""}.fa-hand-dots::before{content:""}.fa-allergies::before{content:""}.fa-file-invoice::before{content:""}.fa-window-minimize::before{content:""}.fa-rectangle-wide::before{content:""}.fa-comment-arrow-up::before{content:""}.fa-garlic::before{content:""}.fa-mug-saucer::before{content:""}.fa-coffee::before{content:""}.fa-brush::before{content:""}.fa-tree-decorated::before{content:""}.fa-mask::before{content:""}.fa-calendar-heart::before{content:""}.fa-magnifying-glass-minus::before{content:""}.fa-search-minus::before{content:""}.fa-flower::before{content:""}.fa-arrow-down-from-arc::before{content:""}.fa-right-left-large::before{content:""}.fa-ruler-vertical::before{content:""}.fa-circles-overlap::before{content:""}.fa-user-large::before{content:""}.fa-user-alt::before{content:""}.fa-starship-freighter::before{content:""}.fa-train-tram::before{content:""}.fa-bridge-suspension::before{content:""}.fa-trash-check::before{content:""}.fa-user-nurse::before{content:""}.fa-boombox::before{content:""}.fa-syringe::before{content:""}.fa-cloud-sun::before{content:""}.fa-shield-exclamation::before{content:""}.fa-stopwatch-20::before{content:""}.fa-square-full::before{content:""}.fa-grip-dots::before{content:""}.fa-comment-exclamation::before{content:""}.fa-pen-swirl::before{content:""}.fa-falafel::before{content:""}.fa-circle-2::before{content:""}.fa-magnet::before{content:""}.fa-jar::before{content:""}.fa-gramophone::before{content:""}.fa-dice-d12::before{content:""}.fa-note-sticky::before{content:""}.fa-sticky-note::before{content:""}.fa-down::before{content:""}.fa-arrow-alt-down::before{content:""}.fa-hundred-points::before{content:""}.fa-100::before{content:""}.fa-paperclip-vertical::before{content:""}.fa-wind-warning::before{content:""}.fa-wind-circle-exclamation::before{content:""}.fa-location-pin-slash::before{content:""}.fa-map-marker-slash::before{content:""}.fa-face-sad-sweat::before{content:""}.fa-bug-slash::before{content:""}.fa-cupcake::before{content:""}.fa-light-switch-off::before{content:""}.fa-toggle-large-off::before{content:""}.fa-pen-fancy-slash::before{content:""}.fa-truck-container::before{content:""}.fa-boot::before{content:""}.fa-arrow-up-from-water-pump::before{content:""}.fa-file-check::before{content:""}.fa-bone::before{content:""}.fa-cards-blank::before{content:""}.fa-circle-3::before{content:""}.fa-bench-tree::before{content:""}.fa-keyboard-brightness-low::before{content:""}.fa-ski-boot-ski::before{content:""}.fa-brain-circuit::before{content:""}.fa-table-cells-row-unlock::before{content:""}.fa-user-injured::before{content:""}.fa-block-brick-fire::before{content:""}.fa-firewall::before{content:""}.fa-face-sad-tear::before{content:""}.fa-sad-tear::before{content:""}.fa-plane::before{content:""}.fa-tent-arrows-down::before{content:""}.fa-exclamation::before{content:"\!"}.fa-arrows-spin::before{content:""}.fa-face-smile-relaxed::before{content:""}.fa-comment-xmark::before{content:""}.fa-comment-times::before{content:""}.fa-print::before{content:""}.fa-turkish-lira-sign::before{content:""}.fa-try::before{content:""}.fa-turkish-lira::before{content:""}.fa-face-nose-steam::before{content:""}.fa-circle-waveform-lines::before{content:""}.fa-waveform-circle::before{content:""}.fa-dollar-sign::before{content:"\$"}.fa-dollar::before{content:"\$"}.fa-usd::before{content:"\$"}.fa-ferris-wheel::before{content:""}.fa-computer-speaker::before{content:""}.fa-skull-cow::before{content:""}.fa-x::before{content:"X"}.fa-magnifying-glass-dollar::before{content:""}.fa-search-dollar::before{content:""}.fa-users-gear::before{content:""}.fa-users-cog::before{content:""}.fa-person-military-pointing::before{content:""}.fa-building-columns::before{content:""}.fa-bank::before{content:""}.fa-institution::before{content:""}.fa-museum::before{content:""}.fa-university::before{content:""}.fa-circle-t::before{content:""}.fa-sack::before{content:""}.fa-grid-2::before{content:""}.fa-camera-cctv::before{content:""}.fa-cctv::before{content:""}.fa-umbrella::before{content:""}.fa-trowel::before{content:""}.fa-horizontal-rule::before{content:""}.fa-bed-front::before{content:""}.fa-bed-alt::before{content:""}.fa-d::before{content:"D"}.fa-stapler::before{content:""}.fa-masks-theater::before{content:""}.fa-theater-masks::before{content:""}.fa-file-gif::before{content:""}.fa-kip-sign::before{content:""}.fa-face-woozy::before{content:""}.fa-cloud-question::before{content:""}.fa-pineapple::before{content:""}.fa-hand-point-left::before{content:""}.fa-gallery-thumbnails::before{content:""}.fa-circle-j::before{content:""}.fa-eyes::before{content:""}.fa-handshake-simple::before{content:""}.fa-handshake-alt::before{content:""}.fa-page-caret-up::before{content:""}.fa-file-caret-up::before{content:""}.fa-jet-fighter::before{content:""}.fa-fighter-jet::before{content:""}.fa-comet::before{content:""}.fa-square-share-nodes::before{content:""}.fa-share-alt-square::before{content:""}.fa-reflect-vertical::before{content:""}.fa-shield-keyhole::before{content:""}.fa-file-mp4::before{content:""}.fa-barcode::before{content:""}.fa-bulldozer::before{content:""}.fa-plus-minus::before{content:""}.fa-square-sliders-vertical::before{content:""}.fa-sliders-v-square::before{content:""}.fa-video::before{content:""}.fa-video-camera::before{content:""}.fa-message-middle::before{content:""}.fa-comment-middle-alt::before{content:""}.fa-graduation-cap::before{content:""}.fa-mortar-board::before{content:""}.fa-hand-holding-medical::before{content:""}.fa-person-circle-check::before{content:""}.fa-square-z::before{content:""}.fa-message-text::before{content:""}.fa-comment-alt-text::before{content:""}.fa-turn-up::before{content:""}.fa-level-up-alt::before{content:""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}/*! - * Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license (Commercial License) - * Copyright 2024 Fonticons, Inc. - */:root,:host{--fa-style-family-classic: "Font Awesome 6 Pro";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(/dist/admin/fonts/e6f4e254e8b705435dd6.woff2) format("woff2"),url(/dist/admin/fonts/b65ac3b8da9f6efd3346.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}/*! - * Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license (Commercial License) - * Copyright 2024 Fonticons, Inc. - */:root,:host{--fa-style-family-sharp: "Font Awesome 6 Sharp";--fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp"}@font-face{font-family:"Font Awesome 6 Sharp";font-style:normal;font-weight:900;font-display:block;src:url(/dist/admin/fonts/9fb9e3d1e42a353d678c.woff2) format("woff2"),url(/dist/admin/fonts/9a42f2741ca78a25feaa.ttf) format("truetype")}.fass,.fa-solid{font-weight:900}.daterangepicker{position:absolute;color:inherit;background-color:#fff;border-radius:4px;border:1px solid #ddd;width:278px;max-width:none;padding:0;margin-top:7px;top:100px;left:20px;z-index:3001;display:none;font-family:arial;font-size:15px;line-height:1em}.daterangepicker:before,.daterangepicker:after{position:absolute;display:inline-block;border-bottom-color:rgba(0, 0, 0, 0.2);content:""}.daterangepicker:before{top:-7px;border-right:7px solid transparent;border-left:7px solid transparent;border-bottom:7px solid #ccc}.daterangepicker:after{top:-6px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.daterangepicker.opensleft:before{right:9px}.daterangepicker.opensleft:after{right:10px}.daterangepicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.daterangepicker.openscenter:after{left:0;right:0;width:0;margin-left:auto;margin-right:auto}.daterangepicker.opensright:before{left:9px}.daterangepicker.opensright:after{left:10px}.daterangepicker.drop-up{margin-top:-7px}.daterangepicker.drop-up:before{top:initial;bottom:-7px;border-bottom:initial;border-top:7px solid #ccc}.daterangepicker.drop-up:after{top:initial;bottom:-6px;border-bottom:initial;border-top:6px solid #fff}.daterangepicker.single .daterangepicker .ranges,.daterangepicker.single .drp-calendar{float:none}.daterangepicker.single .drp-selected{display:none}.daterangepicker.show-calendar .drp-calendar{display:block}.daterangepicker.show-calendar .drp-buttons{display:block}.daterangepicker.auto-apply .drp-buttons{display:none}.daterangepicker .drp-calendar{display:none;max-width:270px}.daterangepicker .drp-calendar.left{padding:8px 0 8px 8px}.daterangepicker .drp-calendar.right{padding:8px}.daterangepicker .drp-calendar.single .calendar-table{border:none}.daterangepicker .calendar-table .next span,.daterangepicker .calendar-table .prev span{color:#fff;border:solid black;border-width:0 2px 2px 0;border-radius:0;display:inline-block;padding:3px}.daterangepicker .calendar-table .next span{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.daterangepicker .calendar-table .prev span{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.daterangepicker .calendar-table th,.daterangepicker .calendar-table td{white-space:nowrap;text-align:center;vertical-align:middle;min-width:32px;width:32px;height:24px;line-height:24px;font-size:12px;border-radius:4px;border:1px solid transparent;white-space:nowrap;cursor:pointer}.daterangepicker .calendar-table{border:1px solid #fff;border-radius:4px;background-color:#fff}.daterangepicker .calendar-table table{width:100%;margin:0;border-spacing:0;border-collapse:collapse}.daterangepicker td.available:hover,.daterangepicker th.available:hover{background-color:#eee;border-color:transparent;color:inherit}.daterangepicker td.week,.daterangepicker th.week{font-size:80%;color:#ccc}.daterangepicker td.off,.daterangepicker td.off.in-range,.daterangepicker td.off.start-date,.daterangepicker td.off.end-date{background-color:#fff;border-color:transparent;color:#999}.daterangepicker td.in-range{background-color:#ebf4f8;border-color:transparent;color:#000;border-radius:0}.daterangepicker td.start-date{border-radius:4px 0 0 4px}.daterangepicker td.end-date{border-radius:0 4px 4px 0}.daterangepicker td.start-date.end-date{border-radius:4px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#357ebd;border-color:transparent;color:#fff}.daterangepicker th.month{width:auto}.daterangepicker td.disabled,.daterangepicker option.disabled{color:#999;cursor:not-allowed;text-decoration:line-through}.daterangepicker select.monthselect,.daterangepicker select.yearselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default}.daterangepicker select.monthselect{margin-right:2%;width:56%}.daterangepicker select.yearselect{width:40%}.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect,.daterangepicker select.ampmselect{width:50px;margin:0 auto;background:#eee;border:1px solid #eee;padding:2px;outline:0;font-size:12px}.daterangepicker .calendar-time{text-align:center;margin:4px auto 0 auto;line-height:30px;position:relative}.daterangepicker .calendar-time select.disabled{color:#ccc;cursor:not-allowed}.daterangepicker .drp-buttons{clear:both;text-align:right;padding:8px;border-top:1px solid #ddd;display:none;line-height:12px;vertical-align:middle}.daterangepicker .drp-selected{display:inline-block;font-size:12px;padding-right:8px}.daterangepicker .drp-buttons .btn{margin-left:8px;font-size:12px;font-weight:bold;padding:4px 8px}.daterangepicker.show-ranges.single.rtl .drp-calendar.left{border-right:1px solid #ddd}.daterangepicker.show-ranges.single.ltr .drp-calendar.left{border-left:1px solid #ddd}.daterangepicker.show-ranges.rtl .drp-calendar.right{border-right:1px solid #ddd}.daterangepicker.show-ranges.ltr .drp-calendar.left{border-left:1px solid #ddd}.daterangepicker .ranges{float:none;text-align:left;margin:0}.daterangepicker.show-calendar .ranges{margin-top:8px}.daterangepicker .ranges ul{list-style:none;margin:0 auto;padding:0;width:100%}.daterangepicker .ranges li{font-size:12px;padding:8px 12px;cursor:pointer}.daterangepicker .ranges li:hover{background-color:#eee}.daterangepicker .ranges li.active{background-color:#08c;color:#fff}@media(min-width: 564px){.daterangepicker{width:auto}.daterangepicker .ranges ul{width:140px}.daterangepicker.single .ranges ul{width:100%}.daterangepicker.single .drp-calendar.left{clear:none}.daterangepicker.single .ranges,.daterangepicker.single .drp-calendar{float:left}.daterangepicker{direction:ltr;text-align:left}.daterangepicker .drp-calendar.left{clear:left;margin-right:0}.daterangepicker .drp-calendar.left .calendar-table{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.daterangepicker .drp-calendar.right{margin-left:0}.daterangepicker .drp-calendar.right .calendar-table{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.daterangepicker .drp-calendar.left .calendar-table{padding-right:8px}.daterangepicker .ranges,.daterangepicker .drp-calendar{float:left}}@media(min-width: 730px){.daterangepicker .ranges{width:auto}.daterangepicker .ranges{float:left}.daterangepicker.rtl .ranges{float:right}.daterangepicker .drp-calendar.left{clear:none !important}}.ui-datepicker{background-color:#fff;box-shadow:0 4px 10px -10px #000;border-bottom:5px solid var(--primaryColor);border-radius:4px;width:19em;padding:.2em 1.2em .2em;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;margin:0 -1.2em;background-color:var(--primaryColor);color:#fff;border-top-right-radius:4px;border-top-left-radius:4px}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-15px;top:50%;margin-top:-8px;cursor:pointer;user-select:none}.ui-datepicker .ui-datepicker-prev span:before,.ui-datepicker .ui-datepicker-next span:before{font-family:"Font Awesome 6 Pro";position:absolute;top:0;right:0;width:20px;color:#fff}.ui-datepicker .ui-datepicker-prev{left:2px;left:auto}.ui-datepicker .ui-datepicker-prev>span:before{content:""}.ui-datepicker .ui-datepicker-next{right:2px;left:auto}.ui-datepicker .ui-datepicker-next>span:before{content:""}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{padding:.2em;text-align:right;text-decoration:none;background-color:#f7f7f7;width:30px;height:30px;display:flex;justify-content:center;align-items:center;float:right;border-radius:50%;margin-right:4px;margin-bottom:5px;font-size:13px}.ui-datepicker td span:hover,.ui-datepicker td a:hover{background-color:#f1f1f1}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker .ui-icon{display:block;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.maxw-sm{max-width:540px}.maxw-md{max-width:720px}.maxw-lg{max-width:960px}.maxw-xl{max-width:1140px}.maxw-xxl{max-width:1320px}h1,.h1{font-size:40px;font-weight:500;margin-bottom:0}h2,.h2{font-size:30px;font-weight:500;margin-bottom:0}@media(max-width: 575.98px){h1,.h1{font-size:30px}h2,.h2{font-size:22px}}@property --button-primary-color{syntax:"<color>";inherits:false;initial-value:#fff}.btn{display:inline-flex;justify-content:center;align-items:center;border:none;border-radius:20px;height:49px;font-size:16px}.btn.btn-primary{--button-primary-color: var(--primaryColor);background:linear-gradient(90deg, var(--primaryColorDark20) 0%, var(--button-primary-color) 100%);transition:--button-primary-color .5s;border:none;color:#fff}.btn.btn-primary:hover{--button-primary-color: var(--primaryColorDark20)}.btn.btn-secondary{color:#333;background-color:rgba(0,0,0,0);border-radius:20px;border:1px solid #d1e4e4}.btn.btn-secondary:active,.btn.btn-secondary:hover{border:1px solid #a8cccc}.btn.btn-danger{color:#fff;background-color:#bb2d3b}.btn.btn-danger:active,.btn.btn-danger:hover{background-color:rgb(145.8922413793,35.1077586207,46.0301724138)}@font-face{font-family:"Nunito",sans-serif;src:url(/dist/admin/fonts/9d7a6e03c6e3ed49c7ac.ttf);font-weight:normal}@font-face{font-family:"Nunito";src:url(/dist/admin/fonts/275dd55e10ba966bcb9b.ttf);font-weight:bold}@font-face{font-family:"TeXGyreHeros";src:url(/dist/admin/89937b93a1c3ac41f5a9.otf);font-weight:normal}@font-face{font-family:"Roboto";src:url(/dist/admin/fonts/fc2b5060f7accec5cf74.ttf);font-weight:400}@font-face{font-family:"Roboto";src:url(/dist/admin/fonts/7c8d04cd831df3033c8a.ttf);font-weight:500}@font-face{font-family:"Roboto";src:url(/dist/admin/fonts/cf56c1b149d0a5e8d7c6.ttf);font-weight:900}:root{--bs-bg-opacity: 1;--bs-dark-rgb: 16, 30, 42;--bs-body-font-size: $fs-body;--bs-font-sans-serif: "Roboto";--bs-link-color-rgb: 36, 21, 86;--bs-btn-bg: $datagrid-color;--side-panel-width: 70px}body{background-color:var(--secondaryColor);background-position:center;background-size:cover;background-repeat:no-repeat}body:has(.side-panel) .container{left:var(--side-panel-width);transition:left .5s ease}.header{display:flex;justify-content:space-between;align-items:center}.header-actions{display:flex;flex-direction:row;gap:10px}.header-actions .btn{padding:10px 18px;font-size:.9rem}.header-actions .btn-icon{border:0;border-radius:20px;border:solid 1px var(--secondaryColorDarker)}.header-actions .btn-icon:hover{background-color:#fff}.header-actions .btn-link{--bs-btn-font-weight: 500;color:#333;border:2px solid #d2d2d2;text-decoration:none}.snippet-flashes{position:fixed;bottom:30px;left:0;right:0;z-index:999;display:flex;align-items:center;justify-content:center;flex-direction:column;pointer-events:none}.snippet-flashes .alert{border-radius:20px;border:0;display:inline-flex;align-items:stretch;justify-content:center;font-size:16px;font-weight:500;line-height:normal;pointer-events:all;max-width:min(100vw - 50px,1300px);box-shadow:0px 0px 20px 0px rgba(109,109,109,.45);padding:20px 30px;gap:30px}.snippet-flashes .alert:before{margin:10px 0;font-size:30px;font-family:"Font Awesome 6 Pro"}.snippet-flashes .alert.alert-success{background-color:#28c885;color:#fff}.snippet-flashes .alert.alert-success .alert-close-btn{display:none}.snippet-flashes .alert.alert-success:before{content:""}.snippet-flashes .alert.alert-warning{background-color:#f9b300;color:#fff}.snippet-flashes .alert.alert-warning:before{content:""}.snippet-flashes .alert.alert-danger{background-color:#ff4242;color:#fff}.snippet-flashes .alert.alert-danger:before{content:""}.snippet-flashes .alert .alert-text{display:flex;align-items:center;height:100%;padding-top:17px;margin-bottom:10px}.snippet-flashes .alert .alert-close-btn{display:flex;width:161px;padding:10px 25px;flex-direction:column;justify-content:center;align-items:center;gap:10px;flex-shrink:0;border:0;margin-top:6px;border-radius:20px;background:#fff}.side-panel-template-backdrop{position:fixed;background-color:rgba(0,0,0,0);transition:all .4s ease;pointer-events:none;inset:0;z-index:9010}body:has(.side-panel-template-container form) .side-panel-template-backdrop{pointer-events:all;background-color:rgba(0,0,0,.3)}.side-panel-template-container{position:fixed;width:100vw;max-width:610px;right:-610px;top:0;bottom:0;padding:40px;overflow:auto;background-color:#fff;z-index:9020;box-shadow:0 0 0 0 #000;transition:right .4s ease}.side-panel-template-container:has(form){right:0;box-shadow:0 0 45px -10px #000}.side-panel-template-container .btn-close{position:absolute;top:20px;right:20px}.side-panel-template-container [type=submit]{width:100%}.side-panel-template-container form{display:flex;flex-direction:column}span.empty{font-style:italic;color:#999}.bg-primary-variant{background-color:var(--ternaryColor);color:var(--ternaryTextColor)}.bg-primary-variant::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background-size:cover;opacity:.1}.container-login{width:100%;min-height:100dvh;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:15px}@media(max-width: 575.98px){.container-login{padding:0}.container-login .wrap-login{background-color:initial}.container-login .wrap-login img{max-width:156px}.container-login .login-form{gap:0}}.wrap-login{position:relative;width:100%;max-width:500px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:50px;background-color:hsla(0,0%,100%,.3);border-radius:20px;padding:80px 40px}.wrap-login img{width:226px;height:auto}.login-form{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:60px;align-self:stretch}.login-form .inputs-wrap{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:20px;align-self:stretch}.login-form div:has(>.form-control),.login-form div:has(>.form-check){width:100%;margin-bottom:0 !important}.login-form div:has(>.form-control) label,.login-form div:has(>.form-check) label{font-size:.9rem;line-height:normal;color:#fff}.login-form div:has(>.form-control) .form-control,.login-form div:has(>.form-check) .form-control{width:100%;display:flex;padding:15px;align-items:center;gap:10px;font-size:.9rem;border:none;border-radius:20px;outline:none;background-color:hsla(0,0%,100%,.3);color:var(--ternaryTextColor);-webkit-text-fill-color:var(--ternaryTextColor)}.login-form div:has(>.form-control) .form-control::placeholder,.login-form div:has(>.form-check) .form-control::placeholder{color:var(--ternaryTextColor)}.login-form div:has(>.form-control) .form-control:focus,.login-form div:has(>.form-check) .form-control:focus{background-color:hsla(0,0%,100%,.4) !important}.login-form div:has(>.form-control) .form-control:-webkit-autofill,.login-form div:has(>.form-control) .form-control:-webkit-autofill:hover,.login-form div:has(>.form-control) .form-control:-webkit-autofill:focus,.login-form div:has(>.form-control) .form-control:-webkit-autofill:active,.login-form div:has(>.form-check) .form-control:-webkit-autofill,.login-form div:has(>.form-check) .form-control:-webkit-autofill:hover,.login-form div:has(>.form-check) .form-control:-webkit-autofill:focus,.login-form div:has(>.form-check) .form-control:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s}.login-form div:has(>.form-control) .form-control.input-company,.login-form div:has(>.form-check) .form-control.input-company{-webkit-text-fill-color:#8a8a8a;background:rgba(242,243,246,.8);box-shadow:none;outline:none}.login-form div:has(>.form-control) .form-control.input-company:focus,.login-form div:has(>.form-check) .form-control.input-company:focus{box-shadow:none !important}.login-form .linkInForm{color:var(--ternaryTextColor)}.side-panel{position:fixed;left:0;top:0;height:100%;width:var(--side-panel-width);display:flex;flex-direction:column;background-color:var(--secondaryColor)}.side-panel .menu{flex:1;display:flex;flex-direction:column;border-right:1px solid var(--secondaryColorDarker)}.side-panel .menu.bg{background-color:#fff;border-right:solid 1px hsl(0,0%,90%)}.side-panel .menu>.logo{height:70px;width:100%;display:flex;align-items:center;justify-content:center;margin-bottom:18px}.side-panel .menu>.item{height:60px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#333;transition:width .5s ease;text-decoration:none}.side-panel .menu>.item>i{font-size:20px;transition:font-size .5s ease}.side-panel .menu>.item:hover{background-color:var(--secondaryColorDark)}.side-panel .menu>.item.active{color:var(--primaryColor);box-shadow:inset 5px 0 0 0 var(--primaryColor)}.side-panel .menu>.item .title{font-size:10px;font-style:normal;font-weight:400;line-height:normal}.side-panel .menu>.item>.submenu{background-color:#fff;left:var(--side-panel-width)}.side-panel .menu>.item>.submenu>.item>.submenu{left:var(--side-panel-width)200px}.side-panel .menu>.item>.submenu .item:has(.submenu):after{content:"";font-family:"Font Awesome 6 Pro";font-size:18px;margin-right:20px}.side-panel .menu .item.opened>.submenu{display:block !important}.side-panel .menu .item{cursor:pointer}.side-panel .menu .submenu{display:none;position:fixed;bottom:0;min-width:220px;top:0;box-shadow:4px 0 4px 0px rgba(0,0,0,.15)}.side-panel .menu .submenu .submenu-heading{width:100%;height:70px;line-height:70px;margin:0 20px;text-transform:uppercase;font-weight:500;font-size:15px;display:flex;align-items:center;color:#acacac}.side-panel .menu .submenu .item{padding:15px 20px;display:flex;justify-content:flex-start;flex-direction:row;text-decoration:none;color:#333;align-items:center;text-align:left;gap:10px}.side-panel .menu .submenu .item>.icon{display:flex;align-items:baseline;justify-content:center;width:20px;height:20px}.side-panel .menu .submenu .item.active{color:var(--primaryColorDark)}.side-panel .menu .submenu .item:hover{background:var(--secondaryColorDark)}.side-panel .bottom-menu{margin-top:auto}.navbar{position:fixed;top:0;left:var(--side-panel-width);right:0;height:80px;background-color:rgba(0,0,0,0) !important}.navbar .user{--bs-btn-hover-color: #fff;--bs-btn-active-color: #fff}.navbar .user .btn:active{border:0}@media(max-width: 575.98px){.navbar.hidden{top:-80px}}.navbar input[type=checkbox]{box-sizing:border-box;display:none;transition:all .25s}.menu-icon-toggle{box-sizing:border-box;cursor:pointer;height:17px;width:22px;transition:all .3s;margin:0 15px;opacity:1}.menu-icon-toggle:hover{opacity:.8}.hamb-line{box-sizing:border-box;position:absolute;height:3px;width:100%;background-color:#fff;transition:all .25s;border-radius:3px}.hor{transition:all .3s;box-sizing:border-box;position:relative;float:left;margin-top:3px}.dia.part-1{position:relative;box-sizing:border-box;float:left;transition:all .25s}.dia.part-2{box-sizing:border-box;position:relative;float:left;margin-top:3px;transition:all .25s}input[type=checkbox]:checked~.menu-icon-toggle>.hor{box-sizing:border-box;opacity:0;transition:all .25s}input[type=checkbox]:checked~.menu-icon-toggle>.dia.part-1{box-sizing:border-box;transform:rotate(135deg);margin-top:8px;transition:all .25s}input[type=checkbox]:checked~.menu-icon-toggle>.dia.part-2{box-sizing:border-box;transform:rotate(-135deg);margin-top:-9px;transition:all .25s}nav>div{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between;width:100%;margin:0 10px 0 0px}.table-responsive{overflow-x:auto;white-space:nowrap;border:1px solid var(--secondaryColorDarker);border-radius:20px;background-color:#fff;position:relative}.table-responsive::-webkit-scrollbar-track{border-radius:20px;background:rgba(0,0,0,0);display:none}.table-responsive::-webkit-scrollbar{border-radius:20px;background:rgba(0,0,0,0);height:0;display:none}.table-responsive::-webkit-scrollbar-thumb{border-radius:20px;background-color:#fff;border:23px solid rgba(0,0,0,0);display:none}.table-responsive::-webkit-scrollbar-corner{background:rgba(0,0,0,0);display:none}.table-responsive table{--actionShadowWidthLeft: 0px;--actionShadowWidthRight: 0px;background-color:#fff;height:100px;overflow:auto;width:auto;min-width:100%}.table-responsive table thead,.table-responsive table tbody{width:100%}.table-responsive table thead>tr:nth-child(1){z-index:9;position:sticky;top:0}.table-responsive table thead>tr:nth-child(2){z-index:9;position:sticky;top:33px}.table-responsive table th{padding:18px 30px;font-size:16px;font-weight:500;line-height:15px;background-color:#fff}@media(max-width: 575.98px){.table-responsive table th{padding:15px 20px}}.table-responsive table tbody>tr>td:first-child,.table-responsive table thead>tr>th:not(.table-header-divider):first-child{position:sticky;left:0;width:300px;max-width:min(30%,300px)}.table-responsive table tbody>tr>td:first-child>div,.table-responsive table thead>tr>th:not(.table-header-divider):first-child>div{width:300px;max-width:100%;white-space:normal;overflow:hidden;line-height:15px}.table-responsive table tbody>tr>td:first-child>div.is-clamped:after,.table-responsive table thead>tr>th:not(.table-header-divider):first-child>div.is-clamped:after{content:"...";position:absolute;bottom:0;right:0;background:#fff;padding-left:.5em;color:#000}.table-responsive table tbody>tr>td:first-child:after,.table-responsive table thead>tr>th:not(.table-header-divider):first-child:after{content:" ";display:flex;position:absolute;right:calc(var(--actionShadowWidthLeft)*-1);width:var(--actionShadowWidthLeft);top:0;bottom:0;transition:all .2s;box-shadow:inset calc(var(--actionShadowWidthLeft)*1) 0 calc(var(--actionShadowWidthLeft)*.5) calc(var(--actionShadowWidthLeft)*-1) #b3b3b3;pointer-events:none}.table-responsive table td{padding:18px 30px;font-size:16px;font-weight:400;line-height:15px;background-color:#fff}@media(max-width: 575.98px){.table-responsive table td{padding:15px 20px}}@media(min-width: 576px){.table-responsive table .col-action{width:0;position:sticky;right:0}.table-responsive table .col-action:before{content:" ";display:flex;position:absolute;left:calc(var(--actionShadowWidthRight)*-1);width:var(--actionShadowWidthRight);top:0;bottom:0;transition:all .2s;box-shadow:inset calc(var(--actionShadowWidthRight)*-1) 0 calc(var(--actionShadowWidthRight)*.5) calc(var(--actionShadowWidthRight)*-1) #b3b3b3;pointer-events:none}}.table-responsive table .col-action>div{position:relative;display:inline-flex;gap:15px}.table-responsive table .col-action .fa{color:var(--primaryColor)}.table-responsive table .col-action .fa:hover{color:var(--primaryColorDark)}.table-responsive table .col-action .btn:has(>.fa){padding:0;height:initial}.table-responsive table .col-action .dropdown-menu.show{border:0;box-shadow:0 4px 8px 0 rgba(0,0,0,.1490196078);max-width:300px;margin-top:8px !important;margin-right:-15px !important}.table-responsive table .col-action .dropdown-menu.show .dropdown-title{height:35px;display:flex;align-items:center;justify-content:center;background-color:var(--secondaryColor)}.table-responsive table .col-action .dropdown-menu.show>a{display:flex;justify-content:flex-start;align-items:center;background:#fff;gap:10px;align-self:stretch;text-decoration:none;font-size:14px;line-height:15px;padding:15px !important;text-wrap:nowrap;color:inherit}.table-responsive table .col-action .dropdown-menu.show>a>a:not(.btn-edit){padding:15px;width:100%}.table-responsive table .col-action .dropdown-menu.show>a:hover,.table-responsive table .col-action .dropdown-menu.show>a:focus{background:var(--secondaryColorDark)}.table-responsive table .col-action .dropdown-menu.show>.datagrid-delete .fa{color:#dc3545}.table-responsive table .col-action .dropdown-menu.show>.datagrid-delete:hover,.table-responsive table .col-action .dropdown-menu.show>.datagrid-delete:focus{background:rgb(248,214.6,217.8)}.table-responsive table .col-action .dropdown-menu.show>:not(:first-child).datagrid-delete{border-top:1px solid #000}.table-responsive table th.col-action:before{bottom:-6px}.table-responsive table tbody>tr:last-child>td{border-bottom:12px solid #fff}.table-responsive table thead>tr:first-child>th{padding-top:30px}.table-responsive table tr:has(.dropdown-menu.show){position:relative;z-index:99}.table-responsive table tr:hover td{background-color:hsl(0,0%,95%)}.table-responsive table .table-header-divider{height:1px;padding:0 30px}.table-responsive table .table-header-divider>div{background-color:hsl(0,0%,90%);height:1px}.icon-btn{color:var(--primaryColor)}.icon-btn:hover{color:var(--primaryColorDark)}form:has(>.table-responsive-wrapper){padding:0;display:flex;flex-direction:column;gap:20px}form:has(>.table-responsive-wrapper) [class^=grid-filters]:not(:has(input,select)){display:none}.col-pagination>div{display:flex;justify-content:center;gap:10px}.col-pagination>div .btn-group{gap:10px}.col-pagination>div .btn{border:1px solid #e7e6e9;border-radius:10px;border-top-right-radius:10px !important;border-bottom-right-radius:10px !important;border-top-left-radius:10px !important;border-bottom-left-radius:10px !important;width:35px;height:35px;display:flex;justify-content:center;align-items:center}.col-pagination>div .btn:hover{border-color:hsl(0,0%,90%)}.col-pagination>div .btn.btn-primary{border:none}.col-pagination>div .btn.btn-default{border:none;background-color:#f2f3f6 !important;align-items:center}.col-pagination>div .btn.btn-default:hover{background-color:rgba(0,0,0,0) !important;align-items:center}.col-pagination>div .btn.active{background-color:var(--secondaryColorDark) !important;border:1px solid var(--secondaryColorDarker)}.datagrid .main-search-filter{position:relative;display:flex;align-items:flex-end;justify-content:space-between;padding:.5rem 0 0 0}.datagrid .main-search-filter .form-group-filter{border:solid 1px var(--secondaryColorDarker);border-radius:20px;background-color:var(--secondaryColorDarker);width:300px;max-width:100%}.datagrid .main-search-filter .form-group-filter label{display:none}.datagrid .main-search-filter .search-icon{position:absolute;top:1.75rem;left:15px;pointer-events:none}.datagrid .main-search-filter [name="filter[search]"]{padding-left:40px}.datagrid .main-search-filter .btn{margin-left:5px}.datagrid .main-search-filter .collapse-filters:not(.collapsed) span.collapsed-text{display:none}.datagrid .main-search-filter .collapse-filters.collapsed span.not-collapsed-text{display:none}.datagrid .main-search-filter .grid-group-actions{display:flex}.datagrid .main-search-filter .grid-group-actions .btn-primary{color:var(--primaryColor);border:1px solid var(--primaryColor);background-color:rgba(0,0,0,0)}body{--inputBackground: var(--secondaryColor);--inputFocusBackground: var(--secondaryColorDark);--inputBorder: 0;--inputFocusBorder: 0}a{color:inherit}a:hover{color:var(--primaryColorDark)}.side-panel:not(.delay-animate){transition:all 260ms ease-in-out}:has(.side-panel .menu) #snippet--container{position:fixed;top:0;bottom:0;overflow:auto;margin-left:0;width:calc(100% - 70px);left:70px;padding:0px 25px 0 25px}@media(max-width: 575.98px){:has(.side-panel .menu) #snippet--container{padding:80px 15px 0 15px;bottom:65px}:has(.side-panel .menu):has(.sub-menu.opened) #snippet--container{bottom:108px}}@media(max-width: 575.98px){:has(.container-login) #snippet--container{--bs-gutter-x: 0 !important}.side-panel{display:none}#snippet--container{left:0 !important;width:100% !important}}.dashboard-card:has(.table-responsive){padding-bottom:0}.dashboard-card:has(.table-responsive) .table-responsive-wrapper{margin-left:-30px;margin-right:-30px}.dashboard-card:has(.table-responsive) .table-responsive{border:none;border-radius:0}.dashboard-card:has(.table-responsive) .table-responsive table th:not(.table-header-divider),.dashboard-card:has(.table-responsive) .table-responsive table td{padding:18px 30px}.header-title{padding:0;display:flex;flex-direction:column}.header-title .header-subtitle{font-size:18px;color:#8a8a8a;font-weight:normal}.form-label{font-size:18px;color:#333}input[type=file]{border:1px solid var(--secondaryColorDarker);border-radius:20px;padding:6px 15px 6px 12px;line-height:35px}input[type=color]{padding:0;border:1px solid var(--secondaryColorDarker);border-radius:20px;overflow:hidden;cursor:pointer}input[type=color]:focus{border-color:var(--secondaryColorDarker) !important}input[type=color]{-webkit-appearance:none}input[type=color]::-webkit-color-swatch-wrapper{padding:0}input[type=color]::-webkit-color-swatch{border:none}:not(.form-group-filter) .form-control{border:0;height:49px;border-radius:20px;padding:15px;font-size:16px;font-weight:400;line-height:18px}:not(.form-group-filter) .form-control:focus{box-shadow:none !important}:not(.form-group-filter) .form-control:disabled{background-color:#e7e6e9;cursor:not-allowed}.form-control:not(:disabled){background-color:var(--inputBackground);border:var(--inputBorder)}.form-control:focus{background-color:var(--inputFocusBackground) !important;border:var(--inputFocusBorder)}.form-check{padding-left:0;margin-top:0 !important;margin-bottom:0 !important}.form-check input{display:none}.form-check label{position:relative;display:flex;align-items:flex-start;gap:10px;cursor:pointer;user-select:none}.form-check label:before{display:block;content:" ";width:20px;height:20px;border:2px solid var(--secondaryColorDarker);border-radius:4px;transition:all .2s;min-width:20px;margin-top:2px}.form-check input:checked+label:before{background-color:var(--primaryColor);border:2px solid var(--primaryColor)}.form-check input:checked+label:after{left:0;position:absolute;content:"";font-family:"Font Awesome 6 Pro";font-weight:900;color:#fff;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:14px;margin-top:2px}.form-group-filter{display:flex}.form-group-filter:has(input[type=text]){position:relative}.form-group-filter:has(input[type=text])::before{content:"";font-family:"Font Awesome 6 Pro";position:absolute;bottom:12px;left:20px;pointer-events:none;z-index:9}.form-group-filter:has(input[type=text]) input[type=text]{padding-left:55px;border-radius:20px;border:none;max-width:100%;background-color:var(--secondaryColor)}.form-group-filter:has(input[type=text]) input[type=text]:focus{background-color:#fff !important}.form-group-filter:has(input[type=text]) input[type=text]:valid:not(:focus){background-color:var(--secondaryColorDark) !important}.vertical-divider{background-color:hsla(0,0%,100%,.3019607843);width:1px;height:45px}.dashboard-card{padding:30px;border:1px solid var(--secondaryColorDarker);border-radius:20px;display:flex;gap:25px;min-height:calc(100% - 1rem)}.dashboard-card [data-adt-components-panels-base-basechartpanel]{display:none}.dashboard-card .dashboard-card-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.dashboard-card .icon{color:var(--primaryColor)}.dashboard-card .card-amount{font-size:max(min(10px + 2vw,40px),30px);font-weight:700;line-height:47px;display:flex;gap:32px}.dashboard-card .card-amount-diff{font-weight:400;color:#acacac;font-size:18px}.dashboard-card .card-text{font-size:16px;font-weight:400;line-height:19px}@media(max-width: 575.98px){.dashboard-card{padding:20px}.dashboard-card .table-responsive{margin-left:-20px !important;margin-right:-20px !important}}.dashboard-input-group{display:flex;align-items:flex-start}.dashboard-input-group input[type=text]{display:flex;padding:15px 25px;justify-content:center;align-items:center;border-bottom:0;border-radius:20px 0 0 20px;background:var(--secondaryColor)}.dashboard-input-group input[type=submit]{display:flex;padding:13px 30px 15px 25px;justify-content:center;align-items:center;color:#fff;border-radius:0 20px 20px 0;background:var(--primaryColor);font-size:16px;font-style:normal;font-weight:400;line-height:normal}.container-fluid,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{--bs-gutter-x: 4.5rem !important}.container-fluid>div>.panel.simple-table,.container-sm>div>.panel.simple-table,.container-md>div>.panel.simple-table,.container-lg>div>.panel.simple-table,.container-xl>div>.panel.simple-table,.container-xxl>div>.panel.simple-table{display:flex;margin:40px 0}.container-fluid>div>.header,.container-sm>div>.header,.container-md>div>.header,.container-lg>div>.header,.container-xl>div>.header,.container-xxl>div>.header{margin:20px 0}.container-fluid>div>.header:has(h1,.h1),.container-sm>div>.header:has(h1,.h1),.container-md>div>.header:has(h1,.h1),.container-lg>div>.header:has(h1,.h1),.container-xl>div>.header:has(h1,.h1),.container-xxl>div>.header:has(h1,.h1){display:flex;margin:20px 0 20px 0}.container-fluid>div>.header:has(h2,.h2),.container-sm>div>.header:has(h2,.h2),.container-md>div>.header:has(h2,.h2),.container-lg>div>.header:has(h2,.h2),.container-xl>div>.header:has(h2,.h2),.container-xxl>div>.header:has(h2,.h2){display:flex;margin:40px 0 20px 0}.container-fluid>div>.back-link,.container-sm>div>.back-link,.container-md>div>.back-link,.container-lg>div>.back-link,.container-xl>div>.back-link,.container-xxl>div>.back-link{display:flex;margin:20px 0}.container-fluid>div>.datagrid,.container-sm>div>.datagrid,.container-md>div>.datagrid,.container-lg>div>.datagrid,.container-xl>div>.datagrid,.container-xxl>div>.datagrid{display:flex;flex-direction:column;margin:20px 0}.container-fluid>div:has(.container-login),.container-sm>div:has(.container-login),.container-md>div:has(.container-login),.container-lg>div:has(.container-login),.container-xl>div:has(.container-login),.container-xxl>div:has(.container-login){--bs-gutter-x: 0 !important}.bottom-mobile-menu{position:fixed;bottom:0;left:0;right:0;height:65px;background-color:var(--secondaryColor);border-top:1px solid var(--secondaryColorDarker);z-index:10}.bottom-mobile-menu a{width:100%;height:100%;display:flex;align-items:center;flex-direction:column;justify-content:center;text-decoration:none}.bottom-mobile-menu a>i{font-size:24px;color:#333}.bottom-mobile-menu a>span{font-size:12px;font-weight:400;color:#333}.bottom-mobile-menu a.active>i,.bottom-mobile-menu a.active>span{color:var(--primaryColor)}.bottom-mobile-menu:has(.isOpened) a.isOpened>i,.bottom-mobile-menu:has(.isOpened) a.isOpened>span{color:var(--primaryColor) !important}.bottom-mobile-menu:has(.isOpened) a:not(.isOpened)>i,.bottom-mobile-menu:has(.isOpened) a:not(.isOpened)>span{color:#333 !important}.sub-menu{position:fixed;bottom:65px;left:0;right:0;height:45px;background-color:var(--secondaryColor);border-top:1px solid var(--secondaryColorDarker);z-index:9;transition:.2s all;display:flex;flex-direction:row;flex-wrap:nowrap;overflow-y:scroll}.sub-menu>a{display:flex;padding:0 20px;height:100%;align-items:center;text-decoration:none;gap:8px}.sub-menu>a>i{font-size:16px;color:#333}.sub-menu>a>span{font-size:12px;font-weight:400;color:#333;text-wrap:nowrap}.sub-menu>a.active>i,.sub-menu>a.active>span{color:var(--primaryColor)}.sub-menu:not(.opened){bottom:20px}.list-group-item ul{padding-left:0}.list-group-item ul li a{padding-left:2rem !important}.panel.simple-table{padding:35px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:16px;border-radius:20px;border:1px solid #e7e6e9;background:#fff}@media(max-width: 575.98px){.panel.simple-table{padding:20px}}.panel.simple-table>.row{width:100%;font-size:16px;font-weight:400;line-height:normal}.panel.simple-table>.row>*:first-child{color:var(--primaryColor);font-weight:400}.btn-new:before{font-family:"Font Awesome 6 Pro";font-weight:900;content:"+";margin-right:10px}.back-link{width:auto;display:flex;align-items:center;font-size:16px;font-weight:400}.back-link:hover a{color:var(--primaryColor)}.back-link:before{font-family:"Font Awesome 6 Pro";font-weight:900;content:"";margin-right:10px;font-size:14px;color:#333}.btn-avatar{display:flex;width:45px;height:45px;margin:20px 12.5px;padding:0;justify-content:center;align-items:center;gap:10px;border-radius:100%;background:#fff;opacity:1}.btn-avatar:hover{opacity:.8}.btn-avatar i{color:rgb(var(--bs-dark-rgb))}.btn-avatar:hover,.btn-avatar.show,.btn-avatar:active{background-color:#fff !important}.btn-avatar:hover i,.btn-avatar.show i,.btn-avatar:active i{color:rgb(var(--bs-dark-rgb)) !important}.btn-avatar:has(>img){overflow:hidden}.btn-avatar:has(>img) i{display:none}.btn-avatar:has(>img) img{width:100%;height:100%;object-fit:contain}.bottom-mobile-menu .bottom-menu .user.dropdown .btn-avatar{margin:6px 0 1px 0}.bottom-mobile-menu .bottom-menu .user.dropdown ul{left:initial !important;bottom:10px !important;right:-10px !important}.order-simple-table{width:625px;max-width:100%;margin:40px 0}.order-simple-table .row>span:nth-child(1){width:220px}.order-simple-table .row>span:nth-child(2){width:calc(100% - 220px)}@media(max-width: 767.98px){.order-simple-table .row>span{width:100% !important}}.dropdown-menu{--bs-border-radius: 20px;--bs-dropdown-padding-y: 0;--bs-dropdown-spacer: 20px;overflow:hidden}.dropdown-menu .dropdown-item{padding:15px !important;cursor:pointer}@media(max-width: 575.98px){.dropdown-menu .dropdown-item{font-size:14px}}.dropdown-menu .dropdown-divider{display:none}.daterangepicker{border-radius:20px;overflow:hidden;box-shadow:0 4px 4px 0 rgba(0,0,0,.15);border:0;background-color:#fff;margin-top:10px;font-family:"Roboto"}.daterangepicker .drp-buttons .btn{margin-left:8px;font-weight:bold;padding:4px 14px;height:30px}.daterangepicker td.available:not(.off):hover{background-color:var(--secondaryColorDarker)}.daterangepicker td.in-range{background-color:var(--secondaryColorDark)}.daterangepicker td.in-range:hover{background-color:var(--secondaryColorDarker)}.daterangepicker td.off.in-range,.daterangepicker td.off.start-date,.daterangepicker td.off.end-date{background-color:var(--secondaryColor)}.daterangepicker td.off.in-range:hover,.daterangepicker td.off.start-date:hover,.daterangepicker td.off.end-date:hover{background-color:var(--secondaryColorDarker)}.daterangepicker .calendar-table{background-color:#fff;border:0}.daterangepicker:before,.daterangepicker:after{display:none}.daterangepicker .ranges{margin-top:0 !important}.daterangepicker .ranges li{padding:15px;font-size:14px}.daterangepicker .ranges li:hover{background-color:var(--secondaryColorDark)}.daterangepicker .ranges li.active{background-color:var(--secondaryColor);color:var(--primaryColor)}.daterangepicker .ranges li.active:hover{background-color:var(--secondaryColorDark)}.daterangepicker td.active{background-color:var(--primaryColor)}.daterangepicker td.active:hover{background-color:var(--primaryColor)}.chart-legend{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:20px}.chart-legend>.legend-item{text-wrap:nowrap;display:inline-flex;align-items:center;margin:0 5px;transition:all .1s;cursor:default;user-select:none}.chart-legend>.legend-item:before{content:" ";height:15px;width:15px;background-color:var(--legendItemColor);margin-right:8px;border-radius:5px}.chart-legend>.legend-item:hover{transform:scale(1.04)}.dashboardTopCardPanels .dashboard-card{border-color:var(--primaryColor)}label:has(input[name=dateRange]){position:relative}label:has(input[name=dateRange]) input{transition:all .15s !important;padding:15px 15px 15px 35px;text-align:center;background-color:var(--secondaryColorDarker)}label:has(input[name=dateRange]) input:focus{background-color:inherit}label:has(input[name=dateRange]) input:hover{background-color:#fff;cursor:pointer}label:has(input[name=dateRange])::before{position:absolute;top:12px;left:15px;display:block;content:"";font-family:"Font Awesome 6 Pro";font-size:15px;pointer-events:none;color:var(--primaryColor)}[data-adt-daterange].datepicker-open{background-color:var(--inputFocusBackground) !important;border:var(--inputFocusBorder)}.navbar-brand:hover{opacity:.8}body:not(:has(.navbar)) #snippet--container{padding-top:0 !important}@media(max-width: 575.98px){.sub-menu::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}.sub-menu::-webkit-scrollbar{height:0;width:0;background-color:rgba(0,0,0,0)}.sub-menu::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}}@media(min-width: 564px){.daterangepicker .ranges ul{width:auto !important}}.btn-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;border:1px solid var(--secondaryColorDarker);border-radius:10px;background-color:var(--secondaryColor);font-size:18px !important}.btn-icon:not(.loading) .spinner-border{display:none}.btn-icon.loading:has(.spinner-border){padding:0;font-weight:normal;font-size:12px !important}.btn-icon.loading:has(.spinner-border)>i{display:none}:not(.btn-check)+.btn:active{--bs-btn-active-border-color: initial;--bs-btn-active-color: initial}.btn-dashboard-filter{padding-right:0 !important;padding-left:0 !important;background-color:#caece7}.btn-dashboard-filter .filter-name{margin-left:20px;margin-right:15px}.btn-dashboard-filter .icon{content:"";width:48px;height:48px;display:flex;font-family:"Font Awesome 6 Pro";align-items:center;justify-content:center;border-radius:20px;font-size:18px !important}.btn-dashboard-filter:has(.inactive) .icon{background-color:#82878d !important}.btn-dashboard-filter:not(.btn-dashboard-filter:has(.inactive)) .icon{background-color:#00b4a2 !important}.main-search-filter{margin-bottom:-5px}@media(max-width: 575.98px){.main-search-filter{flex-direction:column;gap:20px}.main-search-filter .form-group-filter{width:100% !important}}#iOsA2HS{z-index:9999;position:fixed;inset:0}#iOsA2HS .iOsA2HS_backdrop{position:absolute;inset:0;background-color:rgba(57,57,57,.5803921569)}#iOsA2HS .iOsA2HS_popup{border-radius:20px;z-index:9999;background:#f3f3f3;position:fixed;bottom:15px;left:15px;right:15px;text-align:left;color:#333;padding:15px;box-shadow:0 7px 14px 0px rgba(0,0,0,.7882352941)}#iOsA2HS .install-header{display:flex;flex-direction:row;align-items:center;gap:20px}#iOsA2HS .install-header>div:nth-child(1){width:50px;height:50px;display:flex;flex-direction:row;align-items:center;justify-content:center;background:#fff;box-shadow:0 1px 7px -2px rgba(0,0,0,0.7882352941);border-radius:12px}#iOsA2HS .install-header>div:nth-child(1) img{width:60%;height:60%;object-fit:contain}#iOsA2HS .install-header>div:nth-child(2){width:calc(100% - 50px)}#iOsA2HS li>i{background-color:#fff;border-radius:12px;color:#1e90ff;padding:8px;margin-left:5px}#iOsA2HS li>b{background-color:#fff;border-radius:12px;padding:8px 12px;margin-left:5px;font-weight:normal;font-size:90%;text-wrap:nowrap}#iOsA2HS li{margin-bottom:10px}label.required:after{content:"*";color:#ff4242;margin-left:5px}body:fullscreen #snippet--container{z-index:999;background-color:#fff;position:fixed !important;top:0 !important;width:calc(100% - 50px) !important;margin-left:0 !important;overflow:auto !important;padding:20px !important}body:fullscreen #snippet--container .header{display:none}body:fullscreen [data-open-fullscreen] .fa-expand{display:none}body:not(:fullscreen) [data-open-fullscreen] .fa-compress{display:none}body{overflow:hidden}iframe{z-index:99999;display:block;position:relative;inset:0;width:100%;height:100vh;opacity:0;pointer-events:none}.print-page{zoom:.55;width:390.6mm;margin:0;padding:0;-webkit-print-color-adjust:exact}.print-page #snippet--dashboardTopCardPanels>div{flex:0 0 auto !important;width:33.33333333% !important}.print-page canvas{max-height:310px}.print-page .col-md-8{width:66.66666667% !important}.print-page .col-md-4{width:33.33333333% !important}@page{size:A4;margin:0}.user-dropdown{box-shadow:0px 4px 4px 0px rgba(0,0,0,.15);left:70px !important;bottom:-50px !important;background-color:var(--ternaryColor);--bs-dropdown-link-color: white}.user-dropdown .logout-item{border-top:1px solid hsla(0,0%,100%,.3);box-shadow:0px 4px 4px 0px rgba(0,0,0,.25)}.user-dropdown .dropdown-item{text-decoration:none;color:var(--ternaryTextColor);background-color:hsla(0,0%,100%,.1019607843)}.user-dropdown .dropdown-item a{pointer-events:none;text-decoration:none;color:inherit}.user-dropdown .dropdown-item:active{background-color:var(--ternaryColor)}.user-dropdown .dropdown-item:hover{background-color:hsla(0,0%,100%,.2)}.user-dropdown .user-item-wrapper{--bs-dropdown-link-hover-bg: initial;--bs-dropdown-link-hover-color: white;cursor:default;border-bottom:1px solid hsla(0,0%,100%,.3);pointer-events:none;background-color:var(--ternaryColor)}.user-dropdown .user-item-wrapper .user-item{display:flex;gap:10px}.user-dropdown .user-item-wrapper .user-item>div:first-child{display:flex;justify-content:center;align-items:center;border-radius:100%;width:40px;height:40px;font-size:40px}.user-dropdown .user-item-wrapper .user-item>div:first-child:has(>img){overflow:hidden;background-color:#fff}.user-dropdown .user-item-wrapper .user-item>div:first-child:has(>img) i{display:none}.user-dropdown .user-item-wrapper .user-item>div:first-child:has(>img) img{width:40px;height:40px;object-fit:contain;border:2px solid #fff;border-radius:100%}.user-dropdown .user-item-wrapper .user-item>div:last-child{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:5px}.user-dropdown .user-item-wrapper .user-item>div:last-child>div:first-child{font-size:16px;font-weight:700;line-height:normal}.user-dropdown .user-item-wrapper .user-item>div:last-child>div:last-child{font-size:14px;font-weight:400;line-height:normal}.user-dropdown .dropdown-item:not(.user-item-wrapper):has(i.fa-solid){--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.1)}.user-dropdown .dropdown-item:not(.user-item-wrapper):has(i.fa-solid)>div{display:flex;flex-direction:row;gap:10px;align-items:center;justify-content:flex-start}.user-dropdown .dropdown-item:not(.user-item-wrapper):has(i.fa-solid)>div>div:first-child{display:flex;flex-direction:row;align-items:center;justify-content:center;width:21px;font-size:18px}.user-dropdown .dropdown-item:not(.user-item-wrapper):has(i.fa-solid)>div>div:last-child{font-size:16px;font-weight:400;line-height:normal}.click-line-detail table tbody td:not(.col-action):not(:has(button,input,select)){cursor:pointer}.dropdown-filter{transition:background-color .25s;background-color:var(--inputBackground);border:var(--inputBorder)}.dropdown-filter:has(>a:hover>.dropdown-selected-name-wrapper){background-color:var(--inputFocusBackground)}.dropdown-filter a:not(:has(.dropdown-selected-name-wrapper))>span>i{background-color:var(--secondaryColor)}.dropdown-filter:not(.select) a:not(:has(.dropdown-selected-name-wrapper)):has(.fa-filter) i{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-filter:not(.select) a:not(:has(.dropdown-selected-name-wrapper)):has(.fa-filter):hover i{background-color:var(--inputFocusBackground)}.dropdown-filter>a.btn,.dropdown-filter button{--bs-border-width: 0;z-index:1;display:flex;height:48px;border-radius:20px;padding:0 !important;align-items:center;justify-content:center;border:0;background-color:rgba(0,0,0,0)}.dropdown-filter>a.btn:focus,.dropdown-filter>a.btn:active,.dropdown-filter button:focus,.dropdown-filter button:active{border-color:var(--secondaryColorDarker) !important}.dropdown-filter>a.btn a,.dropdown-filter button a{text-decoration:none}.dropdown-filter>a.btn a:hover,.dropdown-filter button a:hover{color:#333}.dropdown-filter>a.btn>span>i,.dropdown-filter button>span>i{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:20px}.dropdown-filter>a.btn .dropdown-selected-name-wrapper,.dropdown-filter button .dropdown-selected-name-wrapper{display:flex;align-items:center;gap:15px;padding:0 10px 0 15px}.dropdown-filter>a.btn .dropdown-selected-name-wrapper i,.dropdown-filter button .dropdown-selected-name-wrapper i{color:var(--primaryColor);font-size:15px}.dropdown-filter>.disable-filter-button>i{margin-bottom:-1px;margin-top:-1px;height:50px !important;background-color:var(--secondaryColor)}.dropdown-filter button.dropdown-toggle{width:48px;background-color:var(--secondaryColor)}.dropdown-filter button.dropdown-toggle:hover{background-color:var(--inputFocusBackground)}.dropdown-filter.selected>a>span>i.fa-filter{display:none}.dropdown-filter.selected>a:not(.disable-filter-button)>i.fa-xmark{background-color:#e7e6e9;font-size:18px}.dropdown-filter:not(.selected)>a>i.fa-xmark{display:none}.dropdown-filter:not(.selected) a:has(.dropdown-selected-name-wrapper){display:none}.dropdown-filter:not(.selected) a.btn{border-radius:20px;border-right:solid 1px var(--secondaryColorDarker) !important}.dashboardFilterDateRangeForm,.primary-select,[data-adt-dashboard-filter]{--inputBackground: var(--secondaryColorDarker);--inputFocusBackground: white;--inputBorder: 1px solid var(--secondaryColorDarker);--inputFocusBorder: 1px solid var(--secondaryColorDarker)}@media(max-width: 575.98px){.header-actions:has(.dashboardFilterDateRangeForm):has([data-adt-dashboard-filter].selected){flex-direction:column-reverse;align-items:flex-end;flex-wrap:wrap;width:100%;justify-content:flex-end}.show-on-desktop{display:none}}@media(min-width: 576px){.show-on-mobile{display:none}}[data-adt-dashboard-filter] .selected a.disable-filter-button{top:0;right:0;text-decoration:none;color:inherit}[data-adt-dashboard-filter] .selected a.disable-filter-button i,[data-adt-dashboard-filter] .selected a.disable-filter-button a i{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:20px 0 0 20px;background-color:var(--secondaryColor);font-size:18px;border:solid 1px var(--secondaryColorDarker)}[data-adt-dashboard-filter] .selected a.disable-filter-button i:hover,[data-adt-dashboard-filter] .selected a.disable-filter-button a i:hover{background-color:#fff;border-color:var(--secondaryColorDarker)}[data-adt-dashboard-filter]:not(.selected)>a.disable-filter-button{display:none}.was-validated .form-control:invalid,.form-control.is-invalid{background-color:rgba(255,66,66,.1215686275)}select.is-invalid+.select2 .select2-selection__rendered{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + 1.2rem);background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.975em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}select.is-invalid+.select2 .select2-selection{background-color:rgba(255,66,66,.1215686275) !important}select.is-invalid+.select2 .select2-selection--multiple .select2-selection__rendered{padding-right:calc(.9em + 1.2rem);background-position:right calc(.1em + .1875rem) center;background-size:calc(.65em + .375rem) calc(.75em + .375rem)}.datagrid-exports .btn{height:48px;width:48px;background-color:var(--secondaryColor);border:solid 1px var(--secondaryColorDarker);border-radius:20px;padding:0 !important;align-items:center;justify-content:center}.datagrid-exports .btn:hover{background-color:#fff;border:solid 1px var(--secondaryColorDarker)}[data-adt-replicator-item] .input-group input[name$="[value]"]{border-radius:20px 0 0 20px;border-right:solid 2px var(--secondaryColorDarker)}[data-adt-replicator-item] .input-group input[name$="[value]"]:focus,[data-adt-replicator-item] .input-group input[name$="[value]"]:active{border-right:solid 2px var(--secondaryColorDarker) !important}[data-adt-replicator-item] .input-group input[name$="[value2]"]{border-radius:0 20px 20px 0}[data-adt-replicator-item] [data-adt-replicator-remove]:hover .delete-text{color:#dc3545}[data-adt-replicator-item] [data-adt-replicator-remove]:hover i{color:#333}#canvas_cont #canvas{background-image:linear-gradient(to right, #E7E6E9 1px, transparent 1px),linear-gradient(to bottom, #E7E6E9 1px, transparent 1px);background-size:100px 100px;background-color:#fff;border:1px solid #e7e6e9;border-radius:10px}.draggable{cursor:move;transform:translate(0, 0)}.light-gray-bordered-box{border:1px solid #e7e6e9;border-radius:20px}.table-bottom-scroll{background-color:rgba(0,0,0,0);position:sticky;bottom:15px;margin:-30px 10px 30px;height:21px;overflow-x:auto;z-index:9}.table-bottom-scroll::-webkit-scrollbar{border-radius:20px;background:var(--secondaryColor);height:14px}.table-bottom-scroll::-webkit-scrollbar-thumb{border-radius:20px;background-color:var(--secondaryColorDarker);border:3px solid var(--secondaryColor);cursor:pointer}.table-bottom-scroll::-webkit-scrollbar-corner{background:rgba(0,0,0,0)}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, white 50%, #eeeeee 100%);background-image:-o-linear-gradient(top, white 50%, #eeeeee 100%);background-image:linear-gradient(to bottom, white 50%, #eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFCCCCCC", GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, white 0%, #eeeeee 50%);background-image:-o-linear-gradient(top, white 0%, #eeeeee 50%);background-image:linear-gradient(to bottom, white 0%, #eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eeeeee 50%, white 100%);background-image:-o-linear-gradient(top, #eeeeee 50%, white 100%);background-image:linear-gradient(to bottom, #eeeeee 50%, white 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFFFFFFF", GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:white;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:white}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}.structFilter{min-height:20px;padding:6px;display:flex;align-items:center;margin-bottom:10px;background-color:#fff;border-radius:4px;border:1px solid var(--secondaryColorDarker)}.structFilter .evo-searchFilters a{height:38px;display:inline-flex;align-items:center;color:#333;padding:0 8px}.structFilter .evo-searchFilters a>div{display:inline-flex;height:25px}.structFilter .evo-searchFilters a>div>span{background-color:#ececef;color:#737278;border-radius:2px;margin-right:1px;padding:0 6px;font-size:13px;display:inline-flex;align-items:center}.evo-bNew{display:inline-flex;height:38px;align-items:center;justify-content:center;padding:0 8px}.evo-bNew>i{margin-right:5px}.evo-bAdd{display:inline-flex;height:38px;align-items:center;justify-content:center;padding:0 8px}.evo-bDel{display:inline-flex;height:38px;align-items:center;justify-content:center;padding:0 8px}.evo-bSubmit{display:inline-flex;height:38px;align-items:center;justify-content:center;padding:0 8px}.evo-lBold{font-weight:bold}.evo-lLight{font-weight:normal}.evo-editFilter{display:inline-flex;align-items:center;height:38px}.evo-editFilter:after{clear:left}.evo-editFilter select{font-size:1.1em}.evo-editFilter input{font-size:1.1em}.evo-editFilter span#value{margin-right:5px}.evo-editFilter #value{display:flex;flex-direction:column}.evo-editFilter #value label{width:220px;margin-right:0;background-color:#fff;z-index:1;border-left:1px solid var(--secondaryColorDarker);border-right:1px solid var(--secondaryColorDarker)}.evo-editFilter #value label:last-child{border-bottom:1px solid var(--secondaryColorDarker)}.evo-editFilter #value input[type=radio]{margin-left:5px}.evo-editFilter input[type=number]#value{width:6em}.evo-editFilter input[type=time]#value{width:6em}.evo-editFilter input[type=time]#value2{width:6em}.evo-editFilter input.hasDatepicker{width:8em}.evo-editFilter>*{border:none}.evo-editFilter>input{padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;border-top:1px solid var(--secondaryColorDarker);border-bottom:1px solid var(--secondaryColorDarker);height:32px}.evo-editFilter>select{padding:0 9px;font-size:14px;color:#555;border-top:1px solid var(--secondaryColorDarker);border-bottom:1px solid var(--secondaryColorDarker);height:32px;background-color:#fff}.evo-editFilter>select:focus-visible{outline:none}.evo-editFilter>span{display:inline-flex;align-items:center;height:32px;background-color:#fff;border-top:1px solid var(--secondaryColorDarker);border-bottom:1px solid var(--secondaryColorDarker)}.evo-editFilter>span>label{margin-right:10px;white-space:nowrap}.evo-editFilter>span>label>input[type=checkbox]{margin:0 5px}.evo-editFilter>*:not([type=hidden]):last-child{border-right:1px solid var(--secondaryColorDarker);border-top-right-radius:4px;border-bottom-right-radius:4px}.evo-editFilter>input[id=delimiter]{width:80px;border-left:1px solid var(--secondaryColorDarker)}.evo-editFilter>*:first-child{border-left:1px solid var(--secondaryColorDarker);border-top-left-radius:4px;border-bottom-left-radius:4px}.evo-editFilter .as-Txt{display:inline-flex;align-items:center;border-top:1px solid var(--secondaryColorDarker);border-bottom:1px solid var(--secondaryColorDarker);height:32px;background-color:#fff} diff --git a/dist/admin/fonts/275dd55e10ba966bcb9b.ttf b/dist/admin/fonts/275dd55e10ba966bcb9b.ttf deleted file mode 100644 index 886134dcfa3c784be09217fe57bf3aac9f059bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132152 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 diff --git a/dist/admin/fonts/7c8d04cd831df3033c8a.ttf b/dist/admin/fonts/7c8d04cd831df3033c8a.ttf deleted file mode 100644 index ac0f908b9c9c73da558b45d65cc5c6094874d3e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168644 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 X76wnEi(n^v8!x?bp_;lO!DIggn3ZN8 diff --git a/dist/admin/fonts/9a42f2741ca78a25feaa.ttf b/dist/admin/fonts/9a42f2741ca78a25feaa.ttf deleted file mode 100644 index 7866278399ef7b09069cf47aeb58c642311e1b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761340 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 diff --git a/dist/admin/fonts/9d7a6e03c6e3ed49c7ac.ttf b/dist/admin/fonts/9d7a6e03c6e3ed49c7ac.ttf deleted file mode 100644 index 9411bfbe9801bdde3c7e12fe0af069ad39df5eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132204 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 NJz&BElYk!s{vQ+DoeBT| diff --git a/dist/admin/fonts/9fb9e3d1e42a353d678c.woff2 b/dist/admin/fonts/9fb9e3d1e42a353d678c.woff2 deleted file mode 100644 index 9502c7c708ec9a549eca3bebe7fd9e922712ceda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285540 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%0D?q}k`^ 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 diff --git a/dist/admin/fonts/b65ac3b8da9f6efd3346.ttf b/dist/admin/fonts/b65ac3b8da9f6efd3346.ttf deleted file mode 100644 index ba94f575bc359e47ff0216a86ec3f1bbb0d33394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000084 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 diff --git a/dist/admin/fonts/cf56c1b149d0a5e8d7c6.ttf b/dist/admin/fonts/cf56c1b149d0a5e8d7c6.ttf deleted file mode 100644 index 0112e7da626ca2f959eca850c806779ba55dbfbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168060 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%0ATP6Zk>=6}r3I6QK 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 WVelBb2)1!{_R^~ms-+tiJp5mlrotHj diff --git a/dist/admin/fonts/e6f4e254e8b705435dd6.woff2 b/dist/admin/fonts/e6f4e254e8b705435dd6.woff2 deleted file mode 100644 index 0c2ce0bb43129e5783277fd9c417f2aafb7faa6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352752 zcmV)iK%&2QPew8T0RR911!3?23IG5A4uH!51!1BC1_1y700000000000000000000 z00001HUcCBAO>Iq=R^R3kzC5Rmk7(}NCk&s2Oy>Yf0cpir2xQwa2@~vYU}UA8A)oh zhvx{eaR30gG7kY&RaI5ZNC@mu)d0Z%2S57B&wlZ%-~8?mfBMVc{_(H>_^<!@zyBN< zj5`1zOlFJKW_LJUZjaaJH~jZ4d%drAf5`n)TD2r6Xq-#P8ATK_HZm>;CPW=jM$Nwn z@G(FNX?A9({P6$Yrr@eXa?^XJuUP^9r1P>6Ok^XcqQX<!iRDrXyv~=GBU3A_Uk>zM zdYQmc-T>(P&=x-U{n4MrUFpqy$SeP3G&q4BZ~~Q7;RM(sJF2$3YVQ0HLoi|l3K5KW zpYTX*e!Xu=7<%eZwzJ}{r|LXFY+C=4mLW}7M8o!a;v(NnXb7CxaHa%Oe>_#ApC0H$ z+(fgJH_$FY#OCwPK1l*cMby5idb_zm9V&+Y>#Uy)LdZ@nz1{Ic>i>^Z>+cmkJ?T9e z1TQhfjzLP|fL|O-P1??QnsjEDyWJu15_OS0l$qr&v9^oQPoM>2F96sx$Nq^_wVyXz zW@pQ6X+U3K2`s>hB?v4jiqcY*vKl4XGUW<4SuSztE_XPITPhu=IL$%MDR!L8Dcz|? zy07JQHSG$o`&z#KwIr7W{QqgG{<{P3%^Sj9p2g8hTJ4TT+L1vy6Oth$ONQt~O}FGI ztdi`w|5WqYamkHKprV};Ipr-oMHk(&3V`2#{PX-u_3ybv4`_(rtX9&_?Cj2Hg(G_< zE4E{=iPwppD9}V<e><>YH_)o=H2JLpWp?|w#4fQ)>=OL(Py9@6-h7xpGye~K)L+q; zc+nDjH?~)H90%OSYnRqeK_T9vleTxKl+caa6iDT?M?Ngj9&wI%k2pu9{drod{r6|) z<IEqRMHG2QOCrl_b6B<mPU0jAxUq|lFLm(REvKwva+d>@*d^W)>xgy4&QWu;{)y)N z|2?BSGrO~%O-O){5aH55Hnv#XP*bi^u2-&@RG#>!{r<$I`pu-zZ1JmQuf>&^kN|QZ zT!|Sn_v_bScXkx+P9Y}bs_xnQ-?OU_0uppc#Y3hUFrqTV_sdc)r{XF>qpOd)T?SNT zWRwVr0P6jj0Xw_vFish!fa1(L?X8@Vnaczvsy)YL`a&9}6+0sxHKK`e18Bz1Owa&R zmjU$uZ>qh$q|YDH>AzFH4!O>u`jul--uvz=?#!EF5Q+iF0w7d?qys?w01%uvfTS6a zItQS1_K=&Yjnq$~HanyN=s=oVkP-_8C$1bq;%??TgixhWxhQ|>viEW4WB>nqzqD!& zfZ$pTMr2jB&}s^R0LY9eAtPIftZFUJKIabZ6N4{o@JtMp55Bo$@XgH!X6`umzWcwu z_x>~UZvvpX0K(nj!E^|+-2p@t9Asv$Ro~q(Fn7nm9KgUqaIFRi4#3Q68P%-;kii1L z$ZmjSW|ItNHpz%;twzqs7GTySs)ZU=^{7^l#Hi;=4aY(bdpPXZs<L|epIRIbE&)+D z2~_#B$7xjMPy3M-64HWCMP}I1IkE^~Tk>f8uS2xz>bC1iro{yel9+!Lag+qlP09}2 zvT~b+IJ4&3K0(Z}EL@l!nGDrFZGWv8PcX(HgmhAt;jCA!Z7Y-_A@TEN?5(b||IX~^ zrdBN~0+Nt~7mhKtPugEA8Z?Ti2sc)jv9#;%`>VBXLxGSVh>Of#zc1<fBW-ew<G?Hr zS=t=3iA~<LrBnz3q9?XRmao6p?zh|hmjEH)0KRltmc=2<v~JS(E^SkTu?+(Bj^@)y z`ZEY7%VK!pmz$sMyz+<*`yT)f|NrmZ%|E}A5AqMYtt(&^8};$X-_TY50T%fnAKL8} z|6|kUJ?s~3-dp*J(*}$TJ^y%WYm=W@VybubE$~M9ryg<2&tR-gP(Gr<kMFtl@%!%) zT+ig=kgj-#%6~_<^gB>N0R;PUPy;#Zitnc?4d8Fh6gjF<XcT$<i7L-=?1khg&%SO? z<k05fCukhgSi#>EoV%U!|0>}72^87&;n=qEc)J|t+E%x|(!Mzd90GUdXgoE^|AELJ z8F%K0d`(q{$N;>XE#Q0C44A0#XwPaPV>++jl6^V(_=_V41MvgCI@2@X9puxt8koHQ zqvV3GA+(F*%H>_TFq-zTU3j@5=jK#62fp-q->&Dmmv-b|c-)*L{WUpREwY2sujy#p zL;d{;4lJ@$<GLEx4R&~vxiCChPT-?0_&GVCmV-U-3iisW@|^1&kWawa7RD$K@eTFL zH=Z{}_L}DaTl@#@u-CF2Rm>af&?dSgu8iK@yyX|$KQA&ZGI{Bh<A?>W&&p|wt*IX7 zfOpQZePMR_=|AhMcZLt6^;~lLFRXr`c`VI4?Wr^Wf3@X9vqR{+7m|*z@8V;)bG1Xp zk1*GZ1}V$qL5W)dpZLxsJ7{AtHrnw;IX7~yi!YgT1%=)NFksSHjrU^v=0gqsZ$8dg zOnw;WMPKmkT>5q3IhbjzPX#_6%hB{yM_Ip{?2L;l#}RoBeO<YA9G+esb+zNCJ{b=$ zB%c_p%OSDY>#+*iRWFMOJuZ8^O<4ai*MZvIsB8~$s_S@*aVfw$#)|$|W^ZG<SR2H) zZXa!ZP`}s(tK|z03=UMMdif5R2@doq?#&45I(bkn7yPUL!JmiD=YV;a`g9;$SK6nB zjqZji>@)`Jp8G(aksaRLn!}fI{r~H^9`EDZD~mn(@(p?j<tFl#@UpG&#BrBpr<Q5Q zcQ8J+VkPDWdY`LpV06?^EDuE<I4HKxve90ft1s2EOVWa!x;SrgbTRI>%=Qv&OMLde zg0|+sPv9ex`;jN`O5fue=H6`dB<DSYf*EeFFU8emdm`qRXt_KO^7wU4;wZ)y{qCKF z>xkRc=Em`qLcVdwcTa~#qqpvA-d?%Bkhg0b>V=54<Ck~>pRvv6m-_~#SCXmBo0r*q z<j(nEZa7~>SO;#d55pKgQfZq0o!-IIw3u(0FLYt&o(F9=yXNEcQ$MwB%^7Byu_DT^ z{x0huahKq07CF!^KHQJEIncTce(=+<uf45UY^s3He-gQs=(=9(vw2<l7I{$KG@tZ3 z$==qwJ*YlL@Kd3ePwJ!GBk*W(QF5p}Z%?kf*iZ57AiJEdj@%;j-{DMjJ;V>Do0@Cm zHPthTlHMrGqC(3v9505`*{kZe1P#yi@YK-{Ia5Aqqu&>0-Q}#5b)1ixVO}gB_3&!W z7uSYid_aeNiXX?b$E9OhKZ`NF><ZTV7JPYUAUd;r!ke7;)b8`ZF;d~49Bi(=--i#+ zRd~Kadqqx}PGvhim@|u$7z3Q9Z^aX3a<ah(tJsUYYOuoBih3;$cYx_R_@>ic>Akn? zW!Cnjvot4@^lQ#+6}-Z(YR?Du1cr<ItK!@O-|XDZZ^qyg^NqY)>m`T&zQEL&SuoRM zAKVdGc?Y}{7p$N7nXYYe9x~kG2{Psz-^tID0bR2k`i_QeDXtzm74gdF>yN`u3<+a| zw&rGzkE!hJ(|A)IpHj=ga;hkgLbFGy^S&PDsUcUu+I*#FD%kErT~uLb+Bc856lYnM zoxx@--ICoLdfalZ8}J9Z)PcxKdc@Hu3waLm)xHNh;hE;^bb68>o~dd%?-Teh*u}MM z(z$vaS6s6e2-C(~;XL_PC$_qMY%B+S7}E?qt;=oAk=!7axvJ{9k<?9}RW3MH+d~P2 z|FiF0pIZHD+4h*(YyV4ri?~a)gN+!CzV_D*zN2$3lm$vGZ_1ikJKo?cw+H75!e93N zdV~Yzop>h2biHTOe0&(!obI*4I$f~`HXk0LT-G^rBEQ}TDCfzmT0YdVBT?=whFA3Y z2>C=U?|My+%imizK3p6Oyp5Lri0iWN?E2gV_;lS?-<5r*>2ymDYkz<;hq4~D2eRsY zgP(_qTCQaJk90%KQJr{w^g!V~&)Z->qkHo>Q9H*mx;TsL#7o2>x|aL0)L#>d-mN}+ zj9}is<h=F#K+a(O8X$J1`?i_dU6j&uz7p;}F02NwR-bB~Wp$K~v@p)=p(u|(FS*E^ zeYLe2e7>3;ZR{cEd6NTnfpru9=;zbMxOjhBjaBw&74$iel(AEss;HAT=)N7kPjd7Z zlw0wio`=g;P^Wy2D#pq^r|zSIPmxFT%fmcL-sRTVPWcUO()(&{{MTlybHOmykFV?Z z(619-sUw~`)>h<LxxPFXaCrdE3h2{eUEscJ^`JdrU$^XY+ds?NjWw>RHqQND74S}K z^!y|9`xcqz{XqwF9d%c=d8B+AH)b>A+tc*4Q@yjk)hw>sykmdC`{O+8*F=7j!H+YX zrprT|p1O*+lW#SCUl`%QXjVL|o2uD1^9{ZO?<eK9(8L|DkBd!-;}T=z*$3}qWxrHw zUeFfoc$y117~91kfM*x-`|Y?UXn&u3T}=>lblq?=jnx;ldgpS4PjA~)#ES3<c5#EF zF3@vrm;-(fyagV;tqjqv`J~&okIGL@!wD__mv#2GDt&5BK;I)Y+=ZM$V>W#HHG}`; zsx9B>fo7LkeY_7SZuMuy8T=nQ#2xx>r~EpeZ-bA}hHziptl71rHNd~;=edrukA21Q zv`f<~Ve-445I6Os_R*8ykMZ5`={Se~Nu$wEaA+KVG%%g}K7d7Ae9eN5@|b+0{KOc; zJLx`{;=W-Ec@}Vs#n`Dlwp`8OiWsbas8{Thjla&~z47VRsJE*cyZupibUri-mfL0e zk`w2hb@3_z<qpZdvkm(US66ZFUX+t~$ybgwY<w$LxY*(D%6Gw9IU(z3W5L9tu5v#P z(BFIGb^I)y!sm>~;6sl)D|IdWkIDZ##Wj@|btqdbaqB|f+?N;etGpVgSht*7KBDV$ zYhy#+I!An+qwcBs)Oev>K~|Bww8qZ`eayYp@Zk*q+HQKflbQbvv{nThf?akK90psz z+jez4XG1(@90G3Hchx&QoH;i*r_0~pDDqO2drz?MS4UvYd<MVgQOj2X4zqicO>*Yc z*=&{$*#|yO=;S7T{yt&f8`@<YamU!IGH2q=(*4r87w=6M4bm3kU0&f1k>|IB)FpGH z%IqonU(rsY-K>t;Rw;HWEbA@E1OA&l^B#IzbGkl*N9<L-UBZTOr{(U?<ZR|n)#S7> zex6uYijg>5_b~IdvXeP-tJQJ7yXgC(yNsSM)qGaDbtTJk=(pxE%U!)k^s(>F*B12c zjd>RHd@573hBoqs-?i8Fkmfvpo!NJr`J3FTe6oGHsnd1*r`#9wquR#)R&(v8Xp><J zsM_q{d#HN5iTl8x+_vvpvN7$wxv=L{ZGNU_;>7Fuyu5dra=h-lR>b;VwRf7$`<N#D zCC~r5PULI*epPdqunW~?JjK4g%WV!}gLtsFn3v5r{k*2A@}N1tOx*kV+W1k`sa{zP z*28zA_3?Rcn_P;%e_%TZJ3`fdo3J8&xt`{w8XxV7FnV+Ih1<h*d<)Qj_RM`*QXKkz zUlxP*v+VD8`tgYOKfQaWStnMIZwuak>{6Sq+s2?=R+Fx$i=2zN)??Cq%~apCM_$+W z=kzSCyaVs0tqHSAb5)MLyvX@o*~jkAKL6WnLs74$^Kz};e^>9~b6an_{OsH9mg#qA z&Ht*c_se^xXXTQgUz|TDXWe@a&xlL4-yE;g+T|lZtGd%K_x?N1Ss6#{vU*Xq)5_k` z>!X)h$FZhfz7yMXwBKxdiSJnQ+<8#8o%uWDRjS`%7x`qPpKHRYzcre)zN@jH)_%RC z?I!OQuJgHjUbZpCs<^K=7Frrz|J$u;92>N`1%1)H+UT;~EZ3_l{`uNonj?L+O*22I z7T7u8(e{jX-3y~hQxk6Vv(Ki%c6xJ~vwdig{yJ`-YQE0jp44$)&~HV*Js;|5KToC_ zJI-})#A&|ptBQNIUR);!W1W>66D*AP!sCNy!=Q}%&y2a%gUSXR<r(9SUcWu?ug>d} zd3gPJ)a9`jm;w{vnf)gZe`aDfdFmM^tRMT|6Q3S_4%0hRSmO?#@Ht=bC13G1-|%gD zpib18x=>f@M%}3g^`u_ZoBB{+>PP))01c!;G?<3aP#Q_=XajAbZM2gP(lNSCcj$+R z6wx9{B#R=Vs3;-Ui_Kz-*ebS*{o=4VAstyn&X#lJTscq9mkZ<~xn6FN8|5Z>R34M( z<x~0032?%l2q(cwaY{L7opZ`h`Ktt#sM3{3WhkwdsLSe=dad56_v)kiq`s)1>X-VX z{->RASG(KYz3xHxvU|n-<NgJ~2Y&EJR)ixO$q;a$;35OrkrTO47)4MDrBN15(G1Pe z0xi)Bt<er0&=Gwx6vHqQqcH|!F%IJ~0rM~)3$YkWuneoQ25Yen>#+eFu?d^81zWKV zyRjE1a1!Tn0T=NYFYyYm@ex1p6Tk6~iGA6h12~vNIFvJSX3oap9Kn$s#nBwY$t*dY z^KdCH&lR~k*W`L!pBr!^ZqEyNAur-Jp8TEyIzR{NAe}`g>Ljgnny#%Em_QR@;!U!t zZ0eZ$W}um9rkWY%lDTXidrN!kdK-H?+CUp*JvNukW6Rsi_L_ZQA6u_|V?W#P_IG_K zVu`pSkw_`hiA*A^$R!Gj;-ZwOD!PhyP7<fQQ{P$VY;d+ZzntIBALp+uDx1n?vYl)% zhsuNUwtOhRN+Ey9U-GYH8OU&zK&4fgR2G#(6;Op#1yxmbR6W#CHBwDbGt@%0f?`li zicN7S38kb|l$z2|ddff<DHCO;EL4T6Q7x)Xb*Kq-q)ybCx=<hLOZ})n4WTJCjpoo? znn&|#0WG8@w47Gc8d^*1XbWwp9dv|F&=Y!2U&tas4oOn<ms~RBkxx;Gi+D(gL`Z_< zNP$#HjZDalEXaYJ$cuc)j{+!y(x`wcsDrv_f>vma_UMA%7>Ajdhb35sl~|26Sc~=8 zj3YRP<2Z?nxQ{1zhxhn^kN5(G-|*lg6k&+s=p2_5auzPkWw<=o=LXz_n{j6z#AA6J zPvD6>lNa(LUd&5)Ij`WAyqY)gCf>rkcpsnPvwWT}@I}7Fm-z}`;~RXFpYTh5#h>^u zN9hbYi!P#z>k_((ZlXKt&bqH2tEcGcdWN2>7wBbrlisFx>y!GbzM*gH`}(PVuD@tY zOZ`W)c6Ee~bfdd*++=PJH<z2+ZR9q0+qmuAN$zBKo4eh8<qB7s_@<yKWQv*MrnD(z zs+sC$x!G)Xn7!t>Ib|-J+vcHpV#s(V)Jx(e_o{f+y-nU0Z>x92yXQUhKKe2JqJAfT ztUunL<<IjM`AhvZ{t^F#f5E@)zwlrCUwk`=A0!A828n`_L6u;0usgUITng?7&jTxP z0vUV@{{R0UEn2kf(Yi(J(f)jzsGlR670*g#Wwf$d4Xl<{J8QNz-&$lXwVqnftdNiz zA+16>g!HrH+VSjyc5%CuUB`Z|?F*Z2*ABCzL>!SwBo%2y29ZVN5cx%6QBsr@)kSyl z!Aa&+bQ(GvoK4Plog?R;EH0bL=CZx)AcxDN@}7JwL!^|y<R1xXWVnn}iFJOmsa&d% zDyFKa8mhDErADZ6YO<QGmQpl|NwFvn#ie9AKJ89+sz%k1)um>ab-U#OG>oRv%(R%6 z(aJN~MB8Ww?WALLjh@jPvdGr4Z$x_sh=zEGk3>j}WV$3>%7&cCb#?_&3}sOn)le7p z&<w571|882qcH=sb;a_dn{e>zCvXne@ObAFEd2aq1_(nqN8?zWfYWkzF3IJ%8aLp^ z+>D#^ARb;G)C4tA$1l9?E7WSWN$o#BXVf`$N!?cW)id=*{nn&=Xwm69Q)lUN-B*v& zWA!*)b-JFV7wTn4PwF%2hQ6a;?EPCCU8Dc%|E95NtzUMg>1_s>p=P+5YNnYrX03T> zKAIZa$tK$rn_)9;uFbO*w$d)KtL%Ea#qP5Q?J0Z7-mtf=vccB6wyuLKcU5ksTjf@} z-R_#Z;a>PgKGTo(6a5rF-Ou*({bIk=@Ador34h7o_mBKr|6aekTZPh46;_2!;dnR^ zu7!KyZTJvAhA;pB|9}1eCH?uU>Hm4sMT}HQrBq0{lu4<SNTDQ4q9jN>k;F-?#7MM6 zNhFa(hzO*o^pNh-UfN0<X)R5qi8PdYLa0Lx0z4cHe&ZK@;yb?KE56_}KH(!i;62_E z;Vlu~;589m5#c3X;3*#C5gy_J?&BWr;1+J+I<Dd(F5o=Q;Ve$!IF8~74&xy9VmEeT z8<!Gs2@w}_5fK*>aRCt#=Mix(XA^Pe@?biro%`t&PA1|cB2MH4j_24rP8ChWQ5?w; zEGp~8-MJePcjYeJf}3+=Zp01q>|w6QnYW?S-}2yp;J@HM{+*NO++V?8{2BZS{1N=Y z@BPki{2KhqFTpST+|PW+w|&d6|CsK&uYs@niZA)7kAM$*zju3ww}3Z;H+iGic`0}a zc(E6Gf#-RyXM38bdJ1?Vc)W*uFnADvyMwF2mEa0+5xBtl&UG7bD{xD23jj9-H*^DV zO-IggwzHh+3~;*Boaz)O>5skv=)K<QrJm@a?&^jv>yj?$tWN2q_GzznYP+^-i`IkI zYNZxwwq}7QX`&`*yvBjXg2rexsJE&>m7oexIjBsfDp9eDRHy>wD^I!VrmpIu&g!I& z>Y(;&2WqP}YNeKHq2_9;CTgsPYM}b6r#h-BDN?qwl&K7*Dg^+P82yiaN57(<5dDb0 zN8h5a5PgY069W+cH2!J))A;oT17UWU8#ac1;YwH<dd0s;7?DsBY9y=;JwlIA7Rusp zhACl47!hWMUJ0WTriVUZZF$fIe&<hq<#(OY89mpf?SB(+j=#B&zqLnuLe`L*w?j_F zp<YN1IT<t72sPqg?%)o+=Nzu%3eMv)&d?0?P!&$&H1^_u?c+YRQ6moFb@t*WZs2FG z&~JSYf!Fk%v-Dh_^;&y$Mu&7r=d_Jm_?l1oR9)0VJ=8|+)K1xzpBZ_Hhj@VdG(ery zO`X(A&D4q`w2D`>&;P0e%d$3ia0hpA9k+1}w{Qy^v4Q$<9mgnL6VyTdm{(oYKsnV$ z{nSl$l%Ij5u^d0rRGniuhC7r|slLfK_y%96bmdnAucq1@$1y&S!@P=D@}geYM|nv< z!lzuu9o)isT)-I|#zQ>7UjEqIaT4(FCm5glyg3cL#NGq;cJE8|5U~5;^eqN#9RT<e zz)J#t!p{I+i(ln401s{<Ke)}dZ9khIu$;cV!G7Csz*_l!rERfJD|We;_#PW(qxN=+ z+a<fc(+sc`uWn+ktQBB|!~5zcKy(g>cEmRB|7^4hf1dP=o_c<%`iV#F8kSdBFTg6D z{Kl|OK-3Gwm6!H8BO3tN+vp)+Jpk(lM8*GW(sWwZ1h7VcH2~tF>}FZLAiGf*pIpVC z8)tRlrpQ{8wT6#nPuahA)<;jZgX}8*L@u6!HNYxh(XZ9K3xBS|Eqq}SL#Vx%4~XBp ziRArLP7b-`;Rv~tySSTsh=@s(kdF+W{1l)dg(yrBic*Z?l%OP~C`}p4QjYRepdyv1 zm9sJTj@)$a#N0`F)AQCyO{pcdrGYe*CelorOB?ARy`;DFkufq+Cdp)(B2#6WOqZE5 zOJ>VFnJ)`ui7b_6vRqcnCfO!?WUm~NqjEv+muKa9d0F0;PvtZDLcW#n<a_y9ewDxF zANg0&EX~#&RW)^*(rYxo7S-ZfO3P{`t*lkFs#eqLT0?7U18t}+w57J!ZrWQ%>o}dP zvviKG(ABz8H|b{GqFZ&FZr2^UQ+MfZ-J@sqyk64FdapjD59=fPs6MOD>kImxexM)f zNBXgTsz2(_`iuUdf9d~*<(gQ^ZnVe}D`$1At~ItM*36n)3u|eeth05ouGY<ZT5s!P zeXXAju<<t4rr82pWE*X(?XiP)*pAw9J82KubM~=)5nLB^5BdiEg8spPU|=vP7#xfU z#snLJ&w|gLxHhh%8|h}cS#Gvl>o&QA?t**7J?0*F&$wsZ8}3v0o%<oo4Q~yTuzXlC ztQGbM$A#O&hr=hsXTvwc55iBwFH%9urTV58rdFjMCk0Tt1NCT++<HI^bp1?i+GCxn z0X<U;^h#-<cS?XhDId@`Wq^Lk1O2D@>+I_X00n@7q=LYpR0tTH3Ijt@5nyO43Jgod zfZ?e)Fd~%zMy8U$s8k9Vok{~^QW;=uDhrHD<$&?2JTM_u04Ao2z@*KUfXTo#pgOQy z(#pVIX;t8$bPjM>@(*xK`Ur4NIu5uj`4@Oy(hzt<ZZ`0{g252oAXyF3O-l8J=uW9Z zbeGg1swf4bO42Ndsw!^{M0=#|Avz$f0?|Qfb%+j0S3q<`S_z^v3U7tzg2GQBx>s5a z;<WT(h%3q>h*wCKK)h124B}Oir4X-{EQffFtPaF$WpyE5FB<^y9$5>B_sW_<yie8~ z;{CFg5MPpf2JvM{8;Bo~d<*d>vc?d9Dr*AiJh|DBzE17}q_3B(hV<=nk3jlv1!Evx zU8z-&en@UDq#u@h7LpukHYB;y97t}L{sPGz(o2vOkX{2xLCGvg3Q1-|Qdq$TNH$7( zL-M?2CL~`<ra|(RWD+FbN~S~don#^;Kgc>k@}n#llAooQA^Afx1(H7{Qz7|V(gc$K zq%9%ey|RxXvqSPSWRA#EkU1s&A2R18lOglG)IsJ2$r#A|9e%a{(8<f)*%}XM3-DP; zo&}$y@B{F<3de!JTB*muUneaE{w9S_g1<|0Kln&tMeu2b&w@`BZU>){8wtLU++*O2 z$ZY~&Ozt4~;&N|*uOK%Id_`#re0Aw&@HM0x!Pk;*0^dn?5PWCZaqwMaC&71>?E&9S zb{Kqj*-`L4WCFgotQ`2hlA7TANmqj(CG8D<QtY>r3EF8W7z2KWg8txVDi{QQmV$xc zXDjFjevX2^;O8nB0DiSJKln8YYk^-UJr90^QV#q^Ni*=9<plf=$tLhSC0~HwCEW&o zw{$!BJ<=WE_bMJv@22yp(g)}~rt}^<k1KtU&J#)>qVuHEHl3$}_IcEfbY4{YFrDuz zJ&Vrw)VhbxPojReKSk}g==@BB`_uWq!oTUfqQTYZysGwZ=)9(Z{pdsuE~N9J2LDOt zBMttT&L?V@bUyC}jvq$6G(-5k|4r-ethwLzyExY-C|!}PrPk$S0}3TsTZ8>%gG#?k zHcIJ_$i}KQiEO+EUM8EMfr@OR!scX?!nKo8*n(_I(9TBf3&`fH{d2M<8g&KP3eqN9 zPooCNHdgvB*``6eH4$FBElO*$on$WA&f(f!IPrU-UA7zH+JjNpfb13-B)e7NCbHW! za1_}CYVE_&%4(g<&?;)3!*HV3-V6t|_GLI#YcGaJtF;NkGu8SL!?S{RA!;pTc#+aJ z!`mxt$nY(PRqFt9<N+Izx5y`8OY%wN)3FQrO!C>-i+nEm=Gd2fOY$9XIr&cHJL7ut z-N{eIjpUb*Uy2vVuOPn?FOgqOeht1#ejWMm@OARv)0)9o$p1k8|MA*B=Oc`)Pa|by zLq>L_aTp^zGqO94(;3;5kwa;m!^q)u1C1-`ri^U8LbpYCh~^O8VY<uF+=}iBDr{~~ zcV)U8)7*jXrgVQl7vIqRBi%pIe1q<PQ1dOi|5x*Ex+4Y6NVlN-I?bByJ1S^?Liato zAJF`i?k5`A{DSTm6#X>6qzDu#eSu<>4)eYi#aN1o^bJr<p_oSB7>XGbv*;U7F^6I< zeUm5_P%NTv3dIn`Fn!Z0mZ4aIzF8D2QLIege2Ud5)}wDB#Re4n(YG|k0TlnBZ!3y_ z(HleGkLiu0w+4M5(OZk&7W6Nmw-vqH>0g1~oiwulJbHK2yN~|!={-R2b^0%+_lDGe z2E8}c|9g6GjqE>@-rJPR(f<d^6)3kO8Be*r3i@YK?m)Ra$?}wY=rHeJK)EO7aU`o# zo<R8&$+ncwQT~+V3d&zl{+i@|%HLA{pX6c65z2z(>y#zst0do|e4X-jlJ8T#N%<DZ z4=8KOcSwFj`99@GBtN12l=4%OUr>Hd)h78R)o7}zB!8!xMKz10OErf^CI!_zss$uH zszp>wk-SW`wEkw2x2Tq<T9f2$s&%Q>Bl(1CL#n+<KBL-)>OjI2s)MPHBg~>Yk?JJE z5~|aw&Lk{Fbq>{qgk`8Mp}LB&64iB7Hxkw)A~p%@68ngK&ySbIeqz#Bb}=j?!-m9^ zIEJthaU5|XVJqS!sf9RMVLRfKf^>c2RN{2P_QV-d>mcGxwGJiDQrL+&Tj?^yIR#;7 z;(X$|gk6a1tDrTBxB+ov!b!wUq;wVHriJN>#LbA?5>6v-Puy!9-^IOAxRkh$!ezvL z*MzHx`x6hHr*-i#WRQ5c!cD{@Mrsp}Bpyq+nRq<$T*4j1^HmTYCtgInl<)-cGAZ4h zc)8Loh*u~)L%cG|roD<ShG&V_5U(XXN4%bR1K|bYO~hLWFA;B*!k>w^DI7?=ePs9= z@owV1gs&6tCq6*<7V$wHfbcHyA>y-y?+~9SzDW25@dw1;5q?el1M!c9e-Zyi{2$>z z#9UF&p6(KhIcFDpi`sh-OND!h)tc}$@nzy$<I4>(65k_4;`=E5g!qBd4Tv8Wruz~< zB7Q-5pBi;)kLc<a1+CMl2dD>0`>981P1>d&O+Ch@u%RADJ)U%cdID-)Nj*v7Vd}{R z;SuU-)U!wjsb@=Jcj`F>={V|n)C)+*Q!i9Oc!qirbw)agdWmE%^^nqO)JvWCUGy#1 z!_>=?PN!a;dKJ>y)T>diNxG1F9qM(*{Tu4_sW&AZqTXy7nJ!1YIrX-r%TsSpy)$Wj zI1ha-tuZ=%ZTfolk(c!i=o`25E%r_6TM<jr_oDAhEKfh2egv^H{V4je^USWF?9{fR zpIXqiq@PAVgIJS(mK5vI&(_F4^m7#J($5<i>(MWyUqq}=zkz-;u_66dDK@3wRv3TM zZ>QfuY(~GA{=gh;M1Pe29I*}kCHl+6ZuECi>_LAo_S^SS>`DJ1>d<yRq<>88MgNrk zHL)-Kd-{*WA@tu-98Uiu-1<N1e-TH}|K@<0n*I;{f5cHFaunh?a&$6?6Ued1v58a2 ziO4C5)5vMandZP-$~nlniL1$Z$@z%u$wkTKh#Se}DTuqsmB^KeyUA5m5D$>6ksA^B zk~^v(o+5W6_aUAp_thTp61g9_ziSUbV@^mOp^<yZ6BMtICkE|FC|)H`4%VMao<_Vz zo{o%0o}qYyJWIwP&sV%jUbs&q$C4M37ZY!hmy%Z!?~vD!*AgF+canD#ACvb;@hN$q z;xqF8pnU+v=j4My`w)sR$cKaWQ3^(uARi+iC%z<~(8&0Te1?3P_?mo`e1rIzd{c$( zJn{qbLn6t~$e-<HFU?=c|M{uWeJIqVv<a!nsVQkQQd3hi(`KP&rDmfoOwGRh_{f&j z9Mr<JMJcr_+XP=$t5O@xf4bUeS<|+mHl?<)QEsTcseNd>QU{~9J9U^wex?o|Ir0m2 zG<6JZ59&DTc-mgnsVZpuP!~`a()Oh;mD>K)RcZ%NcdTg#QV&y)%;h%JW7OlcL#U@v zJB)g+pdC)VM7=^gf_hB_?P%&F>SNk5)TdHAj`~XNc<QHub^`S)m9!J7K?Us;>Tl{_ z+NsokDi~``>i-O*(9U2OQ9(PKVLXNjXy-6YE4A|(rdPXwVTLWn#|*PGtVp|%VP%HZ zX!kIz!LT+h9y*oj4^=QZlj)C{uEyjnrmJhss4`uH>0WlpZn`%kCs#1thv{`RBc?Yn zy_e=gOdn9hqx@gghUN>@=TYB6^8@NzDeyAt+o<oPS%Ug56?i%I-PHHdEJJ<23cQs1 z0qQ4dR-k@L7dsZIpQdh2vlew*>h3gGQTL?oLvt&2Kk9)rcTx|g9!+yE^;qh0G>=hF zpq@_i1ocen`7|@?h15%F{!6`_dIjwq^(yL9v<uXKP-nESqYl)6(!QDcZ)Q)YeJitP zGJ6*7Cz(Bm*~e)=&FquRK1I6(v(GTwjdm$!dyv{onC&^zr<v`=><HRRnH|OKBHCM+ zU8)1nCbP?#-AX%Uc02t%WuAVK{vDJz)4!Ykr<Cu}|D1kB%3Aa*>q0BL(62_n9%Wbh z4d^$b>_@)|{brN{>9?TYl5z<BHuO7C4x`_N{s_v^^vBRXmJ8^Qqd$dmA^qv}=Tokr zzmWbK%8m5b(O*xwm;OfjJKnW){XG<v$La55XeduGw9@Ds3`O%hGjwro{nHrUL-$;U zkF&+@BMhHm*q!d940|%{Pq!n(fefe8?ZI%Gwy?M+!|4nc(;drjDZ|xtXE9vMaF?xo z!*CD7eRS6|+|OB#&u4gm;X%5a7#?Q$Kiw_j?`w*hHAOB`*+}G=%ElrmRMrq#sB9zh zY1Et|^6Au^D)JfBoF?*_G&*18i)j2Uk*_4ni+mN09}@XmD(j1UJ(b^!d;^tVihLuL z--&z^l`TZRnab88-$G?+k#D2!`6Ay=-P=UIgGw**oiu-^$ahim5s~kv@$W^xhbG&J zd@ptH7WqEv_7M4g>Ru-D1Jo6fAEmAl`7vt$F7i`UUMljlwD2^MpQHJUM1F-v$BFzp zwTmLZk@qLxh04E0evi7Bi~K%yFA@0zYX2+p=Txf5Ur_fnk-wpZr9}Ro<{uXM2b#Z7 z<R7Vffyh76{F5U8OwHaR|3dRui~K9iUnTNyw9tuMg61C+xg;$RxfIP`A#xd7c)iGF zY2mpdm!t8&M6O89=S8kW&B-Fyr0$g>*QU|-BG;kuh9cLc$ty&zN9AFW+fX|Zxh;)< zB63G+J|uEynye#o4;p<|<eoHsyU6{hJ4@vL)a@nmfXw7TX!IkI2T`+z$iu1qg~%gl zaZQm&QoFp!W2pJ9$m41B36UpKca_MKs5?&N$<$pe@)YWB5P2$fcZfWLCg+Jfiza)B zJe$VP6nPGnJ4BvK<y|7rr{)fk7trV!kr&bAM3I+J^KX%t(|8AwSJLEIkyp{=e34hv z<OGq|(&Su`*HL-3$Q!67@@8sR6L~AOyNSG=x)+MPi$>oNc@K?$F7kdFRgn)-bG67v zso7BE<BW%C4@7?$3G1RihDg{1{ZUEx1+s>8zaxtz&xEWc-M7dR>Ha~MNnQ=v2$B~- zHj?DAk&Qy~EXYP9d2VE*lRO!+u}Jq9vav~?0ok}D3)v(j-HmK=l2<^s7zyVhTby)L zB3qJlvmslF#AT7KOyY9LRwHQ(WNVOaT4ZaHbQ-cPNmv5eRwS*2Y#-9kf$RX1TVw~3 z{%d3hll~iIhmv$Wvg1hm2eOk%djPUCNq!XBc_b``?EK8+0`j@Zh2-ldmq5~t$Sxz{ zM`Tx!xIeNhNxvVmYe?7&*>$8H71@m>jfU(N(lp3!CH<7hZYMOz?jYe_WDk(oAbXI6 z=a4-_`g4#yOv3BP9wBKnWRK?k$zzakC9=m!xC+^mBrb~VDH10|_H<_Q9HiSH*$bqd z2ic1x+=A>S5??^}G6}CCdxfMUkiAN}6_CA2!e+?cBHajNZ<Dk>vUl>i$-87Xd5_HG zeMmP7vJXj~1KCHUoe|l`B;1AU6VgwJ>{AjqLiQQSuOa)Kga?p)LAuM4eM#EMk$pwl z$&h_b+82?1Px|qZ{Yv5?$bKX3k;n=OD<K;q;W}iM^p_y}i?nAU`<wJHAp3{(A0hjX z^cNwAgo}`iv^yXlM%tZ_H>4dPk0d(smV^zEC(^xvydz;l<e9`9k@qAXjC=$Miy|M5 zgzJ%yPQp6K#~|Sz<YSWX2lBB<JRJGhBy5g+91>ncJ}!xCA)kWu+aRBcgmaKjP5N7q zPea1f$fqSaA)lV)36Rf7x<!%CL^uffoFsP0=gLf$fpmu<UygKFBVV4RiIJ~Bx^t1Q zNV=<#uSB|Mk*`d0k9-XhRz<!;)VaHSCrJMT@|~kS+~vDKy04M%M)G{f_agBu<a_rp zNPhzIeIR*3<oiPM!pQf7^ba6E0NaM|2Lb7KM}9aYe1-g2Z0Eio52PIn`3aEpHS!Z7 z@o3~{LHbdVpACtRBEJ&*U*E3+((Z%&T1eOe`E`(Z81n0}U-SJYApPaYZ-exYA-@w6 z?niz%`6c&&ZQJ*I!9LOV`+&s7kUs#4J0gDs`$yj&1M&SyAl<&mU%<Z7_m?5R<V_&$ z?#SPQ#9xrV4T(P^e-{$gLjE2kEQkCfNFERQXOO%Y^3U;E>-%>=!o|qHhlCrE{{hMC zBL52#UqS^)dKeW!(mSXOgQTZX89>q_s5FrDC@RAt=`mCSBt3yjf~18|=^*J>R7OD3 z<EV@Zi6c-M2a?`EWn4&l3zhL8=}lB7fTU+onGlkmLuDdJdKQ&QA?Zw1CWoY-P?;K% z?nPw=Ncs<z86oK*RAz#tA5obZk}4{5K+-*^%neDOpt3k5W>l7hq)$;f6vEc190o~y zpmH=MUXRN0kl`nzauOt-jLNBy^fM}_K|(?0Y)IS+m2)87xTu^9iCdy_J|ujA%7u`; z3@VpF^0%m54vA-?ay6ve8kOrH?Zc>C4@o<saswosfXa=K_IFfnf}|5rxfQ~4sN4>T zC!umDq+bG+yCD6NsN4-nr=#)^B!7*{Barw5Dvv?pkEpx|iPxd>5~N=gm6svuQdC}n z^xvcMDx|v=mDeEcIH<f130I)<86-}E$`_EZ8Y(|P()XzR2ua_e@+&02iprl5jz;Bg zNVfwT`V^lB{?KR8zI+aylP@4AUqVj40@6N?hQ1~z-#|{jg`9i`Ir$#CPJRII@#}~^ z9LS-59eGe+#y%kFa8$>K#D`Fw2$H5pbqYv&64mJ-=_yoaf;5|>x)>x~gX-dtd^f5~ zK=M7PE(wW$qPje!y&TmQA?=;0t_*1}LUmP052~v}2H&H)1|<K2>Y9*d8dTSU<f~9! z8!~tt)pa2KRH&{CX~sZxJ;=aOT_4g9M|A^8KN8gqA<cNGZVYM0LUjws;5k&cgbY?f zb!*7r1yr|z<mpk}7Sc?M>UNNR22{6)^i!j{17z?DsyjlO;i&Ec89avSK9IB;s{28j zZBacKk}pH`P{`n0RF8z@6;VAJ(*2L>iI99fs;5GlSx`L<(#(zO1&}-jsux3=gz9CG z?qgK1hUBSHy&2N|jq06{E~9!6B>j)-qmcX;s*gbi?IC^xIQa+!Z3A%fF$n5E04E=Z zpydE3pMaqL1#t372--aWC!hLYpne{30)gBca59Eq<pC!@A`Hk+4hZ&F04G0(V0{#D z@+%0W0yz0K1oIz&lixxxzX>?`9Rv~sPJR!;Is-WQ0|c@RIQb(4dKPf<X9&g{0VjWf zVEh?yGJ!y^1)SUg!QKa)+zA2R0XUgKpf>_ep9;bJ6yWq}5R5+oPH%)@mjI_{A;1lQ z(-%XqehoN%DFo|#fYX;lV6O$7z8V6%3~>5d2=sQq=^G)y3jn8Yg<w4paQZd~_QinH ze}h2J08T#)!RiA}zYIYu0ZzXPLH#S>^lK2b1aSIw2<qPfr(+1(!vLp0f}lMdaQb5i z>iq$yKY^e<1aSIO2-*Vyr$75YDQFJ@9blf}2s1E%g9l~k10)GaB3Tf<W-pQ?5s@fJ zk~DiwA(M8TNEs)~G7y0%NP`$;S%y&<6$V#def8DR`Sa(mzG`&URaafrJAeNCRaeh` zj@<FE?l~NhJKk*UIUM&64-XG#f89Gg%nlC^ksW4-hk4K8h}`jJL(k!e-0?6408qf4 zkKs|6f)5P<cPElEY&MAD7o;bG-gXlA3u>IiQ5YG-5P=v{>Nu2A>Nu3v1+y$B1hXtA zaO6-*sWS(MQc4|!*$`dNa}iz7bMcxx1xRs#DOBMofa~{tPY4-^%e5qljQf2Vemr~9 zTk-o8u%y_Q<5;%3h*&I^%f%vQ6Fb16q9}&(QcfwQ{H2DWyuVe&V)^5KfC4c80cQ9n zcsM*Bzzu|y0U@#{6B#G52*k)!xGe(TBSy0+Ur(Vyj3|u4B$2PDun~p*oh0t{<f|!8 zVj)OEzVG5+9YWB$!B#DsJA^27Pqev{ekU|dD?e-8+==1){tf;On5ve|kDhc0!5*p7 z8T|-Ny)`EtVk(PD>1Z_i2aQ*RV9hh!!3=H!aJPk&f$z)hURMTEttrGHMij}A7}iq_ zgpk|zt>$-34B|_V7|li$_WQEi?8>I>%C4Fx!zfIoT@pbOTVW7J(VAlo`uM|=#7ST7 zBylfwC{<MKa$+i~Z8=-rr3$K=VlPM)1F_%*4l|5GanW0Nr2k(ax{D>B>6&gZn-_dP zFUyOHqN>)SR1pIqynu6}yY8YVD0MKS)M=rq+Lpr!QB1;FKBpTb$51y-=9J3ys_R;& zy6jL&snb*mp$21&Yr1Y4x@y>VF|QjWXCvyS$(&NTUU6N^RGSW^0H6ZQ|A8ZX4*1Z3 zEdY%BQtm`yvq4ZAz9)j-c7h~~LSm3W1WBA=7=^?bXniuJ7U$M1YtO~OKd@G>*YHCU zMq2M`ac)sM%f7ebfVSLX(QSRm%;BK7y95>L^D&;o6kIq3_XBWy&7RqpiHxKvr-_6l zaS}#h)FiRM69NKtfe1uTA~_=@xzy}LkxZm=w;={0G9n@pL>dGq|9d6>8irxsvUA<Y zvaS4)PNx$gRx6#bQ>kL5vA>46w6uA*>cT>vbSdYSMR$)ARk0c4=FUOy^y$;N+~VDe zj2G^TL)*%`c5Bsk@|OLIdc9uT?o_IX)k<fj+S*>;*<4ye&KIn0i&D<5<JU08O`<CH zy)TKbxZ(=oA>&1##{mC2vL(Y5wg3|DF85_$QWQOY#+MH+{z$bc8^q9IwRe|ZqrqBc zz&UjT%;gtMjL$cR*l6_bQm-#)Ef<SuF648FM8e-@F#iFZ!*dV<xB-#ZAyG5>2q(wl zpRytluO+Ht2i1zIR;q!msKn%qd5b02MReWLqQ@9F@g<CLldpC5_d9Fc<c!&hO88QB zV|{OLeWSX>iK^Iuur&VxWO(i#iiVKbK4vg(l{t`--)Y+SaKQO&KE|6cg}d=jF_EzZ zl7xjUrpXY=#&vO$$Vm3eu@I6+cAYttKE~#Z5LIQ5d%UfxhRL}77!J%mn$3QQ$1znU z<Z3Xb)VY11s4BBLGY?J@#+j|E#{O+;&E9t6`zy%F-#MG9D%ro?p%f7E^FQJT@GM9G z^uYbTw3)p0{juMdKpN8DiNa=6_7QH*Icq*W&W@ZJA2X#6y#5X{NFjwXK+^a7VH8FU zG-eF{vgCL7FU3NkB=Q9<K-<cB_5r;=B9;mTbe!O6nr7xK8}pCJ75|49kDuZI#t;A` zJBgHWZ`n7>vd60fN*#o|#(2TWo`72E00{N@Hz9?G0mGLQ+t#WmjOuijtP_+EU>8IF z4^QAnAOJwG?V<M-^st*_m#L~T2f`U+s%l{Go5lYjoUz$}sjBgM1!gK{dF6au=fgUH zi}rFL0)gz>Fbbo7VqlOkPd;hmFbX43HZ~3pHa3*@$4*zvWyErMHHWao8+~mUV!6CJ zT8)Q#zD>pm_*Pg2aKk7haRvIv6^SfZOsr=kjfE8Rh5Qh2nazQ)GsB_K+XgstDYXVj zo2bpcr-~5{r8oq@`5iK7=>oV7LZrto?j(sUl140qF)Plugi#p1sIjo*T{fz9j$N>_ zs^IE#&MSW_pAzT)1)>lQ94^#c*NCMxR906mIM%uSK1R51{{I#l4IxktEdxy90Km1c zTu(-0%s}Wr3Q;7nEkS^p>q#~mXv#?Jdl@Ko{^(PZyCv8QBg81&yLY`*&MCU4F~%5C zc=g^j&qMUQ+CvxDyuqOqM|Zb#Klc=j!o9sP!a}~PF~*3lX-r!@1y3!ze(ouDz4iRg z`4~rd4t4?DIFgbVZ-XiglsnS@6Dw?){I9NQj5B782(=1hY#*y1tMB4{kHE)q#tdE4 z*zAw_T<+A89;b+)|HmLxxzM^JBifT9)gz7Kvatx|@wfVq6X=J!Z*5_b>+h!7i}xM! zs+>iYWjtI^_{lux$GhcoCHh*^UuCo02QazzO|T5djus*f;`yHMjacVFB0PLzoJrC4 z-jcYtEdmkvzodwk%^7`hTY>8fS?dfgT;Mzqi;E)Qyth3*!sd)pMC(1BT|`vS-Ev}m zL%;iPO2HX@LFo<q>NmgxOkv4xk1l&EJH=g#Y(*$qra3klMdd&CDU<v1Ts}V=eV0>~ zMKL4cqPYPF@Bjb|r9x2%a;M{mU)4B?lbx90PNdiDA%^1w=|$JnTGQ`JDFbp^#4!6? zh+S;8<9gg~AvPBr2V3oU5Vu?CI15c2<@5RQ<$hQ!mh&Nv?l`#1yjDBzw~D3m$Q#zn zrDCf;%HULb*K;t)HX%QhL46610JvT>f+-{7h!9jJhA)JZi4zLXc)r=F)NH|l+K*p( zQD@CMejU};iz(x_g=h{CR6djH8|x=H|B5s%S$mI#NGap?-9Z5X0Pn;RFjz#K7iZOp z!a!o^*{oJX^q!oL%mz?^%(H7qBWHC24>c=^6PF}?%ra5`gC4oq?^3eAzs~}X*=j}4 z7lKl;fD}i`!|rAuK6B<w5z%qnX9wKDLa|iL#iB!IcoW_PO91$q(4`)KNn7kcyloka zK;ScVO=Ghu8cfr4!Wf%n1;hdl7-Iy_FviHuHxtGf(=<J`T-Qo<P5TcCr9vJC_yHV% z4;^ph%8bZcX3R4$`!i0L16_1{OU}}<3=VjRT8V4`eQ#lgqi0mH?u0IN|0`{8C+$49 zUDY*>A(>4c@fA4u?98%nS%Lg~j9pCO7~D0^Ag`A3CA(QZg8VO+Lpar<6}EB3PC>3% z=|maCm)mQVTpq*p^vP4D9F5l5TEnfBx+udoZkCIcN<;mjz6@ko=GjsKm}d%L2B+XU z0E~_*fe1vDU}YwhH*hqCcB(*%JU!_9zHx0Bg^@^pTj6vZD@q)nzRi($+1+b25F3rX z-MjP~%jMOLN~=dN$2)bCYkQ3n$EOFtnu{YPj!&PCW5;CghC53=iu0G3nF}{=5GJM0 zDL1_4bQ~)ge$jqQ^V$3d`AV=1D-qlWGl(jQoQjh~_G%_r>A0>)s&2E_Or-b$^?max zE4rq0#+Xt2M6I0gcgV_9I%m(Gy~|zj`7WY68xI*{hNkKK9{1q7rWuT}A=YPqeeZky zL|YBE-~s?QX5}n3<R36jy1!`ln*FdU!fAMYVs9SB?G_dal`4_T@E0cO%5XRw5q9$k zQ!EzCX=;uycB>sXtJOlI8@F4SjVPY#Oa6QkGtEz79RS0ojB%Z9AMW~D9p!N0(S66e z%45gm)|NbWOj?{%%R0FH@`Lr9<K)&4F2DT1vMA>k%B?Lq7|5-y*mH}EF51}L-Q8V3 zal&HU%CjlnsE#m&GVfT}B!RFGy-=ao>@^EAFcJ_$>V@0A>Js8owYPntaAwlsa5&5g z1czybTHRPImT@r4+>XliNq-CVb;s<tWK%|t;SsGeXKbkMm;_BaW@(7nFga=_;a)!e zMhKxNa1X??-CW(xrlPJ)AKpL16!tjFvTCQ!w!i63*hN)B%s3C5I@;;5XI}5I&U%i6 z^nwen*3&ju9=8yw#kjS8Ar75?8C%UGk5KP8;>z7U<pes}SCY!p{SfI2%BpFEDQp9@ z0Bt~$ziZemBrBYcFOS3vG&i`6{>YuD_;d@?2w9fNixugP>hA8Woy_!=l-@Gg%N0NE zva~d)_>2=p&el0`%#Ki3$(gt0o44(yyas^vnS4QJ%vft7hG&gRq5d+1b%)ZBOYN)@ zW-hdN^Q4(s*IP}ewcQkcfG02$!}{q;B8k{7pPEb<cvyl7wJgT1*KR%?J>w=9-D)y! z+lp#F|2g<@q9|MG)_=;UF#G3I1U38-`<bmOrpdVd*%x5vC3SD9R+TLLX+gOWg?$;s z2IUY1S1c~&XX(9QHlVTLyrn9U6{7a#6)Igv3Tv8;D3aqN;zR__Ti@yg0VL~gwF(96 z)+=m?0lrZ${_~$j-4q7ZhQX&C=Toy^-+(VnE~xz;j_@te`Z9sCpi|WIQW0Kv+V^uv zt~2BLx!I&Y2j5`iXCK2AG0q(Yrjf(rvu|C0VicG;pJXw<>BoNL4Wc6b<-#Dz9#H`u z2NL5>yB+v`&~A5nPkxNmrJerKqy3$wDt>Gk`awHfTMN%q-wu)<@AYa+OSN9__$!o? zo-c(OZ2AeR{95(L`}IYy*(*mlzN=u0Qh&Nu84QO*%XWs2g7XlDVQ!pNlH4pW4*nlM zY-gnbKvMl$A>t%!C+|LG5QFGYw8?Tt7(~dz@m`{VvaxZn-n@&6Xj`1qOKLZ<3K#na ztf`1F*YB?PH?yT1dzagsQxnm?Y%O`l!T)WXNxWOW{P?c5JZl|!9>TD6{*15-9<DZ) z&1!TfGI9y8J^l?3G2nDnF)v+NTtH=I_4s4{YH5f7F%XSq&}5F)yu^@q^OQoXxp{nb zMH#0Uh(<#Mi09OP3lH!e@bI;X_^sFP%AmJAl9J7Go3RST!ZxercjYxO6&)8cVi?0~ z*!Nl(C6dUHJYY#vb&Xe#D7aWIi3Nun&R%lTU0C#VO+gO(JS{dS6wz}%zFWV|f1c}g zXD>Nv`vK#`P&M1;mgiZzzFWsDc-f;CEjmc3mCIL`T7!jvsU{%`qRwp24P8@IG>D;? z&Rest4}@T-YxjIGP7GC5HKkTFbFeP<ZmvnZ{B>M~6!EB5IWJv%)JVB#GvUXGukisK zEm&(##5z=|JCw%q<fLLs3V^u28RrfhK5@>G9Xt8qdynxZJa;r6ccnXui1Gwsq+(}3 zTpnZ0xanq{F~)UGOR4Xhsjlf9U$1LApM4T{xvuFtV{A5Z5nUWH#&qnrten7e9wz)a z(T{heIju^AG#)qI=Qh*NTxJSkUUp^_f2eg`J4*vW?sFeA2<TZ&*EzmH({(=k4z>cs zVD>!>xvpzEv-xb~D?W<ZuYASF5x1F+Mc2;fKg1jHO`L^=z`4<$V~~D2zlm61{im9^ z+cuoub{pl~vJuS}y~u&!aYR`vFM1I^!i#Kp?wpNiQqJvnzsFq^-u!0k>xA{5ck@BP zIcR5CIVsO2Vx<q0jYIZK&X}bt=4%Fjx34i3)nbgBhllu5OI1vhGxp6_ybXQDHyPum zsi@Zf{7-&Td&hi?w_?hFS-4(rM8gw^@3jm(YO>jH?wnBbXPHM$hW?!}-*myv&;E6Z zoGQ3EyvHw`<0VKjZ6mKTA@xB-Oo2HG<{%33H-l}=1!BX9oP#(@J)$@iin;RwM^JFI zV|n7lV`NG<6bi;a$dl@^Nkq(+&0L@_zv&Cvx$hS0Foyrc419nj5>eQXlQ`Lis}Wv! z!XCN5zfZAHECq$UQC4l{3ig*XXU^n`rD6dc9z5H19K>ROf7xS9;UuB)%rVl+WL-x^ zxlTlhqiAJjfaUTkNPuyzFT{%##x~JSN;fGE_FWqCwS-Ych{{TP3{^-xwC&Ihi*sv( zI_>!(+5ZQH7jU6gEXcl2-!JMIa<jn!iYcYeFHyTYj1|Z0MCMaW6FGVcnR5EA|L@$- z+C2{jnBf58HN}dwC<kPrL5DS9P9($T19O)B7+;M_rL(&9Dl2z%NcGiL4#Bo^*Y@C7 z|JqKaf>?RA^&|5t`<Y%w&NF3%DXhXiTo)Zs{6ZK!XRq;Pj*f7x+%n;_=uA}~Pe)<D z-&R@J7ht0jDmQ9Q#WE%z8|JXy+ar{Xjf2?-@{~G@DY~0{ec&3XjkCXmVqrnx7DhZX z<Aw+@$D%=6H$B+cP)0ZIAJq4UIh4-E<s4(V^48t~01T+jGi8Vwlwb`W2TzAv;C=WY zQ4AJ;Iy4YbB%-*tEr@KmBSaP)#)^kV5hxgv7?Dv%f+L9}e4HD_NgxaoMw^8=iQpxN zK&?uTMjDl6iHxW9@hDOTxSy%@^qy+?)@rp{ZMUmc-RzqB$s^5HynN}}TB8x55N*@3 zECo%In<WLy<yFGoJwkI1Ifc0#VlIcLHZK!%|5SBdu@$wd>s1YHMb}m9NX%kR#<!c7 zjnMX&HMcKbSy?F-R}AAPtkXFfcW+wE6F+EN7M4l|qG|HeS*DkNXm^=My<q%uZ+`tL znEXlA-J<JNRr&D>)B;tp&aa4CHUD{31u%u<aCcT#M3zRQs;~y~5*W==oR?j0D!_Pn z5+Zy0o3K2f)ZvX*;G<hC<^$A%e6i@FAG9_Uld#zxL&tH$FVYId(*Kl-1#R{b95|F- zR$f`@nrpRsK9|eaYinkAWu^QWU1!9^a(Q*Wwr91)#awQ2vBoVDcHI=hy#X*GWJ%Q{ zL?$2;%J?u?mmS!)E*61L2)Gaqd`RI$0S~I1{zr&pB*P|lKKjv*Dk?*~`;w*U+Jh@w zo5|&SyGpsd^+8HZ^%0g<JwY|a=rS}-y0=G76Is_#G<u?{S@?vz-~H~0Tv0x%nuLCE zt6Wxg_byL1w<-_TG~HTy20dz_MakwxmZ5hKhcB0TL6n!L36()!q&V=4Vr&iJ91PI} zI)*MosAg8AYUn~qFw^1u$PaAGVid)Yn~0>6sl%|><@?>F9*M;B0Ue5Cj29Qz))p5r zj^jhQs|x3DP;Y+}MY`+d#ypqj^)oWZ>6x%vQl#aKW6K(2RYsyIS*^19`PF-yx45{r zIzP{<3&ss(lvd%?HP>8Y%ajufg_;h!m&rIqp7&(+1jkq=3<6zXAFwku-a`<=2>NIO z-K0bHqQ=ip;v{aj{n)3LEbz!9D-N#xdC!j!C>AIr-A;O+iDG279K|H=+es3K!@ij5 zl>y58%DGZ6)m>j%T&#@sn42PEy9j)$*+F1y)bBx0RaNz7<0{YZIcguf18=-+8e{xw z=$@%5?9)k}pQJt?Ky!WNB)VC<=_S$YM~&hr4nq<X6!s~FlwPbPF?NE_#0^1RUxpD{ zs|cLVibN*R-suS4_N?#6D;mGNHOVHUw0G{eNh#~~fg7NMYRTDptg^URxt>u9U*IH( zv$+2BIV;fVrmrfSjM6?S<Eg1V-52V)#`ODyOo)W}x)~x)_=uWibTLA}iiqPGh*T9f z`KpWJdgQs1zf3(M>&SDII&nAY0mqL}C%M@q_J=(EkPE$J3(IQPDOHapU5sr-l&Xsg z?k2}B^vjhrRDYi69#0#A5uSDNBGfya>>gL_M|y+f-7X$&-UR{v9M5buL{q4XcA`TF z*`{fdMFjatW#Z?}__z}hp-7Hy<oa&Mt;C(U;_jfWWIVrXst9{6FV8OZ8Knm{RTOLV z->N$LZ%a}7&>#I<*9X0)!}pQy=-aR~`nHF$2U<yg^ot{VU2+Uvx<wFfk#xi9^m@Hs ze=ryf7E}jm@l~6GMRZdXQjdJoH0Kg}8YydpsY_v8k6Pr16|ca@B@t$mVFy)0bgn9B zbNysM1AP&&U%s38Mzy(JH$jSGfvT#YT8h#kFCAUONLAGjs#v^B#LJH3h)lQcvUDao zdBKdzfrjFI+r!xNF!o;ldNCeuz|!d3{nD}LF6rB07>0r{zOb-h$+9e43r58ZGlnrA zD!qzv>Ykm<0}NuXKOerAq3h7C=<XSUl7w(%)+3fcZBvh;IE?)`jFUL@gEh|&--1e| zLZY0=R66&!1VQMuMxo7pkZVsj$voM0&Xcq5CV~EByUTa$y54OSU6SU<L;qQJE={@E z+93>39UZPLVE^0OnMf3PD$jcou9_3vdWx>@Y}Bmpx#t+AfjyZ{tGxv`E?64Umw-{K zcb&D`naFLwNL(SU1I??9(v(sbeCGs2f83fN2rea@gM93eW%wqVM=J=`RFzH`Pi9Fa zx5gaX@62gRyjk5Y=T1|8?2(!jQ`(a3lzJ566e!gK4zxOYC2v_o(;OL)qNwziq%@_Y z!sulWV{dh%VW?3G12TK$04UX%yh(vvm5tBbH?3$pZz0})go|>(;4v8b%(`{dN66-$ zFiD{h(RBs!DpbrQ@$$e>{G>yYICMloyrq8iYPkv~l$0{LmGm3a@In+3N9(%2?0Pz% z7AO@82_=Lx=Ok&)<OrdOzD+k$#zR$o59o4ea73i@g&mLvrgddimCx&hx<RGU5i~S# zDbdgG13lGY<MLmYq&X9dgwE#$D)WVTN<?htJ0fP@3Z7qej759?ToTV_i0uibL*21q zy+o;T9c)J*e*XbPx1F5}Tff@+27Ut!Q4J+%4|+TLC_;9(9fuyS*fCRHLSiyYc(z<H zNr>BVXGA#`Ne!c?z*UGk%Bt7FLL;Z`+AS4%xgJF^?h__UHjJaVo+PmoR$~H@SR&cq ziR34;s>=7YZB9~^T*eC~f6$R1_p<(te8;q1EJ;$1ay;z5k=>TcVKtv;x+^Za>byay zGb?dEM?{S&GVks8Bm<zt@eRh4CEe}s;PxzhiPBrk^HR?DWFjA*?B;x$4r5Z!|5JXK z<2W@ZX@bZoY#?<q9JB0lO;#^mEt3p?xl7e6G)3V#B5G?#a+MUG<oT&FN_J=}a*I3G z-rzA9a#PdSqr1?1^skk<s2*k>D1gh7sx_D-Cufu4e4Jly>d3c-yC;x@+$pN={{{Y# z0HPqa$^k%7Zp{W9$BDd9%Vq(GZ{Y+1s}(`0s8|p<r6LFw<v9~M*XWn3dTZRPfpfed zz~kZLJ}p&&7XY%^+H{V;#cfk6R~pNTLZxzweA*!!l79YoaZBhT^e*(N&mPf}6Bu$5 zEvd<$3*)#N`9*TQh(Ss809N4z2@xqCwhXGK9!0(%B?-iulI0bWxNA#)06bFE6(u7{ zs+#dLA`_H<GN_N=Y6AdM^7ebo)IR&1H0w}e<W*HABF}5C&hq(cSeDv0<^@sH6qV;_ zPAX-y+3f<Mztooq&l)@jU!wGGZ!9ZnnM~G~s3PgkgjuBkq?P>PHBBT8S^E_#?JoO< z#MIGOBiG87&3L~fX^P78f~ZM3m3v~xjvb2<`o<lEj!p4=Jo_#0g&``UDU_lU=z5Km z@`X59T^j^t{DirYZe{^HAsLLk>y<<Tr)T|x!NgrNE&D4o9)qRe$lP39H4Dn+xw+-g zleU5YduH|f+Ve0(^=%%8FHt&Vj@@eQn%UBdZJ(OCxg#FN-tydBxeU6P$A8kpkj>US zjJ<932(TAVyrBR?v=1F)O>~-ybDk!pbo{!-r;JzQRtk&J1$p_VD6V(>dX%IwyBEn2 zEW40*Cg12%!Y-ORVAwWXIsJ}ymOlaT-WI36ewtVBkn9US+hf$|{w~481=|993T)dr zFm(|l)V=e{FE(k*mo4pf;^hAtj6KYEn1)%TZ2fv`2ycWTvMVuYOp&ygu&QRgB=Or} z+igrNEG^wzXBTycE=>hVHb+B~%3^v|3IT`eK@RgN8^9hIj4@^m{(X3Ak2gdZ!PXGA zV2A=VrR-5SpFS6b^_7!u+oXJ?9m1iEXlJLkFR4H!HcFX9L0#H@ic+TeLk_BSNGW@R zy0o-*N(We5T2kM@C><fiw<pw8&(ER>v>ok5N3>yab14urV$4>2<zm^5!<ZPD@ZC;+ z-cXM^aXZQ|jG1a^ePa&LUUdug(v*lohRW+}+jGNSp2`2xweq9>9pT>a9#~d>bv18U zaBlSlkD3cuYi`s-UF~)rZ5J;^NWLy+Ly&Fc3UN2ll#oC+9+n<De!4kckIbD0t{TO0 zJ>}{rqB^i+gKY`F30le9ZcrH9m!@qEwI5q;hR1Qo3vTZXnr;TtvPGaDCp^B^n4Z6z zbd%)Wa4eDA2J=pR+q)g^h#w22Bb|rzGwO4X;4g2YMYQ6vtgoyg@+v?B>Q2R9nO{;l zQlUCDI*7*O!TFG<Vfqx$cN^@1;bH8JE_fI=T1#vz=1fO6wIc{9WsR){^XJZ;OKnp; zjJ*cvn>uV@yrJ{l+ANw!d(rV);qL6zas4yHDdb`mh`1`MM@gd+?G~!J&T)wzJrDK{ zI~sy%7|i;h#SFuQcWu0;-|``;hk*nHuqOvvVl=$hKTDg_#iFJtTCq4iT`Vv~VTIy! z3VKV2jpiQq3<5xm<WQu!z4;J^$V535qDj<2JJ2OPqmVM3)R^je3C_{mLq7CT#@EhQ z3)`Wa3<jMzT;Zjy`3gb=T<jZcp=Lf0(8So;-YZAv7^5MiqhV^<*!p5Rx-iD=pl?Di zP1BSYG{$XB=KgzUj$Y{1;cz%iQ@e<z4o~4C%|m<uhDb$GJYz+d2BwJhqF(%Jct~;Z zo)3~pE8g)vpTu)JR!?(E9bH+EaB=%tjgTDhZ}Gp2;<m|2ha;j|aM%QqvB_ayCryb` zwu{LWfX+!^!?0Xt!A-s3ZqGqbo>L^sCW!1Y88plHv33|hx?)*YHDxDNHJe9B+WN)T zmoSA_5s!2<jTX?3^={ae2tmu8i%B<;JZHKIk4h>H`WF>BlwoBZzu$JyO}YtbwX3o3 z#I3m1f!PwTLM!CLBWI2V`X$|lSDS_=%7n<Os*Ii=Hw?p`X{G7Dy)!M#Hm!+??a|cQ z;v%*JSydH76J=4_4UmNw05;ba7qJlU*|Y3t;3EJXS=0<gRTM(D(DsQ5%e1Z5%-(%z z+M2Nq!x*>l;^Nv=G^fgvC|`dEX$AmZ7@fh3i)$HwdC#6Whw<d~VJFjQ8`_JGp)1g7 zbUS(wJ%Qf${2Uzq5cEiBvs9{&+_pwlg+qSaO=#w}<4zpLB5{+OQYQ`*lah83KV7Zb zO*(Pth4AN5A8#Sa2j)X`38qIKGNrVk4y%k(Mycd$(Q}G)@b4j81-%z!2mr|hE166t z0FucN2v!ILnM@D_Kr%)EBohQdkRdSiH{~Jd#y#am8`g*Q-t~-9Lx(5t(r;v5KUgcs z5NOr4fMkN!B~I{q0U(*xR?CYitWv(gcbrc}m!sS55_wNrl&Ba<XLH5}vqFOW5Ok9C zpcX2=Kc2+Z5Il*8k@t!O3{<52I#2g=q3!&zWtpvoj3_eR^UBhP{VRJOpLZQaC@*ND zC=_@_)ihD$a+lhKkTS=0l$@+;<-JSUszn=yut#BF_>~|(ihczI-R|m)@9o%uxs{dI zy>4ZN!#j6e!x?&3Jswh>88>L6$nlD*o$9KN<6ZUMyd~z8J8o0QN_|+p5#5E5O4;$S zC8v#7MX2P6DppGLL|ee1Qsc*p>!C<U+#-yvbjvc`ZilWUaajJfPwyA8XZyOxab-e? zeQAypMNLx`zQ~ILTPO>vpDDR3`}VF&#mqv>v|3dksAFdpC5NyLLrqFdp?Srw`~^<6 zAHAt|KBpSKah2ydTIZCeDm*8O+6}s{OJm2?ykP_m+kvfjZC!wh4|~VQp<ACEWOI{{ z&xvNC2?&AWdK2Q?<nH`7qSaLGL6a=kO%PN+iCgaxeK`G1wV?X8^b)EQLG65jkeIgP zOCNRCPayX4&4T@Z8d3-<ZB{I@s94Z^z&UMVd|S8a&+ggZZtI3DtBR?Qjm`3!YFVnr zr;P@rC1j6v^`1%7WbBJVed`-&Y6fggyz@^)KHr=lZ|YfqtdcL(S)r_T!zw_@j{qjd z_wcG_TAIeiVO29_MUhQ&c6M+1+Xi@Hk}=c#qN>G5b$QDIA%j=fegmg4L@hmlbKSGK zNJm&IE^F(?SPt7NMcFc!ZJ^aVZO2Pm2xP#JxuJWQ>BQYcAiT6Rpfc?BdLC<kt|O|d zuBtpQ?3G&O04%eJeIj1=s)v^jON0<29bR&8xh>@8oR!TI_Mq=mpU?{)#@_c-o);QK zRn<2`P;OQ8IX3HKemnN&%bXxcJxLI_@_fu{*6&6~ElPJzYmDSoWfZX@&!oDAmWEP2 z3I&%>?HsJc$qA}bDAhsLpA2<Y82tBbLY{@{I4AYFsD7I_Jf{Qb=eE)?w1chrt>0{Y z9dqz)G=b*PQFQ${;e=*+xJwE|6&s|ub_BAWiZYk<n-nN0udO1gJGl;to?Qqn2cKr^ zZ^u2SPMvDb&c<=w5+s2y7M7uUN>$ZtHoTJ&QS7))n63K!4`H-bXf#WzBvC1w55qz> zJ0nR{RVm>(CM&80>2jgS3zA^f<9K$qd8+AlM3JyN!)yjrRXtUO3e>-WqfcffDoJXo z*~sT|`7q3nQB|dqB&mv`aU4Nh+FPGR5$fcMnDr9_ztZ#DM|8$#<qf7a;q-LvA}45B z+t}FfF!naW`>1(iJ>XMSL=$KM9Yt57(`PDeji_rUa3^xMj;#^kx@O`0-5{6T%8(>M zH|Rn72*~g8#+!B-T~SkQXxOSIzDLbu)c5>eXs#oBtM&Dw=vY9<>Vv!cb48=C$f~Vs znrf>uPzS&n{ruBwYil}yzM)B1&KF5HDP?y4=C4Kfjwd;ud)iI9eqRMb<U^Wut+*A> zh0kXbT0Y$R69TxTT1YPjm|uiu#52rlVMR8oUEP@$I~%uc8v_PV9fj5_RSr*1?Jad_ z&t%F}QK?#Yx{r-*Tc=dF?aB0Y(>;{W7qZ=0>(p)69LE8S0W6MGS~CmfG;cUPK3<e4 zOH@Y`G8vT+HIpgK!K0hCSyV@DwEWr;T_A2XX=c~<fucYXtrsqqSPM*;%XByK{YVpb z-g?sYku_o4sPo3L*V}1^54Bn?n<>`D_|obsk(z=%t<`FoGP6I2k%-vP`nZ>@uOCGX zf<UosW*)TMrnd$`z-&|g9M-ke4p0Tnprv)MgH2LwaN4u;jXg3-Se*_`?$)U-(x}=q z>zVYDVwpuQC{O3SPeFfkQ+4}029{L-(2Y#NppKKT`X1n-WkIbHb<4BD%T@C^HeD)# z@)pay!n5G{)spLpypS<;05_xS;Q3W5iLO^FY@+8@DGZ_aOqF75URsm5+xA=%SDq}3 zgx^V`gCoC0*xDsm4rH_0Z62pH55z2QTAAO;S|;Dbk5nzs@93xxjaOfN^|OrAKmBUP zFbpH}nmC+fNO~S0`V&Y)dDKJ+I*x8d$ewo*GxXyN$;uH&Q0<H*HI+Dt=OSUA5@3Ja z%CSmf@1z{S1`jiD^KZVLrm2Uqw=jT>nBVo$nQS)8n^yLBGM33_NB`$Bo%6P}<gkWO z3Lng;iAGi)yNmP3cRYCY)mJly4u+9=_0u}XK8yTf$*KA@9l;P)(SFoJ_o6o;DVPI> zy!=%~NKhp7Si}CF>J+P-OnI1m1F`>>3vKgIvOWSS%tevAVMG^t3C|~LNEt$Cs~Tv` zvGlvG{%}p&DU#YGX~Nw;-tFQIul_MkRZLN+wU);xFrFA+ULK#o_F<4^U4>$4a?*=) z)nqv<>0%m(X$x!2#urose)%LbM3Ws_xZ6EG1krW9<pw~BWGX7o!nrrb6XVN`if$+h z_Hys*O%_W4#-*Ai)^E88`<~l|xB@$>wDPsOReSbq(v2d{8yq6J*I|7hL8ZEVY4`4> z?bQl|5349jk8pxKlm(9Ty!V3)_ifuYR;`Y0+qUoL3;cjA_lQhEmPv2)d!HdJ3txBL zcC;IzS~gLAMQl=eY{jLKfUpHZ%p&TM&gj>k??-+_;x@jA<o~?%_j(auXNoetu&}Uj z$DO=8bbGxALzXXJSXfxNpOcjecQzA}ygb8VFG)y3qPTrKQOR)%etdRDzxQ4a3Q;#x za|)j6jA$o4-}5P;GM=v|bhrwRZJcYWQN7bHpzC7<w>|yzZG*={ZlNo8?{RN?%Uf=9 z_w2rs^0$5+qDCWvrN<hoN&}#wsN>IVwh-<nC&vKBP9|N<yF&-5o62}zX6iX2zdg`N zv>#oDZoDt_+;l@<8fgzbl}C-|-fwO;S%IU`+mVRjy;s+EiJ+Ug{FY(p$!k~={_dsK zZzq1N)tZ+_VOEfi#tY*brQ&(U)2t4l+oDkSJRx~nx+f(ILfU?`icX<x(JknM8c;H0 z8e%{&ZeT1i{&qU{r2?(Yd%ii;kS9H=@S^P)jL05{hFB8`<ZWUiShtNC*VxgXnMTc| zks4lV8mn_~CVG*X4Lf{|=rc;MS0#yF>XTG=DU~GkdSEnf$4A$vF@spM_B0lZt(w*C z#`;<t(P7VxQcBrCl2lb%#j@9~N~$VJ16yYrzxA7~uVDh;M;e}O^>KutCu0aUhZU#j zoR0`J+K?*UQW7VET2<|w>>Q{W7Fw;AX)?BO?eCBnlcsOf1ztXAVntzBUda>%n+Ii{ zH*TDUquZvmOmkyn!!#Lt{HXBWR;$IBX<p-9ns$}JX_|7;jk-ih91|+(H(sP@8fRQJ z{yVM3*mD~j8;qIeBiCKh_s={)6P-rSBLsc~NI~N3RqfdGaYl?qaiS8>YWTjn#7~a? z=JH+a#F6?*%nr>=C+;Sd1BkhDWhW*(5n-=&SW@(mma7WamP#e`d2NZ)#x!nMNv6X3 zC>K2JVeHL!TmwdF7Q+4@<_8KDJiNAr>f<`|e`?^f|M{Q)c^-V%@Shrh_MbX<+S+}& z$e5SmvL^NC3*;P+M)or1HY{7O7`;~HbMii~4$^G!vRw|R5>&S4&5xipbS=6S-Gln* zN%T(ienc3<jFBY{5vlC=5t4aGfQT7G@4X0qT^6g@gtD8F*z===B=snaJwH-m)kd*M z5<fEQrijFk{758jTsuh^S!{>xy}ugu$c;TeA=sqHpH1R`QF_RV8trx?vJOePi#6AN zfs%~n?eKkHz!hFIE0qcse2tHM-<POotuOD{)A$M&e4|pS@R~1R(ekL|SLneU27fL* zqfdE77N+!PR%QpO15a1KmK=Ta#64Cn%zW?)#e1q>@vID?J1#1A!!=+Xf(|Lt=lVNe zgtnnaEHq-GxyXpX-8NE+_q7v-VRnkVb1m{C_MfodFWF_tK4Yy5Z674DKW-i*Kzeq7 zxyi{~E|;5}oC|qDinKCHM}IXpH@E-3oO8GLB!gXC5#u7aD_C`r`{yPkX@dLk0J-ec zRJ%PjmCc1>LouyGS$k?~>ZFgc08*(W!NP?!PDzDwxgd=-izy5c3txUYx*oj_b)$zz z%Fu=Vk&hR8q6J~SFs?^pXeLO)waS=C7p_#|*lLq@Jh4ec^{13>KW_u*cQ745XLslT z_6Y(Sb5<=H&w+*GQ(XoP;V>-=yD?%D0cTZ%e~h~0dheuW+@*n{4S!ZK9SmbkqTk)q zI2N;hU~@iJ>+;eGd>_dugDPko?c{@W2%>$^7nDVBKoXMpG2we5ijx4b3$yS1&%OkH z$+W-f{(sXL{od;8sw^wYF^MY5g75pQ{;ImVy6UVt(bZR9&0Qqxx;!Pz2QhrvF#mt| zuQc{gtE;PuLZxGhBFhWD@2~p19XfOM)mP(#vOFd0x_l9b?xC5YJZhjA?cleNI=66; z2vv`N@lpFYDiAWTQRrkLlY00huI@|(_5W!C|EDp-{P|7iM&GvexDe#;C!8SPNj%TH znJ0=Yt-a;un{Re+c7vO5zS+A}k~nzQG??~x!ymCY9~2%SGKG)qv7D?Oc&n}vMIlvz zNY^fX*{7Az1e!z3=vH*E|AC0C=BZI!C*VhZ5+|{(5FuiL<0tXt-aLd5k`O;m;wV6n z>!~Or389+yqKd=#cc^gLM6HpDlF`y}LSnxo`Yk=dw7(mg29P+urPr~CZoc`O^Ay*0 zZ+34EJnvx(S>kSbEt}19qD*o;Z{KC}_ejz#QDo^ZcG2wH@4D+QjTvTt`e&KZhc8R` z0va3rRvf<vwl19K<`h|aA5Qq2U-o@p<T#QQEWX#l-%AvQ%u3Ro%pu2;>4zVF*ff}S z&-iC^`gRE6t^eElDqe<fpe#D*w~hvHwCW<W2{LlKFite_`rgDP7(GLsh(GjanjaH5 zt8zT)5mi$YmE*)7(Nr}Vz00CG&6xzEs_NP#aa?)VF4=X+o=c$zFuI^%PUI)yS)yv{ z$5oCK1EQ&+@7>XP)tRzr78ITnXKr<6;(X*I4w2oD&wQNYJ}s%LLUM>l!PXGhaKvA} z2VIUH!pV{|qoveAv!CWTKWEEr#cFlr3?^MN9Vn<r9fPdvl7C8#ACcQ}F~JuxF&|Z; zdeqnbjAPBDS}K?thR6F*<ZP;2YBn$wVe`0oZ3%Q8N*I7&Tn&PD<`M#z5|+xECZ|l2 zTv&B9Kr<i98E%0p;YX_A8o7_HLr`vg6ad%SOU(wxjpkCjhT&taasZ<qXw0doZ5=>w zs}+Z7kV04N#U5>fZ5t`2sbSlIWcp70;DZC&XD2F~thWf$DV<u8u4n~;EQ^G?t@tT@ zI`XH-{&WD4B+ZER&I#%^vSCQGUi<1FMwg*8=x+3+-kx<Iw#T}%6%pzkoiL@kIKuPY zxE}f)w-c7gzRPO;2qRnq02NNBhs=H5nYpCfZsn~JCMlICCdwu9yEK53PPMdo8t7o^ zp!XyRbR8s#=^?M1jp*3=!03EiZgpmAVE`I)w!BMP#&daqd~Q4~oC|sK%Jnx=^;sSI zaJvqm-wyU0-}puyKz~-H&wxJEVPV`D4uh*eA8n{{y!G=H8KrGuI)d*Z6)m7ubUS*c zb_mVEaB;TVal^Rd=+Ud~8AYJ$;~@##A|nkustbyoAL$Rc)z|N+t;+i~N06>IvwfC= zMq1|PPRAf^D^542i`yi?)b6v&sS&KLfy#N(i5IZ;S~i;{Bug+Mn1tREypIsFGQvOW zPknTu*Xw;Qk}*hB)s&SGAY4&2l}do+=yN^f{JCI2$PqDgSEsVs?7BQ6`q!sUMOAbh z-G$zbo=2bQ<tr$6lw|WsRrqBRiy;Bsg4JYt=)zXqieo|0r&UX<2%F2tcLxATu2(-9 zo}x8fE^m}&U7;y=cc?P@a#Aef6F*u<=Lds<4xlfD!x1pA<j8a6tFfs@?RKP+bUX_Z zCC(x~@ke9Xbq`th%kaOUX*)EDcA=wa9X*JiMDIdAp<Oz+Ss1Pg*A6T7npYWv2^hI0 zbgFvmD}Llhhb`1Zf>610J*xQ7;J6!JXyN7t$oI4Ts{Yy<OxV&yDFeOLYNg!WXhG?i zgk&@-5pW(@Hrh;+DHK`)zI<wWOrA<QTLt}0fMEOf?IA$8y`Lj`_mag*pCm0~zbSX2 z>(J}b1Lz6#4EiuakOHT}CE{t-62-!2_axyHNvx<+)gfVe?Ux5iW-*X|`$p#zB^E%u zPculj#rBeDq4y=rO`F}HTpbhe*9TB<YX}2`kcW`a4%^QYZD`c^V_P=8KaKa44#o5I z>1w{9qVKsitwIAhovv@B;fu_u`Fi9xq?x70YBw6vscOh1s01tfD}ltq>eSwNR!eI& zfQj(~E2mDa92lPfsMS(!Hr}g0c7C*2@i06a{i6Y^kj*sR3};#xTPBxro0%-MV0?Vp z$`>kQ#e!v;R-rgnDder?@o^Y!9!M+BwF15gAw;%*we?jW!eJJQ(KfUj9YU8gmMP}g zLN}VzTlBfnz#tNVkEn9iWsC_rc8Vk<@y7KVMfD^RB0uUTzB>E+_GR$>#YNwTY_8ME zWheBg(djfIJ+0RP>e2G@>gw`xR0pWnQ&%inZEs$PzP_Icg5YM!it5;81^S{WW;}j{ z*p9ja4Wa#=Tn_?_gP`7+EtLVvrCB|jEthjyUDx$&u3XM$^`5Y_&EY!sQA#Dkp0$bU zJnJyVh(w=tRAN7CmqY)K^>b(v?L=#1Dat%7v}`@%C?;Q8D*8-|NO{a}$A%m=7Q;y| zN%VzET<7IQGTlqf=PQ9FD~fCdm3$umPsz3cWMlDT+yJ&+GGzE+IS*rDx9(c5Yq|Aq zI0iT~x+{YryMJZ|<C&TL?TLwENhL%r6(=Uz6l}Y6fPxHrk51><+yC#@Yr>eOY1)`j zt9LUPXOJp`<|>*-i|7ctX2#6<52BBw&!VrR-^J&L=FDOreZu8Bo!i!3@kFgtzJS1z z(@BkKh>IH|7IGwsEt5*6a(3d%R32a^o>7VP*6bWej)KcPKk*v0R`qS_P(jTP5l@w2 zAulSfm8roDF?d%PrGxFXs!kKX%^m{ULVySn=cbghA)_>9ew0;kX<bW)0Q4|=1>g(| zjFG}Xrlq@cNpHazPlGy4bdm_JQj^eWwV`H#Gwb}7ifPECoR!)2mf@n!0KL`H!HBcV z#(P!K0y;!6ROJ}pcC0xFtWwaMtVsNQD8q!1IK`Tm7;jM*yQbUre6DHy`+uok4w}uN ztoxW!rq*`utf`Dr?2lf=v+aXd9Bj{GDrut!HHpHN0>%Z7D~TXto={4#^@r`-LCrDG z1Ms{tF-xU&qtdK6`on|mS&V1f2Q`UONppCyQ{%X5B4Umsq6isyy&&0MKe7))w1|4> z0rYmn8AUAx`Dwb{II0mUop>%n;n1Wmdb-)^HVNCIB3`TLE3<K{U6-s^kHR<+=71VX z>yPAnXXu3X@G4CI$)Eg5*7;G)caG*Q3v{zv8w1=tn71r&GfaoETK7+8s#PVo%NI;D zbLFmGyQ<lo>#97Z>}r4+<;q>+5cCO@68*eSj=q~#?KTF>%3sgJSgpHQ%ea%RhLxZH z=`!+#sRv%?Gd3J(nolG~sdDIygTWkIRz}vkT*BN)r~h5P93erwg;oyI$Fqp~{R9L( z5!DkhO-1!2>JFI@;Fu&4`FiqxMnLG4E4iWBoLpF#R1{h6?AzCAw-rT}Hxwn6<pr>+ zD1BLWjp)0jC}|3kxsne|E-Xwoo3gAZ?RID1zK$#_%7!ebit+>uS?()}d-`d$ET>2& z?iibwvohCX$d!1R8@uC3Q<;v~=|J5p?YI*LBykd`gs~f~js>7kRX^}N6yGBBpM3Jk zCtrT@$tRy|EldoDLojELp@aF84F-e3ARP<_g8|lMP7&47euQeXQ<9%#jT^ghyK-?z z9;E{pA|1CA#;zSp_u}!|?-W;H6N7s^g?@UW=1D-E3&y+)q@&^HV88+-=>@Ld?DzW_ zd!XO<A1D;jPV8h=bRFMz7AtfUyYsKO!^HO;qmeSVbu@x@+bzwNoWA_>%N2aJ<oA8) zYOG#P*&B8Fj+Te92SpBrzEkjpGiT0dCJ{$p@BlnGC=ydUqbRRyG#Y-La+VfMLDOT1 zvvZ<?7I~Hw4p_Cys48&Ut+tr<tDGCN7@;2%>iYc-cFhktyVvvs+m?-4WcKnJ_B>oR zO~zJCbA>U}EYD`E(DsFFR`a`V{*i~Vce>2j*6XjBCS&E(*ZRp{8t=FrRl7oR`ANc) zbk^PEY9p=`p&Yzv<nzroPM>~5(GsVk^!tGl`#WQe%WkWm#&!BSTq`Gz!>W3`pWAWU zZ3HR<YOpk#7~bWDTJ(eTOtVy~R!b$*3`wuS8?~!NNAK1o3KtA&2j<IH6BxLyD)}I3 zSS(tmX%&lM=y!MY+`;xNh9<}LEk-5nPg<=Or4BYNu3?JCF@=oynRfOq^c?ym`a1d^ zTo3E;MuebF2t6<7pe{n8HR-KbbVcI0V(hpM=3tvRj^k>3)^Ej8?6^sr^Ze(^Y<o7b zuq@nt46iX!{+0Suz(v0G;w{X!y>_DF)nF;tKJg-wlZ4_!7m?nIyPa+_*XhP{ojF*< zix9_gJR4S{R_w=for`(kbwc85SQStxKKvf{h2bP~HLh0=>!D8^Pan)vKP4bGL_yUQ zS&$4}5VEcy>zX7whRhVIDjb$Y$&h%a00#g9?-q5P6AeRgc}_P(0dU5i;%JA2VPZ&v zE=dI}8ajtX(bCA2+n1$)Zg9jfREOvEZ?;-3NzrHoRgKDBOnKvhPx&={3zCkBK}4O> zhu4~n@8cqVBPp8E>We(luW-5!9LH(8AQ_6RN}43=)U+h3GKKPjY4AKVBp!gt90z~> zy%2aoG<1%46~hoYU6-jWYZ|e0oTwWTXIO&HiH3whkcpzG8g+C0PV0^SKLEh$wKy%Q zlt3SS;-LDnK0{gg!s0ER`vS9^@cNQ0YwM}{&jH{a$z=JQz2S$^i|C8!6)X5jE61*A zBMcn3RfffVKk9vAV%#fE()srUikDrI9hj(el^;imokHnj{wwJw@Cn}WBwp7oQ<PnY z2$eixwkb<_hgpVd=p4tW?8>68f`9?AND2|?4lj9{8SuR8N_?#-n<irl;{a=}OdN%U zSn?d6msLksOp`Ii-f!*b3v+W0l7iI>-}~?pPvRXNcwW#PBD*THWK(9g>SYzxunbk; zGafJ6t}I}%Rl<Az496Uic*%2kJ}|X|T&=AzW}32>2TVX9wyOxfFFCyA>Kw-_Thx@s zc*%A5Tr>K-AWWDsH1A~$@c~bTXa$|}1SNeB56;L`ldHrAg1T;-_>r%*@Y@yTWIj#? z`Q$WN>LzW%(-~%O-078f-g#${X_CaW;w37P@K|mO88fWpfngYxgx>-roUdhj{V#BY zKx0n%C`KcM(YG&g$wOewwiyG7sDf~Lntq+*G)dZYxFl_2Nn_4Bv7k3J*14^FZrlY! z)I?XZKWlh#Eansm`SCO784XZzE_*||Z6UiO&N0Ti1=pE}yPDM6Vf!0aD8;RK(+O4P z`Ch}pR9MwGEX#($?!AwFUG+w%)2pV!si_}o2OpUndt~%<U3Bv=%+DVOkG}C}LpBVi zaadjh9jurwjIr}C%Uvb$R5tfvh^|5pqYwXoB?xgjMa-5H8Rv+m21Cp|oF!(@`hGmu znVZEda{m+3nx9r=4?I2C2$dxIwnL%cU0bB(BF4p;)V^}}?W&?0hPHjfj=J#|K>oPZ zYDrRyVM)U5>1<$gU1>-u)2A!k8ani<srUaRzb!dsDwoT09bo4zs$poVvJC?O7(2Y> z^NiAwHRNXhh_Q1%2rWr!jW*Y9iU<m}zJdezCbCcs%`%ZbfOnyPK?t;I3;5CYw-VuS z(-)TgxlW7!oB1)Z6e!3tmI$}?w?&oSR3i!T{Fd)!Ux@02_E*|P!n9dV(Y1sKIH~9$ z4XW1esIk!rgx%KPP6%E#(I}1@eXrN{3!UrNs+_OEG)uYM^mdI+Q`1$C5Sa=)sO4yT zCNj$R?qnvDaWw!aQp?e1^7%aQf)@DHa@3S)s=7V$Je)U8z)_psV{ca|0Lp_N#@>Sp zfbu~PWAB6UUyUcPoK`rFz%bH^7#LlstM><52M!#F!fKY|q-1)!RFm*gN2AsgR1oD` zT$NgPAB^|k-~Hp`<HP|BvyLiT>CDUwl^TvlEnnd{Qp+}?X-U(F>lP_3GVq;QQI^X^ zqN#H(r)>Rl>&y5F_&!=@aq{bAJ|Jv~i4T?VeS}hHMHVWgOvtNA+o=%oNcx^X-L022 z?4_ieKrXoa$ktT@uiCn5Jb|?*{M=zxkrekc<8}B?nL`4<k||X3r*g+FyO;?djzDA1 ztyk!_%_wK;w#@*K-eM^#d{s4UebiD7Tff=V9<bc)MAl^EdC-{CN4%uZ=<We`7cnx| zz0~hV@A(7+(5a#`0385oSkr8TkSL2FK^OU5+_neNV=|Er-m8-&rv1o|LdI(X-#(Cz zP!noyEE;W4;+aI%KKVGL!|q0IOT7i8HNB7|Nz=jds|Pzqe+Q+}-xY*s-q|b7!iBAK zy`b~nl~DWpUl-=&CnhH+r%Jns&;Q@w{_Wp>K&s}nT6ui9xjCbnIo}fw;TelVw1UHJ zy9Ygjo<vWh@34c1&-A^dD5^uO06e#c*ekQ1f&7N3av<w;6e4x13R!(OmS`(R?G&RO zXY|WKR<%3H97qzzspGPy+Rp1N!1gV+x=#i68Usct7}Mb6W7c&{y`R-OjWv2V)?V@E zj`nP+1TZzV*D*S(ZmU|rILpDraF_-Xoc@{vS!d~R?V_Dqv<6TkeVG^5YS)^vvpy2? ze8Xe#eKe0WI+Lj8M=^E+Kc1!WBB4xF!25fV{=+$5>n6ejI!izPMf)UmNclfq7*0-3 zYQlsmL;#k+%d&3&=A5DGc6;IQV>rwxg&Zt$7GQhFgj#(T9@Ze5bV0il{jT3%tyVdu ziuE#>OgB_GuiJ*&m`wE-D4yOH{{lG6!F;uhf7M-T4HcjrmZ;xV4Yr0j@ZGCUqRY_h zm~jmFu@(w7gs3L96BE1IuHTWAwk<xX5UnLw)NVbHZqkao?WD1v4(MNr{T$i$i@*Q- zzb|yUds6QEg2MTVKmWb&eNT2ir~~NF$WQ42`XfLL(|sCr&2HtX4Jc)smGVcJImmI1 z`#=8ik8caZ%vqH+@aT9S)m4wlIjT1BG;Qc>`7%n^TKROID&wJ2ZHdPeJ|G&V`9w63 zB0Z|_5kNHK8&ytqeJ|<8s3F}wfux~QRu^d<UZ7*yMusj*A-6Rc)3B)nc3oRhDK)7( zpJW$XRK<2(4EjEwB~=OevvIB1sgRo#t)7dw8C>dfKvC(Vgg&Z<8VCi)pfORf4Btdn z_b!bKRP07k*c%?#l%lvEhHyZ45*vbkb*B@z5up?0agv4DTpVbW0;rvKsOe@|QIye^ zEO$o`mU9#=D`1>cvksnLO=Fu)>O&on_%k#2<)^Pk?J5FvQ)X!WHfaTOAubx-Z+7cf zvf9EF>T2tiubp_qKnAzw;UMd(6$-Z4()&s$4x=bIG&G{XCPk5i5avNU?%-9=oR>FB z7Lajl01rO-_;A<?@r<6K0drdRoTEVx;7gPaDFe3-BpvI+OV1kpcw=K@Bhtk90CfGE z=vFbFD2G0%g|0>e^cwpA=>Kqf%k{8I#&-lJ>kvd-6jGyghwFq#CD`pLFNtD*$S|)n z*Xg!faW`&pZ8fS!bDcSr8Wlig+l&PZsZ1z9flO2{fXb2q3nu!)P@)B*?>QfEfE;(u zlbJ={;>w<IaMI>Fu1H$3XbJH39KbSv)}Qqq*BQFl1UeHoD7X6*3hXPa*|tV0dq^`4 z9c-r<x~lCsu3?Ih&DIrVC2%~`^B4mFz$(qB3jlyIuPpVY$bXUlZ)IggQR>+&h^FB> zj;*?3(XoM<rmE|gZ87%CVqG^qC%C<OxP677kzefxRrNte>31~1G*fhJD4L~mRG*xj z#F*5xS>P-w%bA|X9GhXlj1e$}uOo~BK(`(CcXbl#tR8Rj2KQQ)#X&Y(Cm2soPS&Gx z$t(caPBB9<peRgZ0GxvE^%vW^fwR&}ZDktNL8AoZYz^_P@ViL$Upd~5=xLi{U7w^P zh`)67ka?(xmTL!Mz{qV0LuD!J6Sl{TNvV#zD&3fXf^)M&$Toy6Qub*=?4izielR)V z^L%O;Ezp?5!0SSes$w2KzW4JPJf9h#41AB{v8p;hKfsn@q=OzXrlyRgDr2x>9rSC$ zYra@^9l!y{rIzPeGY4|&h3+Dj<;}iWX<q9|jtek2Zh6+TEOOW0Kcoj{EYGvjMi2yn zA&N?BnyD;^Mi3aHAg898DxzqN`KD@Uzf~O4uIzXCvM8=Ul!boWt_d{(zR^(KO2XJz zFD#1doo<40v0Uc3a=Ccm8-}WP-d?5eH#lqFrZ?O*YQXa76<FRy?RkrfZ=4XMaSfnc z2B4t4TU@YAc(-o%%x>s|Z!<a2&+YupZ+>%!4xIU^Z6atG-*y|uvOiZhhbmh`7{m)n zb|URYZHf#gEU0K@mE&VX^o-(AVSIZYU=-?Y7xeqv317wPpRHyp+e2dRQOQ~swy|v$ zzf!bpY-7vHzUMk$@ig!nrzN5WF&+q29Li?Z?=pRh^}#T5n?>6JaO~n{&M@F?5FDNa zeNE53f3i;|B5)kMAQ^_YZ#SI21qbUJjb*EXBnhf*;n&_@%`;tR`CPHcM3EJXIm9D< z>+A6U_3fRj(2ZyvAu_Itk<h*{8ZOx}ZYd(IPhVQE0i<>LlaeM9B7WVJ6|k(C>65wK z$>|x(0!22zu66%Vod#C72I@ey0e?#Rb&gvly6&|1?p@wBp{f(RmiO*$JGxF*U)TFY zZLVs2gCDD^<pSbxa^B0)>ktC_A&%B5mNbCYhY1qKCZSOz3$X~#9RDc0<8~_D$zu`- zMzIQib6htvW)Lj`goZ?nFun>z9NwKVbV!Gzc*`)P^9;Wwl<oX5lQDEL*gBHAVlzXw zJcn*%GQ-g@2m*Q$9($T@6=l&Rx{?{3<0#~s@aGvTl0kRTi$MTrQk5(!Eif!h1fx+d zoiO(*o!94-)_ct!d+h0A-n4F7?tX5~hyHR3Fy0D!(m<_M1a{t~K@&K<$<lT4U?Q(% zGUbarg=RhvxjKWXQV;M{xcj7hOwuQppd;uC^cHpiXt$MbT$;$REeUC+J=Y`Of*UQp zvM@#98bHK1M1uFlNE__xhzO1<G@*pCp6$f-NTOddf|-s(kU<Kba3>bJ<2&@$J)HqC z-FyFKR6$Vy6b0_091zRoL92N>0~S#{X<=-o7Iq^Z6o^abMmQZ$<4nw#2``i*oi6$V zV7k}41T8F?>-BmHfb!-wP$`%^v2Yaw(|zn1lM2I@g|TG>nF&F_D%QG@Wo9#I$y(Ww z>cUD&y%)5}I0`N>L*j^#7UYLy1<R|UFs7pdA@I5=7UsShN!m{*V4oo?;vtqB-IZff zh%dS1k{fhUkqyWXheLH;wCQ50C5>O=#P2<O{T!|;vZ2sB8~{fxeD$bD6+>2rgMlaF zvCHkT`}?QgK`FYt)rrRtjmYKLV7);<MJ6WmtY#&a&(3@8*(Abf?sVLa7{<&Pi`)_K zxwA<WhqCI|{8CYrsAYamk+O|uCfgLnaYJ{vNyg}dhUCv55Ji*S%$sJVW!jP?ivOJE z=<oi4Q1w;aW4;jpgzMi*XaS&50FY|6+U1%yHu)0}Pn2^x;UkYd_Lu+wZv-n{FW+<D z|MViX6CD><1&BsEQQYm+qlYXLNdz^aCYmNu)fKlxG)D<nD)E3g#`8U~{Jz`jnM^_d zQ3ZdI1C3Qj|4`2@z{=>)U~=?l93hlwRFbWqnYu2i>@!u8mLeZGDRnxB$u!)+!OnDj za(1pA;nvjXP5<#9|Ka+FI-Q_YFeuNRX62T@S$!M=mX$~RGk<b1+KVnh*QNkk8^p2S z@3|t0*11dCBp<8;r=mDC)4xb1?j}(jCe^xDQtbMT&)OJDrRnjEiy@zNs=(=1q3HmU ze{UxIXwP)11lazIGCiQbf4*J^oP~=_@^bns+y*CM_WW*aPnSv{E6Q}$$%f5*9`IP; z1qhHIRJHt7D3zvdT$orGK)pVn#lW5(0&=N%3eOI~5Iu_Cj^4{Djt4e8lE&yrx7Y&H z&TT!0KSeh*Cl8j=c4rdMZ*fu+GpM_&scA^%#xbM?vd&<a;w~;Imn4~U&weSZY4uRX z*H-JAmX#=#HC3j?pv)cd4<8gISyN?M{&=K(Oo^;a+vS2%sT^?Yx<2VviFVL)frqCY za36<WAxD&kRu&(fcj~8qdI!)6^i=QZXx!)B=Qv3spUu_hHu7si?SU4PO#SHhV?)oU zY2a;lanSoaS@RqJb+GrT(H6jHOZSrOG+??@3yj_8vjXZR8~nz=+`-R?pfQJt$v^-8 z@BhAbsL2nr8C}QywaWmFKyttLVTgL@CiEbB1^r2+2%s}SQ-@IxIsgnxfD~qMZ5A-7 zu0ttOM)MPle9c{{6Y6(B)c><WH)W*;BPZ~D_srcx4`bhRt(3ZCOQr=4O1D#>vL%}W zjk}&-0-QZRmS;a7%NwgSHWS5@-vXq=iatrA-7^jvUVLS4B-tD&rRhZ;ky5rg?&)b< z<m^*gKO^c@@^k9C8J$Is=fe=k403ZzLYf28{~=p%2Eu}8hFAa<@N<p=o1k_-91OLb zus3SX*qn|nfPEm#1Y?VO`niL4{H3|Mxk9g3SYQ>~na~%YPTwh%HKJ+xyrvPY4E*L@ zQcadP>Dm2$Ulb+j%|BxH?S8*6Nus#pSI?e3t22!LRU(`dH|_ajn!H!mjQ!YF6<~Ej zFaRb*zxYzT-&Ezjvi7knUC4CLDRTYzSxfy3mXP1v!n@IN^iuS8Twh_G2pN*oA5UiO z%BZQ%`cc0_2FQ%gAnu3LTcAAR6eUfhe5o@MAs4q*=g_<r9#jk9Y_cG1+w24G36>}r zPJCfsJU2Hdagwa1{4j9a=?PtkT`2T=g&6Ms#(Y80G(ixkrVEr1T_=PJx<-XRfaXVy zv4Z#GH^LKV&z`Nz$~o5*9?H7_MYYcf<f}Tv=-D&5nhm&cVSJ$ZoFEAPAUP5Am??vk z_003=076i!)y&=EPzsm?gD>$e5y5La2(1^0QGwCDNNnesIEL*I+$hTj79z~ifu$O^ z&QcCf$8fpCB~ektR3+45l4w&pI2RtNlt!2gd}#zcL2$Io{G*hnI_1oko^nCxq>!R2 zW2j^5gq2~O7EZ?&Go6w#Mm1X&z(^DS_WW9?xV7kcI}fRxeZHO=mtm&DDrbNZG?uZK z`7U){i^?eAZ{_2PIOf$p(R3}eh@sVeao7$#;JoDj`4%2DB9xk7zW-vg_dKjPj^pP# z{^Wr$45dQHrtlQfiU+b(*Hk0At1b;ECnpPyLbv{vxqhKJjz0??PMtCeP>;o;YLP%; z%lUL1osM3J&Qc(sQt_=bpYWw_`Mt5i%=}ZQ{Z4y#{u%v#9~Z`Lybn7e5G%<Wt@rzV zY<G%y#h=da3Ob*fpDB#>5Mq#dWdwJ}$+Y_!$4J#-vSUo#ybv+#{L!@M5}PQGo21?l zgX%>R`;9e5T9~0&fBQ%3HHz$%9oIF>Wz%(?vO@q@4Ff<oDiWO>D5@$dvZSiYV3NvZ z!!V5sEJECEyuSRgB54>CNg^0)oIv<|qcPrTG;)$00>`mD&vG1uvXpByI^&H-9uu9O z!#glh3(cV$(Cz5i2w8w2?7+53BU+8|o$DU3dT&q5YUxNd$k$0doJZJ(#ttmYeXe5@ z|5<tM?_4{4x5;+5PVY<8w0I*TQ@n2r!r+zxjo4XsuU*gI+Q@$C!$nt_rF8$bjs5ug zwfh4=5tp11J`7=qItayV5}nds3gu9`XCC`X-FZsYGoL+O^yo)Yos;O%`-ne_4O!fl zwH~j7mf4Cqy?$SfLx^;W)0s17bGrDboua?rTlzrSabcQ^PGl=f{@t4J;KyBmB06rr zO6ddNdY`jX1xmlDWpnC`UK}7fUC-8pWC~1L@n=Kd%yz67@-wRx4JV_<yhYtdYHB}+ zY=CUpG91g6!`Y+YLhP(PbOlk`@npK_tNX@Z{j2gp7B)%J+VMJF?h)<z2^~cbpl9E& zW5Dg)^8<%^Es^5})rVIvi4;A2d$`Fp7_M+Dj9$v^y6o=<IPdBuE8Hr><R>nV|3uw^ zP|KB|kd^-yFo`|nk*&mr2jhAp9PtZVW2V;=b?)<sp{OY0F#8s(pEeBn{cu$WRGnli zAnh!rs$at-<GJj%@#h*+I=lp~SI<UgB&!-+Gy^Te25UoNK@YxBZzuAZ1cqn_Lakm; zPKpd5DKi&(VWa&{w^II~hebsZ@2p_#){3Ds%K-BXqq|`FO_bhss=PhPElTe?gFcte z)5R!k2P{3sQNRsSNG;de#GmT{ga5OeLH?C(#*f`=m+_rA3OkR`%Q3$(t%P-Jdj}fP zpO*3Y=a`pIwg|)Q(}EW-%~Lv_eIbS05M_&2_O8tzhiEwaLXPp*t$Fw6v^DxwV&#pF zI!l!y1?;f3*}pgSA5YIKWgd1B2&y4CUnNMM=SDn9s~m4_DwXV(5UN-6@6~BlJ@>0d z15%;~M5{OUW@JHw;yuyVkOR-QPOy_e(WSe=J@uoT<yL@Og%{VT$E4YV`#Z<>qo3v0 zr^8P|>;yO+!tziBk%m54nAELX1h2SETmp@TzyP6Im96GgIA4Ce6>4%vP1$p;>gf|H zo?5wg@35a!56{~rqG4_?e{wr^-opr4ji?hDeA$NAwgQ2T1b&6EN~l$dxaEB9pdF01 zwrbGmmx=Z9UoDUPZ$%PWMj-0WR*MJKRp%!rBt{ZdMIekezxxnhz-%U33ivOze)Ov} zj((YpqpxKIqNt+8ND~wDtOF-ot)0}=Czhfa0+weuw0mCbcQSu!CzpieywKDP?UMS^ z*&dV`D0Y=WxtvB130uQB@_Za?o<8Hm2~*i-bk~Qw?as%dR81dThfQ<QU6ksRqdRMg zp}V5JHpnim(>n)_D|@fua_X)=yi$Uc=hO>M`EatUTf?|rMYn3Jmu{_3$CaPVt)719 zc$JUUK|9cD&iN>O0=SK!cQqS_0hDW%c^vf+!H^3|@pzQI@0Q14-^Y*BGW+DubRU9J z6y=M_)$VGNw6gO_RNkL^C=s_m)IHNu@F}LF)$Zzaky&2esiAApVg1W7&qJ?mVaZ&; zdERVy7PH>C9&G4hgMHP2ARFf9%p7mWKD?;ib>NNxCS4U{N^@>d6=C>j#@*^^isSRx z$J~NiA65EM*~7l?<4be<>bCFBvipbI)_YoJ)(@NK^Wj=~E?NfI|KwBxzm-ZJ(J_!; z`}xPwL9~e;w)S_1$;zVy(cvNGifX&V>$ni1Be5fyI>iPt_yTx`Appz8v89^Z08S~c zQWf<WDs^csk7_2bI^QHaQoVD%PYmJpne-*L2It!bcVBh>Gevi0kFNCY?fVEBrRv1j z!|DdtMj^inAR%N>CZ)q~=DLBBF$Y`zG(S#~oNRU(qi;%%qd}_&E)|{}e_D1aN%Fpw z2loLu@A_0d<ovvuo{fI3NRsM*S15@H2f^56Jh?oYLx<3+{ZMN#8$G%c)=9wQr9r=F zZ7380lOvNkL@+||b1^V%1))SJ3W6VM%b`YvV356viAdYfVcfY+u?ULdbS+s?Rom~s z_^oe!E6X{OxI|^g6vm(99(AGr%^b&}6(g!~Pu0U#ce9mW4h934Sm1%8<0_3{mN#}? z`%foNo@7~KT9zfq&Y}CWZxu}wE*OSkJahZ~eo5yLT18LdXPIIY3+dB(*2LJp+RInk z8MpbqM;?>uX%aOeLSG9r>NvvQ+a78wQ97oZ<s6RFO(*y0Tahw+ztU}cm?TMj|F(^d z4dt}LeL8+ihQSjaFvEkoJhRh<-tv~4Zc2QAyfj-vJrpTbNk93&uo(v^EB^tq6?=rw zm8oDDxny}cnV-)$n?W--etj5;9in&m9G@$++qL(5`dF?p)@<hI=ac2-Bxf3gR;I&E z>~#J3YOUQa<ao}1ksa4ASN`wHN8rEVQ|Phi9`q2m)LAcdV^e-nZ;RWCF=b`<3$j?r zg0Rio9?Yf2+q1EG0@<;!p(`;`c(fNz$1$nyX*MSD^$1&M+>K-PdJ@~mAgBMy>#de$ zQqgfGk*B5wSQ14EgJn`)lw3!o=02q-gp&OJyqL@76x{~1*)+k{l^kFq+;fjWFu(_o z?&<8_@1+mMNqWiI*Nz@Nib1k%3Gh)$c&1WeF`+iz(~!U@#^SllXcgT(c88+~ObpN% z<uyv0MK|oWViGaoK;+Fjvn~kk22?Mkp}g#AmD2sXB+0V5P!TTaSA9^moE`UMF{P^C z?<Y<`2a<k2@mE-X5cpiaB<Ux{-3?QgYr>I!wO`5SwNk5J_3Ou0I{c4>U1=r5m&9SA z{^B%3Fv7_$cIR850y#jESI64~jUzfvDsEpTih;aQLZ<>Tv`xizr0~Ud>{V}TMSni? zC(-f#D2)1EYnHy)R&!|rpGGri9xcq_qe()(N$Un4CnfT3!5s_-!Dl=WhXarGe7wDN z$v<24z%LF^%a$K=_^Owj!G`W-Kk;+}&wP&i4nIb=pI{ehc)?r>J}ld>e5EZ@>)jRR zvWt$Qs)}>5`aJM%i)P>1-vs1jTp^avcPeN<I)Wz7<2ks~o`xOUvk-Zc5j3L4V0I>m zfR@nA0*(}YV(9HlEGBebTvvOM!_C|=LXIgpmZpG?9Xm$IF@`sDY29<l9L~93ee~&5 z|B2AUBlxJUEe$loh>hO8Rrg%TMyop7mIjFt0OwE;Xp0jHJd^Kmnea7uhw&Dti`8Pb zHWAn%G;86_#5Gh)kE|TsC}5U??SP=IS^ycc+5P^VA<fb%xW#A6(#0f667VA}q{%J$ zZ^I5Jauaj;@$gTfC!!~#2he7#vuzMfGvt``Y^P1MI3%NB>caJ&T2PE**prIUb}9Ja z9CmEazX}8xM+9Lzwp?!z&qRJCFy2lhw7tmQ`u|vpJ|#&F-8A)vB#C0xf<`xLwHc_@ zrhpVx)zGU2UFRklrckI>G%N^Mt5gdGhMDAay-?K+RV@;js?~sLx1w$nz^aPktYuj? z032kP`-CmwwBU6*UJ4%+#fBg>L{XA_x5{%lfJ!Cml`A|E@*byZnxSa`lB9L6o){nZ zs|wF6ReyYZ;_8kjNdTH=Xqw7-d4ceiaxbb>0CF5(b$v<7(!6QrfdOFHSxZr@#VSA* zVWeLfVXxVK<m1j$(I$EpPBxo@CXF;pr%gbqjZPvzHd}AE7qW(7xY4vv!(=oamn3WR zno~wte~)(1iV1aI$*P@Ezv@KGJA&-BS{_d+He4J0r^z)irTn%%{>CYmyz10c)hkuJ zshaD6tT;>5<LM;NFr1s46F`nEH~kAc!L9;8fd}9foBt=E@BsXlFCqIBl(Qd0S<xy0 z6-@`%sU7t!Q*6!T=xez*pU-o`Q5jxxGM<H6FEWz*Con=QXbnBk?qP^u5y=lIs=jjR za$?bXIDZRfg^G?^9q|B{qHb0*PAm6Z4{x|GfSuFSj)3aZz8P%FvLxxEzP`?(@0|7Z z_4U(z18#j3A>5r<v0M&XB`u$?bPJq)c9dmv!yP}NOOihd%r-ns`UfB7Iu4pZ*GQA{ zM|*?4EfLXp>9xgBz~>c%@+VURKweNyai!ldy8<~6-j)l-??w&PDv5Y&tavr{%H=EX zXRd+Ipd#9du13U+c_}81iCS@MMBI)&@8R50QnMXIy?mt&n5ULwT|pWa-1VEN<ye4p zBDnY8c*YVJCrUC&ZY5;<-k(L$(sf<eeK_OkinguUHoSXj?$2Os%{!&7s`LPl*fQXx z@B2QN8sfGRP0T$@QHNI3b}6#mA2T(USFc<y^M!{cL13nyrHc~&7}Z&s3eY>PQabv{ zPkvHh1VQ5YXE<pcnf+W91es$$EK@Lk4`R#cjIza=K8cNOBTvXP6NJPw$K4);#NnoS zem0>#AZj_**$+QaCxUx$MW3UVWBvQR3uEK4=S}_d&K`Q<k2Twd1@+gSu4qp_@;V<G z`@h)yc0p6-+He>dlC;P2tQ&DC*dR%Wh(O6VoU!RFk9Zl^5^{174b4^!5#zn6l-?Jp zs$ndu>Y`z&YH(k0=VcdMhH)=sTj3w#E14NQVTQ61H|8Y?rRwp(FwQV~QB@5ic!^5s zBmF)eczi*|BYG;5w@o$Bjj<hV&5Q>e@g2~2LjO*za%pGDvI*X5yG>F+#z2+mzPcz? z{cM{f4@Ft4xb<V&<2_?$_&k)2WY%y)#oCIurA_>{e5CHh&i0Z8SSEJ-IK=m2Euy<C z)b8TzcnE?(2Lmby_d}x++`-rFM@5dq6BC%@#E;%hf%flhs*64Tb?CAAObF3J@(lh4 zoU5S4gvx{aPq7=ufkP6Aph++hPYuF$oZ)7qrv2x;>HH9&(F{`lrT|%1z20uu>z1|j z!JLt#IZ>RGBvCA_XaL$uNffhQGasbP`y>cgb*J>RDy7-!pjNXj%dXXeFMI8o{@QO& z6eXz)ng(S_N(ZzYz7zn*|A=66h&V#V2EQB<;vgN?V*S(i@Xy+8C#I@zY{Dto-XLk* z)`%Lu-a2SysgWGRvsQR3XIxNfoFEFu<TFv^gnt*eh?ynZ?Kuxk9(};r^8I0o^^0v6 zc%?}{ncM^Y+JNC1lm#Qo#$>s%O&l&xj9qEptX-&%dXe>^d*Qn0b321>Mu+Mjlu{Ka zk1F3Z^39<6f&H=?VT>vw5+}Tjk8q;MB|cVEQo5%kC<^uywcT#t*e=#R6y^5|j!>E= zihz|kRxnYMbmGPvZ@jS`=}zIJNJi7Kt~-Wd1Yrn;anEC8E04v-tQ_`Z!iO#Uzii-n z65=_}FpPcvt7`)Niy%tco4@h1pZ)A-Ii{dV5-_>!+u65s3`mkzU~+$ZvnGjf5w^0E za6CIX1~=)HGUe=9Q&Uq@I1ej4OR1hcKaY3q!g;t~r<CQhvw6(I@$4iVFEf<t*}KQk zv-*8;0=?MAuz-Z7F%<NpM9{RcnuEa8rqK_#0#gHEY;0Kqo0DcgBoz@wCiw7#i~0vW z81dj~|C`zy2q7g(8Pe4atYTKdmMw}qM9xuJ&hzr5h%t-1qNeezV#-Y~$8(Otajs{v zz;RHblwk#dumnR9<K>?7$-hawonaV)F?DzrGpwTV3}G1<uPTyJQ&b)V%oB$Po>ep+ zGn^#ls)}Uzs>1FCAQ)4DV<D3+LNLaZ<p6gTb53!3PNJCrTtqXlIL<w@7rN0PhR|?O z9y<oJ0elxLD~v1Pm%R)N8p-}cjWGEb*gI^vVsRlWy9{^FJsc>|&A#Vvfck4x5$!++ z(H-andQOx?6(^b`&uypS_y$gf5>ymEK{j9)*NMYH%*zmAYz=XtNDKzfM)k_k*X6lY zf|?U)LVjpWI0z=|EiElE?3gHd)JYs_Oo7g@Ot!C748u4M!(wU4Zj-c#gm-D_>oh@- zC%2{$Ipl{5B<X67<G8CO2~tY$Etae09TtGqonM;j5K7l~^m^q|sod-B_$vL^+3)nU z(skceyq-}BY#|A`XdGQ1QEoPBL=L`j9HsJXqcO{ZrvUhnNBN=2EG}&+j^lD8w?E}6 zPq`SW<%gcahu?8Wk+p+!7hte=Y7#^A+JJpv&~f-J^iLIKsi-Kj+)$JiS%yLXh8#fd zhW@C(xw#1>j`uCkfMw-dZSLp^S>9fdWkqSo@`^hk*{yZ{8YB2EPQ+XnNj<@l#$_yJ z>;ENZKm||5rfY@7NKGo4lk)s`PBPA!h+OiQ3&96$32vB)oHJXw)o8Pp+o!6Ugx7aX z1VeNs`U?6s`UCXm=&#WX38LzaS(ikTdDrxO9zU(wq>i0TIx$|MIG4f?8Nq}=yj!Gh z<L$VEV<l=Wu<{151qB+6+6oK_l;yk=R!b_7pXai3^(c&D?|sylwMl#Pt8xK!BjXu5 z=V}alj4@Z$nC|mnS$Rp~bi>OS5$+I#oP(0@*O=1^1BO!w@eRUYm7MvdNmAajfcJH# zsV-y8!%TC(9miqXuakPKFNjLcdp?^`e#vm*#|%7~F?3+e6Aja+l4zQ~Z_2iv$vF;{ zmAqvE_80@*$h-{thkKO6G+4dvqgT!hhr^Y80g8$C0u`A$PA+5Hvg!M#DN58g4e@n> z70{T&B}I{o)@KB0$zZMgAN2}isec{kP#rCxi_qnW1y3;%0_Ii3meUjxngc=ZSrYP; z{MMtSp|92B(wO{0*HFrI-CoQ;jsuL#rlZXQ%xaD)!+$Qx)`7#Bw-BDMU4N6l*0CkN zdDmV(etg-{Wb@E9*Bmls&B-mu#stN|%7#ee`<A+F4rgPLkoah#l7MQ$rOSnaHu~HE z$OeHH=tgD(eo6pJRIsVtQh2h_Xfy}_X*3!Q@>Mgsk!eJ~l4HQW)QM00e!HlJ_M<D& zUFa?7Bj{!H1BC33+Yv$Hp>454T2>DGr<6&M^2D_nC8)JDn*`y8>bcB;sNRWVCkk%c z$HQvGj^9~JWY*3ghH>mGNDfHHiTvpM>0(%oIHwOx;|I<TC}mUkdd3!`6wb9;s}xHR zJpP$4Q5slb(%aJ@2!eIXC_N%;nj9E`b^=OApQVhTH&94R&qaEQIamsAglM$ulT;kI z=+6sB9?<BspZi@RgeYolU4Zkjfh;euV?T^OE2Hi;Qw;EZyz<<>1_-YK(WM5!>Q7(} z;Lg|Mvv<uY-RJCam>xFhigkc~I={Hbl>yu#{~4Dyjwzj6;SM=V{g(*t@NSEMwi|t$ z9dg&R+mM@F>4^4rV3xD+uHUSi1o)z8qUzvQJ*uS)B(kQ_wsdgz{Q2`9#@?HB{v+>a zl%B(cj3Xd0wtra5W`W@BM>i>o-{6&+ocI|vw-5tkFfw-QwC4{|8|_Aypc~P>=qdC8 z^io7vw)^80_;|a`kt7P7|26@%MZO}~uvtzM`z+bb*2W>`AP~!O*)LZodsUM&d9MX} zye5R86Ub6gd`i!=Y8eXFx6F;s2f^|-(9a!G+Sqo-4f9(RJcY`%!JyAl99{AbM#(s{ z{wRajk8uCd+qw`!>ed#fbmv>hMdS0kxYEt&DfChFJLqNfZS-UGFH-%6>!N2_*E*1> z+eai?Cn-d%|6nuE@7Vm46=BwjXYE0nk-!+m5^(96gw&(SRiGgTjrn#vW_Y<EY9(<z z3v%y-p`nQ(O>`5XtBUBZ++Bgz$<`(ZX2bX~0`p#IuTP1UB1#`?slafA*8Z=Tq#jki zBoT>O76U0rFd-z6ApihVAZw1}NJIn^<GdhPum++?Et}&^huv!7Y_vO{=LMFxF)WbG zmvjKb0I($hQ3ilAh$0PSOa!<KbCy}F?buPPnHGm7Nri?gNn3~tJTFikKu@8sH`b$n zvtUomp~pv?2CO*vi2rX+&__e~2G0xhm7N&>Oy&&@V@!CSHw1MESkZXyfA<T5fCZ6W z3Aboe6fl1)$mGz^j2y+DYcq^(j{6TE+`P}sT){p8vI-pkDJlwB!ZQ8=$JcpYaXrfh zur1G3cwUtxNmAz|Ns=(rK?l$o#!QkV2{RqmDP<a^0F-Ks(jMr2eBx;kOZjj2A*!Ki zbO2q9u0&_h!|3h0Mk@wab#h2j=ZJ{RVMAsN6fohY{<>_ys0>BU^D58lkN5xgX#>w| zY9>>Yfy!(&Y!X6#O@4-xXMF#mEVI$Af$Kb`UCaViWy`W1^{q^nCmr`8def_baFMcU zw9}tJaRYO7<zm@mLc_5p{d7{PR65pM^6Rl?3;p>A(^$@q!n;vq(hdwqDJZJ#2xOne z86G7ROyi7M@U+I9)`)O%z$hJ#F5FoI40fRvr?pX4r|<QXeR*iC+P?kmxl?My`|@?% z*G`}Qg_vuq{)wH^+Z67w<q|riaKcnxIpEeUK00$k*sk<Qgv8s~&iWl+u_ePS)g;^A zfF1YC1`nJAW}s&nKfb1r4;=^3#s?*-ua=27NK6o|t~0?P2p+yRd58w7^R>*>Yf}f~ zSqyMaTa>Ow>>rqxflu~ji6fmOL6&&df2Kqtx>@5-Y}Tz4igLmPFwI=fB9fKOnbxl# z%tKlGxGW#HvpLfQix3M;GpF0hrqB-mjlSj$x?$C<woGBtau^m0IR6QfBpQ<hXNkrr zEgBt-InYa->-$qpQ?`kcB%Ba<Uj93U=fxTO-jM>m=LaOnH|Ir7(=R6EjZ`84l0=t$ z3EZ@?2W!F=eHD@d;TZw+FD>FhPyf*K9?q<<uggpNl>{bWlIitBc4_j0J!Ua@lpnh9 zoS{t~I8ixD9raru^N2f$bakT1fHx<H;=+o4rJ2WA*~u;@64&i#jD9#qZA<x5Tl1ci zQ^M&X^GtQ(id7$avoaiPcQ$K|VHhNn?LqxaYs>+Q^5&=)Q+~2qZBs(0S?>-QwwqF& z%ni?-J6B-rIeODG=iAll5OCUY%IAF!;}kb8tD*fh$KR49#H|rH*Tj(&j@yIwToN^p z@i)QOc((2NZc&+a2#LLtfQvXy>Jga-+aaAlmu30ju*r<xep`4@R;%|{)qey1unb(r zEtOoyG#PWk*?26&2{LS<?T-tOl*?uD-4CjA8RPORI)E&28P|0fGfk%oP|a{4A5Q-% zBkbxpv|V>`oGUvCbSjC%82NQEnM<NrbSv06no)>W2bSh<zDsW1^}nWNEiv<kB^cbs z^o?&cZ37BzO0|7L5N_|v<;%Y*LO$OV#nYEb<Y6KXN$rhTdyY<HsgGvResnc@QzREt zhbcf+!Urt0x!Z%=6l5GR%rZhc1UTjt&#$<w{Sih0j6C9+MH_`8N#e6Q#~<5G+U_mM zJl$A@^?weetE;Oa0qkl4h+ke%8_#<lbR)BR{Enl~i=s%3t4vWGYd4b324vmXTQT!N zKhZg@|AgD0TwVQK*xCQ@_%96O_yeFZXK+1g`rVi@)R)V?f_K>cW%Fn+J`Ex?M6=_k zLR(<OSnn7;kqF7dBfDI44{~KvB={LIEyA4O*m($2?|t611p$JrZIdRisLtpHJ)C|v zAANcqtVUs7^4j|Px`naz1~eVJ$msuPO(QwFt)k8{@3VPnl}9YG%dOK!hw$!O7LJ8A z^%eZ^{l~{5J+FKkL~y3cE{P&%`6#cY%+zmw<jqCKkmoJ*lpZUSSSJ2t_3DDehj#ML zhvUX?AQo3mXiTCf_)G13BtN~IyUXQrSydS;ml;#l<(0`@CpcOzpAlb%r+C(fp${cG zDHsFvwCw#ARU9HgqBA8Gndf|sPG3-GTjIK6uzYKJ05s;Dhsw9-8-DCS6tkIRq<+`z zt^c&cdPEvZV&jInO=PY0o=s^d*c!q$cC%IcXQ?iM7ajL(j-o?;g=uI0faC%+N8FC9 z$QQZ&!TTns0H!9r-gcQ8Q!o&!YKoK1I<%~=0azKENyqa!fLwkY$o(>*)}A|XV6Lr& z>%Kx#o@%P1U@Yn67otG`D~hJlycAyli(mXgsaB?^D^-PCutjsr1)tK1yU;^kI-bVF z3HW51m2%7?KWQ&C?GFEtbJ}jDQaJ>Jzp&FM$+=De$-|wh1K9KMaLw}%v3F*5wLciN zR#!)x5R4id3*n#)DK{$G-K{i*0rpUd$z6~-Xzr?3FZj>XyM=-v2-4j%>`A{%9RdCz zPp*u1qnpq>aA467F}D8maXm6?JyY~wXC2>b`<iIWMzT%_*<6TE;kpQf?Jl-j^PXRY zjb8bYqjensfv$T>nWb{NhWD!6+>?g>;(<^)2lmu})iyb9`SzDvE248VEHNA0uegWC zV-8baYzu_6zJGucbQoQa?w2t%%s3JWtK(R%L^B*<6`$jbLTbL_xE*&bjk5Z7Kos1u zNmB;Aa@An2r$xPVE6tRD-RK;Y7KL<*hpEJG(-db)99R^7!lE9dw6_@miVa(J{zSU1 z`nq4Bwe)JqKd~RMB_w&OdLMbX-**%xUZ6hg&!Dt%6{2an#G^R#Z;I?1KFa|rqoZZB zA$S&fV)%ghNdd{xL9!CmhgyEw+T~uAF~Ht!rXVW80)$_*3be#4Y6ZpTI)12#f_a;V zfiX4Mb`hnkDtubBfj`!p-NXo<MGA6I4N0!M9Y<WHQUP6v2@FMC0iO7(R3OwmPhI@V zw!ebAMsJ0?F50}vZZsN-qGaHs8AVYVqtoyv$GQIc(XadcV9%aCu5s9PyL%Agw?<ok zgE4#r<xv}*LOp~M<cnrI#<h$hPY@z=6A^>-B%xMk%pMUf8&lmbMAD7%B#Ga{ScAB) z?jDl^9Jhvra{@lqYGHh8@wwLKZF|jYo@;t*zr40!HX4lrRuwa=T%#DKqN<9y4XcW2 zDyq14^ytxY>pMLEKAwMHq447$y)icSz7QaM-{{w0fBp5eWGX6nwtVyg1r7_M8L?`q zsnW|0!&psYvD?3y*I{g-f_)8cM{h#!MV~~-##buUx&#!8ujIREU=D<XIshyi`*TK} z^^;4;o&(6id0#BBLGckAfdQYNN^1EFMhC80M=3pxM}XwgVs`1LmVq%di;af<_&qaQ zl^L+Ef6pIZ&~*|&eoE<i@Xj@n@XXxKX*>S;JB7BP{pezs;9)7DuUaqK8dUW;!;jMD zxYXs|;7*V{sP^-aVJNKzp>zA`rS+{&`+5H?YNNyGM)W8fOHU_^dUf^Ot(f7TZv#nc z>yb0o^N&kWl#bwq<Fp2Yu{}xca)$i*`|7!2nS}utR*yjtiPn6T&#$4^#_O=Bo5ya( zzRBH4{*2&%^S0d;y?v^Kuj>PZwqC(~_%=F=5F{k26OnM%urc%(neCx)DWm6GlUoy> zzYC(CwCfR>&@*_x*WMFm5adHK6Sd-SiZ2x0>@^|~Fvb*3#ejKLw(MeV2K&D6V_d6E zP33Y^Q?(ji`@xm{hA9b_=Q)mI<!n_2)65sLS!2gndp4(LviY*75Do({c)_-9Nf0%_ zSd`r`sMl&b2ZE5vB>ST}bD;kbsMn7snT#L+&|Te}V`j6Jpe_k!KHuop>KRQCUhjf4 z+vDTqszU`1z?PXm@f?cLeqLW&HNAk4fHPIY?Ens668cl#CoK<Xd4<vSYCs>tT~0!i zo1N>WX?g;)z`mM%Uk`NwA#UpIj7cIV6O(3(a}gu;rK+mVTU2u#ei5Lozj;F?)V{+* zq8Mn7Mb&pmijIAmk<VFwCFP48jcwGaAh9O;-J~Abj2N{CB>kQ$nM}skRU?}zb7Ou6 zAeWxd%zRxMqM+QWDzd>bCHeQT-?A*#uyxA@$YjRGa@)nKZ<XoFX~i%U8ECq%;`lwG zLMQwSn9akfg`<9ze5@<nA%xTcclRo;^!t576qI(waRD;^SfQ1}vgv4?>K1faQDlA2 z5Jh!%*TV|UVM~~<P7A(YNu%8wyrapcV1gp+hAi(u`a0)cd*D6)ktAw6*UEeXq0@y$ zIGnY^a@zejJ=)?3QO`sTqPRtmyuU6u)a~#0h~R9fvfLnaju5`bS@&qUSncXFniNSm z!JM$?L^G&C?hJWCS?kOhf*8Loy;#~&a%=$4uZ&G*dBw6BFWX}pr8sw~EQ(+V_Fq39 zu;<|k!h2r1;(GvNqRkXbWI(Bw=VdHO@|q3xnT=*_9{7Yj)EZE^iL;AX$!tv|kH^Cr zGwoGtUu)Ygmvqgrj@5x(ze@!=X;o-%Pc@UJIm6PmeU&zPUiYlE;jHh#9Pm8;SXtTF z*w7?VTvr{NUU{ZS9Ih(rd7G-vZws=Ed|P4X`zhfm%ucznGvNh6;lPA043Pk|+F&gb zAPWec6u=0{FpRR}04rkfP(;seC}`j~WpyjwOc;^`Q_hO!!P2Y;j_iZulrxqeLHe98 z@~uqSap+x?T3s7&e!KfSBO#}uv(LlpBr!@6h8=-7>k<^5%#})+%*l8?X1K}8TrQgx zn^{lcH%LF=9?gr^L4h-lciZkfP6KL!?~pn<Lo8RZ-e9V(C7mIx*=!zfmice34N%X! zDzU=Qk`(v6cI5c+<Hz&iXVFBLqnpYH;GJ9Djs~3cC5lQ8G$%5mh`Q4~(q1alA|c`& zriit5ow#vb+7MVq0M*vp$=_xcbIdW7a)B|^^fL9JXj=feEVaS1@^;QN0Wz0L*bEFA z8l_6_)l5Z!nLJSe^chuEi*-|B&Q!rP8S@GNwpFY+mTcwore&4%ww0}AK{hbM4IkAZ zGjj+DK5!72aHkhuEns+&hOzmCU-U_Me!GW6nd&+VuX=(p(|qFMsP}BqO<M4~o-j?u zo?wML!N9}E$M_|smO0c-&gU3cm&E`#qJZL0tmFMSzAeG<^T5$(-<Qz*71_*n(*LG< z;=|MKmiOMH_o7GfJnuD4#@_qWcYN%N0A~3k?lz+5h#vwr=)|`L>PA}y+O6k&JqW{n z>Fm2UAJQz^T?Z7R!H`3$7p+dr(MZr_ptzw(L^hm67`hi>cMp441fF{*xE|LFZuRhn zB&mD$sFKvX_~MI)2yfBYQ^9yyXFLq97i4X(9(XQb@64GwRg&f<Nqy58<I4H#s(w=T zu+YIO@79b;d_Y9r^hH#d+o$lHG?3-Vzyp6XZ<UmrK$fLGk$$*k`Cs}4v=&DfUleNb zq_*&^>&DJ)YZdK90?x;``--KiJjMb@R;gr3A_hTKt&KThMaQ1bfgtbz!bd1CV=VLZ zBO=)J88FLxe(rvk?Q#>+RKXFxx|L2Rk4=Nd97eY<Af?j2eG;YF$$<EN+lDgF3-j{= z&&$JOy!%TFBCj3Cv%o5fA@|-G5vjKUhx&tUAsYl)(_k!Ww;Q!uquq`eGmUHzWPQJw zUif|AXUsI$d0Xmr(_qZ^vq6xp7yPB)iH;SxE_(FILUwyx5$=XgdKp}=`h)@!J#I;` zO9D4dOb4K^lA1{vP*8McVE{TSk1*yQV(74i`rSm{c-@0TE+do@MvnoX966uUJaVIC zx3e_evIB?0bnSIxx3&fXi>RTV5i^d=qxy`}UcJy;kNZnMjdp<L$SHtH%XS>sN~yy= zAVza5D=RBjvJ-EAvLXU=i>+2XT77T^0*#YP&SR#G23Y&|3R~ZVEqDbHWTGsppb6AQ zOK5-lnxIW(N#q+cKQ0nG)OOSsPm3fH;1KWT#`P$wNA1}236O**&U)q$K#0Sa8E8CJ zCd*GvO-(JXcA9VRG^Z9<`(-Jm@zm(MQ&UsT&gx<{rpu%}1!ux`Ri>t<Vwy_jAFVD< zH9P%}y)BdS=tZeK71Q)Uv$MK5b#!WKYGd=&#nn!83kQ|SGL4V!(7iv}DJ;Li_14Jj zZ!S6|z&g_A4;$bQ2o1=4LyS^oOKWyTx`Px$&zsZaNzOEc(zC%Hom3~EL)+_`ZO%1x zmR%FX;7t`ren3pVL-s&_%EhFzOBBaMNfLKe2zBw1f9ozh_0&^3V3(50E>V)iF;U!A zA=pL78(Q~-!C=BI3;h*J+udiZ+xGn94XlQ){`-&BrdKl{)CeoLni5{8kn5Rk<FaSD z>&Dj3a%hKU3?eL<Cr=K0XU=#S<@3MvDLU~9xV)U5r#Letn>g9h?cyu<=Y~bh?VWTx zINkR(MRCo$p7REM5AaiDb#PG!9(F&XdZ+ZR1};tDFa0dKsKoJm05F`b_DvrrA<116 znl1wJW8A;RU*=w3;DvkNbMwtN2cGTCilPvwnZ4zbGy%W~y|UG6od}&h(GrBbX&=Gv zGasWpXicB3s}OR`7khcqE=a0XL;^cVDQ-o?Y}tWd<@0%2I2X0;)Xr45ZS!x-fvfiH zasQs2<O=K93*6rC_f0cp%rs|SZ<>t#&(_{1+sWqa)PilH`GIFMKYyw%sN>SV)9?2g zOHGrpnb+Hi<J3Rz{<eVf1T5zLDM>&v3p{CQ-$o%C8n|I^y?wi?{k6?z979Y|ZCfR( zhkEp=&pogg>N2a~`PIDZNOQcvQbB>|4`y`Du<V}<%z4XD)%U>Av*bZppPqLD!(tk- zJF4=sF8(GUcm>&d^a`XqGV69s4vJ;h?AVF%&K=jNsCiE%3T)rL>#yIpj{%h!v?1>P z_T2Lb62K}t^x?+J%9$K%weAF%47~h^FrN%4q%^U1=y+p$2!eFzLkJS?$AAVNbP^d8 z53%-(RHLnWUe#dk%#%+(N%#airt}<^p2T7x*GdmH=(5dt?OY|3p6`|j`A5IgsRIWN z98^u4?JuR>+1_ZHtl%DX=|vY^bfe8wvscQpjiqPq*8^_4zVE@b2FNTa9#AtVwCV!k zsoHw^Wz+bh^Qq|M(_ZQ=kmbm{Axy3!wk}0V3nG>*x%lFXFTO-JjA0$~OGH(r-pH*Q z2Ek<MJ$K)I_uU#Vnupu{_{B2NiyuGyGnpc<(ZK)Gx6mo3A}H1t%EAN47cjm^77?zM zfa+LIPxzP)-AY}$4p0t8%4V&gJfuD7%qWf&GcmUcx{>|Sn0)uMVMt6JKsQMk&Kf$T z!O8DNxAbhfDi#o9Z!yzq#~nQ~c21a(u?mD?ndA%X<SC(4ffx-uBeG0R+NgBPH*Bpu zVB<**K!xKD(~LCENgXHsd}Z<K=JUDE3ccs=*}3blzdl2!%0y_+-uLv=ProrI>q$?Z z{>u=dT_9j!U;)O6N-NGqS{=}iD6QJ9HgFaDbm*PbQ6V(2kG<MU+xW$rLwkyD{YA4f z)(t5fm%QSNE23NuAeW2w+})xptgfuPhlsqi54l_v<#GU}>up_m(!)<`s%@*<+P$Th zI+)0!rXiVz{Z;CxAuYKVu-71tAZK%3m$DY)R9?4vX^U(!`LF&6$68Ewy1A?@IK-G_ ze%d*a&a21GnB_P(;GnoaDe`$}1cWxGQ%|w+YNF%*c^x^h$-H)tK0@mrtwdDbHC`va zk}n2b1V3DaP$Rx$K0(bHjhma}*tAJKB2Oksl1$2^mh}DfdrYuImN$$%6D@&-ni6T6 zrbUVt=IzyVC_|>^EB#>#EZSIGtdF=A;gE8MD!@lNW{EM=EK%^{dpHlS&X{TH<z{!R z22dMw-AiD$r%LdVv}Br$l}v{Wc>iWuH%-QLcPrB{R_o#n$N&xN!qYB7iBvr5xiTis zj)!4jySiAZPC(|HYfFZ$CqsL_<yv|O+tJ~2jmv@|hoq3NOmMoFLVspw&YY?5FE_JO zs%h!VlXc#S)l5d<;+9wE3kR}@=zfm0Wa+ATveCmn4=bnn_U_-<;KZja`-u#~0Vg7r z5S58D*Ji`G)tM__i4!@ihjrDPx$(W>7REsIGA<W%N_jb~Mw)3VjzC>SXL8v@^SGbr z0WK}{8@AFQR2E&HcmkD#vROCzQQ003Q<mka0N9|W=?0378J=gU<M15EF&rV3vMeV) zb^(TAi0g2`FuZ_$QF8?HA%P((_&>~dmm+?PO=pphc?ORB)Z-~Pda+@Vt%0dWknOO; z3qor&zsW_ec|c@YvQq^?pnLZTf&l6+%y9HTixX{e{Jwe#-6u1YlAVhp=DBv8<FUB7 zL!gwA_wjYz8`DxL4Q>%;YinyYdm8$-ibdWz>OD@+p`XS0O`_=!D7Jf{@t&@`bhiBq zB8fD53)}5rrg@-wT)kZ%xM$bKF>$KwwTEY%s1c1TA?<Gg$#B_Wr_+%+k`PYrn0xf~ z3)*NjQn}($nNn!C&8HI2OQK@mq6W$9ii|+z*WIIfX~(-PwWc1KkY+>>4LV7%oKdTY z9iY%d+j#EQ<HwJWP=#Fsao<r3rQ;Zd`f%)NAo4G=nQV+`(>Q45g(P<$>HLADbMNtn z)?HvnpGd_Mt8&!%tRT91U+MhyvLklVwiiA>X)|+`5KJ)vS$DzG($dnh#Ax-jYGh5Y zoL0nTpYVn^yx|R&AUhXj;JWhGx$nV(hyJU(NXPlWLj=lVA?wu7e?{7}`5O?FZnxWI zISD}G*rP8btG%a`s_8Q;l}b`!Kw6W4&!~5L1bMZ_lg>S+_Z9E#bUGbu7`W4+j>9LD zUr=lqIN=?qd+mxx(lkwV06k3|o;nvE7t;as3l8NS*&m$(8bbqXChHI5Qnrj-zB5@H zZ+<{r4O(d<+`Hx|G?YFuwY|M<5K+lDE^0crzP=6+jQYA8i;M1>v5RvZ$(wyEj|`nj zv-=63Z18!df4;M7mZscrgQ8j5!h&Y%$_+Otx>>{demJ(Yw6vrvnsw`nsVUm>vZiR} z%B_~B=w;~I%pA9nj)L>xcf!Mm4<A0Po0{@?#&wy;E1Ica@86nhPk6!;o}ekZ`Q%$% zhH-CsvZ*Ut+o>1223pwu@dv@Ri4l8GpFXV;B5XWf4wRY<ESb7ekQMn&ls%a!qw(AG z8p@%T_9_b&yuf*cSsd1FP_r}I!JU~&gKULGqlQ{BB`axfvoJb*_%Lj)!Y0cm>e|M) zS65equJp5_X#$4L1sG+BK|XU}$wyb-f=$>=lO*wswG=jCQ#Se7=9X~Z_1j1;0**bJ z(LiCraT>N^KHzi|PDh3vbsQ&b1T_?%9XFQ5Sexny{eSF907&Cr^}Q1K^ycO!tZu?# zmfgL!wx({3R##U;FMHkQ<|be;&EmrUyc=6XUW0E@DhNYDhJpZFo12@k3F+F}n&Bns zCTzmy=B6li9mA_$!_$=V9G~!lz$ZLMuOYp7+nXrXPZcPh>T%jZJ8*hIjb|+&{X^=m z;8zi@mHS8G?8wjM#I`VHBhUBrmXynNjj~t|5(eN*K9vy|W(iC)#7{4o26QM_zhiyc zD#shPDm{cQS{M}q@2rUCrLo!2v_JRE65TY+bq3ShE<>zJJzs}$_wCwQ7hn0v^_{!+ zdB~tEW!yE9SeyDBo!ea|OQF%+4P^J+r|oVw0FS%Pqc%JK)#xxjc~^%&H7vz}Kn1t! zt=qA^z?+U5pB;ip(DGpm3(_KrRyGp{^b9E92vFqz8hyG`p!}ZOg?zp-SyD7pS6y3G zncfP+xT<byimdmufBQ6gRA_aIMUb9)L6H`Eg&e6{TB-k)U(S{#Wp01XwgIZ9u4vL- zu0tTL1<*7_Hx;3EKKm8~kH$+p>hH3gecO2)W1^=MWu{I2RWoRD6fE6y3Z87z&LD1u zp`sZP=vYzrj0r*bXMaO1oe6@kh?VjfSQNOop74t*fa6p%yXrUqRZyp_qwWGjQ8@6t z#~v|Z;l9h4FLOZQHx#(baCh7DG@Ezhopt;guf6_K$Emix5BgdjZQisf>YOL3-nk^H z?3>>H_P4V<1)x0pc6|DOaWxcy*BC~5-%<zO%VEd1ws3nbgtOXRZ8K0RPYOEQrQ*5G zW_NG*i92DUP_RAmG&qu-kdU@8*WA&oH>fnV-SwvH02AJPj*1+oH=BJ+71u>b|ArmQ zty4FnRqt$}SkF0D*v`Rz+LFGCZLZg98^%#EzNIbhnoc_y#OR3adUvlUPSe+QyUa&| z8j4K~9Q$C0PYUa^=0G0~jfToVTaVIlo2@~t$;Wlmdb8QD{**MUp{o0#1?0;!`(ivO z5E)5wPY)tC!3}IA52b?0RA7Sv0ASKi+h?X=7XsEKT0+ntxGV_U@k~63=EPB}n~@JB zv!f4}kq`&<pgsEzxl4Ft!M7~wr=zLG0K)*oR&|pXhdK>B4_|lTP2Fc01{h#W5d^KC z1{lM-Kg&R5epvIPQDtZUMqn%ohEd2{fHA;xw~N0$A5XK&9<8(G;CO%!s`Ft6!6&?| zanL$?03jY#CV0rGFAUm<NhVb?I{-Phy9((}msmRI33;_?NK-dCZlwbpGcswzb5S_U zY78PnJ(kLgg0Lv73OJ2#(p3~&b?&DqE;L&M9bx^0m;Gav-NrP+)4fEJ$X?15P4P<U zta}sQMBcLL*+HubWA?VK(cFq@W|5jJ57r9S{@eS@U1;V9{JMkyM}Ul@u;k54JCP>f ztj9{1CS8wJ|DP<zV|GzdT#d%QBt1j1*y*P-jqlUJ$;AyBlK@h%jCnyWZ`m}cZd3+| z`6Po*u?TyT_|bcySnMos%n^XcZ3IVv*lu;;6KDp_`<15zqO)?62BJeZaKb#C5I6)t zA(*$KoAxFN6CS_kvxI2{^g*kcA5SsOqMiwp&&H)fNK{V}Cqj%<Fd6#ufsYVv44SP$ zemuQsnvipon^&CP_r))MF(tcP55RL*sr+Jsx3gdF$Jl(pzD}A*AoaJWgELQ2lu$Eo z#F0g|)R-bN6K073mgo|KqIe6w*|Vke)TxI~ojP^u-GV3}4vMx`v=9E1Gw&TB=E`5L zd>uXyZ$?vS1%W=-%%lb~F%u809PbR`ei#qNoEgM}7$S2Tbk)d;{BNTl4%{N*?*Ed4 zn@vrZI7)HbFs_^5vuC%&u{?mHsk-ZWImqSnh3uCc74Vp$Uw_q}y}Lz@;{gC9Rnc6} z%jF9BylLplpX^exNEr}zA6UG8w_|&}C`k+e6!Uq_RaFTjP0xQxV1UdYSX!93?HnhG z63a4dA)nV=Rgq;)%Uh*lvFy0w#~2KsK@~KQZbzF4wR9;_w+XjDbO%a{v@q&W5Gr-C zTeWSp17pQ*2}u-B)GtybEs6cCZQ;%>Qr$@<i=-em1%8Wy%bXx!fjT+Q1J|;3LuT>V z%*<q6QN-+*tRP@Pv={gRCB0O@nBjpD1W6)<;bfNdD^&p7sozPz{2;3Rj#5?jWLY4h zXgO8F6)Bx)jCb1q_2v5{<uDd?ty;)C;5bgcSRp_sC$0*Eww-<V_owDc7WuGq=||x4 z@NskqJytHU^2H-{o}8E1p6d~9?w%0t9iVmSZGX@X`i=3}yro7va4Zi>o!B#laIzg- zan{a}(lwoNFwLqNxKB}4vOs4#kQm0g(4BR2pos(+2>`UeFIrYrygD^CWrJl_==}V= zre38f@DgY2?9kPsXkoI|F6;@No8j5g64T?POx;*_4Inc47RZt!Q-Iw+_txi_!X1x1 z@<?^8RjwF6`|Dr-3fw;(VX5>M+Wj^%pYn9{KS+0M?A9D`n|JsdWS}aT1mf8~PK1a| zeB9zd7*W!mNa`8^lP(hAQ*;B3YZj51k#|KyYcdI=O3-NcG#&Q7uUPE(kiJ7^D@k_G z<R@vGrit&fE)M}(!kxD^!+p4a-3^`1C{2@H=v~8?grL<FukzxR42xmPvB6|<irwft zqG06T7;BMS<VKb=>(C$-x3ExJ9lP$?#`|xF9&ZSQWq`1}IN5Gk{kfbGWtT=!EcJRj zclLUvB20g)TtCw)sDxtxh$u3Ku9+~lv9V$KS-jyt2`8SP+!f^}38Ah+nL62T*N154 zShUvrBm3RPMznlUb>q0g=Mnv;!o=qpQrnOBcur5iQkOYm7^-??z%SWzG+W>cChi^_ zQB}h@LJBSN`PANMyYJE6i0Qf@YU`Gxkh)}kKXUT$$<w}bXm0m;jH~+rrF7BWvwHG} z+L-)bxfr+|A@;idC0;^D(@Tq7MxM8>&F#3-o&JU1uk!Ao*X#9EmH(gk_9xeqWD+xb zzvw$xdc9tcm6%5oOxBZR5;JLxpiYn9w+GNYgV|v_)ZYT5J=}3q{YVv8;OU<zoRi5= z;E6U`)Cf<<h$Io`W+E4a?!cJm*Tqy;WB^5#`jqDG5amqM>mb-b=tL%7Rm77d@5c2$ z)a`bOu9NQaOvL2*cgI9C%fZUZiUOdl*n`2olXb>@gMqy-Yk5mTczKWkaRSbM5D(&g zJpfqw?40A@$7|>rw0auJ!{DM2NbW)OiJTGc`NI->KjkA2V^y_w7EJ@7YJbB!l_v#I zcVb3#Y#s(QL-gVHH)_HVMKFzG(=r{O@orR7;HU~bV`J(tAIult>*DwE8hU;diLr?s z+<mD1;%X?wm{qjwy|87ZTYW8@izgbYS-rnu6a*K8e^>x;CA?k(HiOrum837IMJdZ< zqP$}Z7+g;T-XR+~@oE&!qqV9~edFk#OkLcKygW?3Cy^QALiPmp=RN~T;OQAPGbFEj zdTX>b^qJN9r_q(@G4xIwO!<;dl546H$F0sRfet$LP>W|#m(988>H>3A>^X>ZrWLnh zb$Q~7m%}-?<BGnQbgszMA=jem1QP55k@#~_y*~enl5PhEcyV!U+l;~rRfXp$04GY4 z7=g_NH}vvlJC-;&(d}Z0L`p;s03?oAss*MLE3cB>6HH6Oe5`<2ld)ytd=_-wiv#sK zjWJDQOanu^0Fyv$zt^khi=qM`D+GWOsKO=}55}_?&&CJ;h|bTSl!zF|`xhs5S?=Ih zg(wOrqUZyRg$rN<fF<z;2%r+)6&2OO*wT%Xr|W=AA21|Il8k3m2SWPazkyDnN738S zZ%JX3db(V%u_#(97DxEDJm1)M4Eg1Oze!a5?T_PDr%Dz;q1p6Yy{DUcZVC7i5e()c zvf+`EZd({1n4C95fvjD~OY^P^+|rKA?3;*l);>n)k3hG30!IHG$FZmDkj-Pu!g5Un zCFZeYnSvS=66(dm>DAR$#u}>1SZ)_%s@lV|@ximAPeoIP&!6A9lk@X*AsmB~xySu+ zOeE<#&~>k5=oZG7s)(+1q8)fJc*%qk9%P9toLXI7Rn-P#s+!xSs&fDhcNy-ZK5|iG z47@%Ws>kNjQt^idE07|_B#WU@+SKz7a&-}VxGh<Mx?vV~H{=c#Hf{GVw24eq^$`Fe z&N3F=i(<d(3deylX4%;EpA$-&p~O1B7My25Am<`OhoQeSNckDb1lvvZ1tgfHFi>Y; z>|;;PtyFz3G(rBgyze70K*z5$hs{{ZaLw6C^d5}4h-dNJgE^Kw90D2wA<~?#NA<`H zoYOleWzB-6W8|eZR~<P1;yi#|BFgv@t{{7P%al|`=|nCEE|L5?Yfu1L)-;+pkaJOw zx|k<u5w0NWgiy*7dcvtkvpi!=&yDiFkEK#2u2``I1?{3~vL|TkaM#LTRXb<Dm(usz zxzQhfO5RbaN1a?vqj$R7evhna@_QtOodD3xqSyrU>ztdy5bfo#fQ|^*u_Y88C7B-R z@f^Mj>$-)_R?vZ+WG4=FgeEC-MeCe`4_y!;P3~3BF<x{H2BUN^z#-t(5lXxj1X9W~ z%svIh*VF0dW~!y8;yqw>lK1#k;&^=+_-MnfSx?qRpen=|QX4vvaC$`&!PwdaPO~3} zK;mm0F@7t08!$@KR+^^i`jb)VYp+4(wbx#IZS;c2n~gSUJJKtC#S3Y=nWkw9z4PbK zpI=@5e|!t2-%?0n#}6;f^Q&)YJD_iO&|XdhbZP-1t8@W6^Mx+xK2MQ2BN_xpvc;WH znxGQZ8o?FoGf!uf8jE8n-FQCV+!T29fM<SD8Lc1$?4kHlMX<|lo^W>TpP>@_vC!-N z5!7V^XwB^Tld>The!;nu&)#<1Z3T3UmBsHLeR%=c<ibshUJB1>g?Mu3pXTU40x^r7 zFmepAr+woxYJfbHpk;Ir9mBw#)B#&Z31|!SlqbG&Z7Kp=$*cl7X)rXa5i*^u9oKC< z0U|RhF>Tl>Hr@s_;;pTlj@*2dsi%{3K8x6JZZd3#_UY57W&ALfPfv8)%(7UTe%m1| zHyYE^jYgSsEax%YwCkpb^_~~<!a(-3S-<b)a$aCDW(_UIESvFcYRh<e3Lk;^r^~qq zLv(xM7mSI=^wjFi;Zt#M;-8?l`eey_0o?ocm2RKhwh*r~W}53E&rkTJbqtOzbC!(K z(T%<g+5>zhxx1PL%Am%e^XYM(52ZQGugBXKCjH@Bx?>$z?8x04)EsG1=;wKg++loT zP>|3b$OP1%;<@v5jU5w{@`pW)y${Qi6FXcQ>blPFW_ugihkAVxdmdh_)i1x}?3te0 z-cQz>@$4Ana!Qkt{Fn8oU*~Cll;V2rb633%Fg5Ki;G61Ud`r-mzc7nP*$^y4Oa6zt zJ?mdj3vQp_`Eb4Tc?$~*Q!_KOJJZ?QqI|PmPP4x=xv;IE{aaOeu5|l4?ydsQVfdNq z;}@3HAi@XaS|WkWKgnfYIw*Z6>vgzOdql3?bl20h{&s0{LVnJ}*n3W%m|SulYYA3! z_f~H(_og{lRJ~Fr3CobqR#*jI^k<Ov^|TI-$M~iz_d2hiTG-Z--}HZNy*}jm@i<Lq zr>C!|zP^E(Um1xkhO7Mz+jZ_w`SrZv*V8E9e5Yz|g5#?>B;NM^(|h|T9&jQ0B^-eO zKh5p)lwa<-<hGmct;S}t=d9%xVD$!bd%2zzZH7>Z_W$u56~Q#kN^Hgz;y^Izg|+an zen@G7e$x#gINlYdBU#f?TR+|H$INIGg0FY+#ljb9&~ko=6Tr~;6ai>m7^8zNRVWoq zL1~-qbF>ydCjcBbRXt3EyV#<W+4yo<Co*|^$F@oqauE-Cj|VfAzWu-?k#jwLd%0X@ zt%+Oi<FQq*_0S|{ifkQ8o0a~8fiSCbhi&!kt<Laozmj7Mss7W9!QTH(bPQdFLK9u` z7_nv@f4LI|ecOi0mvqq7qVLwYZAxgu<gZs+n!4rE#PZr-6Yy7}C@A@+@1{q}OU(wB zT?bUvdOUxHL?x0j3@~)Rt7o$%f${=hDDb>Mh5729mDw13Uep@>DR;{#_ynaA2r5yk zgJ^!(3Rz9fSgN`t@B(dtVPrCffpL~GiAW0z5|Qu(ho@%_EOolgm8;of%y_+t0qSDY zhAv=LUY*vC-I(S@q8ABssc;3JJ{Q$PceyHnFD^FiLLjMhGAM>J6K85A$#vozJt;GL z`1sB!LOvU#p)xs~>~?I5ZM3%ko8w*|4+#x-l=i#8M2R2cat1P>4}BCO<l(<uk;DlZ zSMcR-UAS<;rG%|Kt|;S*VJMHU7`6?RG6QVeSb1DA3}swV9$#US<X-S0@(eOyeLoYm zu+0u*Sm}i=CiVfvKFlGk?#Pto2NU={3eaw^;DBFE{cEd&F@b7$QfReh*P-KPok+%! z9NtY@G5nG-ib<wha+yJRDqiumV{fOXIr<Fjn6+z)uDiUhdw!#lBzrE3XSqx!iYDR9 zrb*vEr0%t)JkfPm0>&I2C}VFb)XT)x4cRwMlJ49&-o$uz_M-W*u}sFru-=6cd>5G> zIXn0`x)t4rp7Qts4^?7ZFV6j{RJngLlR8xG_*6-1$prP<b4y81j+1+scqr=HkELl! zI6>~q0!LCs*;}mZa=F|W%AT$&|7I1-mBYYNAOU`RM^SdNAHJHVsq3g7F_q;9z)`qL zL5+s<$jI=OMp&tTd{bYL<vn1G2;1tkbU(TV-G!b&@AugV7z@~D+d>FAL_=9K?ga%d zS2ex~qt2S0nAN4ix2gaYq5+j^;{ei_$g`ft0!twQPF}pSvdSoJF##@ZQOc$QyZp@) zb3VUrdB;~abU#6-0HzV@s@E=U&P@T!!FdBp+5F0GpPy0M@Bu6<|8&_dvtZqG)cn-h zu-jPiR2?ms_VGcVnE=bO(giysR4Ntu4$MPL9Su*;PDnD_o*gj^1o7+Of=IpHM=2Z| z{SF)h%PRejZU4mT%envme)qfI#hfI8iy1ET6Vr7~7)tURok~)e&uec|)sM0a@RddX z@ys*Nz&Eq|<oV|{xtXwCD>8LpMKv7r3Qc3v_vOF19pKwyQj-noVk&v*up}vp^q0J8 zW=DgpY4U%$V7jjPdw{s>aei;~73^W^n*W|CKA-8uUYvP8t7-54)|Huk>)jt<J#`>- zL6%S_*c#%VKW3syZ@23kS;6OggCe|Gw4DrHZG=)_h{Rm^u9G+CzGr261;hH4p9K_7 zI$qs%eN4M=7-3jEKef*=jP)WWK^P|CQ-EkehJY)}S`9c#VwU|Flt+_{0Hw?7+>@tI zpQfXRzEn!()5T)B(I}1n*3YYk?KQ?LnX`}G2hX2AeOex%M9Y7`r%R1SxmX<iBvTo0 zc($SD{res}dyErRw9M_uq!|$i<g=~Fl7Ug<?Kts?QXy0+MrNf=TsVDthu-7(7oAQ| zPaim0oW5@smQJ6Ji8q4JxH2_0wNjkA@58i(x)BV~S@evYL&1Mi^mG^CIqZJ4VO4>; z^vKr@?RsPZa#JK;c*sQ3#%pZDTu=4HW@nC@kYx|Sr(Dr2*97T}Z2FFvI^3s7pSiT$ z|IGkq#;da8FbxEs8nPlQ2K5C^vm+ws$Z?)OF8bS4Z(F&cXqwU}Z}Ze`zIdGHkCU8C zB3ske{g@(;1dTb0Tpi~%%^X6$vvNuxL_4n$BAil0t!@S%Sey>!S!x<ymH5iU{+vHM zPgHnm6>FNK$YJx(x@H)WYbvtwQ%ieARTM>0U(u}lm+`9x;VOQ1MKp$XpjC96XL{t$ z&$n(t3Xw!o|75@?WGN^GwF(n?TO?rBST0x;){{hlt!cDEqQu+LXOs?x{r*M}sCQ;L zvLd1e$kWCQT~IAFw^V}PDsAAc-TV6e{uTlVVUR+UT8{1<YJn?z$c>ebjE$^_#;&y9 z(+7<^rNV;w2x)j{NR*><L!X<348kS=Of{_ttsDI*xFrF+#8{5xnC(8z={^633CX!U zpWt}d!1EQOghV81wH{SFvZKRlzmNBP75!6myz{Nr%H<Zjl$QOG70^U2oN?&hW=8QX zkE56QkuM|=JWxYz0b-tX`4OFA7*g+eQ2Vy4$0+Rw|D+>Cc~l+A|3z-y1rm*H$`06T z{0Q<K+xx#>vZ#fwM6W{+p?9F<fxHjK$tc>LP_Mo(g2<05*kswKc$G|={A06iyB(4m zk${)+hUH+$)6zizxaT~hzGt+*Ec|Q9uB(7tdg-OaN||wR_g{`(pa+1j%h!`Pj-CoW zMF;3jyO8c2DHP)qg20!xKx;hhd0y@9MWu|=i$-7Evu6)aDNB7a&v9G3z>(2^<}C{g zUZFp!A?S&}9bxa^OUa@Mw1^I)E79xGBj|nTbLjU=J5QadP{%Cjq)(NQqDNa;Dvem! zs~lxlTs`+>0Xp+_q8eQ~xGYUAXmT`=^jT5L$E}Iav7y80{M_hebj1q2fe+5c!1MJ* z_#Cjjd70_$s=Yl}#@ZYoNXf#v$tOT5Ydu*HZEgJ@Z89sM1gjL&-x4xnmbfS3`?F&b zVOE?W1e2m#G1T_?5A*pGzioLX3+J+mtlzQ}MPP9_)xM<5@G0!hZ*5VQ6{S{F6j>e{ zn{L31f(E_~?Kf&OGt12}3@zC>x@r5r`!?W~ZD8Brq0jzr>sLNP?qtyn+K1p7c90~l zc%&rpDR;SI(~pcrZH5tMVjWr)TS=r>xV}bKk&V+@YM3URHmI5%U4Z#aBf<xZ!L;(2 zv0xJTmV!R`zH|G7hTKvl+5Xh+j_-rsazUH8U3!kc7p(t^PB=1kIHp-#CB>;u1T7fp zikkynR<fg2Ri1!T{eC|>PPuiJbKkLj4@h-%&kZ-+aQawn?BCSR|84ygKVIh4?xgiV zauz7}EsMg}vMM#-oroWMw>i8q48DBuHd%NO2H<Dx=WkA@?ETN%dhPc68T<K*(r(fH zq4_?A`ODd^`$ogAVf;y4|1~(y#YBTqpx`B3Ep4b8jgon+PF#sy{d`6fmaTZ{O+hE> z+N@?XR4ok1yN$Cd&1Bu(JU7IiL_KK(ngVK@M~!~r;Q<b)BVoYvJk4aQl!y6hHbePB zC>zat9a{jkAQK=_RIDMYP<<1f0h&O2y;<X_?Y7%7dPj8RG3+}?<T<%8bW7z>ht-6l z9XHje1Fz+&;S}3%E@#=3lM9k$AGUM<MdtWi4H=~v|G0Ma;#4r9w1nR-W42rdaB}ux z`??!=0WMxXByxXRekk7X$%5`Dlrp{)eLx9;-qhcpg8@tV2^Yu4%F+j2Q4)6W2-V*S zzEG>}06Ql6G4_>wYKxvMIQ~g=<~M9!=`~GVI<4`#aN<+oAu58%70}16((&=W&3N_0 z+0b)wesKFV-O!5ri>k_gCSo0nBHd2KNB2LP1s`wT)Sla!>0Dd9N6x8gaeq<M4UK(a zLl+l8=fp?%KZ^9gb@Hf#cHP5-v<xh^5IQ6*<+zIptyGgjUHzd-P@WWoKsNs3JiiCJ zk@=}_oHRf;GNbbuL+>Do2Tx1qBG4QStNOm`KVdFjV4O7kpJu8wXUITHB9OY+Qlb}d z^Y5!=vp{#F?TQ~c;TQO1Z{JZhv1`XQn;0)Li-YbVN>WYk>&sxVl=0Q%mP49douaOD z&TG}??T3M3<bAB)y46Oyk{8VV-Wcn7h>4mA30R^8?DZ*jrBY#~2RI#4q!115XC=wn z<nNj|9ggF1%?<UzMw?Yjc6Kbg;zsZPFH}JbgUmgmJDME?BGtI0gQ3_t9-n7$s2_a^ zrBb&mQQEvkr?7i8+>NkHYcLqdJTEkx0?*4bc!v>poDcme^d1l9@aP_@e?ml=l$1tx zlt_P3BWXm9!3IfUI5YGEas4Anj9ogtGnXWGPS?aP$9V(ZA@dxM1%b+(uIm7bEX%S2 zpzAs(Q$fHy&&eEPoXl|o76eIIwxE9eBVt7o1<Z4N>3uK0LlW%No2oxfK1dWv;w6!a zAW>@YD#jSAyg?-bA{8ZGk`#ieX;QrO$2jeuLya>il}d$|er6c)c_@p~vVP6p@)7&1 z)=<8x+F={|E@7;f95yz3L0rR7t3R2X3E!HBb6s*_UFS(DBMrj6PFB4=2X3wA;JOUW zCsU&h3&`cq<+EWYc<}SUEuHJ-A<v<sXJi1NEh@APyu_tJjy9v)XisM&x=`$)@cT}A zRwMJKq$pA<2}EBVG9r>5(TV^URPno2F7_y0RW%JXRozg^0(!+PdW>HbF|O;8F@}az zif;P7<gwDaSf7jMy}D^KR@eGf!!lXv{20!+pw$^O&AOLw^~|{Ufrnf{2hW^XPKS#} zT|(+lKmH7FwqypY$-wh;0;AR9TH&FY?)7qyPc);sa++T20kjOHRbV?#eD{V2`=IE4 z145)e1xbe@jSlk!g<Vw7wJ8Y#*W#7nIL?OKZWuclaBM$7_ai&qx7cGWo!S(G36zoX zTNTNTqcp5MeSMw-`S)Znbnk9o*Nc6(MY!PIGJx!ng%huCl%+6uwK+hNSntNZJ4oaE z9$7b~>O`R-bE}NfMk>-vUU?LTNEUDSNXDK=Toex&!=--9A$ZD6<7hhxJu<7KeclGo z;R55l6$zIDZW*y}ymh$?YDT8SvM-yM*yC|WwW-hGszTF@PLX1ji$-alG`OD9d6%8o z1}!gJ^YGZ_BUIT{sO@A5fKJI*u!nIlma?QGJ{mr}VMsk4dS7OBbv5;UV-&R2$$EoB z1ZumAB55qsiKc)v^RQ+V_y~lzwzh`wC=8{#w~%f66umA5pr_jUt5Y!J+ni11pRnVQ zqluvnzr>GMJdZ1aypYf5G5a{f`Cr2qWzfOzFF0-h?_zRy^bWXv^bQ8V;P!nV&qo1n zW8x9;AvLZJcKP;GHX2T=s`_j7A7J>=kT+cgMVQ$kS9nwr)zJ)^N6Y9U+r82oC>7?l z(ugX3`z$%MDYPvsXm{KR>zm_sW;YJok0fz1R4a0A_e#RIBt30YDWKm#)^{KXf}r=G z4nbQ_^`YQ(*LaMy-yin>al#lMJjSi24bP2bm!PYV`f}?osq`;Gell$AnCrxy_5kFB z^Ws#}1}tbM5_`EM9Eoh+VnH5|7Qs54polNbs0U5(GYmiy;mIKA$66*2hb%D+>7WLR ze}=R}l=o%3i1)T&Y${Bj?fw2JMTQ{#b;NBNfcCa*K?%_ILiTNWLE--Dd;om`{Si{_ zFzQJt9e^QcF<GDx_baWny<T9?#9G56a9{ICRm>JRxSXdI{RQd=pM61V2x}D1{&_4_ zF<XQ08?;&n`amFE$hVOP0_ns50Di@DgRM>2%qQxVE-)gixs2Lc$DFGu!4!l7g=)}& zTP$ymMh}@7kOqH(p>Mo9t+&Y*3V&=sy<Tte+z&~gzs-5LP`J$#NT5A{y&Qx1>zQ*| z$_)qw?jl8>mm$BmeBkOK=Z06Dk1JK}8Xmqy5*1sf0C?B4@FrVm1LgA}l#o@!&C!O( zkWtQLIx4qvcRPlzL3g4zqIaWDpf91{#l@ce3KUwK+lzcxZcb0B*F)bcy%qmbt8>@O z+42g<=FK3`w=s;_HXWw68QZqaC>Y<L)LGCMba=AOSXc-v7z>o1*pM?_$JkkX<1%XL z^K4_-*tTs(!B`6Ju*Tx)*+Upwxbc9~CwBUfw!!HY3QulkbGSFsg(n`#nZ<uuI>4oe zqPM;=%I4Gm(D?~;9l9GmhTe-lfxe7>7yT6d8~P1sP=*;;hGTFY+zF4tyWtZ#H)p9& zv)$cJkGZ?YWBJpDqa8!Quc4+~=>K($d3R^^9vW-8zK(lLKau-}OS>^U?ae6$Nilf+ z5%RgW$L6r{=xsAUO|Z`b;?c{tp?w;HgbpALVTS_1uNx70@g(-<tecB$oRpqRG@~9{ zBqA9?yUq4ZPT@0bR5Q+=SS*ikr<4V_ZoASeXeL`7X6*m_erxTy1B}uuXokwNrpiqv zWR$)M*6qcAam5u^RI?e1c)ph{qr>QOgn;{}SivEiwB1on{XXUk_x^B*84A$okXK`e zj37NHj4G814?qJOs!6zq?)qheQm(;KYV<NBcaz1Km@jLxw|kLG8Gm%e6;~KHxmftm zml{ADbx8a-KO7RJY@JaGifRmWO$GmqESm?ZPbphvluExy7X|LVBC=)mv8T{H+UW<6 zkT@lAs*FYcF9MuCP2!07r^zPnR1HZktqg13Pu)0@nwF(^9Q+VWj{XcLO;&ubf8BV; z#KeSLVM|L(9Q;#4l@9T>4ZXB2x|Al3#Rt4e^fs*L^Xsiv3xDC#1Y(+emcqbZ7Fe;W z^0DU}i<kum)*kBhs*3>@Ha$*<R4SEWmIUyw5qkc?+o?LuQEHsY5T`R-ZDG^;evrv1 z&a2o-$z+1jFo51@&=G20v=lnsBPhw`#>R3v^5y8*Rovyafzz<dSOL>2K!aOQuuPCv zXk$VXqu1<;{97}z2O$&v#pM(jQVqLLZRdpHo}+LkH>;5rYCJ=`clt?FQQbu}5(C&C zz?3+-?H<4&M{3NmHLNlF{rXkKOjX5vl^oCk^m&ZIuuJvDNI(|?gG8rQTh;!bewV4J zvW4vhUaG<lA0Cgh`ifKCWbQo0yQa*U*+w|&NoNV;-(Mw2Rm@jcU;e=ZDRBwXb=jWt zSATTMVl$;+4;&bSVf;aE?8YGh8UaUMmYf`Coe|CTFy-)-tnb;gM*$&<1W@)$Wm8d& zbXBu$rr{+TlI${8>)x|%N|*xhY>vaUe!(dyBA3tcq5>tXDyEbg>#M7)g~T^(Rh3T) z#?y7cm=G=2OSZw`c^yDMKzKcOA%qcZ*rkbCAHgqg)FU}sG+~euEKk^FA~s)Q3AN-} z;)`-`X58|wVby|f9f__8r}4W(-35$PlB$-3OQ-?+Sl%B@7=9L68M{CqzJ+vj3SEQN z(c@m)CFwe8q{D&r*|}<ZZt<ZFQUR+jQ;&|yDNW^Wq^4}!H!_j$mpu|uLXvPCmKOkT z0f3ahXX%xuX@(7f=gshKZUa~fl^Z*+z2F`!#}G}!wHTh7+OuQVj8X$ye^5p^)>L&v z*|Bfmz8ghV)l{ArF2AbM@-Tl{_}jHw?cgO^aI%`(Zxq<2qCLuS%0LxcRVn2)Gd-=; zJIF#;cO<Twan--lcwP`yRr?kat6;@c1e;ivl-=c%#A|iX3VH~=8KIi!`>~@j6C5z- z69qLOQlTf$*@%%J;3%TEDuu8<n^bM)g5DNFq*^3gZ&D%g+HJT?#yqe$FyOJAHx1X8 z&KPF?P3gdrt5fq4ugaLy9vPc5zW$)vR5*2HHT8t`yZe3jGQ*HZZwB}gQCtA_-(puG zRxV%B{^s;bK4+;`<uWNbc*qPxzAA^})*35Zx5ITE)@00SEj>3Hu<4^Md(~_VXdmI} zH(^?gQVg%4DjPX;ohZarh1hRs0cA63zl15n1SO3Jp?^80WLc%qBAo%x#s@up=JLsP z6_%#XW;DS1Zn`euo)5AY*hPE1byjGp`5X5ZbtwehHtu~pu%Y_?<0wU!qSv91wR)$` z`kp&J)D27G&OHR&wKbxA2*|Ww7U{U1>La((;rTbhA8)-$X`GIoOH;N#X}acRS6r)C zNmQ=YCc+B^^h2gKBbK7Rn|pmq5!NeuN1VhOK%L>KS2Bb+dtzXp!2I3ltq8f$lUntt zE#rV4zXEfo*itEA`=|@TQnZSZBjoOz_5C<@8;RPUzYU6$U?PP*Z1ggsxSl`{07zA0 zJfnHb5&(3@e}bH`Gb9+46z$~LW6|`~<V48dYPQsZX_-pWBXo}o9+s&jy@LkQzJ1^E zUSj++UnkrqNm7*n&lm`nm8XmcT_LTU84A)7@cGW?rW=hyQKFhs5pFT5YQc;oQTbsi z%mt4~5|!V+e#<-NA0GWP=uh6(;WNp?p5FT9);ID#(@-9FIC_#JE=Z-wW8r1rEx3YP z<<uOhllMs-_bPndg0JhzSvB6LDsU1|rn)}3JaWl(K@bo{qYDS0Hq8emO4U*R;$62E zce~B&88gj}qELDzW2SkfqELD_W2Slc_WQ$ltyyy%h9BA`DI}oU$8~TnDhx|VtJTsd zQQjZcW9&h~^NLi(FUR{QYGZzpkm!2TWUND}qFia3j9p2oqTFqojNQHcO^@E`L1}!v zbuH+P$9Kb@P_3nqkH7&Xy0(svYG}JpaGgqKD`DIr2&r`38tOrE<N77-2x*NwOi+5P zT2_H;k_NLT%Xw7QI)8q6CG~@^_F(kUlkWA>+QLG!a%|c|bhlGobWB>dn%}^^j0rz! z-B3x(1Rz<{7Ki}Wv!B88t$FF$Q(%KbLtY?*cOJp}P@x`V%}f$9WpyKd?6o_w8Fv7w zs+tWd;asHxF!OoU2s+C<%gVAKNA<3_Jo%#12D%4lb^d+GLQ8kJ5+Y3oKG{ehVZ(2k z6K;B_u|G{+2#2fRQr!g5$8rFcRcsX1si(q9kUf*{H$(mW3_zta2f|<e<zK!pR}+h# zD++ma`W=ESXU}qp^5W#O*sVvtA2+(4ziA(hqb@ptP*P7upDEGbJWmPnA~F0SPi^r5 zroQIU|0|3rlIfaOdt>L$mi03-N<XNfd3ybwFvTeKbF@dBJr7PyHiedaGZ*;Y;7|ey zkz{Z{Qy%omnw{9@W<-<=p#+gN1ud!3!GDQcHq4X9>I<GF0%Jkog3>fy3GnARTvjf! z@}{tt!Pg>|>vlyS8K7axy1{R^sl46!S+pA+wQiTxn2*Td%A+oa#}kvb8iy3?DmhD7 zLaaY)(RY{YtNV{X{NWFa&z-y>E6cO8rpeir4EsGv>uMHLM*q)-Z98}FB-q<4lk)!e zTUSG;_<E0C{^@hiJy-nU$;-2{rpdFioCOOkg;`oxlYWn7R!;2Pxs%9(he>(=QdSuq zlCov^ro8ZUKTcT>5imJ}5PJl*447zAXjfAYfXSl(sj#U;dAnD2xEZ<MEG!Zx$NsI% z!mpR~9BpQ+5t3q`50GCZmnLXGI)!dQ56na<+s`0tQ1y((Vj|4LOt`V*8c*iuwmN@y zq&k{|@;(mtgd$v(GI2%{i|%VcrE<2dVqCX5;>y%8%%Qjm@pq>%O8pJ-`i@qhJG9UO zu<DtN4Q5$v!`MJPh7~&#H!liLmdT3p&~58^SExpM{*@e{eqp$p8n1pJ_}Ev!`qkU= zO?=g5Z_>0kG1ta$mbMNtSNSAflEj9a`P;nkGUx<grTyDEDt-t1x%XJClx9f!h0I^> ztIlIEMA3ZcIt0GQVZVmyWg!3A$hixmO{32-EO}VzB-xmpk+Yz9QkAH)wB)=2*;{TK z-FvmS=^MIHrp|SbzvPdcnOhCZTsYFre>Kcp`})y;Uo~|d%Qix~sSC3{4C9m5brX6R zA%O}$AOTT=n_}Ka5LYckA4afNFj#CSu^WScUOXUNH&#T*O-P)N2B0)+wEV8ox`*v4 zb?7@fK=$;$G+46Fj^5tpmJX_78ejeDSF>Sgh;Nyt2KH8@t8(@fYbnaQQ?7KSmF8mU z%8G{vs$ypJHyJk-)lPhphyBE}Xb$afJp+;7^OP+NXd}}V#P?67V(Eoeol$oyER!Is zQml6$H_w!t>yNY1*$KmnO?~cGf|M+ZaRVr7D^p`7pMs@`P>Ky^s!b_RGt0_1<xGG| z{18jMCM2MxkAkSBNg5S}Tqz~za^|%DIm@CNYN34|-7c6-$bQ#xBi|;;rXL$cB#c;E zQ7q<BD{!ING&Igi%;R=he$jCpqN&pBU%DASd^x``Hy%6rf=)zvjqifJ%Iii~#(<&y zSg}}Cl;<CB0zAZL;h+>WrkrWlK^OBxvZ#)hc%jhDlY13hBLmdX!dw=Ir<?2Yx_8$C z+b&&Nv~7?i<waGJ=n564xJxbE{8-64*7KDVNs=VR))T?Iw)3;Z6>jUPSZI~nG?Ou5 z&ww_U)XBuulsw+B(%Ps8j2DOw$06_grtf;wo8IJT8aBRWU`=!WnpeVcdYhYHD5W}E zzNQ0Ba}10PN7J5Ua^TP|W!un-?@Z{9g7*k=T7fK{OIV*F<cKo$fB{8CqzJ1=E!O8* z6ivei<{PHCfPuZ)_W&=zq0xT=8~tai?NCOYv$o8r({BCHvBjl8Go2mb^`6F<=KZ}S zU6JllS4h&|>q9ULCM*<&4yHA;#^`5SgcCkFhpzJSzCR`7aV4ry@-qN(4m}T3=z@2w z%-<75(Nwx9b)%=E(Z6pq#vrKa^E|2OE$ipy=hZ`p4y8XiROhE7%)CRO-|O`tg*)_$ z6^tuyla<}1qUYJI$Zs2c`=}hwMTo(o{p(n*rK=DT4Y;R_aKIR(nHiOE22{aAEpF`T z(z*%P7R3|_RrTaNBPa|9luBj#>4<_|YSR>nznZlj`o227>wVO*vxW~Vl}Rm4FIU?y zoGg{djgl6qu=xS=Tu|--pUjw$c_S{AP!;V&*I6V@{BCR3svL20pB~?uX1?urF(l0H z14-QNbmipl_q`;+M5c1vIg+KO8`zU3wMi)nYmhvQctz2Ov?7Z{*W~remCyjgD;6C^ zF>PIe)cp000U11bZr-xsY}gVgR3Xbss-nn86kVsvtJbZIZ~FjQ!`2nkKyAI`OVo-_ z5pe*nA2yZ>JUNqMG&&!z$gE`Jk2-Hjz0-=9=Y>UMOr+1NdjX~B3Us5DeZ8I^L1?Oo zKI<Pz3Q21rLwnLydnoQ0{ySZdLRY@i6RbyJ=%(;Lad=rLDY0FJKg27pO;Vy8h7lNN zu{W1BO%PoG)6DMiaI2sID22(%Nd-VL3OVw|1)y!X3bAF`CW^bE!HHU}R$KHim}Zu# zW-)7;fITTqrA#K10Y!lxC<<ieRvIWM<Im-y3ABvX&~4~V9!2pn7Sz79!JIGQ{mlBJ z8&mNr#)A(U5jeCAuI!1P0F1}!;_&-uPc3>MOg>IOY%tnCYsB`L3wMPg>?VdT712|$ z;vF&rwLUAqc=U-Qu;lg^o%LyiMD$jEvJFz?@0Y=Md51Gsq1e0`(cX^?$khsf{W=@U zATh)hq~H-!!Sg~UBTMK2cLvav#!zp#*VotX$OvtHng5Z87gqK(`iKR#7&EI5j_Dlb zV8eQ`KXW*Vc{yFJt_IOqT>|qcg0w^$!KrTKM~Agigv#=Ize8hSt{Yu|c{n(SA^Wa0 z`iZElo94PAipHiPavW4dQ0O?TXENVh>sHmCPrM#*{F2e%GIgD?b=L|W#1PW9epwgi zT-T@nbLiXX&(S~i)z`R<34QM-M>{zx2P2yUTtG8vg!QI6&AKn%J9@3gDD^%j?sF~- zLL2TKop{;k8m6u?wtD5@JYsLpAfVJ}T-U+p_GoO`PkdgNumBv|t9)EkR!wtN7DQuU zi1PCn{|)rvBj|vY>^upgTcR)uTU--Jp><lMEP+eHhk3fDDlgSn3=tTANm1p}#?N`Z z=n5}B2WP0JDl!0l=l$E6?L619m%0C)6hKx~jfNgAdUC#t;`%c*gXGGJP`5;s2V(fO zLrX4c1!7Z3>8;`GkU~&yO_odI()hT7sl*^<62;2+#1e_){RiXOs2<Ygq$}G1!z<|v z3;79UVtnaTyO$=$m3`Aw!l0X@^QS)tt<ePrLdqU7+vn|^RnaUYL`K+2Tjs}p!8Fab z>GV*cvMh>pjw=Yl9^=@_$^@dt?xg)b^aI@U?b7d$Y!id$R^Xp1o(tIg&BtLcmIe|H zitDj}(q7S3($OY1E1nDBdKFV6oLpHT%9nYz=2Ph$?WQKe7^Ipwnr;zqwyt*EfynpR z9u2xR=wnCb0XDB2Jq<Uc00Xh7WWOGC<Nf#FKl*qAOYdhiX_eDWf}Y)_wZ?FEcJ>cH zF#5+{ua_c+&rb1X`&b*@HXkrE37>i@VUjjwdVcxXdRUDCE-sRuPA-MxEe73BC*Agj zZw{K0baz}~yikxiB59f;b4qx}s3YvO4pV#|2p-j9a|T1HJR9l1nF>JVpsU4BI5w>* zGRG0Zri$?)o4Fd`>L1(o)OH3=6F2AiItLf0r!%n*pf-(v=C*b8G|yEeE_GG!a;gN_ z-wqWGFk45yk~O`0VGTxMKOjLi<ROFD4N{eD?;|TR&OVAG`-sEhdI%xMaURybOsUkF zDFGNp#v}iS?Qe%wAhvVN4{2xa5;0fAT*~2e=hav5OfgJN?k9du-p(ruuQz0%4SjXs z(>ofx5^tGnM2&c&HkJY3tY!?u=%*K54co4R!S@@Dc-!QZt;<><NkNOscS%$%Dj6zg zgRSFx>Zh#mdSmp-U6CB~0{BN?V#ty0MJH?t{-t_9`t4Y9xJQ?3&%{Hpcuq|MC_gH= zhNMLTD^SpC#V&^gY-Oe$yBrdC9nbpq6$wU1>G08HNV$2Y9j*_|ff-0r3B>OofRZG| z3N59Bhyi(&0bir9g{`CXso0E^8jsyUjAo`IP?U)UvHyz}CKMSSR~71P3<K88d}mqc z=k}qGmUt2}ZU(ofX_)&MAOi<c3=|t{$J656iZNCe+C4;TFL4Ld@?0!eo-hWuu6li* z-qCDes8l;xQ)CVZVYp~p0KOMK7kWN`Wf!sgn%)xbR4afR%^lCdRge8R#+CLbgkV^| z-(w#)nmf8tBm)q_G)3kF&nrD@vG0W?&l4g-{D+PlMcp0E1|I!v1AHzc`jSourRWl! zwmf>aA?PLEd=p;uXm%S_LR^9ypb^;wCM3=!>8MsG&9e9EZJ$db!2OvQN|u#l^M;YT zG02>Sj2-#VEw|i~ecv80{_5DVW5v+(A)&a@+;Q9J>LOgHb!MBX@?%drK{?9ZD->K; zIu_0CXf`mn<AHqM?Xl4?O;hl_5Ob4$?qVK)rQUx0c+qLh?bEpX+#VW7m*_3+g*N(H zK8!ffsc}G#3Y$Z1Cm;JW@EyQRc?<<0SHKIxx=6qc6qU(UrALj8`XT3(#r)`OGUitB z{v4TfhVQK1Z?j)+8FPBhA|f@|>pa{aGMQ?2q8-(fL1(@$ble=6wd~TN8Lo+Ik2`x8 zn#S4Vv$L~e0o{j`GJLro<FFTolbJAE$!27y12dlO0`97>L{a40Ds}7z^}PO&7tW$8 znnP*N);}Iigh(&}ZBO{+pPO{sZ2_I7=%TjdPa`4lZM!N0#{8Hlj`0`^7ma@3WME>a zxNZxrhfFIy-{$7#W>4USF+mvP1;Hz_26#)heP=)4`r&-bQWaIvJUW6d_4Mrq_oH~o z4o*aLt(CjSC@J9v{lj?l){V=9I}yo%_!x#;;@X+OZOOC1X_tF$k~V|R^Oqrd!LC@` zdV>uEgJ(0*o^xM#8i`1zx60mw)Y-d<ZD>_$o|YWrusAKb8zNhi8h{zd<#UK_17aI# zUH(?sW!))P?*lw$LlyJVW1RK9_9f-dJ&e6SSENYOq9}?YNdXsuD*3nV?r~)hTUA<r zCD*dN47Q252G1lGHLdvdVzIcXJorTX3hf0tsLoDw61@(ljP94=806qe7(h$To}|OQ zki9sjiy@8pYxscX8ZP|VX7087bR*NkxDMkj0$yWIvFn&OY&}^jEBgLx@oZtFlS9_~ z8AAtrj42>z)}ysoGbPdslyx_lSQJ0H4+FGdZKTHpM9AGLR+1le&_D$~!e(P8&2TCe zeKDf#&8LE_l-xTx)_#u?)ujSKqiDZB+R>`MQAWB&u?BhW3A78Xq1U6w&<D|Hy#t0b z6&UvB9dl2O+7%jHn;nR16AX@YBa&;BKSvP>rqk$|2%1>f6vRmikIYDCy>jFzp~B!j zaZzr*M8hRHg3@VO)nr(bV=56%`Pp&V)acu?rpnV)1M^dqf)NwhXv)u#)zi;e(SHrM zOt>w3#k-&U=NVlXbosf-hT~8=#kaR=7j3$}O5764Hnfk<F+5>?N>mSr^ydp1rI5>y zuT75UbK7BlELj0a1n8Wj3kTDcsxtbA^euvdQmsty6%uue!hp`@?)r16gHEEW(HV3* zx*xp}y%oJ1J%>Jl(Ci6jSO5jYxy~frPG#P2U{{^%LU%J-$0QQ)WxLc?330bYwY$Q~ z43g1k&}=aAeMD59Jit71Qy7NUqvl9C<M%czv$$LWD3xO-Q^TO!l2hutc>gyZr>_oH zlGbtFABAB&LDcVDrE}lgw`tgDHoM(s)4-Yvpl(Z+UavY`N!HJxI(@(420Xw#5;R~u z$7?60LfI?*+c<%sN-(H6Lm^OB#bnMX3Wbg}LXJEMa%w=eK2swJ!OTW0+!Be18o(pU zKBS`L?_LV&c(s--(luV%BQx3Nt(`r4I=42n8P3|T$4a)CsaMCpRxB2?x(=iPA-ua- zEQZh^08G!0J`odwV{|YOP>O~NeX_ovW%<49CF4OL=R<&MUI~KnOBi{-?5scfCqf9Z z?d&B4T6;T$5YpM(0&+>#w#geaeGqs;-{3b=OrAPfR7bNE<iV5Vinrqye9=&6;I{eZ zsEcVz&9`(@_)@9gSC+Lg=%20eoW2{=FzCj-G=(85qe(PxPk+^&X}}dF-+ruFm=aJ+ zO0D6_T0wYnJkV^N@Gr#tSO|_&6@=8Mg9RvsI`BLv{$swrwB!PkAw?NW{K0&}n4a1( zRjXz4DZoD@zt{HdZCRGJhS-_e>KsLM02|FHE=0FQ+cmYf1(r*>ax>I(H^fNtnGZv5 z+bHd2kF#)lkAz)GiHOpWnW^VVdWp|jVVQone#3@Xfz@5a4@UEdJNW)57n#CD1&XyP zobzvaK%#UyFHdbfuSn{yD+QjHSI>L1U|v<d@;&E!Z|s=xBcC`AT%(PD3xZFWMS&X) z`v~1H^pxW}B$0cx2mCbLgYuXw4c{rJ@$bCTCcph?wf9aMd+S+Tm8#cA7R5l8pq#Ir zv9EgVPMkGW3dMGnSBLBi%YJ1@$<W3os<vJo>w5<UUzAcG@EfA(9_U=;`qb&*VCVdX z>?lmpktpmaxfkS`om@AH(m4EMrn=s?nVEIXmd-k5EG=fGYqZtdHZxOIbLkAJX{PBZ zcB9PK!?nx7kO}3o9+ooKGaVu9)q~TQrhWE22J5aqc(YZ6YTjy+2}ehMAVxliB(Qeo z%$b)om*U`?4)PKa4hjDEoYEOC6UED3OKh%1QDE#hs@1_^;UUcW{%ax3dbpbEW$DFy z<<B0(f9?62u^o&-dad1|?!C5Q#d6nA0)XJSG8VTnkS0~e&TpX%V43-C5xZwZrAl>9 z8U4-D!5F(#u(1G)@;Rb04`a`=$MTj5IMgFg=fN+=VRVm-!2pA0?!vh92;(X4xP5`N z8h2!8hdnIpcI9#Gr~quq1<{jo<}6{cCAiMrADlsPiwbxbVhbR8E?~iS@{v6hldGAG zT@*P-G5)*c)#u_6x(B`g?xtCcG1uYcVr&nc=*+ciXa|ze>qA<kK5SsO*b{_6NHrnU zB(U<^tp|Du3wa$t&l|F`<re!EJ8?JX9%P?YyKSkigDpssVE100u&j_U%=J-s+p3MR z0J;uAmbcD^FAT$qY}6FlIHDs;9Ite(I<1^2<^%{l*`C64(#%YIe(x<Piq;<5!1XV9 z%wy}X6)cJqr->S;DKEG7$1g&6_|8k8=O=dKPW)bYXr~TM-6*Qj`!(m3>O*U2D%|;Z zACoApeq$6>WRnwre*vY^vAZAOSwW3HlY!LR?JNmAF9)9@8;&*|J#0Kkyr3oXys+d) z;x*$n=My<;fTu()xr@Pe5irwj;Eo92h_!0(39(VasfO$IHU!$NkoGiqmBn7R$^4J~ zdW<tMJJNMMdK4jnF%fHYn$&~s>gqMO!a2eA(Ky{;<)Et%0?>SGW{g-BRnFcfRKxj& zz1l4HBfsACPh@!@alEo`PN1vrMe4bA9hU-kZErUT0u34ao0C`CLr9;<GTfv{MC?mz z%oD2EFIV;s3j$bU=nq?xr>rbHbj~Bq#NSmU5<tgyn&v@CE2PU8D+Jk(B6rGthYlTL zp8xMh9+V7&q%c{kjRkLG(!uGO3_N}MZEt%UWBoY|K%19@Z^7*>=cnv3^!~D`<;81v ziKeb4yDL^!BOeyF=1~~eb_CR(ESjbw8-&D*_!|P#HOpiYE$`U5n*D43llZP(CAA8* z+IT)+$SR8D=J_{B!ZcNtq<s_PSLwlRIgwveb?Aj3LGMQ&L7(P}DO~0h>5p0i486+Z z0--o(3JwfNg>u$F_hooSs1HOno<qPw-p4~^z}O5eAhDA(YDg1q#T1j5NPoSOXWC!S z$G(z47RDK`GKr>?=qk^~1=+GJ%M5P=%%CH%60ebe&M)>^xfd|PtG=i4k{0yjUZc@y z^x%rI{>GEm*!l*qKzpTTFODA4;9rPYHD_i+c-BR3Wli(i?IhND1p}p=xsdBhV44?1 zRZ|tAN=eWvWvE%&bbLLMBZnRCNe-iQOcXT(p>P;qM{&Z2cWbI5@PepbElL$QAYMh# zH8!NTCw_9I-QI&=^#1EHW6t{vOqEMw2g%p91<hWV!W7I{#j%@7=rGe#L^ylL_E=~G zImTm=1dBEf)Z3o}JqWZ;PlqeR0RZwuXty}iv;{p!&!r=O$$=#XIXggLctv4+Y^Uv{ zNN)1elaPQw41}EX!JT+631icl5_B6evjrfoQT0VUS_W}!2+{3PM_w@9+}tdTQM~RO zaL=zYnHo=FElQq695>HYy5!^nwvtB%dxVFf|Lef}UKbCb?u8l0f&OTi@@XCV5Xw&{ zxSu&u_@sD#X4tEV<J5U&gV?y(<5)f{g2sU(0Ik=CBB<P)O6+b9W~kPp9;Q$V)rX{r zhR(z3W*)8WlMxC961bWIST`7C4-CJS+(!QA<c}vpp=HdAAQa07hBx{^{Sc|H2*N)) z+%(+`l1Tss#lW8Xg?QZ6`3X+p<FW&ZLJ>mCsF4*|5aBe#iQ;Tgr-SFZCj`0WUCYbc zw{KsxbR8hKyu546eKykp?oD&2z0jkh--piV_e-iLNtQ_^otLQ%ooz=*ROhK||39QM zSq7gO&;i)22SsdRXG87N6zj|ZsU5~KSZZ|QxY<INJsaK2QJoB5;muIlO5IE3qhtT* zfM7f}U5HW<Nm1`_ltz}bv}uVNDF;nXH@S7=*7bavb`lQUNC!_I51!8s;_g{mw@;01 z<Q%@xcEm|^0rn&LWb2Up!2DU6bi2yA^eb^aCP9DBme3(C=j3V&pq!{yK_m6XVK{X? zVx3qo+E{=zqEoba2e8dr=U3hRMZOa^Z<YZ2((|;03ehN0swGKQ5=7KG#_mAcX@uZ) z?RJ||wpnn+h{uE48ZA+cbGqHVA<@WNHtLUL^II<7>fJ;5DB6uKf;9s)1c;Kr<`nir z+>RrHS5}`xixfp|RwIgJn;q~UV4jEM#(0{WTz}2>7qIZwFY3Ck-@9$wwr%iEOOSl6 z;21;1_CK&MC<I@0*`JJl=6UJKlk!tpPFFbJve+-9cWk58koZT*z@wr|^cKY>LE2zI zLrhhPS-NuSs*?e$p2132CxSuoRnL*qH`UtQ^!bT#{z+-K7qBXJPb$NZ6J@(-cM1b^ zHCm4hk{5E+bJAm%BaduX$rn7fmK*0Q`wW<fgs3zyml1URF?jRbFWbBAP9|=#p3Abo zxDq};t1;(%lM|mueoa=5WI#z{c&{QoJj-P<Kbwz_?q{u9@Rc$>N-xIr2Bpk9RHkuR z-=Y>fC9V0VrC-KRzyMu?Zqwb#lkfMu3QL26-|IPjH-uD`Zc`~#{lj9I*?(@UrAIPN z?dxA>tBI-=&f(#denqa$pU>nTWy~~>mYd|BCz)!+Y=0^(uTp7LOJBz)b>SZPvW(6{ z)M(T(t~VMHv|wy3>5h$IJT}&CmXDeyV@JKe_7xePk9{S2J$fUQ^Z}FjLw!=#Rm5^J z2Tl6?#L=Kg!cCTns;>=qlj2=7{j|y4*FJTg2VmbeU~FHVF(!onJU@H%(MR_`Du`bZ z)t=;A(+}qKCSRK?+2cGvpUDf~${14(LtlXC3ol}H1~B9OKRgELa&#Md6uq-138+9- z?#dTNP$O<X7_@Lyk_E6s+WD2m;~ospFWzTf2_Mtzk>vi!9<1$a-F8#X&+?6ecEcq& z!99~lYL;fX@_xXeZ|`csIAA64xJ5yajwe?`2hnxtb(9TiBDEM{Y=NVdjpHaLvV)tR z?~ixXO4jwkqb8ym>cmP*WwY&?Z{F9tv86)MrLES2s<rnC&CT9J1U}mbxE66xiJy1Z zmyaDg_PuKLS#bR5U!HsJxlijIlkI`HrkT!lZ)R=U0nWJrcIWG#^GDe)j@YeMIDT&Q zUui1UFnj0he~&oYPu(Ybi28H!4cgpzOD*&e?724Xsq{{D6Tbz7V9hFDo1#|2$)HsM zht+k%uQH2rmL&BQmTAn{%rSAK+Ew?rc)2I@YAhFQ%LOl^>*^R|Y?A?{+M6_rHr4T> z-J&IM?Gl<(SU2kRdlKlzG@VP%dH+q6`Y<M4=#T#STi^QDx588;FpEEf!P}rlD)bM# zi)b1pD8=>i)M#>rxvr1F1g#c{-6WF;NUpbY2JKZ}S#pI2#v(gDGc`38qygx=M}LL6 z5@i;(4K0d00!eg^)(gq~w@{D<Q@eF|PzuJrBpc7e;}?^*wOvaWL=K~W0VzfTCIh%h zv2E%pnVbJ<OTK$ADXe>5$a{+ALD(5xy4ZiWK|p5dBE{y#L`>Kmh~A(S>}zxbzYo^W zpFa<2Y`{hsT-crlLN^+lca#w?wX_gNy+g8JvkIEzD(LXxn`p<g%;MuV2hizyRI!DJ zFG%7rbcu3&2EHxz%UC@c1&@D@h$P~~rs5)-J?qHYU@&Nu$OlNm9Dw?2-B&Y8Me;d} z!zIJ%>1nGMtSf%za;eiWeOtzY1*Va(o?}_hWg=-P&le^RVptxs%2nUymL4s-XB`0N ztXq7vv^snzYh{D@SU2INhkBo-^wNQ0?5w#>kXVVWc4rE49RO_YS9;{OTy>Cu<Q7-^ z9LK|(XAK^r*&Co=OU?8U0)MGNr<-(EvzC--1_AwaxMfe;s#Yl;y3>N&aedfZD7q%C z&}|T4LtM-E797*r>?arz=@;$d=r<12V0R%gZMFKB?u7L4%=uOeC&f)gakoNKQO=oN zdW_P5WXG_gs6TMi;f`BkrDaI0%wc)K>&wf_?#T<FF~`j2TuE|sSu>-md@(lFCy=$# zMIL8%@amrN<3v!RZyiYwPW=SL8(c7sqc~20A719it#+$D>!aLmIQ-yCmA!ec6FV+$ z8HVL~)~}ELX7nMZQz+*_k~AUAZ_q}o8~}gx%Eumi%*kaP-?kqBp!6npd3jl8XEa&n zO1ymN3_#EFJj*bCbM)8W;d>o6Cu)j9;rQ|e<(AHlzUA@9AGfTGoy$58z?uI`(^Te5 z9F^G_CLcUQDFD#efTtz<p8>W19$QGH2&XDGK)zw0M5b*8a}syB>F(_nWk*or8-t#- ztwP`V-0JEo0Cqr$zm=pYlBl$rC_=a}fyXmPDNF02gsQkM9Ze+fn3ER$ZvqV0slW@l zoWKio9a*HpsPUJ}7}1?l%6e())NoZtmrbK(-a6Db7&$RqH;l&xvn@<SXt{az^T!n_ z&ER&Zh<fR9UDJ-HX_`Zbws+sHx9;1k5#luTaHp4M!+Zl^XyieOP<`KZ*X=VXp?f7o zk#d(3O+@GiI{KiaX;{>CjCEban&!auQ`7#|zfek<@<olQSOd_o#<WW*tvsTP34zW} zFoKU;Taebh#Fw^unVGgY=xj~m+JB_hwiPT>*-7-@5yjup$xg+z3h+7G9vy}c%C?=q zPs1LFB6wK4FK^rOE3$3NuOPedvI076-3)y52?lqRmr>pwuZN^{QPcB%RJwh(-GY&{ zAd(j7U(&^}<65iHXqkow*vr(p|3_BF!{D0cxqPNo4g`+roa<BpAe-Ocn!!*mO^io% zlSmRV>(Tf`sSJ3gwI9|Uhs%UQ{(rc_3>Qd7y*{S{=##av97uSkwZGkH6pNNAVoorv zVzJR^?{CfE?d=fwJ{rU59i0#6;B%ybahRY&5Hha9CWBJptJ6*3myFH000rN1sa9J& ze0XtwK5B)PpirG@mS;@!%Vp^9e7>mz=)EO>wZ3ecGv($?wGdRQaWp@_c=+&QO{1>k z7XaKD#zx=Q0rZyR4PCD!R&7_5zmJOxrH-V6;$q@AMmC;D38;)leGSuaOaaySdc8Ti z5G@s|vTVy;G!W{Qq%)hv*NvV%H$3_9L&>4Zo@lP#u3!o138Xz;W%B2^``v$_AKY}) zP5W;;ORQtD|DW+)6(I}U{jRFMdr@_BWmVWpIimV%`?aQ$IQkc?);5wEO-8Yj@T4-~ zZA}wol;QJ3C@`69#Vtp_X@S!Jk?~iF2}aM<ykgOteE+b~Xqcwft=#tX(@zH%xdNtC z%bvby=A50&I&)^vfH})*h*^q%dnGU5b*JuoPovRbOzY<V<jy<qtXy<MR-+UP?tvCu zW?4VawR2ggVXv3X%I)%Ov+y-V#P~VXex-?$DoJZCncb0&{ZjwyBRK%itBz&f^9%5A zx#gDac^Y30so#ZozW3QYu{Pm-`^H-{V^z-s$o=-WN1wdpl1muLf40Z-$?ttv$25P0 zcHaFkd;^&%#EG`}5UxLozkkcZ(I6y9A=yhRJXi{pp=f}1fI2Kg^T^}L&I5_(OTw4w zwyifVYcS@G{+}Xbcv)flnez0hcl?q*SsvhJPR)Qs7KZE4r!?K{T`6U7j<Lq6NVjd> z`@wqeFY_5ee*0w`SB<Ly0;?7a$`wA=Q5vqzFE`^#+}3F8>o|p1kcn!j?M+S3iTR13 z?CUOmP2jtYM#Hk=H^g=>>x}OCmw)+}H~fp?on<oRLSlR!TBGw_#kQlav%g~a?M9<v z=dw=xhS;)3fAp{a`mb;J7lVYnEVHwo{?<gvm0@OWZ>@XJNb;0VwSA-$Kt9CiX>rc9 zJsx_)6@Pm~=IgvHvp$ordip4I<2XPRG$&ei|MsCbT=ALF*JfT!xjHXjb>|Xv1`S)* zwUw>3*R<CnOeC2GEXhT5k&JPA)=#*35+8xb_FUxm$<MYL)rlRMPlGEa;-0`D(#U{f z_yOlS?HZ*Va3axcchA%mHrqVp^G!{m(({q^82BBNwG44ZMlr(=D!x7Xyd?61rYO9C zr>6GA<89k*=JUW|42R>XuFK5IXxuZWgU+U`@&nZtg~&Yx?TC2Q-8ssfN3<e;1{mc< z6&u#>La6ewWW6LZ>@x1D)g4vU+xEAhwA+p~J7gwz+kpcIBIFlktQ{#RiY#Zx3zSlk z9L-?f$1M1LUDsDIP>(sI#(kx_qpJAZKJzD}+Z$4qmJ=R0aKLcy(`1<&6OFYU1xgh) zTY0y)HZSiVAtDVJhKCqqUzRW@mvtiBmgR?jz&wlZAr-v`J&&ZE#GJt?igpW|qlk}! zM7>d-<frd?ra&u&ER8EDZiGSn;+1n#O;6TTdwF;4sFVhhJ7UR@o9ikPRZ|&&u4pQ$ z)-f+gR+_{!9c)PgkL%SjZ}J+Dj*-ol)KWHUbOd3W=6Tst&h@lygyR%dQ%NyFTL))l zhIp*S9UAo^(ReX`Gox}Gkxf%39H-9TDTzcBvV6Xuh|-<&<MHGLs;9C#V|w<KBuUaW zuBNJ*dyP73Pnt7-lTxpPb0SLI<CT3JeNLOW2Cz#m^LjrLvX^h-V~AI9$Nh?H;_J!1 z*|Lt)iX2XTY-KQ`AV#c*-#eNfe<{{GcfeNQu<{{}FB_sM7f}}Oltconue${CNZK00 zFYMOMx@b2g#yJCF0<__LS7ZaJU^Rzh4Qh+tRmX+o?70ljFvW<c)bL<7`X+h?rF<ls zh8KV_w!qJtZi9KI1>o+wqUIR_O?96#R29>aZxE}Xs>V~Uss;0^wCcbRspxTkKlbYu zcy{zXZtJwkIcTN9A<lm*7h`-<OpkOD<lKI~MR9l~{~~?4Ns8i`V~(hrn)ZaJLvjC{ zp)+R*;*qm8gnvI4*(};=b)p+@?<jh{o5)ucee}MV3m@A6&s{m>*&K3u&VvNr?4HQF zAvj*ic{X<u%kpN+t|J&Ld~V)PAN|EA`=%8*ulu#H`uEYN_u${%7)e`0^b5cGMBVfc z0%nrPqdu@S$S6aTMgpKN)934x#O*y+OM^CY%>+tPGmq1H&gSi|s)f<iqdvRuAr;+( z9zu`btY0f$^3-4xz9Fba6}ac(+Vpg;Hr=`y!WYdY%N38sl7>%9{6q)XBBjPLsdfF+ zHFvv}&Kh$5jt<*knAy5FzSE%)RX9;d+MDkCqZ~7P)ufs(=z0$G;BPH2FV8Z^@e0>- z;;@}t%bEs2IRz`ePL?MUlE-*wUD`rroWqCUWPkS9V~?d~$QL&*xrnZgv5#?l741$r zV3miG!bQ0tUr#F)Mrs~DO$t$)W=T8Le8dXsIz=;XT>uN0#o?BfKdEuDkZ-$d9axN7 z-TqFR7^`&`BBCW3;c1Ex6N4a-6$vINc*}l5JDJn4Jh!cE+v;)(16j<ZAQ1d@ozm7{ z!{6<b>Vvs|mGAFZJV)iXR=e#~!Dx0`DUnyk>A-MQA6ppSeM1;syM@d7Q<5a@+&z0g zs#Y>g6I{_Wd=cP?!jB1xqP4VP+Hwg+v$L|}WV<hpEStp=SD|6GHE>&=XvQ>!%C5SG zY5AA98k4V4MS(ZQ4Z#Z#_hcA*Tq6>P6`6f@x=^fS7^yS=vj`(+Yl!~c_eRld8OfZ7 z%pnM&n@A@--*dj(dg>RFgXFoiC@5FZar)d2T1JO#e~=dTRc^ThHQt^$S_;R4#|&wQ z?Ja0_QWNZr3FHfUixU$n7lZfAsS^{6{hxmIt6%K}nT+z)uYUEbN+uKZgoDMsWw<af z*@Lk$K{9GS9D{xerd3EgWX)|^F&;TON6{&Cz2Bm9wxloHq-?Ip-$qh9*6lhZj642z z4#n*sI5!dg{i}1$rVofB`M8O;eDAj3Y|gEJ<GJUaTb(IC_sT1;0KD>Cd1m!FnP{A@ zvGmqBEuqh*kjr_=ObJ?lA187-=mk(tB}tNkUKxV=dz-iao;8js<{bq_M^sZ54J^$F z0SENd68%<82#MnS3H<VjC!U!0;4pzV^ko`7#F!>Fs2gXS<DG_`?=d2B8M*k-4L5Ax z4!E!e?|tG4G=QkDbaomapjY1DL{abM?M7$3nT=iA5H+T+<uPpEe!~q973B=QWdg&u zwqrOUsE&x?&#2&7ljzGQj8^xVub+_K!!KSI0RprOKLR}z_9Kxh>t{Q0*Vq2d5cnaB zc!Nb>9UmW8GOx?vUJqwpmr=$QtA6<K>t1*GaNSbAc=gp+yPPLxPnOFkv!chjSLfVj zBjUKI(R6b(st#;@3qRsZCVRm1F5Jg?vc6s6b;vbCsKF%xXo_Sg)?ZIYow%L?y&MvY z(QAe%D$$}_D!FemO~&37&d!F55e{uPxc-GO40X4D_|Pr496B61ddU3SJ?QnoyWMAQ zqkF^DXwh}w#F%NmsR~eCjATJH);&D(cI?<u$TXrl$JL`orm({is**onF3<Z?RdBXz z$6#xStMDxpp%pX|KYBaf1s{Et!K9b>t9s9&ul3`umOUVN<?s(+3t}a%j^_6;Mu*VV z=yvoddItR-;!|R~jjKYPs3Z}D3ylRkb3pn99U+g?jzwY$M^Spojm|mYa^lH3=8#9V zGTv#9>$oZrnzO!BkG<2`{+S_v$m+W{$Gfg3P%2F8f+X?tBG1d|dZUX;Px?D{o`pS1 z*?Uwu!9%il!qG3l^5#1jQ+S7LGd-c1Td^_e9MFfVEPrC;KABXuOVUM-D6RlCL~<0S zUeXJVW9~ot1*24upc9bOC}k@qMklMkkI`ZMx%+*asI39U*q2$v7<KHa)_bRQ-`_ID zlq32^>~Gqa*a7`-d?!MF`#^4kHY4&SZA<n-Vd_MlFLZuqQ|L89`#`*`rr7@*)T4Zs z<4eqfxzX?K=YgBe(O$wxbba%Wvm9Rv>QP=1ulvR_#6bi(Me`{P(Yt&yL)Fa8GSsey z>=Z+@ZB_q+lHnGFXT@Z5pxdj=IS1P)NX{7GK>_osSJ$u6bwQG(+a&KXkINWuL58vH zPUg0Bn>ojgjObtHhS+cqZ3duA#+;DeTy&e&F>jWFXXC~qEXL+?M!IX)E@h_%p!ND^ z*>Md(+o|lDa?31GBC)~BDIU>~EuaF6_gO51wV^Mz=ohGM;Q2Jc*_<NGY2T0Ag)v-u zu@Flp$CnZjW#5e*OG`@}rN-gB{f}odnZGpj?^=qYsjmJ3@nWy^Ex<<q3CvIwaQ;1$ z8DuizMZ_>1*EB?a0#lfjY^roQtpfM3xoV`o9AL_2L{bf-n8ejkd1)N?0yplwCBt2D zp3gEON-ud5Yex;lZ7)e8VV{L-kHw{S-Al~{N#OCqs*|$z5Cou&OTxtJ0_Fv2!IbYA z=6s4iYopPL;80G4NhqG{SU<8{>yo0`AOUa_kuYTv_p)rZoy2}T+wSCgv8Kzo`R)Uu zeEUtSkhd&QesKSZ6DKz27(DuW0@>JInE;!OdrIWDelkBlzlGBiJim$KW#?Bog~$5P z5G~Py&|Wo3=(b7%miBqa;Px}`>~6z00ZiK%D#{QJQkoRFU7c6}_o)(fMo7uRfvoHD zAbS?YBTWRNHBn8Ak$pp*KJ?M+drMFyN{$d78Av-&ZB|kEQI|QgjL-yC9*07b<U!!K z;hb*)P#1%m&?CX`sDRy5ys6_ZqX{q);*2tvrF@M~E%mzv`YQ~(8F@T5#eMYL%h6Nl zOF9p$+-h^Q;qlSo*RH*U1sP&8gHut#GU>S#ffX@Y5@P#QFN@hVtJ>!@=Ct-h8nlbw zvUF~SEy4VvPkSw!h0!mTCnJ|9=QEjg(~GnvPeVlT3}-)Do1b60{@N<U1_$U!8<j<E zw1h54r_n=o{5X=iEzaHcvC^pl)-B0O)RN>p%15mv@%7BMVi)QFRX{@lF($n&!3D20 zOij{KnA1VUxyJnb{BvyiD4BsW9|Wt|dv-}aBb$y^vE6ScIt1;jM$}Jcv$fBohP5Yb z^GUu6i=^KMml)AI>8giUv&?87pXI}<cHPlrvonXC&rTPuLN;47UXUJ4tQiJ6gZ#mD zbfjZE%cALVOyjiF^0a<+C0oK^4OgNuIQ^CEJ1SVdqtlvx_^_^-W>1oOruojCRcm(C zZC97ho94cKrm1U=ciy+A=`ZK8DR<tpU;XbMSRxw$lQs~^*D4S<0OofC!;ewt?C*F4 z6_mSHMjNm`>X5UAj!DnAMi;=ah#mNpvb{xi=y%xez32qG2E87ORPfj;B>E7M!6Ssi z8RJxpG9Of1D8)PIJW|=_mRTEjisLSTC>T=>Y4G-Yz#uONMXMcQB3Sot-6V6-Qr)vJ z{&~F96nic)_$8S^onofo6_v3&HPZ*GU9#=-0@^9A7}}%4k?s*TjpSCEUJ*tR&Dq36 zR1A_5aAYDuuX6k7FZN(QqUS?T&NO*4J8l(Q_aG4f*U4mLp0_YiLI|hkcYq#Pwmwjl zfo@xH4T<A@f~C_{VeWfv>9B=>O7pdvV+$BtibOQ#!$$r>94cuWGGp?FCQ&EdJ2i=Y z6L;%bJ39tKs_x+p5d0ZEIh-aoQN9$_gnQupSOcFD?Il0CHUOX0$9eu^QQ&(V)JYI7 z(uN_lWuZfRDrvVgJ4>)z0*+h$7wnC6lAI3bJ?wG4V8T=iys>Q`dBWI1w1hYSj~uC% zrM@i7FMqxRe3r2vsf?*V`VaEqU!1Y^W4HjHK)0f^=q>0w2-%Szu}Gk|yy!D;)`=5n z$l9$=^NO;sjMbADMQ&w3qB60BWv!UFq10LLYJ8lm8I31R1!r0U&XB6Au2&^8b^2hj zScC!p%9<(y0Pv!w#%UUx)#O6~*xaxt2P@A`3Z;bb7(?+7Q`j^!-zk)`^Rv&?3_+Cg zw3(7$@0S9IF{Y`iC<?p^02nY3Ijhdhm}}%9WT81ZmU_M}WX4oY;yKJ3p0d8;>JshR zv<#^YtGN{yk^IN*0h&PD&}AA$CBYWiG9X957OQgTkMybzrv6p6;*6e~B+Yq|1nVG5 z*(!Dum-qc>ju!+~Qx$PuU&y|+)oRHXH~?sMbyZlN0^H8<S2S8JYYtunZZwys!m8ER zR7K<kL47OXYHV|;WHIRp^<&nT1^oe|bWl>C)S$O-;Cm-K=3(FHYX3Vm-B_uP^5m?D z@m<)7=c0COdK`-?*15R_T?FMpd6h)MdobTjJ;De(+tVE<1GbIKZ*qS>%7{5C;$fNL zm7!FzO~lmkde?D<k;lt84y1CW{B5kMMYjlLvS{ql%nvb!p%f909gvO6m{643Q~3w$ zp9Q`zL`fipsA+ZTN9F_}3fQx;m*kVVD%7)C$h|_aFO$E?jZHanje({)vSg0;q_=2z z*_ogW5UkBR>J@^0kjaM?O;uld9RqmLhitY!mV1RL9wvX2`*Qdia~w?ro{l-CHz!gB zg7VCCWsS)GtoD_+9iFBDRMAxV>GOvA_hR!XV?>8F&XP3olAAR_es_ToEsp6X?FqGn zzP?<v|I9Pb<m|(?<eubAE@ME4XpdfPfNwWjF;Xdf(a=6@=l*m-2mw!0G4swRq<|o= z3os)PAb#sR@N4**{{@82R<8F15gExmg~ou(MC0c_b78q8f~s!Y`c%ue>1oEM9msZ} zDc!d9>2&(pr_=E1S@fz7LLB0^z8lW?NZf?CQJ}Lhb=v?*9fROaBlQYWI>JTL18c`E z9S8h%xDZy)=1r#4)q~}7lA8^jOQ)H$;M^2rQycxW4y$)tYsfO%_TT3>p$Cr=k+|NU z-Lh7564?8*uh#MzdF&_;W#5IN9t0&nUd926P*}9sK$g4-Qr!lXxD-Kd2NTi7T?bS@ zQ=Ep4madyF-Rou8q$0`o=qK#Y!ZG>(G+yNT5$nGD$-Hi~iV)K+u(oxX1Z$it%5=TW zS={f3pC{BslkYFB)BqmaiA}jv)0Md6=3K{C;*N~vGPc_ReaNPMWQ)43sVx-DLSo=! zBrN_p`u*W>h!BT#p8)<c$I%k{uF}B)r2S!SaPMEhDHZCWzj_ZfCmu#P?5mpnt_cpR z_AxlPjR}n2mMuZbOTDQG4e8(h4?|<`<X$7}c!ej7_h`an`b_YCEL{SkL2$s5e~gvB z{dJFa&Tt*KqZ3O}cFJw@ql3d3)wE|j=0tDV!#nUyqnFZj5qjjI2iVdmMq=)wf{Xc* zIM8!h5_j7K0Qlety}l@oil=BSe9Uo**L%e|k^DcnVe|pGq2A5qj!jKFHilsc&zai3 zeft?#DSk_=T*M7V{|wpDKab^9wXw8)d3o;G-m@JFJG1}_cJS`3byXk1gX80XPc34| z)@*0v=spZl1EuIPbO(CtNKiq!78lXdm{|1$64&NHyVO`lrC0?I%q2;bn2_XuI^?N= zWGSLF)rnRX57~u~2pCERSc%qmxX~+f`f<y$rdGUjo;&@?Q_&~|ZkikZGQ`v5q*lW3 zwBhK~0GB!AB@+`9)4kIMyfoikz9jNoxXu$^!LGf(-ZO4n=^$2fQeCHd<Wq*0UkQ53 z=H}*;`ilyg0_Ir8dnTYd6ocKP4QU2whQUW+B>~FcCLUx7jzS!+A${i1G|ezJ<93=@ zXg`YMaXP`1yuDcXki$kPUkU!jC+GkQTB6mRdKH&+rdr3$98^n9w899Je(6i*%v=&h z6f?AE@oI7JzG4jU64k^~ER|+3_>qn$d`tWeK`H>><#pYGUtFR-aXRi^9xPaPw6-r< z*?Hv5AsGW)9?KVxCDWx!eQ(Qbjw@(#c~WQNwyJ*nYo*FFACuJ!$nwPgr2`Ak&Q3HD z{`Tg2%Erh5Ki<XYN_2B?eK=Jiy^TreI&RX@Ziz7H$uR768-N7ko2~;WJMkNx*sa&p zZXyo*m`;r->O_}gM&=A%igoP6cJ7%Ph`kuCG~G-Go2^#MV3e+=>FP7&36w_97+fHm zwg#7IbVis9yG4JRvk%)FYZ`C0f*07|YPDK}TikllTCZKR!S5;E2zp3Dt?M?~c()<1 z>_msLk*R;iFrT<%GRg6v7YrOL<~O$KM3R_F28J~t7-u3S7<VRIEGC&=@j!M3*Q*et z+MDeo3$@U0bPYmk$A#On+%^T-OZ#Q_pb2YcMb%yAvV`i7stgqxe0I>~P#gUe#&yu5 z(NC33CJ=9YUy#Wt-<|m}7^U0fImYGDPgb`c>SS{y^jX0&XQqWtGp)j4p32}mmJ{8( zBYuhzd<-2z2>99P$`w3%s2z#@!^8ccap&<dz%YXiA^TT&m!EzvQe*VeODU^4@@Tf! zC|vIrwP*9p^@T<aY<SM)O2@tQQtCUT7UWH4e5~v95V&@+!FsenS|_j~+r*8@lOjPw zacCszxtGGDV@AV)Eb4rSSOZ9n4@wW<VRdEZ-u-z;*&>VKVnVF#z{Bbb|KsN^3;rD$ z)_{z1aQN=Z^sT?2vaD_E5Hk)^QYvT6DU%K~togfq)sNf*h`XzNA1bV#?OE+HDmk<G zqDp719vPzQZ7N})7|GwVwOd1lH7HW`0TEWuF<bSnI8|!v0+D(M5I+FMXMXJ3+R%f8 zH6V(urt&V~UggnagNmm5{_!C_Ylx8nN9I9VKZ6Eq$VWerVD+S1aa{&l(3$R-ZV(Z$ z+l1x;ZNFO~vE1v@X8Xppmjh@NSObnuX`{_a(#nL^S2HlMx^Zh&Gsh|CE&n(SSi6Uu z0%a8e)*>IzvjiQ|IuV$5vTZgi4*%)^YtKLYuNemNs{v=q!x(_`?u%b{e+TUMV@e5E z#5(%10R8G}tmrkBE0rRZj%Wd=e(79;rXbi?J^A`QNu-V<4SyKOSMy_9jlnG>wuQjG z>c%_U7^eooA&s2gw=p~$D+>2&{-zzRv-f~A?WhfqUUl-GEw|A~mO(xv37X_L!=A71 zL~klx&3I5gtqkTPk*GPSp?br`*o$!qu^3<16WLVx<wzLC*NH?QrjFSw7O-lxze4jo z{FGRuh<W|lUjb=qNZ6dT^`XRQS2;<z1S=eq^jJ?W%RS72PBlODYmnXpa)?!*MNQS& z@Asfvll;lwfExdL4+!w!i_uc`#EZMXJrxbfsMCe!G(V)#jcA$%;Bp$Ua~q$?LUy`9 z*G;2dU+_tpCS$&z_pD;Nv^h}Vd5lSU20aF*imAa#{`1a2)b#D!b<MC=C27?%jyyaI zP2aw~#JPOMGP+&E(lwBkj?wh$gfm)3w_7$_&D5TEb;{sG^zoyZusd5(xdu{cIm2g? zAE%R^5*aT<rKxm|E_G1}MQA%ZhC)<wRz|5X8VT1(OrB|XDi2U+g+``EifP+*!Izhw zU+wF}?Mi>CO(QVzW!0P;hvtL0hj0)Lg%#TanWNQD{~>9lQmDk7W262PjkMSAqrza; za|Zo>zrV(bU>N+R<@A$<{%d*j=WG&f^D#=`bwmz#jEA(9C#`f~dU)Mhmq1ucLyogk zluOQBb^D|zJ9$O@g?u%dJ&EKDi^G<D^-1n}kSuVdu^&CU&wqb|$P_@|$YB@uWtlYg zi=fdh+}|LaAaC%L`ohWh#&JGTit||-zdSh@mXchDz}(gs(1%B&^4DL8S5~?6Oa~QF zS~06faUH<L{5>jz^2Co|X-FLKsF#c}dZpg@Odfv?q(tPof__jE#dEy<!F@sY1<d8m zO4CPPQ}6>W@;#N1P84^E`yt!ezjHRvS0Q<4_Q3Q|^&_MKg^hmfBk#G}*EpxzWUMxg zZK$yejcHXW!l9lrXwS8%eSkQ0U>e{xS-l4o@77`y-B8bVt?A-<4!T|aPEDS`wv)Eb zZafS<$CE*AD$!>87EaETrA>`UIuiEt8eU;Exlr*#q#&-Xu7`&<%&N{J5$eR19xNNy zFeH>oELPGV@<Uzcmneh=6!z;sg+Qn$Zm();A3G^~*j_EHr{!UL(u+Q5-}0Q^-}6IP z^UyuuN@*20BM<6?`yM57baUY3%-@sKmp%UY<J8G1T~{6igtT+hbI(2Z4kS4j7=%}z zd;7x^h=N*|T7Nk=2bT*t@<XBI%n$SMDyX{5N0KvOHxF-4sb;IuN0HN^VcE7`<X%c7 zQqNs<&nzwIm|E;zG|gKUfMvzsx@!n>21Jv(J@h!8cpaXvMbHi?4ARVj>0aLwM7Mwl zz2(uremMJiHFH-4lFLc`4@BtK7U9gSk;a=f^6mj=DP?#M0xcn#>1^jiTttUTwgC4{ zDj<Dv$_qhe{$@VFwKMmC^k-E)^f5i@=H0&;JZzBGezZLZGV>4Vr*$3Q1NO#I{wVsG zM91gfX|~RvFXxlEl7cYS@ej@;Wi^I+&XZ^LKsW3Y^q9VroKz$CfI4QtrNt_wcQ?OX zllb}$rR>lWU-dldm;sU7i#Vny|L?7w=PB2Dm=!|OnzUz=!g|j`)-vGiTh)`OS~_9w z;d&*RrC@+3WP`9O+bKU~tg%_o5Rg*%FXE-5L8a-Lh9W5?+!t7g1gOcySw|x9dwUE@ zqrZa^DU~PEiE@b?3oxngUeI(M$8CO=1cULzJ16$>!gCOgjfL>VTlTx>GYJurRjXds z8*l_g%YbzD1P^`eV+dM$;$+X|(N!eyQ|5<r70Epy%&U3|dCI<>PkNuKYmr2(bP6g* z*Srj2$$<S_`zCZHJ?H<LwBvxJNTFdJa1pwa0r8;5S!5-hbg75(JxZM+uuA5KZ|Tap zbLVs-%5NY00{US<OzreQV=6kM^Pn;1MgH4cAx`^nEiFQevn~7sK9|}a@!FhzD*~FE z#oqtDleI<e#on85s?=Li8%@v)>c2$w$nBGfTcTgk3A=t0i$P?Ec@YEdOe=QcLe9r# zT_Ot8qo~#Nz7y4>YKXP!JQ4j_zZleR$4xcFq!M<>m+cIq#a1$>4cR1M+_PC<?@mfB zU>V-PFDqG&6C}zz1luB&g<`%WagwBZ9^j131Aw4pRSSUU9Er0rM-@eaVxA42x*19J z{8>ZT9Z;2}YAuosTit&+_ju0p05EWlD*^@(B&iCf&WOT;AYu?W0L*io0KnUh1RTeK zKzKzpXB@?g7y&A7eHDj&!)PKfskeSug8Ax)aRiBIn&Rw-O_5jM*yc5zJ^CoqHNO2u zl^4zD+VDFDfbn6_4dwK}P^f&v4Kh`X!D+?N;lr;x4FL=(jSZ3vBNr=L>1%y(Dey0t z`EbK<iiyP`cJOZoBqpOMiXN((BCqNSoN0g{@S4svmAk<d1p(mg4?p}c=!T+DIQB57 z8-_w<S;j|?z4$>e45q@+Z2$Q6=ndX%Cgb)S?HJ~YI0o2H00*^xH<z+@9CNi>uc&8Z zbsg4K*@1M`MnhW#&q^9=llJ!uqBxEtzh5qyANz`!NEX|87{x=maqsTDuInl<nl^s( zBnYBuiULeMh3##f!FNpJ@2@Hc>+8J6bd4AA<Q@36YRgv33(HN-`H7+^ilM_>c*6iN z4E`-UVjiD*3-DjBpIckwWSJ_4!NXfl;hS@{rFv#E+WCie0`K(|+=p+XtI!#A2YL`a zjyBM<=(o@(Wedcfd8OWwF~dN-lS{tPM1;z~bgjYC#<<|dQprr~bz_jic+&MTKK;;; zaWaE5J#EQ3xZG?Kzgq^NYqwe>X67olUP^%~swQ7*vQu>EoD@#YlB^ku{eOj=()CkR zQ<V?UAvCl6WvZ#ljXS(4p0duAxA$trmhB_x)pqt(&w4#`{?O}_`98km#{X{w<QuKb zs~PJ?8Gw#n991)(u|bk$QBCKnJ!qq<eFQx-)hf4SPGHUzYQU1#9?iwwq-MI>J}*gx z+fdv!k#3*p``oP+dlfhk_3IPB2>V-|{}UfRnw_;rPd-}eVc5%<X-<989{uBO31h!B zO~$5f$uIA3&NNS#ayebs^<1v>Z3u>|92%|vHbcZ9$%JFmXUr8Bj(&U!<g5PTrRYUX z9x82YRxx1{iLrXtbm2IuOjU&>#hpX_qR*f|B0fJ2(BDFU%E?5WZuE!$2oC^-YrBS~ zdszgs_fzQzl}e=(Gc`ax%tR$N3n)@Y2hoJZx&Rylr5jBj_hZjuiMg~7LmYHe4_gru z4Wk2TMUb8U@-kYoOafUBh)kiSgCPqX2^1wDTp!#S`f1u<&#ui)KqqA~VS0*l1la(6 zhGn$w*dC!*{b~D`p!Qax4ZzDTcu6NS8iFE7tnad?JUoPbXbqlDY|&G0lca+xkG7+) zz8W*2LRQvGcs8sI!IH}?{vr9s8d5k6rJKS~#;ZwA0`%U6Skl*!Axd@4C2~wrTdTuk z^mJ8RdM#``@Wta^?AHax_uQTP!vpHC%BbJ>*y(L;LI5LDHQ^r+AuJF=v(c4D*F&X| ztIh7qxi8;9+&3)0ood$(Sce+zRXc-kn&#NqS>JPC3NPr6aAoJs$qMhdDA0)AlWG?6 zsOQ&Vkt4Q$c~+Hhz>PY=q_&oR2CM50|GM>-_0_@3dZ!W^fxzqUY(p#PSfsfe^eOZO zgc6K20x4l$Aw+;bBBF_)j}*$fdoH_@jwnYE^GAuD3gkyNx;)`QSGW^z6j#Q@EqNH? zWI>u8;=2LXQY0a>Pkg&wMlC$Gy@9`StaNO}2UFE}O0l;#ZZr%YaesqRYG7||4Z0%p z@GorZeVCAUTq$403CW)GFWO*~;%Z)UoxI?hruhe^puAb-?epO6uf6zyQU;xzHa4c^ zT$vh}Gd$dn3vJ~TcMPDhy1MG&KK5RnkPH=Ygrw`)qgJDrR;GCoy@qu(tLxH<PN&n6 z0p!OfHG$lq<P3#v0PnvCU5;)?Pon4AX(3aC-<X_iUb>ZtI~wg5UX8w2gNQji*q^{S z8Po~%nm>OSMCUUq?mzTdMT1$92tP5!^J)cRzvh-_ZhOXKYj_u8#0A^Zx}JRPBh*3* zXcsz&E=F%_VFBVJcR}))c0~|h+Jx~?;&TkHCSxh$T;hZ%a}?Y74%Aj`Sm|(viG;VL zH>W&M-E3m!?oX?a9~vQfO@(q`VvMRbzQ3+ps8A?iT4p4k$y%yvWoKf-$`p$8wjePI z8h{EClLUL7p|PBCcWE(RG)&(&4UuOpGC}fUW*|pMSfk(0cWL92OD>T?z1U*Rx>yBz zGA9C^<@s3(Vh+(k70bM3`_UsdNX?TGNpA+K?DV`X0`mW!kWy@S?jWI(7GhSyxWtqN zLe<H{O_)5+*)F^O9B5gSqGr}qRWsX+HpTDp$NwA+=r3y`^J6Ti(Xtj3lxkHGw#+`T ztb8#D-8%2)yE3SIEXJ%o3V^(KlWe+I6Y^*jkI>e6+=p{W^49#&9VnuWV7OV+`Dz_O zLDKN*mMtS;5I3QiaItbQN;{&Yt9i^-;!bTFCfrs{`^R*T2}k*;vH_r{#Mn_4>1}E> z1Q)3#FU&QCi>JzK3}hN5$Bnf~o@*xu=KOP`A61}yjPK&B)sNfVX{Q7s+5sSi36cZy z_Mfa_+({}1&y0gTuE}Jf=Y{8rXC_Vuu}g9LnZ9ST_|e+&uyud3ynuM{PwhY#S*1zw zRV7`S6Tjn*FY8$XXzFRE>;_S*$$CUYyFH~FMc^>FxqXvUz|1$p^OS_av15)aNFE85 z7w<G_-l>eOf-7|n6t(u;fp8^koap+^|4GwuW~RGh_Qv?b9=N>EG*=Pd7IHopO`~OW zsTLEs&Jr*`6DtA26&X+x%_<32GxB<kz|_F~`R0&|Ysp0}T=DB){~EV&^sh~&3{Y0g zv4Umdr+4XQ-gC9M*qSo+;4Djam`Wky+KynEOmz#vkniz#$@X`wt?lq_#cj3HwAFGI z$mS*|I>)<Rto#p!baa>+u|f{HujskZvN@Q_10~fpNw6k)afcA?144a}xk7iMdenAS zTv~PBCXt9PsZ=W6#FV~CRH3bI*KCty>{Rd9zs@9+ZP8{<u^V~M?Bz|}BEZq+mFFqd zOol0eZ)7nxWPy{`A>2d)OdE!oDVb}B89D-YyT>~dlesKpvh#!J1Rem_E8f>%&~BZd zx4cG91)_}fP59?*2BqjQ>a{wteS^4^;b11N(3lQmk=Uk1d|J4_6320D5b~$ej%%^# z3dK@ug?3P)XLF%d*t!dr32G!{_VRje0siIw`|tl^k$bD77Uc8IAB_H-1CU{d1Np%d zCrX~1*-_?}x~*2)9xs=I%si+yH4=I~pLIRk^mw<6|K0V|VoCZpjM~~7!Z%@v4x%-g zrNkFca`=`W3p%J9onlZA7kmx&5y@~AqIM9Toh2km&TYkWafH2L6A5Ix-8hcJxMQB# z%Nq?w=_RhB3e7wQ;Ep$8w=aov4MA1hODJUx1*R|EGi%*eueZ_dc59~7ohag|&ZFzj z+k|`{+Oi&{EHAvx@x2idpIb2O_xtdO<rB6)0{!co=h}vLqs!6V=wbAP4I>?5B9Mwx zs3$6D7wfODsb#b9M5mCr&G9f8YPY!vkhMATp0c5-AbdNdu^i?zSysNeoHYzkX{ciu z+2!UC3H-R^rZi2Dr+@Mp6~ArfQJTKZWjwrgk};>YCJaS|q;9$UQqHon9dz@<tYvXj zPQdZKF+z=-3sUS!sq_LDkUX4`q)}RC2-AA&($k84>8kBr(Kn%>V28uHF@x%~pGyd) z^rOPK9<@g>fj#9H9Oe5>Wu-6MX*>|J10E?vZwu{{I{d+ZQFIktIT)GzqWx`~4uiqs zc}5{9eZoG3T-W_3>AJ-6%C;;=2M@ptk|Z6bkgL9N!)y8xjgFdTzHSut?Y2oN3q{f+ z3Wb9T89GEhs1PLgH8^^yEWQT40euvGH3CnNrDC@M8FROZE8{_3e@?5ag<nvQkpWcc zZ(iubT-uC(IcK<DOPjgMfVO=pP3}y(6==o(PmNPy8&r%G3TUjo5PJl&@zy>asIeK# zL3iW(rTb12s?7~DF}{^uXbqi4ccC|+4H+InGQ7uaG6i8<ei-G4pQFJQnFkRzbNlZF z``6aC#0qTn21THLy48asX6SC*xNh{se%HomQ`YPcD7jW414Nu`57G#y?^(U7WS=TS z4wt!|b&VFXwMK6rAY(ly`kq(4&MTtMmviq<q(;AdtGrydh4N5jH_8U6tnIW=2o)QZ z3pHlJ?0rCy5EwxYuyLVsfw~#|c*#zJjBZ@y0k1{>&tQm1pu6!)_aJW8mF(w~RnV+| z)@Wy`=bPaTJD1y8#;z{Z0=zH!=-IPp9V*Czw9N1C5$e1t1OZhmnT?IC7te?uet|v= z!DLH%8Z)5}et7UxrpegrXM`M2`gAi{9{uj^=m0v2Zr7m>b*8Y@5i@S9R^ZgR@+q4{ zs!Q$uap1|Kx28wNA@&L75OZ=Py79}%$uZD%n8uD1{u}-jN?`$nt6yEpL*$I`X%q78 zinlHEzN!Q0QM@u$t7o!L%fzpSR(FoEh^Id#E2Ea(YqM+7SsB+5OM6nLo#rX>>071m z8@)2oM9>p(VuO<=_y^0aHq6hy%b_G1P=)Qll2t;Tv;RICFrhKNB}_JVd1X&?<YBr0 zP^$ICKr&;TZu5$&F#*~!u)3;Lf}>!98zVD;&F=pF^WHyR%O-Kf7hL_?TL-;B2KWJ` zu*)KFud34NwJxL+Q)pg>3C}fgu@a*drbH2=T)HBL-?~YRyrMryfJ7j_t{_aEA?aw> zDwCe)-qClOaKqZu;cMEZix6rrHqh(f;NaR_yLRzv6^fV*+0|pxF{o^d=Q4HWFM_;S z3MK=4=DZ;2ygO6M9$dAl`skaoug=ZQDFC`VyT4{{+kG+Fr*{78BCFcp{`dZg-i##L zuS0dM*Ap)8tq=@&{d5@it!IDEKSfTWy|w0U-w0f+G5ddQreXK<+x*+MrfHfDC+_>g z?TI$ki~c|t9Yfc9fiLW!cvvhFp;D>XO!-Ao|0wB0_d!On!I&H(-$0X?e1eeGyd%t? zbtq)bU_-0=b@ET4<KT(O-TdHGk_O+;2%lzb{WCCc`}%c~sn@3V#x1&h;e^3GC2$^M zDx5Fkid5BWfA{tsT%kuc*rihD8X-k>wMXwN5Fc6PqikoDQ0J~Qg6-XJ`-^nwqZode zYuc>d&I6{zIQe<g9qZlvTG^Z4Gy3(@tZ>LLZFj5cDQ)jol^o~i008zC_o%(4$Mw%k zzB&33TsQiVu}0-en8a*&)4v~{r$=LuB_aP;rvI@u4Hwa|*Dbp%eA64GpFd3r4E)73 zzq3BHBv9CYHM#>m1_N4jt&AtA_vp<zZ7yoJyU|b?Lqj6uT}i^&1U=EL@5|1aXYb2T z5FG@sdU*4khq|VlzTb=tw#j!|xN{Ahrk{J!%pG|2rkiexc|5yND$6vENWEZ2UC_eb zTCf{afI3hFmMr%Csw7ELw-{;E_tsKF)|LGZtf$=4dM1~GS^6ZGiupS7@*diaj-boY z8LI;dW?LZ~(w89=1#yDBVF>g)@k%5nbDfFekYlk176v6j-kSrs7X$&}%dwz0ghjr} zd|`63aF$YL?9SPT1!OqGuz$E64Vi8*;w1q&Od*SjRliCZpuEW_wGZ1lJK)GdlJ_5L zAKr@HC$HIubibR8rKKKp1HNSsFjK6rM4@t^sGj4KGeFSmbO=E-6vX9YIQ-c|EA^({ zU|ALf7Rh`gL(CyW1h>uL0ZJLH_ngj+Hk-b_4qPbSWy^0uu(GnUvf=~y`cM1i+e-QK z<M`F+<_KmZcPN*9#luxuK&Ghjqe_y~F#x&=C}W_LA>iD!UyXO%4(9XL+Cn*cF}>N@ zStkDlrR+q`K5VOsnJHDq#Mnl_&2+=F>e6g-aY`9%9&YzXR8>6@u6G{{mH+=>2|DAN zsi-B*5Q$EQ{yd8fK>#w)H#XkWXxsMT-k`X}QXY4I3q@!F9gOgj&(%Zd9q7X{EmXEG z!IEQJn7c}H^cB5lzE`8sRox>YMd>SWw9as^Dyq8bhZfF@>fWQ24TYUE(w2KmS7#Wa zn5y&o>KUz1WqP^PAn4okYS)#cYZoZAxjJ_F#^@#jK43TdX97}jo6OdRu&?Jn%XPrk z0L~@t8*|pZAM#3r(WNOv5||xc=@C}E)|M2-gkzs~jP&Ype|zHMwd1H*AiVo3<1u7` z;W<X>y-~_ncxvdyrE_CrJjj%3R1&-0BRxi`AI*G)=1rih+hH}3`i7$7;ER1fRI43H zqY_Y=Nk`gkOeuSTBp*^rx2Su-E8=)cyr(IH5c)$~H)_{zt!sbH{18jLTmZgb&Dger zMHhp2VL>q<6>0YvtS&`d;w||8$Ev;$s_F^>t=o~oc>U{b@^J)0(1&#tUXuo*e^Zcj zZRNrR+eB^%>vn_uJ%j@IJz9S)hCl&&UcqG=E23_n^juW8Ph{|mrDC1dDppd;j-qQ~ zUInz(h~CGXPZAOoX^l=8)jo^^296JfwwN?9!eLw$hN0bwdq-n8w@eS+f^OoAej6^Z zLkR3vqFnFGoKwCh9y@kS7G2N#V*v0xm(bOWTd6d6jE{>1DAjL}BuA2N$O%~Li^cWN zfBy3e^?FoKU9nzYs0-wJBFqRv3s!=#tbI*`F~cyf#kEXUWsEU3o2lVzjgx_GL!+^D zr>>}+gRvuK1@S^N>x-_B{t4>!g$%}-g?b%sBp8#B=R;ZkreO%*lo5VnFS@#g3dbmp zxKne1F4lYVaFYT`jH@U`CWcjU4C6Yq5p)(5<LrC-G{18HB#O^6j*~OGRjEu(RVtRA zkvWb%yGPQRO-&ND79lN7ObLr!3NP;7y?EEk$_gjs*vH|m7ZA7=S-$@i@H)dQ7&myv zs4JNgC6Yv_WJ)e&jBl)HqT`4fBN?905Y|&vGM*Px72m(m?RL4Wdlc6dMbdZT%|Eh> z#m#UN8<ViQ6t0;_I6rZf6({}cWHw5t2Y)59_I0|<aU6B0K<6qIz?qMyAJ1T@ROYC# zQ+0S=pp#VK`8S>CK217g@+<y9v)PPql7Q4|a~X^?bF~@)>87|T5lJG_LKgw*I@E4p zOZW}lm!aFyJJ7SSfZ)K8NR=?{g8#a*k&|Y3tO)3Y7*>r01BS7~odn1du)$=WEPx3& z>yeX`XS}5A^C67<8hpDR#W^9M0Bsxiiy{*RHC$DjB{FxH0NW~oqCm-_YM1m$-Mu75 zkwMd(cA;7=v>i<YS(W=p3~26Go^V7G6aYn+dCpN407bAR8r5>M<uXvJeFk(LKBG|z z<??K<)?*akS#3<@CWP>Xag6MS`_ejP*Aw)4P79t}rfZ+9QnKCEH#Mf2j;4WOfTlU4 z2KYc<BO9E+gQ5TsjK!7R1u&DOC&4qun~6ppU;7M{YDu$cdO^uJ)-o#D+!jICOxa0v zW&BIZ8B_^#qQp8u?x*Ck0asCU>B#j5?^NRLc}vKeH9}wRADm^=o*k~{DP`@qT^Kdq z){fjxesY%{rR>fVCr+Gr=ER8;Cj`fi19%c*bg`dNdeyEjmHFYWt0?86jTBar(ltr` zDI#4O{?K_ldN=wYdLDgpoqNa;^`(a|ea)*LbFSx%49?fpJd?wf)sfMz+N(dqS5e&p z?WdA|oc8Qnn;YDSusUp8U>HR5E*@)qMOOkn1d|z>dw}zX7R*M{jo?mD`b1p;H3x&9 zcs|2OjZGtsuHaKg>0nCg_uMF_h4(965w>BEMS@uy4}yShE@2r|jC483^-{~l-gf7m zcj^H8odT76aFXnSh<QHuLG&1UJ0Evw2m>(U;;hj5klh1ENR&fd&|_GdgJ!x($3K1o z5DyZq1MW{`1COI7p)|B+mhrD<QW-0*rkqQnhH2H)voRY{@>KR`x$V9Lzu@+q4PcLm zKWgZ#&L9XzgRETTV4luP#lJP<jhCcXvF|jcW1}AsyJr7uri6}6d@3%A?EA6yJh_~< zn@ZHp5}Aq@xv@k1xSPSr^>Vlc6l7l1fvZ(d5y&M^lDaRMLPpCrxE;(`6Ej#b%53fO z%Yy^H2vFqP5Pb=jGfH7ssZ<*K+#W0Oi61${qn`x<q(Ly++yc`<5Tu(T?N80Kytp*W zaVf{mO0zD~*V{k(gSol66cclzxEQmd2xHdlY6YXMVF%9e1ThWh@Ue=RvN$y?#pDbW zxnwiQ3A$uo9yzQ^1rHFE3LV+#?eP+}5Jq5_Mvt+cVHz-c!D{zJ8?|v`7aPI>A5prJ zzW|$3IhD=6DW_DTHlR(34Z6EGGG>}LqBgAfdYSg2V%^~S0DbED?UT0li2~@Ma%<4p zhIXUtbPynEd-9{v2_jAnbD~zCMIfIZfk8vhK8bx{CJ!Yhkmk+(TfJTvggV25fZ5Px zzRp<499xHn-mic3M)=ZAH{F!EDKiQsY2M`|iE|eSS-72e9(vCl_uY)m{$<n!p*|Yu zwylSZ!9%+3u#mCQ8)5!6DyuVkijp+%ZlO2Ut(xG6L3?e~ZgdjefX<?~pyy%<&!xmx z@@w7Fjzf*Mu1(URfQWQ~+!lSRFRm_0HGp)b<dHs)IdLJtl_E-U^Nj%1iP4^&ZVoJ5 z&oWhI*>BS>=tgWib~H-iBElr_lJeP7$}W1obg&KGWeDCpH*n}AW47qv9dPy6xvr}3 z!DFuHxvuBAZ?R-alC7D#ZRzy}&$<Uk_tqY5))2U^W45nd)Vi@R+mr+v2c<QsGWIva zmps{I%rslXs_}iwozCjXlP8<z<ZTd{|NYQtuwF_QIji6jX!0x=BJ-q1gk@alI6!i7 z0~9?b+|E@-<Iu&qu1=y*Ye@vZWXv?z9=xpYtBO)A%4MOfsESf3$R#0A6jdn{<h|Ct z`C|5}#i(9VC{?PHWvy6`iYldQbuv&(!+VsZX~s-*F(}K@HpWbIS|AEIY0s{`eJe0Z z)nZgHDy8v?La9=!NB3xtg08#oRSN}0Rg?-JsD*-}sJ}i|EdEtX;<RZpww=&QW!tBH z(~_w658GGdXdOR<Zj7fjFyjNBo6|_Ex)%&n9Ya2;7}}Z*LY=jeSUn;@xOwU0xUv!M zzmrN$#c!}zYt|<(^90_gU+XiCD{99*$7S|u+Dcn&&+ro_<5QxGc>@3K^*O)^WeH<N zQ8lTYw<Z+dvnRkb{I@YeI8Iiy`%6_lttecW&!X#$zN~0ZM?`4rhjNo=9%^_BY4S>R zGmZ<gr_lDVZIjehtKb4S(@mmwTV%UEn<+DqM}!%GiTg|xizEc6Qja-)iF9#wL+WY_ zbau()-_=n}bB}_yZ^w>U#x{JhM{mQ=VT^A(Dr>4t<#@-AeHx7Z%P0Yt9Gm9%wt?q) zetL{N(`oYDUQsB-g)jid-1Fg5cDeH|W6;UFO1TuI*VlJ2W81c!IY?z$(`c(yR^0sO zSVHd%G+@i-^v>nwWfs`Y{g`R<hhoZrJ|K=&aVIJi(KfR!o=cRcbxGeQG4>+6bgAJ# z7N;`TXbD7=TE!wjHa7{@K-*<9mjx&mTariw$a6owc1s{nP+s6OQ_~CGiOKB!hon8+ zpPiiOE=*5lc!8%+5CMrY<#sR(k%4`F-?ivAbic2EQrAz^c_Ce6(EnHzZyY;WI0&k$ z3q^P|H>2N-sR^y?bfhmUy2Ec3P`5S)TL{K#E(=InEi-%qA}+LhAQ8_Cw5P+Aoj;hf zr$F~f_Eba$0J!==Hw<B{)(rx<%!MmRg7zfif6(dYn6ivy^L*=5wmr43gCt4I3VY5# z^hQph6zNpk86pdvgsHW^6*IVbecKLftl$!H&Lt$TWU{s&+rtE90=pTkT*owkr~HnK z-mF+Gh{SW;jRujkl<AYC5%JV2>A3SNW6}}vZ!QzN(rt<)+l^WaDP;nq+Oc;(D>Q_r zvmDQpDw1sX5m%BP2DLmcj6l|jKc`Nj@R$Yy2NrwSIG>ru9Mu{lW;~*XR&Wr>vax(Y zyTmX}dJBMuKJ(`0=H|&dJztI}&V!QGL}WyoZMeE#Qk?byYen#?y+|LJ2?Vob1<`rb zs3-B>$z=7oyl3@}e{!JkJfrK}j1WIoR1LqNd5?$$L{Fj_!Ngx<Zba2P4tJ6Upg;?F zjrr4}M1|cV-FN*Kf`&jO;j|#|@?$D5e2XY?t?u)@ApIc~cz*Ye$v$?Y@Q*G?`>qEB zk@&ZIT;+aGhWn9%ArK;cMw0GQq@8#R9bO_pK0}EFN;d!RGG_#pNr@1N(7T+}cN@?z zMzqq(ov17Vb?>-BgPC(P>2Om*=Nw?qla3B66yyc~aX^m0@gGL0NTDCSA`}rSLJW!6 zTt^4WrZ*;Ik^vq()fH_6eoZx=(+LZT=xQJ3Mcpl#M6Sn)lAVmAVOH?BUjfeLD^-sX z4?sPw0(J@Ws+D{W_biM<v|<kEIsgj9;g>NtHC?Tmnl;XGDuBvy<CbPttJ70+wfTmw zQ?{nQ0kq@Ea!1!km!|3Oi@h=f`EjDQt82sySaBkXx>9fEq(lPg1yi}{xpOW>Q<AkE zlT=^&<=}gTyh(-ZY99evftvY(XE5VP4>}r>`f5-;<-5XDQ+t|~s)upbsMUOLBC0Vb zf$Dfi&NQ0EB9qiOua?HD#EQjcW5)V;V!j=UQ__JiCw*6YrlzoEm6<+2y=`K``q5OZ z+!AbzZTHz2#a^W$1rv@ol{abyZMj7744k(c?b!=CM~F9AJAsb|QBtwKL_MsMDsjSA zNE7vSi=gEYaqO63;9Pc6)jdTeM!r}J3*)A$TNAo%u(5b{+l9j$zJ6-o-cXfj-SITr zqMnh<l|_L{0N1pj)t%vmqQ`?_q)F0{!8D!mnJ0WV&@EFft5VaaMT?Gzz0FJ?<}d`I zMVUR8({;d*i}XOSTXAS?KVr3P6;~;+Z&*1byy3qh)+yA!EiH2nG6zmJ!_in!`3meU zF~ZA^ce_d#u#kzdA$F}};OO&%@7E+4#Di~CK1<P_e-7?;j|b}eXOyxNyrQyppj^-8 zL|gCjK4o`B<C5b0>GZdt^GqxYOaesWj2c%~S3!@Gs4xNx>6wqygCp1T2XGI{I5;ol zeGHd@r-pwsL`)<^MGzyzNKD5^Mx;9udJ^%+tG*ZMNJnmh=U2ylA~C_{OX)a$$h4tk zlsv{Fx$u1*55?%X%|#T90i6XYx-L$#o4|EWWcIzF8(bRMfK!Oxod=Y-*697NVT5Pn zgFB|C4PIDVT*UKZA&kzo8jVaQlW8<sLo5%Zk{R+50?^No{vpr-jDztkhHz{iFD|YL zyfHnsV{|U#H^--^$D4lUZDVN7fb9|Nf1(X~+3H5{b)=&L|LUwJ)acWY^^V58BwF%j zg;*ri#uyj_I}xrlLDOdMVa0|Yk0SW74U(jenkrz^1|5FXRPd@dbf_{)g|XT;j1@(H zzpf}4Z>x<7l(Nwt*nQDO7xA`22tLKBCWOwy{$79%dMZ<WZ_+Kxx-84GE|<H>UY*J~ zlJ@J7eG$FQryA0QCjY8F`m}QkN`=D$qC!r=Q`3<#iHMy8#Z&~H%({sHb&QC0olZzX z0K{lc`?NdnytBu0Yr!{iz+Pn-k5TKdGcl;}(^p@8m5ALH_&@lAKlqL+NnpdZp2y34 z1gY0+tyX<JGJDd_qS0!!a)^4TZ-@^}Fjek&Qv}b$4+TNctYJbFn@32ecGwcss-C6F z_M?ksyz71ty&1h1eM~}k2Xes!9^%7vc8)ZXgDe>Usv~M%rEtb~j@I6P+A}6O$MyYy zhckxp=NRm5e0|~blBB@zDUt-mVhhCFYdH~G#UgB`v4$;V<jtK|ogY1Scg~i2BVd9$ z5-<f1$2?5SD!RoqJlE<rn>Nc~oMU#g**!6hOnZB8wY{-QAQf&qvYW@qZ5m4O3SyUE zE$EeODv}NsIURD_q-)-C6bT8bk2mr1#>NJL0g(B=2t(>MO@p{#>c!Pn!<-l1<MM^C zDQo~~GzdtIMx&D@X-G~q^~CC`S<sDnK&ZalF}8+qAqFC&MB8P#YDBy0L2m5%(VXWF zq&6z`NtC@M^{4}_)z#HgQLI0_YRi=9?rt{-0D_>~-90?sC^tk>OHz;O;q5p<SV&A0 zW(ODDD|Bn<uyyd4ungZv0k7}<J%o}v>}k^Fodj6ags>hUsjUEEga$0w6O(OfF;8OA zcQMd_fzuL6Wsk)&x1{NI)Z)Q|2M;c8vmM87S^Qs8v0)fS9Piw@bI0smCI%{#%P8f? z=dR-A4HN4PUQtgGffMgg<pu`!eu=M20Bm_)k?#=c0%NAR&9-fO+v3542M;bXW}5NN zojZ5Nv0)fytAfo9nHR_@RpA>tU<%lrYYLQ}lH|4|-XSaV%M3uO^3wZszztcuL*S5I zk|7ss_AO-iYjI)~UBUOiAm$T=a;pGU^YO>PZ!%~no0E+iKas!Ne7{Z&tPUAo`nFw; zne~>J_dNdBS-NY_z4fs$*R0tNRKsnHD|0h5wPu#%)Xaf{M^ekSTk+(S^JzqDYSO)0 zQDiyzHa4&Py~C5Ep}l8U>Sax5*Pi9&Z~wY`qsnpFW^HC>Ze?*>SOv$fHFM!u{m8)s znKfr>GH%(n<xWnuKG|F1=!1gkW9&)!?GE!=2AxODqcIe>PTbQt6N@Cmk)8-+@Gf0| zq2j@Tz_x*U2&+{iM2+uvHKD}6DWf!Nv4imG(Q)|n&e7Ay?frfc2=*xTWB-^cl(9b% zO~Yr9HLfd*Mv5=z?YVw2j>`q<=iC2`;B_v&gq}q&p>Lo+La63AAdmVNMDR_3lR;)- zTpZ&1x!7gyM{K(rq-#L0Myst$jx?X|Pm;LhGXG%s{Nv8WbE%>>(+{4Dis%#mS9#Le zG$?zFdP6{M+@`2(Rr-9865q2VYI;7QlpO%Csj0kaWlEM+%2+0^YT{&l01ZZ|D@kBx zb0(Es$1mwZJF@IKu0+jT)&$ASVe#c%Xxw|o9al1TdIRK}4PbhUyUVXsDr<@$D4Hy* ze2j}(UE-}7F{3l<zRfW`Bg(<`K~TzsHqR@%t_XsrN(ulyyh{QolBx-UqU%aZrYM2x zz1!1P-fL9TRBGdjeIK|lz8}32y%l{3bN53k`oW!=CIg5r2+b<ft{f9blTc^C-)QPl zo%qCkU=L&{>7Vxvv8yY;U8dpOTu5a_$wu|8s`%&Jc@e+6-5=<as~&P6coqUGX}q+d zpM1rRqKpBIDT*xT0CF-cxY8{k>!O}jGB)@CilK5?x2Ykz%z6l#sqBWU61Pg)BpTzP zur2Y_e<D#gnd`{h?|BjD6$`GIIs&$bi(e^29?cEjlgY_RrUB&hh6!b?xw2ti3q)7L zWiX9=9+(wKgBckrNw_LVxK>yvw8FTA8fHtE+MYO<-DMyMV%=xCT*a6y%!dfMqqM*W zIU0aQ>3m_*sN{0Yuk#!g60?j0yV6yOf!xwJW7Mnzm)6+<t9Eryux3iXi)<cUdv!4Q zL)+`_Ifd}+Pg(oZlQM!Ju-JRsGX(PdT?y#tUp(b_qcz4&_XGRZNB%v&D&m`Nl3Nl9 zh>6=z=$A8q#wO+8{|UJrM-&7VEBgP_T#I!EsEJP4w457inePEwA=w`%h4}GjW-f}_ zsRtxqVpEo`gAWUmBut5rcuy?|f<T-ajxT;L<)y_bL4x;-;&v*JzEA-FAO>kaosjAF zCw7H{GTkmB*!mR;@gBHRgZI>nX@*?*Y43RE8%u`<`j?L|sueC^2(OYl7p$NVKGXI6 zOBJR|TMxcf8$e|>;}jiNAw+SVqLWc&3Ms#}XiL`_=?KD{#B{v{lakWRm_zJ01NK&K z(1<89Gn>!3y6)z4IfIEJ(QZinA~H=yiey<cZc&t*O-+^~K1sK}eDEY%K>N^%^X1eN z=w0#xTgUTMiY_o<6f%*B3bMuZ=1mtMp+xX)%l@+t+(Ib<VsK;Sv0n7{+QH=#rJ%^R zX_`gfG^r?3+s^w`0*(htB|(ye3CI^b_H&s+9)^Ko7)J2Oxw|9ov{71}uHO88XZQ*= zO}}WGrY$QAFfCCE%X2X)lecXuitk*AdaE-mZH%~c;M}+LLhvl$w!2UOLrCSb5!=ZM zj~KoRarWza?z8n0E9!rE{ONqgiuH`?!LYGCq#y%D>Qp`16}F$h#*hNTZ7q!lpKk%} zL&wq8=oWM@dNcaaJ|rZzx$jVsS5v?pr^O<vj3|+$#i$)2ZG*a<8h0bYl&qK}gkBrY zrC>ARIw^!$IoSs}8QK6y9><$d2HW%j;CB_!u)#>`x<pZA*?3@w(P~Jy_}uqX6vY@M zO2X?kxxbkCD|hY`oWg+{Z#+<Ngq=ID1S7aG<(933P8GJ8vEYaNUzmTs@Rk>qZ`%~* zJuhGI(kz^k2_Zy&w5QQ|ykqIgtThcVZDp@q+JO;{CASuW*hCTQHQ)-Z;No}i<+*eX zPq*T^c!(nH*4jrsZu6r)pjUHEl6qyw0qiyA3UM^=dU1T>wq3h$PEjSIXAOhtj#F7Y zjJ+V=b5)jmEr;MZWe?+Ktko6|H|FM|2y?cLsqg1(#qs?d<cr0^{ECOehoYjXyqxq~ zbcV=6GyeE&R-;8vyV5<IwIOKSHWB|tppOV%8+GZ@G?xanZMMB_Ten*(^BE23M}Hx3 zlw7XS7$1+07Kaaun&acqky1O6n(C5ihA)@8-EG_2v)eS>dM5`<N22lZW|Ye*PEb7h zmK;cBCL^1cOMB*OceiBnE*MvL6aaMsHk@~z)wzw8e=-9fce}?;gNiPt{O*${ckkTE ztBNB6*C_eL06E_6Vh%({RrsAdcb`1DOQ6&hsbRJ)As(wIcAyn1A+A#WO8gh6t2CV> zsae^kfyO4wop9qeW1xw4+!10=0H6qJ7cC#kbwQ>jge1<cOv#}U7DAK~ur`r<CEcea z@Eq!DN)S38hbkOQ!3L}(n1zkC=`IB@PENg5<;_t(mM<%u2gbcaE3n?1ZlQHm{Ntxe zD3+s&_BcBD$iLt~0Jfzl=={|V3<%I2x0chnVwPz69+{>w2!b^2J(9_0bWIffOeXu- z2BD}vlcqtCa*tpb*=%txU2eq~%DyOSdNz}}Z_8ve+rmB(&oqVIR&<LKS|Uli2aT>2 zxFHM0Hm)PU@gC@$0EzZGPDH$~{^&%UR0-y0gFx;s?0Ch)*n4Ge=5c;%a<`!a_<p_W zx+2HHU!5Udg{5W#vnha<?$&DcU_qwixv^RU-l8}T#<s0yHUEFH-p*Z<6Bu-3rdD%g zU6(kX=SKe%?&lKr=es|<^VH?3Yk*}{miFzP$r1QxFa|Mkq;*=Y8ga@%P~;&fl4X;j zS>;GjY(LY7IMSLxDnyUgggW|z^67GY5dLo2mob6Gu@ig8qfes;(Tmn>6!<Xg8hPF@ z8NiLs3lEP7gx@0rA;)37`Lq%eE_$&OP;|J$i3Fi9lDVFcv~%gxh&>9k++RX1WgLlj zZ$oFgX#Bn5l}$hL)LeW9Uy#J#ATdoTH&$>3FW;$4j6EkwQeEU+PvH2R)T#F^HDl}4 z28pVritB<TX}V>M<d8glE52FwjK4RE)16^Xdz__`1`F^<ol*u1j7d436FiqAHOVxG zk|fnTc~5W)V>!t*8GA<4<xEkd6fo!c6@|*St{JjlQb%7xrLv_Xy7lX=SaC&sE<M*_ zbRF72zlB~xUzB)WO4cJ)qk4yw*e9~lSV`gZkhr>0lNI%5k|drrH3j#jMmE&}*4=9# z5yN^X>sZ$Zw20b$6Qq7Mr6yvU)k&nEk|c<3Q+gSwlDS#=DWmWI1t!+Ne?}h~3<e6v z8_{QUVwl>EzVCl<=^pjkYp=cB)-|yTD7%uy>toZ_r%=gX-oESK91I4UX^Q%}hQV{n z(@RTBAN233TyxDeRZ-LJ%ixBxA{vhpSfPYcLEz*Boyu)LcFj@ldTfG}`klY)s;iQD z5MVV}I)6o3df~!z9b}$f21A%nuDa?jJ|=3g^y*~g7v4*mr<WpxQE6)kz4rF1)wbK1 zgKsyiw22F4)CQC)`Zb)25IoEoQyR8n?_cq-Kt9|GcHfqn5=GE4F4&GBRz2569#Lc4 zi?z5sVPU**^eD+BlA>JRJ5{cU2ymvAuaI1JEMRKFv?Jqd`T!>Yz7-3Z_HK+LG*Ey% zN3$O8O;{!DLu6f7^nX$(F?10oYc>rMD5vBQQz^D3M?k{yu21absh`?AoWq2O8A(?Z z9~Xjj>hvVQWPK_f`XbbFMwXecV2&e923_zhZuCEj;<{bMHi%nFXVhQhi>~`9ML8|Y zsrC$?CmheI9+TxvS%t~dQ)xO?pM;?=A}C;AQFJLI5(2#CiaN;bcV*dex{l8fD9Y;F zI>$-yC|N$ODAVwDjPR4biR4eye1U1`LtMYJObNCvwHTnQ9S%3#mr<%bdq<P8aeb4} zb;3FXD(gda-1U91fiwA2W7~yu=K_*Jo=zc>1ag8{0PLkGr9~)(Mksocjvn;Q2=B>0 z1~D#*5zNiDXZ>MVqLHJ(G4b0q1ZEauE}<0(G&X1Bc&<Y+fTOOkB5|ls;^qs0hyh9@ z=r+%3rnrth4|AMvx4bqS)s(%N>k08Z%Ze0^#Es?>KN+<zB90s9vtVd<Ic+@is9&u{ zyQd~eBz6Ig3!@j|s;1A#qu&~6OzkBBJN<mo)Z8>Seneb(7^@r$-j7##eyQ2OZvK{w zcp2a5VeE0UyHw>Xfo0*zsokT|IcghVB>PB~MZ2ToHw<4p_DKZ;sxa7{XKcglur#Q| z)^TN;Tg%kBXCbVzSIC)XPQKg(x_0O_{F_PMvS8n>qik($z2Z-lz0IKm=nC|D^ak{9 z^aA=S`T_b|^xvB98mxqZ%U7=5iiu)#pZ^lyiJiEWv>=EQsN6F;2rODgPsEY_31~h~ z>cB^)No4h8^Z<W;eRzpa6y@B01Hs?fL^gCiYg&>hHkbd%K*^HbQJGs<IM{CVYy0*- zc6GA}+rxj0!k99xwZfQDt@X=Be0B<B+8J4S-+U@NH~)<9@_OakeMk5aomJ8_z)Fer z@OMf4NC5yehN)P6=LarcfYCuYyJcsGz}nhlpVeAZhOyFGGm5cljri=e)^vYlC7w^^ z{;jteZ^+(18R65|l^n(POazg}Pv{@enoipB(Ieo7kyEKl&>D^U7_+1|?M;*ZtY6PV zv9VpZnM%7|*J7~{i&<cS?K}7GcfZ>nZxhq<<^hRk%GS+gOf<gW#{k}S;lhP=ZjG~? zvEJ$zFI>3LqxwA@u|6ux^6v68P9%4Q@8c0yc?rGVGDf+v?(VytE)VwgALRlC)MlC; zK?_cx=?I$$kx3056r^1pn!^&BAo-)lbb96aZhJ>~N6=}nt+hJ=Wr89;SDx6SXf}(& zCNi%b!{}euc-{DB8HXzai_;|ovSAHT4SCW;kP$1d%&FyqIFUR_SqEK{Js@h@T|(Ms zjJO+dAEt3^yTit?StTEj7f0Y4z@r%BvxWOHcA<Ev&i^#J3tfo}kGc6`E<n}nRPK=R z$#l~E!%ekH<V`tC#r?;~T4G~9v)!9c>%h&t5V``Olc3WkJuI*GKSfbw2?4;E2&LtP z6B-lO3%C&GwXfAu@Struv#@iKGS0&7@&$SyMc=3cu$9guk8~;)LbXdsG((?4cHsx+ zd*f6FQI$2gHBe|J$?@Y<DP3UWBs8d&M!^pYm$BFHc^p*jcx<ad%>8`-mGe2keE!OP zpA={4rT;G<#W}|jT5#+>stua1Gkt<aJ@6XYl#A~S%vC9`n!vGdi97liUdJIg%=EKD zYw@h%BDi10|M^>0%3qxi2XKENXgwa@M+<ZbJ&rztYfaZ0s866AhyyTy-JghRG`F}@ ztPPS)iw$ajV{2hd(ll4v0;gv(BejX7N`0O-6>=tD_;i%hQU5QVdyZn^`@}gRq{D>F z3CX2ko%f!)@y1hh3+;gJqoD>Vv@?G@^t&9hh-09hVMdwvj8V)y1<WIcIsCuzm~!C< zhVcYrOPG%$jj@g*&xn1hC@2^{#`lpq=OiLO_!B(jjOvgRLbN7?@K966BSvTQpZ^PV z3B4PAJ#+WtYiKSmHwC%KW>MOxt&R|<2p_*1Ph_@P`~{~ac?{`vw#~y$$a{ZJeKTX* z>SL6BDrH;dn8xIBC)VEnA{al_8>PvUDZ_BnZD&Zp(AzDYFh1Ld&}H<t9;kTXQ+-za zXdb4#C=A`p@`IGbh&3pl?XAx$&AX`<t^Qmo`tN<96r!Xuc!&Ep{d)6EZ{1sI-lcV( z)t_5Kf4>X1us3)Ix#=bSjB6jk>=yL2_MnPu#)C1OQeFw5@&W_Z<s`yMIgjj11T!Vc zUNi%avtRvd!_s7NX}x@b8U4YRX0ut7-pjrLB%V}^qwMtfuQn}#mVB}-K5{S5%=j0t zet0|{H>tn)|85&Vn_!Ha=h-RrS}Otv--bs5@1rWCs?*;**2G#Bp`kkc-2Owl*6nq* zlGPlx|11!FE2uoo&*VQWYEtT6w_D5D!!AL!I;;e62ff5g{s_JSeiVi1CUhT)L)jLB zI-tN#MSZWeWwUwVCRZHWsX0E)g)Ngx0TX{GT9SM*h&H3?{&ZW^pV0;{!n%@73#1S! z4lQ3Mcw}d5(&)@KHztk7`d4<x<Fy+%Hz10-N4B?SMP7t~4o-wo&U2rLQy&t-cocOZ zu$xEj2hO=}$O1<;Fgm{)(=ZIXj<|rq!DMS^z0s!R=+@49qd~e+1e58FYvXZuEeb6s zB=l)~Ld9{;HBSUO2#dVPinZ~$yZWxyr5!t+ht}8Ew;f>t3pdsy+4lDKdccUo&uPFx z%v{_1EOBPP6uO2GWK9>G>BHJ!HYFYZIhq%FM$(I$&GTC4jLrS)6^(Im#=vBv4|~Yk z)QEDBQa<D^2GpPMB=GKfiiQQVJ(yM*G^CI~J8UWzPZGNnr`D<M&)khE3wiZliI6EB zuCAv^0sSrAA2`nb{`HZh><wKgk=^g?3Vy-<xDEWS@J93$`YQCb=tt47BLq}?d)_!} zMUwZJ?WS3EX0zY|EK{mL8utQhdrmqn7HAe87Hd!QbY8-ZZmZS5o}xy7%K@-rlu{8a zmx+y&R)g77d@le%n|)c;uLbJRN&cV?H|&;I*Hdf-M%x!wsai&QYkt2-vILLY@j`@L zGxK79D5q>3{Ke>#=$p|Ck%Nj0WRYy&G%6Hk%?O{X?deuYl84c*OEQ6yL^KdL1?|1b zOp6B=rIscE{o~_j+Zl8tfir?u13A}X>P8=Edt1p1!PedN6odMOB3XWS3(VBPa%poF zY*B_BFz_?`eo(P6tmKF9RvZ2aAB1{!Jw-@iShu?VAwOa6bNl=IR}O16J5i)sLUt3` zU!qO)u*JkZ5+Hyo@CM~{yD)=G2u9E@hc2Y(tvsv^NnI?;gdiA}($DrC!jcTVD%%cU z;0HdjOpik7HhTT*DeT_-PH!i(bJ&RYf22~6W7vyZ8U6KWE<SbU%$fcEBca}STV7pH zk#s&@E2fL_boMd2NFNIZfCY?}G3&&+lNPwFNyf^T6ap{JV&ji>c1=rp8mAA=pFfYk zx0Ex+feTLE+246r7=E-vbbARNT^V7VU#0@KheM?tp{&zhUmw>8gG!vBlxIPodNF3n z(d<OF{s%c`R1v?(GYWVMc86bE{4NTw1z|iR*(s~K;|SsyRad|r4-zs!=fPCiQWha5 zU6qusg^otGf+NH&{eC|-rokm%w!A!#F>zm4EA8)XSE@SO1Z2rSGkA5c)D45dU~VXp z2U;uk=_*Dk2K!Gw`J@QL^lC{-CV##zucl!ro@_>O95n$d-rP65>}4+lZNxqo()@O8 z{FGfoE+_4)IYfK-i4lB=!i=(9mK2}-N8r*mwkQxwlZ>n#;EQ}`PtZKq`X)$wk1{{i zJNa;}R)bMZ=HHvk$NK$TJYVnpk#!({n!%;}S3bZ?F;|!fxi1KjgBBA~3|_TO1>ADW zEw|i~0;GFSKADvleubV)cEd22(}!N-#7cS2(<9Dtc8N<lSA5_Q0dpx(IYnGAjX!{1 zA75S6qf0@k{TUFm{;b3T2tL_r1T$sV3DmMYF}3rcyX@CxYp1sQ-P(tvx{aF$rNjz3 zoUyGU*W+9tSy#Rg55+$VIr%uZ-10gf7t}arTplfRIbM!2v-1+AHT!pV0M}q(>>XZq zGI!*c2-D&WArIrx{*7EJF$kHI!7mGpQ_wEmxpQr8E%}mkEp|WZeWF$y468NK^=vcV z%Jhlm@$YR_3JYHVda`WwC8}OeBK7F9zb#pB%Mzjvj2gU}KF|uDxP1At41?^75Av<a zJn#Q`w@UfRX1_1q)rTmo|7&CYf*Pl3Ui<Z?z$kqJj1hZG4teC1=_&3405~go075hY z-rWAeSImCmO?(dyWP#^?_St8jbz*7a#P2-gI~7@;bb{?5%TS!-3eA!2Y<p>x2*e>v zwER@!O}uZdMGp>iaQQd;sfQkVs5Einmx2rb>~fXz1J$R95vi@I>iMXL1jPcwuaipZ zlSnUh6fV~lp4!>jX+_#6`=0XX-My{ucwQwX0A>B`mp#4mtD=9V-}~P8KA5L1E|#dT z<;b*A*5AJAWeUCdfB0^Y>cwm)r?<Sk2nJi!`h$G`?b~Kyw#dl;u|msr_cJNmt8hQ^ z{#2uK)XR25yM&??7Lrq}b@nRvc78xPL|2x``=y6G0+9(wIun{hy)RGYQ}6yV)I)hz zuyX*O3d@~-l%WR-&+hZR<dL*#_fmp--pBIxcwgD+<(Oz{Z1uN)^?v-xdA}LY8GSiE z4_xi>P9Cjxyl?eVb_5<MwA4(!_~MI-+*PAx=%KtkkWqQ;>+LRkQH^JhcQ?g3voGiI z{3Bi;_aVS}g4bT?z2|yP^;7TO<>{qPVZhDmPk%Yb-q4+>ms>A&E=371d=Kiw@>H%q zJ9+aHu<v*Z?@!h;)V#d!_V3)&Lrtm=^@Ppg+0T6}BMf!I+B}BUHTAyJOA+z?##g`x zlhsHxj$66~dL%M-0onG<Ty%#5PS~qTobIhwTgS(a?H(Hp@}jj?uLD2YZ1nJ-VRaR{ zVoi+d;PKj-$zTvtY9IV8%LmRveLLew^?Muh;Q;<ovI%E-@0DqBp~qa0OPXHRCSa9U z7t)ah&RM>D=K`RsJ;x+12uY7QyV-MCEQTJJzUuN+G`+hX_sYe33B(YWk{*l4Rvz=> zB=op4n?N)rhTXP|US(WO3k~v)ob_kXv_FlyV@=<XqbBv-!NI}ONj3ozV3(F6n9Bc# z-#*D!(Op3&(ZlFUJfRzpIx&w@P@{Z6L-Em*kQ54<h9!-XUR9A1;@vE!-Dv@baok@0 zR6CB{zdB;|J6h{HV|6VC`&X&XSX~ju@K+PYaI(qRW`Y?b@g`%N@hiBJZuPvAiuYjB zyS}lu)^4w@ZOjg{KJLfr^`DQ{b;c%Nc)l~M@0L2mlN(yv8=ubY#1qM`$!THeydoTN zq-WVHhekG^5n~(|1<l^e{#U!*&N0s09O51k5libjzc6KiPk%T~Q<$XKyX5N==W*x) zt>ZU0k6q%P#M;%-fBn~g{a3mD4K6e<r#%^sieZwL;N!LeyE~cW15kZveQYci_S1|- z7fXu^(c6f)+3b&}X$of>1IG5uK@5DY&X@XteKJiK|9g_IUih)bG1?A_C|;|r(QZ@= zaWsH0yXT&J{xojpK2@Hw$@l!d&VRi<;8Ui20riSw8(jGUR}1`@xZ{HeYozp@LCJi9 z{Q|kpLwe-XVY<2Le9?i#&%=C4fn*$vgD9#lCr_ciDCC*K)f66Dww-IpqS2lXq<nxk z1}>mSc&`Y}6fdyxKH%$|a|vEpO;S1Jdz0rDRIQgW#lKm`>;SIW4amM$>pk%y!nXA8 zTJb5vW^|!H_<mqy=0bs&o$U(6^K<t7;`Spi8r}8vZV%&LcYVDpIb&towXO?Ybh>5P z?GzJ$$?}$ze5^2ke$KwHbzPnquCE`vbm`doy0+k0-K8J*ww)wN(q2CF&~j;0>({5( zpXTl?LVnqG;rGIiqsjO$rSBLseGy)dM)MYulzk15`LGam8I3$+l43**7y`jpU>6F_ zG>(XZ6@r2Y)inI6dTa13qLE8WEt-4N-8g0-m1=JcYd73~{|)uQMtcS(-`F_r>Tl7? zW?8G1WmaixR1joY5GZ3mn`1~lCvM+!>c<*z{{6c2l>2>0xX;=Yr9*!aU!7s^_++E1 zIp>MjY>M%eX`gV;b#-HMyf^%mvEIbK>6hPIqqJ61Dy`L9aZU-R-t!J|o;%@kTyes2 z??{JxM+Bv?=^Z&_*H8Wx=q+%2w2itIR2GG;j*kjbQTBdjzML=SGd}`}CSd2r<r~Gw z<GFOR8wdf7GT6L`4(x0ct{DHDbV@nNWVDrz61-EfM(Ostv}^qv@8etq0D+S0ZLN&0 zbOt^sIke(IQF>>JOE0115=&sY($+M&(i^D0If6Hh)hcJY0PLX+%;z4Xb7&8}61^RL z41KyKlup^_2?sVW(rl8QzdY&Bty!7VX_J(z31VFWO7RVPm?N2<>Ow@8t66nmv&f5b zY;eeTQf8&XXbjQtsezG|m{~W0j;oTpG*TN1&H?KE$@GLGn^E3!4uG+>rjVYB{eiNO z#|RDrxMqm4;^46TNID_Ja1#d<JQ+8oF<L)ujBJjH2kOb@P$-q(pr+=_1pvATYS!C$ zl$Uw_I-iG?BH$c=kT6Ys>bzk+qe$faT2UQ4mpXgHPf95V62J#kG=<j2<XVfSpn(UF z1Ihd9<PAHG)LVOb?)H0o0qdEP0KJKGh*Uyy|K`jj=?ep|Virn!3EQ`<Ql#no#JADy z=ovf#W)wUvyq+Mq4;@%)4d*-r;uJ-~Wj12r*}umL2In3oHKX1l_FAsvW1NWxq<lay zP6h)4f-n4bl{5aJln;KUEXz`<am5SnI#QOUQe`P+$8q5+V--RtH#`%BkO@_iO$Z@^ zk@a;-H6cV$y1q`>CVOL2(aE)1tybf_X1Mbrq-@1ouQ3`*=eVhHj?$C0!GzL{3gw_% z8!Xg=z{P1AfHV7!eh&axtqk1#S`z>S=CNDq=V4gdT;i<&AdS^<!-=!CQ_r7cr2D&* zy>tkF69?Jx%<F_Hlx#-q9vL=E1#OWs6AcPhJXiiL4_o$LLS6ts*O|+aD0Ml1C4bvn z@2ziSxtWb94RC(;+&%Z4JDZb`($UQ1S>x-We(UASx7H_9`^Cc1Bb(DBnhP2>n}cDq z8Bosk2jo)I%h2!ZcW9I{q~9Ngb%KL)<rrXGo(nLkhr@oKtX|mJm}6LM?8L0=k~7v~ z#&rvdI-ocwXZB|>W)<lC`2F8Tx1h(y79+)Uq9Q-eOQ3*?WRuzGYXD-ka2gKsz()gK zQzIPbL9M@rWv1jwkjDcERbMUQ*BkS>fP6!I?)%Xj(MQm4qyGU44qJ)Ka{=nthw`lZ zF{)D&YS1z$0;-6TuLR`;GL8GaVjs>6aYR)7q+cVNjc-d*+MpQUTx_xAPcF8$z0yZI ztFDQpd50y;)kYJx4V;H1V;#U1D1QKz8V3B^8uexNTBFjZT;+G?p6M=Bs>1;CR2r)* z(opAxCe*gf^%5<-qed3S8kOV_467Bmktvs(JZn7~g|0`P11!UEuj8eAhd8c#3ji5Y zzqed2Rm8Y+k_sO__9Qry&T&$;wo173f(h<o#p@=hbdIw~Eo<j*xcA;0&e#4$kTIb# zWAiMVGZs@)QgJ0OBtMfo7>d9CYB8$Um`$s$VvRH{TJwUsDnLB{UOzz9QQ>Q}Wu&nc zS4}Oe)kj4&J<9)f6(L-R5-taD^8MTk1L!MGXr~B_liUe{hxzonLICBs@FHw9Lg58> z3Y@g~3MQBc$Avdxe%oXUFrD1C<Tp^P2<N1xb&YUN6s9+De?oOekJ+dFKaOhXl<l4- zN}7*$%SwR)C~X?$90rZIX|HsTw~`b9(l9NR=6lKu+dGXukAj8YOiXGc1h+l_t%E<f z?F_~opeVZD`O#Z>x<HVEqVR-&p`{lhBjL9uxB+{YN(~T(q2@d&Dq&<TeK(95vvDua zfo-_kyW#4|VgiLn@=?u|X0p7Ej=K!OAq1a3PQfUQ>Ql<ESzc^<)+=QJ`ns>$qQdsH zE+a)M8P1`N3uOtrAsobV3RE-B%#QgufYtw_$!5QwDq~I5Xs)d_8?m-Va`DHGaPJ69 zl0g6vWcF8yvsnNT43dOV?|G|tGTc;<DEpJAwK(k&{jw~tSuJ($1n_m_T52oAhoIxM zr`$(L4CBs&E41^Yz6+;m<hlHZQ^!1%G1`v244=8Cz%wd<I9J+_sP(wx65<BSV7^zv z053C_;e!qiyz{>N{+~vVqBlD6IH76>sRus0(PCcAwyG5E=m3Ib%@0n(V9mpa%cq*n zfv{-JXJ(Nw@X^vYHI`lfjpJGrTP63#u3aeqQZ61rjfajKgF!vEj{0C&C4l7XVi?@0 z%Pqr{(N=zY>*+4PrTBm0T;)GwZ;-DC`QW@-Hw1#~PhQeDLdSk++0))y)urhCRzQij zDp;|G!VmC=eO`3CMedC;Drz>@)|$;oX={F=$r{#-YQ8NRg0=;bR>ow#5P5WFjM7ti z?`3h-u%DgJYjXS^uRd}yi&Zn5p*ibXdB(&@=Iq$g9qv>2mMgcToGsq&GF3cpXc)%F zRCw@ZT=J?G#$?uERE#&|*fdL{5{4xfFYPv#FQGfnoon{O{$4*ka<8k`Ja_KSZ<hj~ z9~Ea0f;u>b&unM9o^kuvyNJojZu^AF=)#Gm>uh%c!O`_gEsR?&j9Zu1kHVq!5{8JC z^C!O4*z|ZUNUc#OJdV?$QJ?Y!hQ>sBv*j4hQRlHe>8*77>A5q(MAt*l{mi@^3A44a zfU9lB<_%k@n!46|kufH6EHL8`f|eQIBS3hZKJWV%BbZEXn>w%-90nGrRlq@#1RFsk z4?F}l^9HLIN)ewarWZEUdPXUuyT)jJBc+UP8MFSD^glYCXqMx89dI0DM%nGg9Nv5W ze0}PZI0)jz1Fohq1MK}q4iNZ!-tE?VsJ42`JoLi0joG4%(i^olW|uNbXIj79lGq(x zyKipXoyQo*DF;k$_eIa5d1<+C7ww@hsvEpe6@(f{@GqK`_u0J2AGK*qY)BBU@l)nS zF_PC8Zx@(3PPq$cu=#jm*z%*{j@u@a19H94>zxe12RXsED4Itbl{jXAkLas5{eU!k zRx7h-&1;O(cF#y-_lz;OQ^s%{W2o21WivzvE7J6G({O55KYw{7n6u$U)Vtm7!UxqL zfDVn)D&WI7dI}%6W+{!;OJy2edt7R3<nlSKZzmXd8e<&KyJNM-Ph!Uyt&?-bJ%6N3 zw5Rh{_J7c`<L5p3J?LlVd^i^WMg^`qN^x?9MWcb{D2k3`JZfj`8}-Fx^fm|y&5^^0 z0jf1PhJ!>;aIwW=z$3_!&9-LBG`VQZwzsxRK$=)%LPRA)z&Ry*OUv+rZ3*t7h^I>W zB047~(|!^=Q8Cm|BEXA8$<FCBw<Z05MN-01Q(+Q#=cqQ7%IL_2UjOt-LN|^ZDQO%( zu<w1Xdg+2vfa4e#m!>}e7>&N+?D;br&Im%3dUuv(pp<t?0UW*O!JV^NtmLb0n$*%D zV8o@>ZnYX}Wi0b5Yk!e&nCBzPh$)YSj#6bX!DM4Sra*2e$A!eJ<UQstK2}Pq<hag& zF!xF#K$tj<6HW^Pn1;BsMPDpn2!k}195{YYtd5-uqclrWMveBN7jbU<J^88#5@|!J zRzG2tV#EbZSQ8kd<&Wfi4~^(=aSSbcfsu0{g8>EnP*DPQe=$9=IA+urkYE7AUSSV> zI1?!4$PE?mg4+IK1poLkTr8zX!XOTht|ph9Q2Q~+tPGuQ9!BWeLddqz1xuFp$%wF+ zcpv(>{lZ&*dR9!b2_pkcSV9|cb5yQl#|vDJ5zCY~QITi+b5m@GJ=-GlH-PJ?yH*pk z{`NHVeI%PIrVD3*lFVx$TMp?$+>^s?Zuf_4YV`|H+ZO#QI){q_BY!tO5F(_Nd903X zY#l$|Q?AA%QR3e4>O=~RYt0#?&}lRpjS~yvTr3wiEtktqC&VT%wOlTjdop&8EH<b= zt~0N2kmosM8RUo7!O!rRd;mi(x+y>qCP`1?>g(&R0=RkYDGL;Pe=6MD+uIwDPej&? z$K&z%#CSX&PbT|Izj4Cxcx-HRVmuy4)*O0;r_NsdtG{wXwDec?psnc~tp7*tBV+!7 z4lf&>EcU{OK>j~vI-Se{i9mMuEJo#|zcuYm1JdC5qwTGIAif12X*S)S?q_{Djc6*m zae2#^Z%@Jt;L`*zXDi5epL_<}ky8O&Xv!GXV(~XYR_7QP0AR{Fp_Fh=F#u4y{(Hax z^LnPmqdv>Lc3M;igQ_%6KluCXe3tpP!ybQ1Y9l1a7-KG_)>3i<Jje;Ihfu~iA)GNv z001+FANd*1u<Cu_+;VYy92==!tL3!NOUK4B!izvRzkPLlQJ|??oQV|jy2=8xL{X@n zQ)CX9m7?4*mULgh1^j~$t~BDrM0{~vAoAv>n_hLUKZ!ffEt{*)w7x2?t@>7Yi*`mf zrdi~u@YZ+Z$06RoPnS=eKOgf7^KkU&rElA3&b=%Bu94aeuoT`g2GzNBk2^7Xoh7I- z3YjA=p$E{D=uHR>yJiLOP~sdLJq4YZFN9i;xDVw`&lmktHtUqUn3dQ|q-tq_X|tnb zQ+%PWyC!e&C*S}6_Xig*Jn_VZi@^t6^IFrhN4s!9Z1-B%-ZGeNojJ2L8{G2$51{)f zGe&FOs2>Rcf_|R!@42cA-c-GzwKj(5dH=wpc6H~*zV`I#)B9)7Vtn@O{^=?}wR7>} z#hsf@zN&?B%l(z>sMd~lE?&HN@}`~d(b^bmZJjc$HLowc32Ut}T63*E1=lW|==$0o zl`S5B483_azPM%U)EaFreE*X354wI`WXxKW%_UoKF$g?3DYzK<2?&M3T-`;Ae6fIU zy7*+Viz0XupQIzLO!rUim~Vmsu3f*U%KE#w`eWqVA*c-dv2>2xILX$V0esp8-b$y0 zQAttH3!}6x@ba9cx8c713(kMz>%LgK1JHfAQTanB&s_Ea*Yv|K`vHKnZO4T#e1H=A zwg9dr6UHg-qC{IG6NKQX-~W5j>(Es=XnC{nckuZRytHHrqH-0=P$CQgv~>Ef08hua z@RzmZ6SCzLw*^39xpFH50kFHbSA7q$&&$hkrSFaV{g_)PeWT%}4;`s-Zv47KoD&F% zvgoRp&{v>8K`)~J1qUsJhSu|dyKIQGz@dl~8(Yjf4H)H*lfFefqcEb&5p=d>vk;^H zNQ?$}V}DQZ=|nmG+;qyPp`700nGwIJXlyZVB3US~lM`j(WICC$`S!}rd@(O4I*O&K zyL4+hD!2NR=|uN7qFMww7<68spr{o`?1dhW^@oZPUOrm9b5f{|&x`JRB!%gtMhhJK zD&T+XIw>%wG_F*VSv8DoD*%WwCgY>)B?gQm3_;6AQDv4El^A0wEg@0@2W_neVE7`V zfbmhm1qM(6Tw=gNJEsW_qS!eALy1yCuD%|CN{$Iw4_q80l(L&J2T;x`01i@OqJ&a} z8UW{`*khud(;T<<_xA&UV4s>`_wVfeG3x7SB8^c>6-C?g)t_+RE(%4EzDSbR9r?WS zXz77>Z4*krc6lcy#;Nf$m8c6x7?ai;ew_dcBmfgf2?a_oVlFhHUoXZOAplybuRlYT zeOrqC!!rPa(**cGGQr0{Z~*z2OaR)zYl)<@u(uC-uAP%g8Kc9%Q17V;CItFWExgm* z+ueV@1NbrYL+BUKA3+Qa7|mIew@!i9o<?4%76vu!QDsl?0)!-xbv)ag)<JPDJ@?pL zO#11IJoA^1XX$<<@-i087n`%$aN;?mo?7gg*=8{tIvD4n5XNCK0giIhV=%lqECa2d zf?%JC@)yAAV7|EVoSDD(hVwN-ari629spnr0ACqnz;9i>q@9t~!JsNM)Ehkr7pn)# zU&6AbiDyYLs9ogW;|IQ)rD<C9*XMPbMIqrr_a?Je3u?>p>EyQFLqAYLU}guBehY+i zFkBMywV<*CLMQo~iLsbi7X&i^fKj6T7QDQ*wYA<0Hg5b_Q6Fm|h^bfYSd+@b^*DMP z4H6_;1m^=`f~&eA7B#+@7Z^f?1*Yn@G^|>23lUZ>O$gYP-*wnFT>bawy`18%$b&#z zBZIV2I0<iqFTUOysaM7tALIp9#Kd6C_?xw8l$=MJIF92rdssMWO%iLVZCv$+yNr?S zt@>(gwbXH9EUa?=ZFDnw6g`Er&Ak;Dcs(EMK!GHif=~o=>u{fn8r`yB?|Zzh#k^o& zNNZq#_+}ud(a)o`|I7BTd*A_nzkeLg1e_daoE#Oxh;%y4jR8=q^4tCHpG+oHDar;2 z-oHwHv*hYK@!;aJb#xo=QvJ_Hl}pNu{Gy<a7aT_#HBM4S5^NNt(51aq4xzXaDNYKu z2Wp-Q)(1v{M0dyIZY}cJ;sLukM(QEy_u9aQR=(HsN?RkMNEmw#(zG22Al@_V){G~P zlD(&1k;7r=h&O8vGw%tAAY%4d)f!D(%rO*WTc(eImAk(B#9pau+oSuNjg1M3S?O;8 zKx_4UC(mh^bI*upr2rB*$jrW@M0^S00s^9Bo-ohzkmmVFOD~d2c_m))vxXq7C?Pv* zk5$U!ho1Np-G*LsT$=^AH5kuoE~atIESfnwFIc95j*X#(5KW7a`6OQw7Gp)P$)|}B zx;Gy8v=GEqtDR1@>H@En@tpd7&xva{!KMyXONb%12!;G>2jnHcTQf$2fH0;TQ4~du zHz?&XCXxz?hVoPWvqkY(;pO0>?aO1hG&m2e$)W)(@>z}(A<$-`60RsP24O#YAmYV` zQ0GfO4B!W(F@h;)1PiOxw5hc*t)H#`1}`tZkW$$Gap`mMUWNH$gI|>ZS{R|6$O(>H z#%SHd6{@d{|L6Th^Z<GTdLOPe638M!ixa5U4|y>!D$&xS9=OZJ9f|;X{3RE36jiHH z1fBl+bVbqW6ou2;n4hUoe{kMOJs;#!IU_`4gM0pZPr2tC4IzwEG8-1_U7yraDT&dE zJ#Xm~GDhonz%e)cS<kU+TO*V+YaymS<=zn-t{JC<vF!^_9P~Dk4f$8*`_b#ryU~}T zZzwP>Jx?|Kp(^nRD<dPa4*HT%4&z^uWSO5Jd69yUm~!N(O5dEfT=Y+`k|PIm)O_g> zzw$Ug)jQFX=<Vpk*aT`D6?4%(BAE(jm|u#7G^w)6T{<tuMZs0qn3Wk9jH!gk2H^dT zhFm7(qAJxF>+xAE*o(lO+Ipps$G5hR$)d7e>#X2$fy<BFh-%e5B{;hOkN*96wH8H~ zq(2I)ud38TLUn4*8(5yL!Cy2gYgx|TU~H->3BEcCkIpwI3TZZ&PPda}dpaFtv@KZj zvR>XW*4TQj*)T@idaXG&)-;;6y4B|8hBo3rM^VsfwuW1ijXnwD{>Ef$*lM<d=(1xm ze6gKFbOXAlm$B*B#sQ5|ofvH=B2dYcAEclo>u1}FTrkGs=;iS|<xw}evw2gq>Gl*M z!I+w(N|hOmiZeb1(la<}8^PMzt_Xu_UfPZ1k_17X2LX}1Bz%i`Lsj#JIbN&f#lpAe zoIGkMsnKXnPF!p~aO))LfG00&5_j{e3*(?Bj9wnze)dc|h%1#wp6kuhugQ3C1)H3e zi*My*(qU1p-{0OkTPg$^7o|RKFT8Z=ng9^-swQthRDqJ7x!R5c7q-+<-*)NRKc7Y? z(M=_$eKy`Ipe;~g<|rRA3v*JERg`D1ao<xzPc#bjTzjR%h*LEnLcGwG`OV-0Bj_G) zJCjgy>gIBh^rfDEsTmQ2>SF1{)G@E}n`*HU(1)Np5QJ%VSM%{L9^SMA&3eK3;4HvT zy3T{<v=+nr>sHsNjk(qrx5a1vFo0pFz|De_m$DH$Gul%2?a@nveBn?OqLi5p{>D8m zMK02!gjUHi2hHu89YGLrKlonsLvXE<*yCpA<*0;&PlNZKyy=9)$@e<t#x~pSN|lqm zB?Z8*P|kI;+ihwtn9Z_UEz9i3X@rvArKelpi==TH&NyWHHN#pTuMLOICT{kU_{Zsq ziITC=xKcH)(XI)8pJbe9O*oT@HO3}ajnuByavIxl`|mz;y&UI3*l3R7+OKtthUhH1 z4}BH-1J4vT?2q8tsRf(ka?wl^N>5xEKiR05^BNWw>^bZ6MRx*S^6<oLx)tp)+@L?C zm`o?xY^(LN32iuFcY!+^!^nygUza+irN!?L;LiCRulAr>&gbXO&F5tkT&=47QYO;a z^Ds`&31{92%>*Ivj!Ad8_ugaBYG2zx^`=4Yn{w=3DCG~AvruWR!r9V?tCP6bD2B!x z+o6DYBg-((vIfUM0b|M?fa4Ue3f)5ZRP7J>OxQe%M!SC52hnHHk01mM^4UB~1sDj4 z9k4os|IzS;)F5ZU2}Ytsdsfa+qaRtYmQu#ZV4N@>FUhm%^f6-isylr0%Y{Q+EP^=6 zv!W8E0MWTS9^G|WmQ<@bCMLU`#7#T@e29;03}DPE|DqKAmiVX*LTk(k=S~=7!@zpK zSoIWa5ZeF$*PDJ>;H%n|6CRGub|!|9D6QA>b-*WF-e}|r#sP+YS=pUbclC#ytc3@2 z{E#$D?{^&kp|v&$?Fp?<*f6xlc)xnj+KU=%owK&HDgCWLdJrCc3%ZOx*lHjyJbjqu zP~#L35g)YVa7I)WH)CSHP)d{m@NcErcr6TXEmZ!sgn)vYu&n=k(1(CxRPlg+iq-p! zF-OU}BioK}zwasc=HNqWu?-jmc<ikwr3iSt3ZFSLo~)YO2BRoELxbR8E;t@06dU2; z-HEoZ)`4Igb7)Gh4A)Fp>O~tE<i2yl)cU~`Dm`3hIaqtw*RF{gT8}x2Ua(atg(w}y z%aPz0)6Lj&9%HD%d}U#%s^|+!jOhR%NT-JR)%FB6Lz~u<5Gt;65O@(Yxd|WdCJpgj zEOVhz4||uY95`Q4RKnDGZ%q9{7p`p7lixzS=%eUY+kt7GKr*Ne9_cY+pumJ(q8O)b z3uPs4`*p0d+iWtO^fFOZ<}r5>1Z>ps8bnv(E4G^pO{SA6{D%U^u>51@(OpV+%Z=s6 zMnt@4L0N8Xm1V#@#y1H5fyH7G$BEXAMbmijiQ0IQFkVxiiE(mmgA%XCk9l{e_nNW1 zD?WkoI0GolGoBGYtFgaj+FPE$h_M^H-L7Udj^ji(j<>JXzH3KoZqIQ}YO*z<dbU}` z-XKmZ*|^|%nSyXwLe%>7R6_Vbql%Qn%O{2(sM@mD4++=Y?YCJT=lS-7{`W3DgPum; zf&K+%`a$ishy;y=`^0Q>VG<^rPPtWmfSAhEcsw6YXq=WuO`N5xoaK|;C$mcpMsaD_ zG9BP_TX|oaZku+64pu-Q;f2B{Yfv8!>rh*tOx7Q|uydl{V~t#H<kHo$tbz~nMzE1L zW(T8clvVnakA4}ekIrUNB|qOz<5#8D@b6lSI=s-0?y<H5aP4E=D1v{4PG>Q{pi)Vc zE2R-Yl;%DF$Tw0oF&Uq(KZhK8f{R;Q(iXi*t3Xpge?=)=I3e3WH$|LLV9j`7kr%V6 z@5#^**WjYtU~%SXCO8vm?%M~JPY5I1Y}<!GXlL{?0H}ZuC^0(p(&tINsh*_l{_XN> zz@bSH{2e18cz-~_W3R9BghxkF4c@;AjcI3ghzV}H_^6f~K&Zf*D79t8^dyieI=&5B zda{`7rDSI8#i;R{FQ;4E{cBO;ECuficvf^4ybwlM9CrrO>CVn{I_O3*BRUCQ-pg*g z?Y7uCDv9^SqlG)^^T%@UiKNcOkJ{dHtpsQ_iUh714x3F|7DZ8%w%HtpN&*(WXiPjQ zAc*fsVOUIJV~mL>lu|m0jkySc!52^XSMyS1w1I9#uR`CBegORx`epRn=+DtVzyNMQ zk-u55mDDWEH%DcSkq5$iqQ^TAlrJ$8U3csz-D?p8h%}LNca|``V$LncXD`}=7=bG- zB)IZ=Rt=UL;JsCcpV4t>0+V5C3iCO}{AeYiivv)U-Na`g)Pka3DiI=r_3d-RMFc9N zJsN~=fN*5`R=Q?Lx{4vg6eF$A`Ty5pKb+PI=CT56HTQv~d!5dI8?~?Po#bgDN23d- zwfcI_mo(7i(l{Y#%)2|!fl_U~5sYHu#RaaitCgN|A4CFEsvX!3GHhjjm5!|fRzhDJ z-Ik9ca`@Um1NJ?RSk3->=cL26I-Smzc2~60_KH#I-}KVEEb{t14aabs^p6_G04(r? z049WEAcARaB1Hi_#-0$uy{8OgN(CXDDQ!Z@F!X6RB|PO%VIRE(eF(|*rgMZ8S*C^W zpMbFekWDV;rHnqses%cLgOFyjr0a0!P~fl}dC&Rt^&<X?yiu~KCh{mjR7D7>szLSc z$HLkloLW#9Ldm+56CH2}7#{(Xjazy6#ZpRI0eO3uT2+)3q8e0{l(HJsq!OYY)bF0P zWo!cXDg5xoPovw>E6_X9bLrmdmDAwHEf_GA$m|m!_j<U}`;ewJOESII=Pd(-D%!<G zfcnLR0VmlY)*5L4884{2^I`Uoay#jIN$eZ`(Kt;5Z?)3C(rnd*<<g7xbD3u8X3cgt z(8+18(DB7!X?C0lgSd>gsPm%VB@~!r8Ygy7kJ4VcyJJlCvR|b!c1CGyOiD;Vm9w1w z#dJD7!O~2}H+4Bg%x@6x$o{`$^ki>952JUWFZ~j2Yi^c%5SE3pV5Q4>gPxEzYYj(z zqBORIMVAn+g^+^KF@!Js7t{H+sMEcgFye)%G!<2k6-AIRHEM6Ml!8Wa<&Y5K<<ROw zyjuS(9+2_@;ID)X2IM<9bg(hJcDLdjXU7!~eJJ_yI1?dnAga{fN{w$+;)r%2ihfqS zi$4oITbpU2!R>>7j>|($KpoG4b9Hx(8-qK*eH4ABqv&b$)95#$NspAe3oi3=jaE6Q zJo@XwTKSjC{tfv6I(?8EqD8CgCfKEo`WYgq3yyZRc=qPf0Ot+f{6+F)q#Ql>4gDS> zICk`9G4vb}+(2r$Ag%}T%Z?t)rqN;b_;K$hz?sjtifsbm>!p|n=LKVgm=D{p2C$3Y zi<mzz*iT-&c8&M!Ro~M<slr4nMG4^&lwgDa)|7$PAh{w$Yr}wGsz9j?zDJUA(1&-O zTQ(bg-9Bc7l)@Zq>wcrTJa<=-(0NX44Lont1b~Y8n!528wa*X?pD#}+kxXk7D27#~ zyh6K}T>a-Bb!6#Y2wDKu>iWnSi5Uh)gb<dKuxkBMv>=!&O(*~%m|#x0keXBAnyvwP zFFV)aVBa!!0_pQJph|8=YMK-@Hz@Ssv0Kxvk|<$~DpVoN2cd@u?q?Sx1nHbvg(*Iv z5-I5`c%U};P*IGDexc6*Nfs*5$dLYJf$Fy7Y?>Fi1Cz<ieJDQkF2ms5(K-O<BD86v z(3)97;3L{%iLn+iV2+}!da<6-%lnk_iE7lJ3GjfYSz;2>i|t)-6~~MyMOcihSo_0) zqR}><zv5fKn|7nfC;2G0-qwObgEOw9-jsXeUFy>`l#nC^TU&bE0|8Z^WPhp7#c}5T z>e#Vk`rqEJV^s{XQZe8v?(6~Fg5uXJl*hPOcE}Rlsxb~idmrj2%kZ{eST1#8#GOdk zao2{S*K53uBRKu}^kb-5uQPg-?9#W9#W$iy&=vIl(P6N|He4hky+g3I7}7U~=0`A8 zUd>F#&(dKJT%4Cj+A2pPT2uyf-P~#qw|loLUW1AHbOQ10wzUn4L0<8I_Bn7T%LY-b zs^EA11*<ZN2AL|j;niC!^79MEK|J{2*ZVl*s}KGm><bd=&kRyjg^e7ZIyLkz?^(c+ zK@IP-z1(@@!5C!;T;y=Eu`%Exls5lDq2Pm!jm2p&@GaoiR)cE0_xlS7LdfdJSH}#z zQl<RX&dyE@5bsptL|Ez~j3Y;_NaBiJDI*1h50Bbkj&ta4bUB%W97z`#D8-LxK}fBp z3wap~eIGyt=}&SGg_WYwC@Nv3wGc90Tc_)5sT2Z~j*f%Vhc!L@N#*+@Ypso<IF2P_ zL<WH*jLA5Tqt5}%``VzgCAz~$GQ+PPsc_hLBovYWuYhTDrpQH^jZ%HxN<~ctYVJ$h zV$265+vrc0Wtq3KC}_5)>%gEt%C_0vSohk7t~5sLUo|4H)&kF|H(8b_SJ*>gmg+pm zQeE(U{ji3+OMR@-Xt)YBRjUBlx(8dea#U0!Syq%^P_1lQ1^Ewv(^*a-_vwOxna&#= zn?qU&f#)4~>OSDNP9q<dLd7PxTlN8Y@QPr6FI@zHE<ougTL;>@u~JB`3)euW16sZG zj(y|eLt4!$CU`5-E|>uLCRZZSt#Q=DM=bGlWLiSeRLXgH!|DRc1E)Krn=q8dAfM=< z4PB<BA+C@#tj=SII3N)#C-o9Uw)n>?^mkMOfUvf0arf>WOO*;hSQu~4T3~1dWBN0h z%ACUVnyhI7LQx1+t#eKfXRw{|knD)zyQ#F1h^5j8;={i;Gv$(&4H{IFWLbE#z;Vjd z<YX}KJ0gJ{2=IobrZRX=9sOu(DpO%H8p&pTlB@ME;-M8fEFD!rb7()h1YL{PHM3iP z&@#(cfd^chMQBq&1c!F2Gwb@33BaDEj$t-E*86^4=`rx{PE8(a^)7vA2}6<jdbZpi zeJ7nIC+S1DUp=_%RIiTxUR|sDzKu<u^S8;8LHOcMLJTTNk|EKnraE^?9)2rzj@wqw z>ORYU_RMfQ%ezJy4zfC@wjk(ry~*cz6WhM87I|Vw^0qOFx@Lb%lJ1i>jkAaHqz#sp zCI-L^GBwDx{i?rpMuNd*ST`DAD7Sy+c)9F=Qr0g+2}?ZBhWyjt@Av!tRc2=w=n!Qj zqqJI{$y&9(sk0k-N<Z!Q*))&>R*v;t6yGiXv}H7j+K3kgtg8SN4@bU!Ei$M@rpa{J zCLnJWA$AGuDZVG?QQ027eQR8v2keh%HW04^6T@HqN&x5#!o41GAasxHH~sZ{_6Bqt zvbG$pN1b+Bg3@i;)fKDMSg?<{q_K^nBTp+%1y?H3XwCprX@{}yBcLJhhm%SrtoE3R z%_R~{jPF0JC>%LM=DFP)xKzp$QYe-%=xi)6boRba$cH*(k^9-e26*P=#J0qkf1{F% z<`-O#1JAE2N_DUEjMCAMx>02Cyb(p+Y`L7x3#9V-NFYK!TP|mVy6j6Mgtz`{>o4Iu z@Y^WRzg?Q}p#y-tBx<^%J3thv2!!iZ(5m%1W@?V0WJ|@;_NDDv6|kr32O9-}56biN zi`(Ma!k;d5J6X^3=3l>#QsbbmdKlE~_NDEmVkxT#POUH-Z(E$756S{x`1-u(dD%{P z;Wvgq%~BZJv3B8hbP}zjH`|n&90Qt*=V-uo+lT6Ltmh`lx#pi`t^N1KSS_-0k#|g} zs%hsJ0%MWO*!ulBx}d+gxw#oaZ$`zgG_c_)wFy))cq?<n96XQsj1TBOy;oD{v*@en zJLnJ5U!cE1ujxzJ(O8P`U+;2DS8h`U%pVd;f<1fzf<53%Xb%Q`S^FY-=63A1|9gAq zu0wJ%an7BI{4<4=nbUavo>XeRGWcxNe|w#gkb|YYZ=NwRTqBeUqlH;iHP-*>IUk(+ zzx+AHhmUx56fIKwZO<c)k^cs_9XIqhr1F#n8KM@G@wq7CF3;pS-qNh^`OmAWvMsCv z`1G?JuYX$w?fgS|{PzI9E)t@h#~9-)H8-TrE+HJbhUko(8C{n=NTf2t<vdzNb(EsZ z&|T>5=mpL<OI^xpT=kN3*Q{qwbw%cLZ?_*F`+ZxhRcO0yl%@`#>K#|?PyUQDN`rYe z9z9Dc&S223Sb4wSoQQXUNFwBZ&0_?;aCo#`{4JD0<7f}%X!1dbEDSqx=^}z9je?gF zR~*TD!X6n7KTvsI_@Nz5rXT!75Q!$UI&|3(1_sM)z}M%x{IMzoeK?}>yfAvBD|lD; zu9_Ckllzw8o9Gsw)k01uox8V?E%tn|5HjVst^D8oY<spn%SuX;XdGA$9-a?>-WEUM zxlSi;$4AJts+dL~b<9AJF)df}LQ+Pls+gI8!+;G_Q6MnSc5Zlt%<RRm&YpCV+4;=x z^qj%-1O0De+wZ-^aGcoFc7V&nlP*}+x*GO>ed~4SrQG#^=bWqdap1cL#_U40c2!$z zwd?7!C||OjP^#Xes>kXNtb?Rx)!(k%73NgB|Aa~<a;2*6PFFR>Y4^|~bo9R_wTxG( zpi`bewm|%4yds#Epmj%TKGJ9tbo0#AX>9|kDWh`r4H#6sBVc>(t%b_Ae9yhCdGaH% z6G$P8q3c`d;R^T2hi%om42m$ELd5!c)Xpb@MI2m`aoO+)4}_wCR8~j8ml;?{FNB3L zkGqfioPWGTB+o8m?D!NRko%`ARb@|6)ZE&>QGQ3MR;IhPG5F2!P3s`V|4-biP3H3B zxxGSgc_x24IL=tDTT{~On+k{~xNViD0NxFB$<iN-*~45%h~A9p*H*V3Evf}^Hn=8F z<Yq0Cq@ojVp;lb#HB8mYuU!nQl|~(OmQ_lb(Dd?_39MjKj@V9iW^9acf>OwX^<><R zE`72vHW`M@R29VZ+8ahDQ!Z7Z5A{YR>)3>s>;ePR%6n#*DJfZ|r;yK2sU{1<$+5zd z!j`=sPnv~-B5-VMY^GW&XEKHX_pJC}TKsf9@Rutp>Pjb#D<JAhr_;I-LWd}6)}6ut z8EDQXHd2U++xL$GcV-fZ0aY}jEC;^MCc@a|{~0Ab+#115UhJD@K$rPQk=n$pjL(3r z#^$Ysw4nBUtDa$sJg+D`FPerIcYTe~P?~G9H^s?~J`-B%b>Hv&4$QE&^c<S%s;a8G zs>bb70oedA-tU(>qUjyjDo9wfDR!wiP(DCwDtV|KTO1@6{XlnJ#Vw;Dhk09NfM1U~ zpgo$drL8e4)qKOIW+QuwDW%c_w@j@b$x6l9NnANf!x8Won!-93R=dHS(wmTZUbqr0 zE59){S+9T6y83aMt#pO~qmpgnhvfqAK8qeh??k^XOCn{yxp$wsZ`!K;G@@A+ffJ%} zK<aF*FVd1PXBKgA8RtU_UMC0Fmy#x2<m0KdfO|p|-oTyH6X8IGH*tk5^^({%>9%17 zdreDcqSPi*SP8rmNg`p1<2Y{j6k~=}o*6HdB*7jBe7H13+1H7&T33X=xA|~>X%34` z55KBs1LC!f*s*mDW126*;?gHQEX$Uk<H!?rIO`HT>4Ij90kXM<4aKnn74hq>q>R$- z+4l(8YwW1@=$wd{4j%Cu8}cmz&d9#84~7k4ELtB!n$$9a9g+PyQxUr)H7^bkh$2BC zgr020bE?~pl6{DJQuHNkd#->~#DF|^!jIcP7voW#)P<udZm31N72{Py^b2ePj`;?( zE3rt1t#SaH5R_ZgDiO}Gb6LmWNXeoUzDq>HM&}t3CBRr9hDvQoZP72!AOZ&fU+^0Q zI5!gnS%(AC@ToKa#zE#AWvX8(=!z@@C@K>uWI});1m)KHdaE43vQL1xrfnM@0pd&2 z=tfo3G))=XuR2HdU|iZ(uVY-VZ<EFYo$?sqeI)>r_k7>W6M&K=MUo^{3K}Udyn}qv zHS+mdrBuq%$?f+y=pLmjLdyvG`lx|z%qZxUAY_k{!Uwgw>&*7lJ9aj7GX%*uZh+yv z2W*Z`(qf`g3Wh<wk&dXWr-K3JOREbuVTcaNN`U$(b=$}pr|O*4dgpvQq#gnCF!A*E zvumqj*NpmV#;CbY!yXK`HBGmyqLB#hL@CpNMtlxm$5J<~#-$#-J2KY_>fQOy5brh8 zPYz$#wOilt6MOjC;|LaFgK)S$X<uD1{tEXtulK}Sq66X}cwy9n^A#Hv=hNLBWqAi) z&ic=RX_|}yRCp+F;z}x$us$Vs>K(&P+IR!hF|0OarN8B;zenpY&QVn~*LMT6eZ1){ zS&4HP9!T7;O{emk@Mmn>vSz5flK-fvDNNNYxv5i`ycZ?x7)x3!r?@>(K0B$#Z!kJP zj^2>_{))lo8CUJ_j2?K-6MF`NTix>YZF?Vv*9Nt>ka<=GP}HRhG!C{I>8A>*22wBy z_+FL9L1g2oxmD_F8D<bu6Ko0OBxQ=!2wE#V=o120$xJ8bF_tsdpX8hekCo2TYq``c zx*I)%K8=1C{YjMh0^B=pH^Zs_hrEhiqeVDS;yJ_a!l=GZjk6u=Gs&szmhZ<&Eb`8( z7p9vIYt|+w9ALwHx}NjB!-b8i?}2Y?Ecfe~OpNhp9^R{xu^2NAUN|T4hRK+fsoi<! zot63;4mjYQ_seokmSx5)(=hm+zAOZU5W_Sq#^lk-tLNpCH|*TGQ<juEkJ^tZ%c7wC z`Y#O~0{~Hw>HE&ls#FxI!f^@}MXI*$ot&Js>!O<(T=C;$Joo#8Ac!KBBw3i6a_MnS z5CmD0s3;2KGmlR}xK<87S+G~XU6y!+IWmo+(lheslnZBP?Hcmq9(el7OXvCZxN(Aa z&X$%$DI<|3KMWg{ReVX6|CBUU%_x{75BSw;WB24FJ~gj&82T`N1rZE^yP{&-2mXtB zyMj4lNSdm?T(N9CIl249`MkmGUGQF=4myG^^$cKKadYtvpf?UmV*<8B$Z;mSok&7P z^a29Zq!D+aBu1G_7(&cVp|3*7sa3_2nq&+tM;S_5uoZ?FcYa69fvHbi9%xyrkweWj zl`~W)7)lJtjdXq&XB;woNW`Agt)o3AqddxED3wVWY^s~IuTnsYg(;Xm3-x4fQ1z)q zvF?>rBUpFrpw^t6oSY~JmcfZIF@9j>RB->meU4SGH)gq>(Mbi&%Eja3%~~y&qY8jA z<`venISS`Q&ai^=<izA;vliG+aBAhi_yk;L4Pl<2nV8($=tY{%)efI*mP&>JpwL{d zcIexL2})h{L?4F!L_dHuJhzf0CJ2xRwI(WI-+a`CXrdZdtwqb7NiQ3PVKuIXA8O}z zvF3p>Jl$a2n#SXIV!Lu}0N^JX$F1BoI96}~0EWWUec8el{O`?k7mvPs5G-EI2_K%? zDdf&hieyBH7dhyxAjQ0;fTMche=_&ZGw1k1yr*$TI)$qVwR{KFV6>uD4R)ySdnBV5 zfhmd%l(Iu`{pf>my}+|7>*w4;u3-=uQp#FDD%hG4!EE?Huh04Rcry-YFEJY5+S*bi zKl^bvfQaoj1iH7D7d@g_jzHuWoSbT9J<?8a2j<8xo&i}=R*m@}l@-@pC1SuI5$tJ> z+kWn2b?=3bt*yH~N*_I=`Y=Gp&?$5ix?huH3i#P*7tf?Ust{wsJ0Vg$4SPz7CBslA z5`O0!9bd?kgX1ttNFr9`l3mdI&eLYx+kLO}lCouk<CdE)Yg$*S0+o#ek`5h9)R^@E z-`I-`#*4Z`R=@M<2jVz3a*X3801v(ly~GD1UYZo;7R|4S)NJNxHd|RKxeh>>-G8)L z*O{hESxM?zOyg_ivV@*eH~tbXWHPOtx~{ipGCYtKUs{HD3TH{vjrSqD-xiz4y8}H8 z`6RFm9$oHx_X5Xgin}*S){1cwM-s)lyY;jvCjQ<LRKLg0bvi-kvV2d+!`QoH>BbZ* zUYy_u6+B<P{(Yc#&jdT4pO~0X%dhOHE9H$_%sobqaRLGG;!=ofk|=U%4)!8kH+}#9 z8Ot0!t4eQ0vhBF9X<98qcg=m%vlk1~NxoD+f;|uOe1k7JBRAn0meEmU@yIwlC#i+u z7~gAqVLtRq4dr<klc9-3Xi-xjkrKZcc!ZOPrYQ=>2dpq`G)k0|IV$TgIPG2wFz?@^ z1L*tIT{?iiVv^A(ATw48%H|DOaU9;SDGuO%Y4Mtcg+hT~{83#|GsgQ?9J)y0XvfQf z{}40&Z2J_>{J30p|2}*R?LY_7&28M4h$;w(88rki=P<RoXf>d_AJnBn1_X!dtT{|; z!I6>FNwNlcIIq7OJkAK=M0H6A&=dJ(W5-d4xY%{{vMy6DBM6ylrC89H4aq(F?=yBq z%<g5`Y!3d)|J=C7H^w!;qZp;|3MVUCunkgk8R$BM)L9KL(+~bZ0Ks!-rjLq@5bk@1 z@LL(YzY&=~mWu|j%yq3ZL>f9^XZ-Z3+HqhDSXUt>J-!~_)^_@rNUposxmL#&bfyYI zUXgD1jOT7R-hUy`L)5>`7~Y!b*9F0PGoJ^9O_b?5MW>WC9(-%`CG2gtC?ylJ>yYZ0 zhhNyfeI&))m1jOU*b-?mC;>~ELg$+I<@3!yV5BD|J@yCAfkm<e*fXwUy3oAACbE0f zKOW2oQs|U3QuS}6=b^?()I_srFIqz{p)cDm0d=S|-S(_smpUX8QOgT+)Sda|wr=8L z3X)s?fJg+GR6tZt9oTUw^R9@A+CIRr70_nPlQ<45tzP2Ex^^~m6nE%D8Qp?`XNWBP zKrVB;Bx0F-KEonhvF#jJ|Jvp*fgVoQbEaM>Bo|=*#zy~X+P0RfcRHO;l+|q8)H$r? z@)eWQbr*ymtqDxC`OzMWF<#48KewmroLR}|RLto=2m;LM6xIyPwevU>gb<PKq@ifc zgimTpCaatnt7&Rd<aH#GdF21!fQmW2GNT)YK2y;-tZKGx233FA)w}?H7oP7}s)Dhi zS{<Hu9{8O!ciFE7rfqAVKFEsb{Ifgb@nF#P-X<h@IA=&*d5N7<?#{z!T}Nn#ZJ)#5 za!0gxmq31fjy+aWp^_L`gQP#ed83Yf*v_>p(w@x_*4yp&;r=KlVN2`H9`*i&U)E^2 zoYNep0mvD*cZ^_^rh%Qa58G>Xwu8fVPeU(Tf-Lu}3MQd5j*g?(%T7j@A?wSjNgP9a zV9Z$Yi(RwrR=e$ok5seWl5*KQFR6`jHjI<l{!r~OL;+<kWedVi+$LgE6g8S^@d-AH z+qK1SdpjndFBIxF-I2Vm;Be8urLNWjfO5uH_K!R9-gD>9-CCa^ibmUQswrfqe(Twm z!t;h@*=i=E+LmSTyuwaGuwM2ggCUrYyyF8Gb9{ylg^MFx2ZX8nvc(d|jq=>ZA9(Yl zqdyP!Ym_L54k?6c`-4j?%T^VhHyAEEM^SCd(hPGeb!h;T4sy<Ipm}teZotIHNsyCQ zn$mZEZF_!%c*!|1K|I%X;*`aPHB%Tt$AV5L?zVl^-9S9wi6riJJtTZG)e&X<Iq2gO ztNBp6#3ek&yc}aWk6r20)&ANy_^=4#grz9bjtquOwjlyt`SftO3HCQB7GsomEVGZ8 zPPF>+P|#tcqS`fdt<*MaVN=&7-egKe2l|F#7$uFb;K#5aaHeD!&P+zanaOHZ$ATx> zFG-mhPdbdLEnvM`oy_1*GR1tuUzi>GtUGzaQW-iUx95^D9y{Q<WHw1%E_ra7O3DsW z3L|!9ktI;7aiR*~Hnci2>=Co3?>8C#ONFu^7#|M;MipCCv6p0uQ7YH#<&vSWvG42Q zJ=0T|QVrgqQHrOg_dE<~GQ2!PlAv4$NlJyf?*sULUC>m!VXK-{@eTY|MH<=F$5YdL zG<g+H-7`If<$JQOo`|PR(*%t+MMl=YGuT*1hgYSFx}?(0_4Kexh?^1=o(e{l7;LWB z9=%OA^Ct9IcEdD*A>P_ka%hNDqV*jNIy6iP=3Ks;uS?>5rpB`C5nx`g@W)4Q`wIx} z<VpsPYh$O3jus>bgowKkGt5Kmud^7FfTRl>&=zT(VxOchUt>tFqs&&&B|Wq3<9Z{x z?<44w=yMnX+SRZRi9kTH-Vfw8|C&_$QAHu#6y?E)Qc)DWw9W+!LOWsS_&^Gdt<)na z32~V*m4rz$)@0g}Xg<~Z`K#H-i;HWbKnW3DiRN5M;)!DjgyV={I1(pGZjMT>Ww{c~ zdJ=Xs#YVHWwz!D@+aZ+RX2v|ZF}kaek3Fcr44%_%qL1(P4O9PUE-1;l`AmoCSLedo z;v%*k;B^78ouQ)6+zh1|m+2zSH~@mKDAT{M1cg*>2QMzJbri6yyl<M~uGx1l%*+%E zKG*NSMwpzT$%y5wkr`{&dPf9Xzu0;iKMAj*He@Hj3N#lbxkJK?_?`gopH$>xFgrVa z@jh8rltXJ5p)33<tR0qRML9k`smP`B?Cdo3|2&wTot{+W()@l!k>!Jn7b%J?AK7+9 zQ7AoDD9>SwAZi8<a(;lCXd4!M#kRO0SwTAoRk=ofZW{`$-zUr^AzOG8?YQ1B0^J|> zW@+2sJFJp23FiJJt9>fFeZEgqR_Pi}0JO|Nz<>0L@ZdksS=4qpq??<Y-P#zKy!9FK zmIc1ojWc%Rf354+m2IZ^c6-_WJW}xN3KG?ZdCRtABr=uTC9OpH+14zt1^%7b<DV!f z31&#g?Z6i#?TAq#cWR(E`P6NdG_H(=vT8d_2;9e^ul}c%_~Nvk{<0)~U8e_V3#s3B zI!(`?S73FQW#u={UjVDR!uj)Q+S@{adgsrdKVR}_4OV};5?EH=2ztF<Z?o46484$e zCVFRRAeGj2xxd|ZQA>%Pljs`s2JIM%N-v?Ie&SX?Aqv+t?rIXdD%hloQ}|pWv(P>r z#qCg4dW|qv@;A7}Zggs$bf^_N_RVMDP-vrrD{9l8<=*av2s!ioY|>5oDzu!~LP0`} zNY9@?e?CpmpFf{oui%33`)YaDd4TgzKKbNqIobHa7rx*Cd<4RJbW~1NRjMkqoXP0v z;T`Xtn#5eSQm2ZeahzR`(@7~t&J0#pSCh{MsX5;31xb88)74c#007goy?zu?+8a#V zp{HpYCB^aaX>~xnnT45FAaORwIm2TR$0XsSk+$*jZf*17j^pTyk@fGv94w$kA3&za ziYY60!07`AB`V8KICO@_ng6O`tl>4%RW@v&oZv9oXl{a=8xT6d0WXga;8=2v-t8NQ zZIBjc8n`wdy*xTb{wQR>$%A*HttDKlbcCcSC>O_s#!5U}isF0yd{hrBf$pJ1%Ye^m z5J3PeHKO^(o?vf$?mdn9s3Bnx1TyMHiScCuK_o^JhOjrp9-nzHgkfS3QPA^Vw}nD9 zi!O^enpQi`3{#2bV9^a7za2a17a<B9uGI-}JRIFb*o<rw{#wDiyFn?F(XCAw0`uyI zrFzLf*7j=oe6^a-Ydh=poul91!p;Rrk|d=~c4^Gdg%a%9vWg}^P;PB7`TYdR%nTWB zzv4mFmY`Ws-6Y7U(@JYFEH98R$vc;rDcdz!kJd@2FQ^rYDu~C**Tv}nv_heF8>I}s zCg*$#o+7F2A@F$>EE9I=RF+|$+Oa#E7{Nz+rU}HxcpP`>&J%`RY4Jjv5-`x~0)msF z9Ze7y$J@7u;r8uuj6q3(5$(@g7JSM7M3ULp9Y8z7(3c&iSs3oL2Dj8FUGN-OR{p>{ z&Xwg^gwp$#$=*EB6Nj30w#NYBkZL1IL&y!!51|L{!Z_`?f$TQUUlE;VvtgLcN`{@c zERX}&fg$yFd9;}CnS_|Vd{I0`-@Ix`*I`K6Z1}G(fV;O=rL<bxTkZ$!Tvk9e{tTuL zqyLW18>8??jXj|yx>veFS3f%@mba=o?N8bYy+z)eOIz`5XSUsKca`X)YRIVgw5{#5 z$3v9Q;W&mvm7u9gLatQ+6@Ybv8hPRf5jY<$#fTY|XL21siA5sDpsKdbO-JVWt<uB$ z=J^4YRCrvKD1hy>X4ckbT8<66aWnD6YH$w~H?QW`qmOzzv@D%b0I(ElfK1YBHwsK; z1^`gTtibYs#0<a>iP4=^89344c|nm4;|*8VbWEA<xVj-bq9Jl%!~4uP_;<fTzyh^` z->4F$lFD&ftyZmKT&>n>8poYjPg6H)@FQ&-4Gs0yL`G?0xhRUDf=Wox0cDB;qce~N znmN`F{Fi5@6o3cJiL*xHyBZ?60b&FtM6Bh03_P#YZ?No+R*Q-yfx)6Yo5vS$bmNUy zK|%tMg9Kq3rMJ$*M*RS%zZv3EJJ|!*AZLPgKAXMZp4ZwONR}u~mt3j^&WB_Z?vh|f zyZEdSh=1g<g2+HMJzohKef;%L^M{<V|22ib)O>&1`+dJi#8Aj>%+4h>zx)P%S`c+` zacB0b&Z|FN8JZI+mCDTjZEqZZdH&2Db5oALN+ou|p-Qz@3o5SL&`z#gGY-<H)HUb+ z`hN#|A7QLe7$2X9zvBYbz^~Q~T|WQI7JU8r`6$G#c&f7N`uDIkn@hJ*P1&4)Z%aM) zeaE6M#yeYAol)v$ZR1X}FBN3m+CR#9ye`0OotMJp<xt`cOLV<r(R0P?nPm!`#w?5H zwD&`j8;J5Gz)UL`YQJpn;Dt9}UI);5{04!~Tb5<z8=4?kwyFuDWvSnM;e{7oEr$wv z`_&hQoJMnF%a2YU`iR8Kkv-8v=o#&}n{akF;RT!MTM3L78IyX3a5gtPh7@9W2<XYU z+$n9oda$Dwyj1o+@M$7kX=$=nDlq`PSkh$8y3&XmohNU2>7|#-?)z)O%}+h`6cMhp zR7EQl^*Mh=QU7Rmp%2>VlXd|*qkq%&X-PNql1vOkR7$#`OVe}Vm@@j=m2h(ONjPa2 zM!yf50@mnfV7=p?g(4aTks0oT<<Fgwkca$3YJ4}k&Uf%oQHky?^xw(Y6)GpwPMxHD z*@~RVPL)$C1fQ9x<rc(J+3DaKKEm7u?FEko{h!uB;QknU2g}O;=HCw;IwWzb<%^;U zpzun+*Q@rK=mlwA<vD|Xf7A!Ee7=4#rwR&yDvG|Pa`G)ue+iqlubAZ6^Q3$<YT+2_ zCfJJv0}&4Qbgl#p>Z1kp`6+06B7Q><MnoACtP!(^kpXNi!5cwU*Oee8C@DlZ*@!`j zNiZs9pJv4XElG^9m4M~gyxVy9C&*ep=$JrFPlL$@EdN5U*OTR*qPz-N&#6m#y}6Ft zljU_;Ww%B$N$j%<5>`TTQ`IKwReQh&IPDt^4gXcnr@4&3zB%dCgIzeHt`?4{XYYBc zQ507@lw^cf%xO;8id#bmCoA6ddeih%!yK{01dfF!5Zl6TA@#Rn`pt}aaT~V4FeGT= zfWDl;O^}vnQ{Q1FIe)wR@Ew#zhpDV)D5=*-K&pk79qX5DI;uxpBwrMWWQ^P5xi;_X zLOG$)YBM}UeU`_gI1&xB5k;}L;Pep7s!<XXBvGetK6RntUi$w>h97&0q>7^RO~-S! zPbi|`4qeaHKK^x^5J!-y<Cvz1!Bk~|s4Yb#s%ipt3{w<j>Kw|07*J|Hg}Kd)p#$hf zX4BQ5IM`~nWKa}MlLbN6G(`bWTB7(H*Y(ubtD@+P{>F7ZbzKof2Pz?N<qx@rDGD-m zD3l3NWuYJ`ib%?wAj^(pnu1G4zj7+o%71`vWJc#Qh7Q`1FU`)*s=6*y09g<W0JA{X z)mfhJO9wyKx4S(xp)UHr5&R37iy01wgwaAvFqxLScHL|EN$sL}zOCPWo9|8nziJpW zP5(Mi*GCUL*PZpZ-{vz<7kJ?QZT`S7ZHo3Q{TH%nw5T0QkxwVCz;dDDnXFA=Lb-)h zP{_UKUDFZPtaXhq`DVS4`z;RKA5Db4>8b%Aa8!jayWU*0>AxTd_5&Q;m$w~Z4#a5> zD~KUL%Adk+mrJ9749VtY8S~ZmvIM$r-zh*YH&L{}FeJ$|vY->}jVwPo@PcGNrMHE3 z2rc)2pym}N?IMA^t)!O&4-iFN&wxVD@G(W;(!V35-6yH_NxV5&II~=LSm<w}t-+=n zEcET4fxX?3=l%+WOTkGmdv)})-h^jp;)0LF9i9`YpXp6;kV(Uw)cLOPnVDQ@Q;dg3 z`;Jz1?B+ejK8g1*%>z$*0a|AZq$@B3C*T^lkGB9{brYmr3fI>!u@0?+uF6;{E&nD< z!@#4i;FEcB1oAb-wwvO{P-~H`*cHA#47g>%_z>yWZLgtu<>@&`X#Tl~&Bbn+QX+`U z1egc?ves>~&<JQ(CPmh4Pgc|&)f}5?!PMatKz--tL#ZHXaS<?<g)ZU6Y<L8q@xhI! zfCADDJfs-_z((x1b<wtPej6S+3lNS|xJsphC*jx5rX&c8VsOD&R4BqIg<>HZ3phhj zc|rP1czLt}FDuo`^l-XTRbW6wMb>aOtj*2s+c!5?3$s|0WkN;+H=!b%I>o=@Ngy*& zrMz$9;EAE-+;W3NuE$p8=)6u?&#=*#B}G->J{dIT{JWyUpT%Nw$I?cZDC!CwF`85r zNr6vkCM#0&qC(*e%<iMq(HU85N1Zg$q`v_Xp^-)$o&6jrlf^D*3m@~Bh|WIw<daW! zG48&qb+&V_ou7B&`0?(y+|Ih-zew<**x87=&2B+=`39g^o-0k@KFXv7<iLCa&eOmO zM(t}I9i;}m*Kj71blT<<?oN?Z2H39Um|b-Tl|@--la8|v3)9Ty+TomW$v1&Rs^^{O zR*y+mK|4~wZ_OG(#(~do-U58-gVeZW|02??2i*p_)NMKn>pOX!%qtK%dZN89dEzbH z_ofSeABIS3rS7EYFuDxWg#g_EMTf3%V00W@O#vON<iY5;0c7g2K%7(TNat5HEFq^f z&6`to-!4ws4BhSg;ENpuc~9j5AJ47+!N>t4N5n0i;i9h$_Lp@n7mH&Yu)%M&k1SL` zW2lAZW11bOI9)RdB?xJr6)&xe1Il&|cI(z>j)~;8pWBP?GngqjtIeb{(f6}iKa<I1 z`bl%5)1LvSaA8T$5U<YhQmHgvNzKdyw!BQ8<qF0r#wjn`%MM+h2_{MzGrfo6T9M^Y zhp*0XYyp9pvZgtEO#wZbQix7~9o>pb1%a3X1|o&1D9_1ILp@*z7&y@D%BG`%t7r^? zB)N>i<4m|stR>GwXCGQcS7}*Z;Hd>*l@)$4s7pMj(B&0NdajYF^2s>qGfCJE2kCe6 zOezX%UsA7IvmH}*hR>aE2!UP@y3d%h>&m9DL7E|>?rN#a+0$hiGYuw64=gV)J9JsL zD`}eU{ttp*US6iovMtY~X=-Ll<CWn7_U^cqmDjy!<>n3?n9Er%#_n)JiBSnrs+ZSu z3Nx@e(Mg*9OeT}@vsu62nP?{cf&(-7qbT0ZHwsV;`Ir2B0{|2#YJG~m7*9_In48J% z+W>3O=u@MMjKkKiX=aas-bd56gzW^``q(A3wM`^p!M)LLV>w`app<oE?>O|1OWZ6m z;u~Kw$RNj=`We1K^>Hv{Tsm8`m4vuLh}uN4RV^*>GJu?8s6OgY1+Fv1b0I+4#)D-Z z^vncT7~=~>ZQ6~6VSjEc6eLMeoCT4u6*WoJ0*<eM%VUZ6=SqcAV=$Z3$D(}n&l$gU z{7TZ8K37r{N(0O{N`<elILEnA;rKumB&}HE#RW%EBuNOz=B5OU`7s`2p+-2<%C3U8 zKUe8@{M?n?ehpT$mdOLD&2FdYDvxXfsd%PEb5v%s8FXVwk_m7M-I*)W5*wU0bx(*m zy^ii@vp%tt4i!AzWcg}ozyT}KBBkH=Ok_#IhNNkNF4G*fOs^uft5tCDlIP_GAQ?l4 zicTsvAM1$ccZ_+vLi7sgMuyCedTnW&vQtm$0p3gGk5%CMMIg^*Pry60XrC$)52%C^ zH|-)h2}hil1&)XUHg?1pzRlu4(Vi1<eb@vjm8XOOr3@=V{_(t^V2!se8S>#;3(iFd z?z<@VG>WUWw<GFt40-!ly9Ii`8{w6DqK0wp3FU#gC@0w;;Rz@n#8hRB=;wfL^IX1| zmu%)(ao&JHZ30kesThzu{wp30r;~A>MZtIFSrl|J?vH1)^65N_f(J$;c<l|?=-0?d z6aR|qeT=(7l;z(QL|HzbOh?1v(?OKw50<mp7~Vf`a_vp#=8yXo_3g5=sPi9m@BYEr zBUu&Hu!{;G7*^FLnjXxG=`4~H2@Co}Iqj?Tm-<|<7ccIsy)xD>yoW4n!_jt@f%iq9 z3-Z_ZN25}yJX^W{7pm1NbuKoQ(|>1-iJha>)0G`}2>`G%NviG4agdi*lSEn!+Uz}x zw0ZwL&pr2CY|P=IG4XSU2<FQ!eQR=ZiSE@MVxuUo4%8Yz#%-{ZadgcYpUpr5%4k7x zPzpUL6xA5Ii`T0MA1|Va`Tl5BfudF`pfVcuJ&U5^cURxlZnwD@bZP|@<vhze1Hs#? zWhc-X0SqP`^e+Ji-sfi=CSHT%yL*D&ncVx;AAj_tAH~Gs@ifOm><IoCbjyM$5i&0I z2D;`0uB*tO#{}GeiwudF9xjG%77G7dRz)L=P)Lb`d9zWP2TO|#N`U?9j{GwlhW59u z{q5ID<EV5yYY)SB&qi;n_g2fCqyH9s`o!KubN#u$1bsF7CiH#i$I&mN-}83nG{=FL zOkG2mn9H>z1fi|zG%!x>l-Zc3n2MNAM?5;M19+6Z9jm$6+^A?4{cBVLbXwe9SZ!{3 zPe(UNk48@JSQHt5Z$&oEQ3F!3c)!Wo{?!Fa2bl@-ybASdwO+4Q>rl;eZ&L`g0^>DL zTg`5ow0gaEoOYY7lxuJPEiJP?=hWjEhO%E5uBh{<a9wjqW2^5WptY?7w@fR%I9T|0 zJs>47>PK#LJFt$4IMoJ&acsTUL+dmaz^o10k4Q!p)V#;SIf1>efuc;31*{{VxBm;T zlN-A*T8DyGK2mZD;IuFtUkGQ>Zv?C{;VFzu?#_vNKUvJxz-~hYU&SrL2p~B0yC*Fo zf-7gvtK9s|GtZbXG|y<Q{aJLq7dY#+)<+V>)xn!9%kh?$e(H{|dghsDjCn?TuQi_L ze{Qt)Uc*VeDs{%y>wMSgs(cP8{Sf@NY%(eRB?pUjALh(Mf4vsN-R61>Q0ZXh>n*3c ziM+MdH}07`p}<sfuY1m`T7R))h7l`g{z~njd(k`4v;G{7TNA2pt1{G1>_ud17G$*+ zZ%?;ME(oa-BIDjz%+-Vs7(<YY<hm~?@$BsS(_YEQq5TDg1x8wYrzJ|dT_+XO+fG9& zy|?_<T|Aa!uA+}n%GL(`YM~%r{d@xM=+QGA7e%j~r>)kI3Q<^%_wkNXHco{2YC5Bj zL5fKauzU8y8#)WC7vs3yUP~}eP7g=4+skuE8es%Tzx3ZP{UE*(ehQuL1Kj-r0BA^} zbZH{Z^7!57egK`tyqM3($H$9bDM$*Vk+|NJt`we#jiM;y`zJ|Y`Vsf16yitdV9*#X z_8XBNpWZ4b+sbo8Hq!iAU5uR_&KFxG@}blH>E5*0e@#fRZC1turB90WaOyhofERqN zPAU6S-j%|9{GPr}(R!SPArqVn76!RbQsi?#J^`q5PEndV!V9l_=3M5LFF0{2Bg(l6 zW0D2wqzOgX+nnjw<djk8D5KmF5Si*paMxFpaO__vgr5|cX<ZBlKyaW54j9Y0XtmqX ziM3weXwS%pFG?viY9C*&=|cP;-Jxkb#*llLQpRZN97L2U07|_{V(SYnd=55JLa4|> z?u9PAjgz}E5fdK6_`>kFyf{vH5Jp)VhXEtP13&_=UKJC3xz%A3{B@9ZE+MH^D}BZR zFa)()UC5?X;mGuRYwZr9pMAg-Ql4I-K?~v5Z}li+M>%n*okEF&>DYNu_}WeY>E|V{ zJ3KrzM(Y><09Uj=FlO@F!NK6xwB{>nDco~-c&N28-|WRe8>O$w?>#sOyipQFJL5?4 zer<os1550~v?SAa$e^u%rEYe%D1u5~H8M&fZQ5)}7UB{*o)$yfLdws~`4*qpjjb{O z<#5LG8C{r159@y>hA@jZgx)PM1-|ax8V8_!Q2_LMvm@<y2&L?<R;S<e%rnpAjbXJ4 z0qhE+<@)-)_ueZ&_KqBx-g@TjU;t56|5FG8*pKEodBfm&9c~Kjd2vC@?Ic}DvnJVz z&f2Wk11O&2jAIF`yZX6jo_QvKYIWGi|4D-QtQRA-5%nm7!QkwfTc<~k^j4qvki72n z26wgnF<qlK-j6In3}r<}3)BhR3}y@MFnh*lV#?tV)2spsS$V*!I_}#<4QOsN8g5F? zSUY+}g|yM<DwPV0WLG;{p=MX!iIa0#mX%$hmeIbmU}@sjXF7UnldVgxQ)3v9qSozt zHi!<Q&gd_q6-7#Ucy51xKW5!E7w-pr`FWn|bUK^igIM8^{Q#EXG7n9}XIYJL`#a-q zH_uDW5<<vlKFPe>9WTB77+36}2hkUxPoU4CZ$m$bP~!B?MmP6SVf%x4%Y&Y0xk&rL ze<AMZi^?-JI*JbE9fCJ#@*C%3W?Dn!6OiD?7t^#EgL|)0Wo~m+cDN(I5nk17@XK~r zr&<Nb^F}?|Bt}^Ps{ltCz%krzx7!%1)lNGv@JKbZp?AH+TMJ}%@c_fr-i>y|2nD_V z=4P)CS_J?QItS*<*m$yhwFfAQMtyCoUe_9iH?LJIkz$pz3g_k&7|nUTer~PaDDq0R z$ENVEdq=C)1ORYct&}&9pwIoaoKM4W+G?c~qB!k`koPs(Ng4x&wB6oZT^;*2LCEV% zBE*qKC*j-SBJ$rGJ8Ma*Kvb%n5pE+;JvQ}Dr6&MK+_<c85o~P@!pWh^F?L?L4NCQ{ zO!a`JJsbYgf4}rMz~O2-xDa-3tC*`Wrh3U#H&I+jIA^%;t6hdSu5h9j5gs4A?eBsP zcAP?n)3su1L3Rgw?QDO#J*<y6xB@`Ezy<P53dg|0>0eslGj$6=uJUUxdk9ymyhD@@ z-kFCa;oNS>sRZg*CaTDryVGtLpxd3^lf3=St*b!9Mk2dI^hvG89ooUgbAh#?RM-x* zSoD|G^)P~NcRKBMK|{g1|E7Jf{X3(_?k&<x1Y9WkUgDf02JNjUsG|bu#-V-t8F01V z@1H75J4H+kUZLVnxAcG5gx`2|kZ@+ik#OtLqetm@e7ZSm^3?HXtWh}p{4ocP82n;F z>2Xx2N$|tnZ-wti8|Z!x|5=ka6zrx1wh=G*&~y>iD3_45yvDOVnZ6QDhQV45aRE6s z&PA!j8}2spDlecB$8pmygLq45jl<V!M#W7x3ChfCLaeno^{`TsG{XFbdoRc5_P_J! z<SEH-zr#|>mYDp)z4zYxY8}UM!nu0&h0~``i~2#Yb*sWeUlvNKm)|Cp260&vEbrT5 zT<BLts=K}=thIX)knvbpYY!+HudlEFQp~y1aUA~=LMX4AE#cGnG$!ANzLo+Jso2!X zUI6PnBJh{=!%wYN!~N;D`o~Bu?<!_bZi)W;T*biedE84Z9#+eYC^kXnS*3f>OC%YB zWq}Fc0|+lC;2L?%OQhmCF!6^F@aln&I~V?5<%EcQisS0T7EyI4#~2j-Xq2*-BhhP~ zZ<TET`y#w1pK_lvd0lyz#IEo;W?6@m9H7Ntt69`u=dIJ=fBfNJvs#~XDg^~=wZR-o z+@H+gLz2A4hJN0+RgTIFH5KWjkrbJ@#-|6wg|D|2MUZ8+S{%fmii5aT%QA?f)_O)S z2(e2dp&lTuRg0+N=Y{3n?)bvyX1n8zah>+&=7n*$>vUKoB;0u~AMQ;id+kTI-j-rt zkNp^SH^pnj+99{P@(F-WNP=g|!I1~<!AvEpo*dx!K^D}BYxj7v&H_h7(<WUVwy#`i z<`*~h+P8YKS2(za=r?l1)xkIm#u%8u*2Qsp!`WDFZtPuhvVVaeKuSFd@}l?cmw1m6 zI0zQiE`9gZ9`aF5@$gcBoVi?u<YoozC%8a36rf_k^%z(xQ~g$m*Rm)Dx2MJhE`)<S znYx)_t6brxV1<PD0MF-lo}CzHrNqQA{R5U82FuiWiW1M~ckYvc8@LaC;>r-E(CNHY z=t@kCu}&WQTnrD`-_v&A8V$K5@AAP_T({U%_lK@Sv_!WfFC-B1-dgXB@Q?B)7dK4w z8`7aMOEm#db^!&92^DUr57ZM~Y)|_MT>6GwD8U|~!yrfK^BvzEgs|ML!*`_vv${Uz zo4I=&yi)s6-`%al;UPe(NALCNwIlK!m>V{B2fcE++bm649iQ!P+@Ps~uc<L++}Pc1 zmS*(=46SQJ-v$yfQj!6D?%7n)y+rq+H=qyN71`Y4fS`wjrLhZQ12z?ZDBcp?PwuU$ z;3FAK%|}cjeko%w84rwyD4XPa2m2bn^KsM!Hz&kGeB^U-@mZSZ?O~A<JMh)I-C-9x z?84V}Ivt|5^HM-1an>?MnY|PT9>Y^0q+2b$)&zv~aOnPMyX&K$@4C~P+&w6AENGs0 z{`&$$Aw=M@2t0-d+erdYs}1*mTQYc@gWC`Bi`^U7uU~gk0@m7pon(~Res*+6XdC~h z)0!+nXlIhXFZTORYtk8gOXs=Zolva~_Bv?_UrTPg<BmH54DJQ<!?$z^hiDT$gRa5& z@Xvr966C{CA;~$Vue>HNGM?=THsYx^=`lWs?r2G7@*XyQ54T`JzFc~J`-1LV>$Xc) zh*N>d7(9{L%sAVx-n@8);#r%}gi@<;SPMZas2c_KrVzrmMxz$|CO1T*o7dxx9%rmm zscIfHlSIc54<StVI!J2AYl%+k>$RjA<;^&PN3_1%(+V38oDNGvyUttitAE89_?$A` zDj{jDT8WcE5!S=PQ7W`MUN(&K>t(aavm~rHe(v~D=YkNUsAd3B+{~lq$1K!I{a8Ke zt8ml~)@CnBGvK;f=`i+QWA1?<fK!2XXphF()!feDitcC0dZV(LryS(tmW?2`6mk1Q zIgbOeM;ILQ=&0#H#RLwt?=!Qy4o(p;0qA5Gt$tcF5%2^se<={$C<cb;&7nQi2HMlr z=QyI7hssmH7>UeDOf+|if|Q`j*|)Wr&$QjySRD$Xl1#MtIg=N?LuK0YD#?vGK@Gmm zYu5skmsR*l?A2GkNVh*0x<crD9Wto!rJZbv?ugwpr)6EYnmeuR#qKaG`IEL0_gS>7 zpy?&%k$a|8`7gWVzMkOOg}4CUKfz(7BL;kG^8bHa=&*fD9OlFJuY`#vJ%IYRvhr$P zWeh$Q+~Q-Mu?t02cib&1x|VG8n5pn4cI9;kb72}e{{R@lArPG6s04&_=YYoxV6)vi zFUCsx(nSEGgh)C!MrG}Sz%Ni=8<_u7;QQ+Hv4T~TFGV=Yuok3u4QO7Q$)?CMsKx{( z{$yL(6WESIK|h$!Dl|`=vc0{><r01s;Ye$cOpWe4$z3l>rWd3fc~0EOx{FZ~#f}S~ zXcJ|6AZ+mOWWeY3%(KYo#0&1?D2XmQJ932kkrWrFNz`*(_`WvNWYAs%h_g4EG0qsx zBn6+ud6jZpl^$pyDnY=g5R?T$Ap;75sA5j5c^o^SGNX*a_j7<+BkYMc+(<(fapy%W zL+q&c+|f{K;Vn~ai9^fde<gSkhIq*ocV1{2Qpdd`4u>)p-tmZqX=9=P=@Ni1IR;u6 zit}X=I&0KJH4ZfJfN2z0b_k&q)168jQ4E2nz-tdFV_jG*Iai`i0rO>fp%bDL=zi^p z0uLRy{Ggk+QS@XEWu~})M(*c=iv%1?+PbA;BkA8&5Tcf(uvWsho?b;Mrc7sLysmG_ z=HA{OU`&3xK8*40+&P&(oJ!~T^7QG`t(JECV4K0m-kVG&U^}s70#@9;`pawAu3?M= z?fD7D*Sz4aEFBkq=k#eF1}H5$0h*)tXn&hol9UECNNOjST6EY3SdpL<1R1qDoFNkw z!<-?>Z94f*#b}8!++cbYHN7eB7+h>htx4^0Ujd+aWeDR8=uDUnmrJl8s;L_on@rLx zH!XWvrvCKks)Ywt0AxU$zrP%M>Qyilgi26_)I{KY6_!cBYAKY-0$pzSQ!W<B+;Jhh z9~WHw+FGrO$3&h>76M&qK&Z}Fudm6Yt!7o>rTYE(ui^Rp&U2Hm%qxt2WzV=Pi{2Ct z1{)GTil90Hyuw_LaelxN9i};GwvMJ_=R`S{U#RWVX74L=Ka*cMIj5;I=o`FKdFeX* z74F1C*U?#YJ9<S*Df+|Mc6eQ3G`tM}8w_EEm0lNspn<uv1j3paS|3nWm5iuBt2LXQ zv*%{=n_Mc2Yj66~S{wm<z^!C<0q4`I=h^Dtd7d>Xr+qMKW=|bE_P+PMFDFU|S3;#o z-p<>^Ke9ktI(^+2#kI$QGI@8h*4wB@Q6<##amJwg5BCSoS{K}ZupCcp0@`*|l9{@w zq=0snnsU0M_&O?{Oukt77)RBg8OtEVxi~7HmnXkN5qjzQ>*JDJ&@<@U(BB|iR%2hl z_?&{4TW+!rpSp5e70_t`g%{14<C<b8o@;0~xyy}H6r~0<g?T8X9vIQ0rI2bO$hY1I zDz-7n;6`%aHon-NKD84TOs13BW}%u_JAVae$|$Qv#?KJqhq`%yow0w*_#H|qvoR5Q z-W)U=7>2_g!_r(?ZE&7rqpiwQW_E@{z>Vghndh9wmQf*|0-%BrOgOm7E?fu<f_l$2 zCc=lsF9BBo6D9~I9F)8~AVevRiKgCjONdsQ5`fzw0L5l{^{Fz3F~z+nf>Ny&#T>p> z2w`yCuU7K<aB%kY+BoUtilqY#)&68R0(g)zm3NZy+Uc`{VLh)@`!O~`sjpx3GzY+I zY+>Mrf}&EbrU9p}*=kj5p`-u+=P(dVX})(6iU|e}j(=IgRLgShNY``X#>bDZjq6qt z3@{2nuJ(&$DrvR)gPteM*W0aTBT|e?9!iL|a8jrDjwi8!a<zFNPAM$0^&CiUPHNwK zk0YSa^T2jJxjDga;^3(%)^$vgyYQ&%jfz6soOI-lTe16D-^PFr1iQs>9)2w3T;IyX zr_WqtcUdYzpE-LML+fHm4pe%lQcgAK`=6&<^#-u~1AKkKcH(y9xdkwP8+s4=GK~d? z@&#w&)Wzl|1LDk3DF>Djps(AD1!Z2O#l(Mvbn_na2ecEivNv^H3a~uNY9s>P%ebGP zZ!H#{SBg6(JD3vXA2x+0eBEA}S;oPBzyi;*=7ZLDynm70(6Qk5r>^$H1OqU_c)b#Y z01Dask{RI=2&P19DUJDaDM<!-l+#v5gxFhk@oeMEOAQ3?+1nvRQG-~FEonp%JnenQ z+84(5;U*wsN8Cav!5}$d^l^E$UTK{(!T>NaMoO)p6oO<e+DcqTq};3YV`GcCU_=46 zEoFzO7k}sW5efN3ESW-&e{RZYpu9}lNhI_hai7UHYK7KpSW(+_l92K6C~R%|Fny+y z`Fd0lzW($bN)5p9SK=Uw6PwhkX^eq06)D+lwcC*ld=U7Y(9mbFV&zrTkan(b9^H#c z51i(noM8P6Ko<kA%SCF8O(BVjB+H^!yA_90Hl30L>#$bM6Sn$YC?8MjHso*xuLE|P z^LVCLp*Nuqp--Z3w<>yJk*z|lf@;}bKc9`GT5qWdC+V~Z7n$8Y&f}8nzG&;*8W$6x zS;z4q&xE*?uD50`LSELKb)(&%PD%s7GBBG!K?*c=*L+*=g>4uUQlG$~8yZ`Jl)!(q zzazkB0p}4V5WM2tIUI12Hc#CLc=gu;-$1*S|N6X3mx!o#Z+UH0jXm+BbwHxpz5U9S z+q+fKOEqUK`tVJWIO?i2pM|P;UDjs)i4gm(Tu$0S{`_lV+xd1r0Z^XM*RecrdncIJ z34xB3iPD{1+o}#<33<`eD%1rIK;;3|D%2H#iVl_T>pO67f=3phH+v6yC3+Kj5BfOz zI{N;=IpshusJbDCPcz+jqBI3Y@=!l;#b)w2`g&b4y<Wjg5)}&zA#r?8N4zw7dICA} znYXJnagzNtI2=(Ka_R)UVbpdNhaayhX(l>e`EF4b$94E4vkDkWmQZN|o#r3ui(7*d zqBnf-8FUfdj;`oqP1y!^ESuJwaP=18PS_o@$xzGLbeg(?Kd{ls^~+F^T+<<q4+0?5 zYB!rpgTQO-cZ5>@p9POJV=YnHWc3e5ij=FoA}O)PCn<awjrHvBVDG#m9@1{gbgg+m znIYuX`MM?7Z!m_M`jdLrd#@z5kAHeyL1Ky>r{VVODJoO;6`CfEK5XLvc8-d&_?gj$ z#Iwt$`lkG>ur0RKB97?RQzP!w=UGWihr*_CA?s$_-+vh3+jn<&TlHE7nc;+08)XpG z^2`{>i{9?pBLL~NEQ2+jkUpxfv{t_+%Yj?2e=Q)6;V#1&<L2+Z!l5x4WVIkD8&yWQ z$?{sgwX4g}^<$Wr!I87SmkyRxYq{{~`iRGl0peucsDFCnrI&DtWIu_{!}?$Di_oXg zH=yrDKaP+<GfGvn1ag*aXVL_;h6`vF*>1C0be9xn`j_+X*F-S%k!*c{{zmeN;zS~> zOe7Y?(5yc=BsL|aST|d^eo|?BMAuWbO4a7-+TK&BOx-C(K&db+X4PuN7Gg$@;@ad) zq<N>dMO1bCt-HIaUt0UUox;~?#$@?U>14HfYwMcCzhWm8mV>41yC}J97s#(SbkZnY zofSn<DIz7JMyusqQ9u#mVN>xYzi30}IF9pVMFh-KE!Vkd&qN8}|Bgs~pmtn<2A+0$ zDWCKHm~j>5nRT>QFSi7aOmmq2(@<HawtHx02tmJ)OoZ=6v>VqXQw?(##&z*wQ?V}c z)OylQVC+OF9yHW*<}Xg@iBYR2U2XsWl;}5_W682iB+!^BMutIaSkr|Xm8kD{4cnpf zN~IDhlu}+WEXxphN~zKaD#|={>_%9olq$uXDZ}S2syUYF$QWacl}gZfHxn>>*I1?E z3!+j98k-H<p;+K~j71S+p65C0*p1CbP*EhE=LJltTrHUWoo%Wc*ZE7)>(KjPQcX5B z^hq$FS$bevEky!SCO}mJbQbm$7;x&V1a~F!3RK^qD?cha@Tdb`_rw@zQCIy!pCh-F z@zp2Az{VD^2V!o=rC|nmqk-`h84&lbedvafe{>AAfqas3em>(-45bZvC^icpn;k-H zahk<f9Ve0CJyW&(G%TC=WE>TRIGO{m$8k$Iu;psT1J+p?bfIF?78YIoqOd{yKN{!; z&%_D>@svV|Zz}K|CEIzTrFcLqFI0)llma^09b;>VTlZqeW4{WhU-P){k@C8<9L+ke z<F|Zy4thTCYbTH&v6nlF{Bqu8J?f0Ty?uN1TkZdq>QV6yPY|?vD`_^32UUgAx7tiw zuxy)kRl`tKwNqdj!tv~5U3M^%AT10<S4o_tH&PjT>bKmF77Dlf#bQ1KP%h6tNU5T{ zl^4cC!IyZRbyQU~47FQ|w%L}=J~sNG**mL^MJMTp$w)(7R_8+(_K=5~XkLDg5Zk~d z6=>a=dRQe`rlvW^554*t{jKY^6W<3@I1zWFc2FD;B#gv2SCX<mrECCy3+Y5I2LZM> zuS%_oy&S5T8EJYM$o{}3`g|n`&<VfUoCB%Ji-9*KPg-XeI*3kd!>ah`5y}0H3|=pO zRBJ?TYN6)A!SBTk_!m2L-D}zyg$%vW6y6|XDNazj&21|y+e|xRP@X=c3Q#rdY01={ z9yo*oGY;IY6g8?k)UEQjKfyCCSz6+zqjRudN$@c#PytOxy#;{_A`Xs2J7xJ_03bTN zP?D-R117};S9;kzriA7XUZtt?Yv&#@?h!-?(+kM{dA9bvAE>&)Z_S(s6h-R8PfnA# z<LcIoJSd5r%%vU1T2c3IQh={Ei1zRJIw^qW<jSveeMtN3%WLiOzAQkMvC1!lJoF3R zV^zJF=Xri|3jvx`HyXogyx7OWp0{I}ZM9cr520r@yBqtE+vV9I5Q7tW5TJjL`6TYP zg-Rrl1P9|x=>LWC6XH<3<@q22vyn(**KM^O5@13Jftv&auk3qhiXfRf5CXa>fk<$v zqcQo4|47FHT*3rz=Qz9MNNn5u7Vdg}Mjo9t3}gP_l{*xtUT^K4zH{45tE?$_YHH71 zBeINoq1)NR<;(TKIUxN<MIev%35btMQrUGtuH)Unam$kQs0e`V&z*VJ#K(K1l=Wvz zWu0-4?Ay1m33#bc%TX2|F+Dm5+1%vaJke;&*RW8SstDVvA#7gXUA*)*_I(TIxcq47 z>5-y)lbl4{;k;vwk0o|Nf{OJqrA<(!;?T>{2Cu)fJUadG><Ib${{|M|_fVB!drS)y z3fQVD_CH-j^$7l8Y<jA$Fik25!q{}TQ=3rajK8#FWo6f{$*L$$fs;|yNk$cYuGPww z8Jk-^bZGCssR@j0wY0OaP{HAEQ#u@V8+<OsHXQ~@HB!;2(envC@+;V)`{#ino|@Vd z8dL;KRS1~Kj8GiqHt@QPV%ZY9NP}02)4af~2gzJjG>IX+iuNpQ{Zu%`QY;vR4;<8{ zbC323CyUR3fd!J?C$fy>kSS2@j~)z}bfxoAv7r2gQY=KH=Srp0&P*)wjcn0?b4x}L zOp<YY-zS5>fER34Q$cgwiifdhtD4G&^Cu>2+LnsWA2;NI(~))z&9&-vpYG#~U$3{| z-RT}3m#lg>glcuzDA)@D75r>E%BN&Ny6<Q3CzCDs%a)oGb2X<p5p?o9O^;2))l62_ z8^^1fl3|^b!P_|g{bmY7anMB3sm)Em7wnKJ8EP(D>qN)qO@e{sM~lJz<<`IMB<L_& z!zK-gx5V?6Q!bxE%Vwqos~ed4L2dy}L8b&bD98%T_<rOoajl&sS6mPrAlIaRgWj?j zH30I3R)unyF~g7>l~7T}f`)7ujA4#eT7^77BU+@p#>aQj!)z|Foo{3bE!s9TibVuv z|DHo>vCF`=i!^H*VB5hQ44@G$?wFgaPBX)hDTmpDEH5z3QQ0uqbaifS$70j~JT-;i zMF`0_2mLS{&zc5+Z5QuoHk$y=olb@nZ5zNav*TgtALOSa>%%an9PKtgP==Rp!Q0=Q z>l|@-k8Ff<DI}~fO!;}njKi1#cB&}?M4h5oLBRnIH1a5>)pJKw^b1X{BDP*kKTXrk z0T}Iey8uvV8}{o;PqVMH4Wphq=tXI;xWYyN#@TabgdYt-|L$tF>Qw%+YF7!d!_~Oj z$_<&T>fV4WpU}bty&k<AeOU+I0*V9ONIU(sg_lg{MuK~E3@}o08xq2EAyRy3s_u}S zo)sMp7^oYUj3uemWHxm#lkZY?wjFylQh9VtpYtIet7tuftMQ3aj2%$~+27Xz6t`P$ z@(K^q{5F8=SDt$>Rr6P0n3<Q?^Mc2=&`RE6>@Me;!@h%22Ygu0dYuULb8yQ6JSIe- z31bHinByNU_Hl-J6ytx$=wDREpv%J_vH>urZV&>vOgP@Uxve2yf^Yq6=lDmAx>QsM zL;09V4g>1bcSzUg>Pe+H0U+)EohSkXvO+cmo|iXum{b7tJ{5SrPm~{U7WOQTSF4rD z(eF)GswxlX6rQ7_p(IhzAw9;an>t96v?+6=KQuYc)W@?~fNXYLM*>1yL+Ha0NoWjB zVGz7bEo_H&+>UJlP{YnW-w^;Y5ObI;tL@uKl8oIAc8*4)u`iB|ego3z7vMW%*M=$D zXwJ_!8*~c5G;(h`J5588DTona^}VHF8abYarTH)f2*df&w|RbH2HS{1>tGN)AXXE) zzXBY54?V2gX9GdRd8@dd=dx81ET)}y%Qt4J!9v4&>6RW*#R!lIjpo!VYHqgewR!MN z+th8;r=V7As-E}`l0>!l1%K%~kY&zt8<Nh*V~XK*l?_wsPR=O6sj34|m3URNO~<vk zrY!-7vF$cxrt3V9vCj1@2cq+D3e2(?bS7sML6*%d5oFmhUDv`*hjJVo1^{Tf6mx(r zuVGRmVGiR^g`O!XB5*wLBELef9?x++P|NK?DU;CvoN<6+##a@I2%u=9z%!jv0rLXD zi&pMl1Hd4NBBqu-SIl~vTQBCaOp_#0)rcr)e+=;cccn5)1&$X)QPh2jL-mJQ4RvkT zXD{>0E0q@jg&^vwmxR4r*>&_Hn}nFaev`XU#Sw;OIK$1XLwt_Of#$65Vc*7LiKYhc zFyLoq_ReQsJ*}x!{uLXo53skAy0YN#7Vam_lY($x9r%X;U;dO~7?!R+=1fe?$1F8; zU36sLvS82D6dqnxUppN}YaU+l1;>?vcYL85a<DI*NiFMAK_ucBl!x@nR;lP})dmkH z(xu~~2qhlohFiI>)1f7&Cs_M{sJa!xsEsSaT+*|PdtQ7ij8X;uVl)naVPo(|Eg!Hw z+#HSns^@V9nf#g$vCVON_i~(#`-8h7Bq4R{Rrqgs88PHVDUj{f6puKG5VWE=ZgsSE zLSAjv71oL8CwSebN$kgBOG423>4Zf7VAJz`h>rM^nhEQXXo1!@$W45b5U=ee^$1>r z`@0tr4ig{4br+GD`|YB7@%Hqsy83XJX8ol8*7VZ1zV)rTIw@)X9ZkLQwTAn>`|rOW z<7+P>Gw=?8`)A0^)Ko14hJ3Jl|LAjZSMH>5wVbanT_Q?uxV(ntd`~X@8}EzYJH0zY z2+6Qy&zD^XF%J>8xB1Kyci)RTflnL>I+y}us)aZ<EK)Kc^<>q_Si^Tmb@FAZ;_7h4 z=R&(z@AGsJ&YVtDK&LY}P5Eg~TF1XJ8J>x!KLbEz^8QAaA;b8ac_%+_KKOPj7342E zg<-GP%Zl!@w(rF9^0F&td;7G}ua;%bnP}~$j$Z70x@P!~6WKuB9KdiN!B=$;P#bMS z2jeFLJ#vJ$o9)1_6+((!gpyTw14YR?s&v6`M?Q{+wF=o9Q`e~%hIFDns4A{adPLXB zajHW;_Y`ILf)5&v#%kjNV_i(^;^|L0dMuZ-iQ=Bu0JP5;Qg)(TBFlNpg3nxf>7|#J z`4UrovYyr~3Q&Zo1KM_gmNY76kbDg$%1oV42ZO<&Q`lKRIv8j$74xkh3_gD~bC%fe zf5&8%`er{oJfmUSyEs7gQERi=O&E9rM*nK-s~8V)_(}8!=r7PeVgbXwuE~XBVhDX% zwB45o0tay)Jc4_sXU+uoOe*yHLs6||Qqb^=`VdZxhEcqef|qET;F2kK#dgj$n4Kc; zFiWMI4B@1mSWKtN=%LP+aW25CQE~ubu0;u6gNhR(ptK}4aeMLaP>@Q&z-`xR%;Q3- z9S?qJ45?Lo5aitZC<?<Q^;BtVh_M=S2_RF>V~l+OL6Aqj83xYeCJ1sH00cJ1G!$A( z$h9`uC}T+gUN7<WYy?RX_<FBbBU%rFBnftmDZ)WH8k|&|L&a<0T%I`gw%27jRm;+i z9Rla-<X}_|JT8nq5hO`4(3;eGy}I|ipx2m3k@sN$0kKADqLnG6)*_@3JCCt<S>VCs z#sy*1M>uCL8vu?4OC^BJx3pUkpQeFc;_KD$-dCVXj2Q-gN2wxYwc54=&gI*VosgV^ z_LbFNt*B{=6Fd~zA>1H`VRkpVnp;Nx)C!Xunnw|X?xaKUUpJi<)Be6BC9$)a|4My? zE{vOm@G_!r00nF4VYB&mIh~iYg9s>(8Th`jSg@|p;f0u{hvI9OFS5zt)|dBVl|$vU z6%y<g2mxCbq_C$ekgK=?;p#>Fio0BH3hi{iubmdn%VpR9tpGwm(Gwtr$kciTn<($U z{N?>TGPts?G9e_0UIE`4VjN2DDj)r@1o8P-1%SBv`2ysJKU#5I{viYbjGPvFW5Y=8 zMi2z>f&dUtHuS9m<lTAmqoECCh;b+b8-BEz-z`DhsvA!te4QL$q6fWPH7<b=-HRmG zPk~K0n12Wbm*RBz^zCV1czJ^cwLW42tvt`&2QND6@^i%xy8IPR8=2?QRNAfT&~s|{ ziZ>32Ln<X53f}#B3D_Tx#}(j%<VuzC&oRzL5C|S%9DLiEv!7ev-Q5*p*99OjZwrDr z+FAIAcnP0DAB_3riiE>DRpHUY7*!9rt~;#*bgE){_|Em~WF$;dnLG_l7u{}mxyc`v zV`6X6n{l6Y?|ChoSNe`AG2bLy_IRaY0h~GB%I&PJZdT>h==;YK$}3=;iZ2$8=bwK* z|Ev6eS3d!#S3i+KoWa}GWyya3S6;qM^Er|u8h9L-&#S&&AisCHJY3Rx89#|`Y{k~{ z&`F*D3fQL+cLP#*XC5LNQH9U17Kr2e+WD&a83EQFT}}zS60zLq=D8+ITQds#<{l*R zuC7{#hB>1n1Q#dGa5#>T858OpGkF2GSNV)tkA_}YV*ceFg2&2gP5HU+;_facr!ZiD zJutv{J#fpBwFb;a=b3+g^@};z`exkSu1cr3bl|6M32JzvOaDEq^EMX-qF!gJPS;Y5 zyL&*w1D-)4trBSUi#Z3(Mz00iZEi}GmMb5K_1sP5P~6>RNb|sCatRhV!?nJ4$C$DX z^@q-?XmZVVWGohj$_P~Mm@F%=D7yVH?u$C+qt><|7YvmRWz(l;10HJ&3QwRkC;%8$ zX?aHTV0LKxc$FnpVdE#!lk4Ioz(H)x-E6Tj@rnKb7%-cGLH`8TdL-@+r3=+S-xq*) znH_;sDC3L_rG%2j5JchC5I&L5qJhP$!%gmkL`3Z6N#Oa0TVFrLq}e4-t*_e=kHTV1 zU7P)1B&tx`K4e^k5kDf-pt}#c3$#EVLto|_h_+7w<e2`HvqGR5!sj-dDD%U1<j|vS zacb~3WZ%>6T5!1A7cS*+mSS!VV=^IzT!iUt0+%W-%-RYUP6Tw~VndbtFdDh+hTnig zB5?MJPh?oo0UV|`@0p)nz1y?j#$auCJkv4?pcr8(d1jOS&}FtqL@2sdmlR~QZ4Qqd zIl{vz&3`Tc<jtSNxQIet?xD)#d$6>*Pd-YrD%!B~bQphewvR)$n4b&<ZjT<%vF|Vv zcfZy~5qChmkb?Yrb?2FeyEq;d5JX`Z9+Pxy@^K00Y>O>gSy$-D;?^<G@zS3oV)p#I z-~DcG=xEn}=J2uOySv!8b!s2kp*Jnkmrc>hlgO))=y#01$AD`m0=ccC%uWLF2MGv9 znE<dUCHTs0-?EITn;`(3xS#_|ub)Uh+gyl!{GT5Pi?y{P0KCy|Z{Qo_I9Ap&kpxx? z0}x`3bBLPF!JyfUAjcYq07hsVB!XG1VlD)~m2bS)w4SvA+F3nRlJ)ycsxOS=SOU>j zaBG8{5!L90Mhlx`hL^sdaBhV*VXvVG%L8kebee#S0j6oHu0fqXnxi|py}CfQolU3d z<!AqNYkNB7iIRXTiiP-Zd{(gN)t-xfG%EZjNn@roU_x+Cw2$HyA(Kn@PmCkdePi}h zc%d5WO?5VkxFbJnqs><P>i)sBTbq%+$=aK41Q7}d1%L<#7e9US<Vi}$=gONOQ+hH} z14;)fd+-Fi6do1u?T&?OYm4LUZJ!@m3z@rB>sz6-U>bC<-v_2>7wzNFK>Bfiizt(1 z9=%~nE1f?XshQ9V^OndkO@DxYLi<I308(0b)=CNe!NTh^)|@%<TV>@;ty@Xkg+FAl zTpRC1l-JkS&Uj5?b6)H7ur9uw>(?*FF?88<JzkXbXZ=Y(mfKN^Hlk`K3%g;nGP?Or zNJRX$-0$D$`1Nn6zyHdWx54|JQqb$p9UF9GMwv=e#VCur1Lo%49w_DB5A0f}{<rJu zKq<Gge#B$<CGTuYDG2`MWc!_8;;=umzT<G~>U8-fTA(-Q6mG^8a<c(9Lppiy2R)}& ziqA`mbsj*{qL#r|6C4rHJJiB|q-(BQkKFH-B@ANcHm-LD;t3G?&Tk?N20NOcXHv5B za0n`S#Ofy{_+v-UIAYD)aOUVS5Aty#9^bc5xQaH=E&NP|<T*kwy}jl<&U1#zv*We= z@;8{Z@ma~{&dnhMvhb$`$fL*3-KgKjbH|QK5SN_0bliTD9x4<hl<2rDXK3AU9QWq{ z9p5~EewUe@d52Zs4#}tbLytfHxDb!;VaM-wq8not+0`H{cv_Wi_><YRtf5HyP{g)8 zzhmKZY2@udae?m*U6*Z{gqjiK*W^B>yl%DY4Sbu&E$SVBlGtMJu`0lMYHs`dO!=d( z;=Jezw>7;xz4C&{!e6={l{Y<cCaY=ntRwD23P3*V0sO1uyB%@cXZ|Oi<j()&Z|W5V zMLf?u`5klt-GLtI!RwKJtC&@O`aKiAPT?k+&M*;%L+@iQ0uzV2<<(eHs)2ftgaiz$ zhA8o5`RdNdBrKLx-#_5=mB?!7qq_Zlh+m7oEs}XwNN}m@IsPm)e(*?KsU&fPhTCU$ zf!u6pd+IabVVcfJt}$gmoR~&?!v@V(Vac>X&^$>f@Y9L+^<kP4bgnx0rk)n+|Im0# zt|*&2q8$yOpCEJ#IN_nm$Px~yy%<a~5o=a^L$ZMaOI|0d*Io0q%5$?V8sJ8AX)rGh zBpdmLbnvzMjXBu|ENu$o7$5L;-#7m@^kMWn=oR$G=x@<~rHO+fXM4NdsWd?BW1^M^ zEkTWXWXm+kv7-Xn)Z8$<;_7O1-F4DVT-A@tlqmX-d9QalckQpPHW!KXkgUS4$E&q- zW4-mU1oB=Q8sAWR(Dmv^4#cY8lx|FL{8`_9N3GFBINvXM@dr2u<_bflf<rPs*U)IV zjCA#H$2V95rqsExIeNA4xURnG`5EVt{R%8CJ;e<qB0%GIeoD~W30YQYZa~wt6<LXw zrb8fn<66J{NRrg=aMJqS8_VU$f+WpDy}q+aZAYE9Yyb$T?WpnosVTs|&;^L+c~y1x z<fai{GI(BC6(|*|#{T&vci2&>eUe*pRBB)0ZrgT*`A4yZAKL3gFOpkcLL3iC4P_z# z;Z(!ee6_8oy)`!0@7-kd+V}t{h(vmuVW5BG(QBh6J`U}s{6zLLUK{{R*A~fZX@10? z0y@t{RkjH&T8D<hxXA+b-C$Z9r&l+CAlIhKi1l(-8Z_RQU1eZFB-}TxRJs=(pjetL zIT#CcKn0AQ(vwo-Idu4<45ji^*~47O7!2WE$)m7AM3Km&-vb?;;Rn#<c%GLep69tH z6ibtmE>p+3J@i)e0XytbS%{%J4PLO=ox)p-1{vf@3U!PNglSf;hH2E%0QnZSaDYl$ zI;IJ9v?rIqIUF_^rM4-nF;Y89HVo|R22|#%5nmU3Zo@k1+ZifdyZff&G6p!9t2z#N z?pX8__RCdpx`&i9i<dt01*$wR2omVJAL=eE7HfP|EUI17=WJ2a0}S<GLjlHIe$M@k zVoCFWwjL;M_!JJ|w|MSfZw)aI-$P|IgO<Gj+&*jP$y^T}h9~NuQcn`@5?&+pX4xEj zPp+=^zN%=+10q7Mv;Se+uftFL4s279{9x4cB+=abL*f~3BvU%WCjk<kv5=YOHU}+$ zuc+z~=ll36jk)FPJ~kNr%sxVGV`ZS^*<7gb!c2E~p|CO~{n6(zEr?XeAJ}RC*|#@w z)dDC}WJQZ2&gsgKk`t9&_|oV+Z9)*wqjbd_)a}=sbl}CKPRe8VrTtK#yyK8!+i3<* zPVId_OHgQK=Ep#$T>TUvPCXhOlnX~2`{I~DfK)zire2%c;GxAx3%70q7`dt9)9pj? zx<73N1k;epaOx?d@bJVb(5J*249XymQZ>Gj+T;3`P`M-+1nem<Z9eR8IGTF2EYwOK zSp}oyp~@gf7Y?tGz&P-qlmCN$3p#s*QSCkc?`oHBMGv;OvMZRL4%Eu7iuy37jg>v{ z>@hD6Jq_dX?MPKb_dD?`$Km{LbQE2ow;99bjwecf(Wd}MCh|X+!xB~%g}N#*F}q%^ zsfPB&BB^QRCytD2oa@wmy+ujqTllcb>%8!%4%7Tzvyg#mIa~N1V?Nzi917g#OW-BL z$>%h4J7X8owy}C?OU_<4xBNlo%Y6=vZH~<kT)ZtMGWCuw#r0|c7MKA8xpVSHQ`yS% z-;!qX0|zHdG8{DHPc%3O;tz41tGj(k?S_`to$?Tc|8*5I^^RfG7BAQL7CNYuQSkb{ zjz_DXI<kEU_H`N+t#1G|M4^mp<|L}<S{2t-@!dHF#tvZ5c>WX@jGl>QaP-PF9pG9T z&jf|L7kz-HVsz^olkro9(jQ~70<A9px`GHSb!9I_hoQ64whc<yY{!chu6LvM7QQDh zOq+tJ>@&@MiYS=VFKpHk=?Ty{O!jZA+UzUsCz#XV#502Bd6w{ugIm6RDKMt)V{D(w z82q2=swk9?{b_NSZkl>38pgTTz&LhaY&H6CdfZb9mvDNkxi@QWLZbLl7_u@cYpL)# z76u@E)0UOr2-M?JJ*l2Z9rV>;$5z28di>+)q?t8zNVoM?v}hYTjZn>L16)0EdiEqA z1fbc?=#vk)aXX4k`P>%C)qBHEoKiOAm|ShUthY)7@6mAa<NNmQvpmn*cNE+O4DO|a z=U8|;`}_9oGmL%v-#HiTGEXYF_Bh)RSMXVE*p8t$vGe5+;Md0DjTPt|B}ZK?2m6== zT%;-!oWI8m2ZKHsv?q%_XK6N@%Wkj4XSqIp?~o0-PTtpXJMDJ8G$?NrMZ8ETd!%(! z-13!|PU*q;%JeKp>4q`bT-6WOGkJb>V{>yA(Vjp}@&=$Eu~d9^w!DPu{q4z^+jt01 zpm)oMO|iyG6hQ<(7gM$3I*39dUZ9VI5gR#27wzdn_5BhFemDSlHe4(ps86Wb|69aN z6h*RZFij&o5d<UTI6<{-Mc@RDD4a+*nI{&ds^)4+mgkl|&m%milqi`{04tHJ=K$(n zlA*(wBuU~K6D3Y#q7wuG=Nn;4Hre9`G)?1qUJwOMGz?ubF-I5(C-*vGS?5Vkp}wLs zRX2%&@eh69mna3!78RK%ygvGyt{2b$SSFKUBBy1T$g|ZT2zcq>@(Ey~?|T%zjDE>8 zKl-fzu%bVD5rjmM0%^1&Dxz8Qwo+)ew_?)eroKPSEyqyo!qIZ|Em-jrosxKT<q@tk znt@04>337<V(`;7!K;$y;Z7Ar2_B}*Yx}VWksU`jJRbmrHyw4A0>KN?(jJryBPiG* z@Jj4?zTR9tsuDC#25$S&(OeSN;Jt~})tFe@#PdNm>;eYG#vCdVk@RbpPfME%-^+6h z(KOt731;J?7J%>9lwvWODr<V#<!M|VUM}Vh(=c+f5+7!Sx4}xyfGAyHE|nyS7))}3 zDhwR=aN1@5^p*0sLtLu8eOZdFs>5>S(p}5BTs11>r7_<FC<tJCp6uM0Axg$Cm;8(( z*M_wyVLJeYr({UhMqW2~KF>SBYFI!bb*{H^C{B8Ml6>A=B3Deer%UeI+}vaW$6jpt zA3*T-uxsIxZ>DL=F(!Nq)l=k06`P6uh~2J1529z#C((D&kI=uNU-G|0?ajbi0Obz? zBdRg#m>E6O^*vt(JM}L7+{8nRLd8=!F8Mu;?X87HU7FQYrzh_N2ZBlQ!&#($ml+9g zqnLd>+`<Jbfd=wH3*`t7n2q+}R^QWar)ioxDS&A0gCGdJ*1iqB<OYecsl+O{oUV*z zrE9E{zb>7%or=Wl<}HaU24ndKZ#IP{(NSUk3>ae}-D+=G%~J^9sg^bbS3d+F{3NAw zX7z7t#cLbmdS5w0Dz1&%=((#7Y2;bA$Mss1?KScKd8o3^d=SJ(lPICnK@j>a3Rt~O z;ad_e|M%P!Dua}k&T#TvC4^H4z4RzLgZ9uP=wrGH0G=-7jk5V{Q|*2eo5j}U5}2)U zOC2V2T_jP6N#`inswB_?Q|!D0i-*X3Vg>L;T=aE~H@!sNZpp0i0Rg(_d_<4r0QnIb zM-_mqOR3HpaOq6WDA`9;>*rUUQRz%XD*VSRXag7%)eU2ju_pw8*a2%IAxse&1JK5} zy@ZV*x3VatErOr`U{uKXTCv8^O0QL;(j^&&$XHx}HPM6GVF{&?F+k##=>lweJxiBs zw?ljx4$-6NP3Rf)JbKCBen7S<=C>)PPR}kKO>FNIU?6c^L8@dDa0xM!Vmg(@9s7}O zi$+|FusxR~i$&^#YR<R&e5{|9e2*o<MC+zDZfM$bN!0vdgh(ed^hKDTPnf0s??6FX z=p$u~MHAs(1pISW@0~hz^L*p@z$)k9mc3-dUvAi#NP;oZ`7~)Rmv>#*InkH$d}OSQ zjBUh`T@@~(RT7P``OaG+G4MwEMcym${%0U~GsBoRto8m3)EkZRe6NweDoW1=0Kr*G zZ~M*OHg2z<73LHNdrJTi+)e3j01)g_Y9_<c=gUT;4#&K=HlV?D``X`WHB1tHW;lQ> z9bo07*n>3@r6$WPp^>o=83W?x<HrCxoy9?MJ=R1RR9>`))hb|a>w%R+QL33JG&3`y za)+URnUeq*WsSfaa|T+&QL_%%2f!%y0Z;|FE~F4ttzP%l8<}F6a$HA3y*V1TjvM0x z&q4ih$w{GG-Y@(NJ%PReeFOTj=n#W)uLvNA&029=F;Q-3ho2ly0+mfD?HR@jt_=_3 zVTKbB#1nRqvd=zDn}2p5uttYYr|?bJ#u(-DqSGmIr}S%7enyU0HXTIujNu&8GfIt6 z`)7?PKy<ot|F>5V-CY7eDPxqefsRbFz?#4+$W;ScRL6JQ6yigs!!;okjc`_-tX|g) z+QTF6P=D*ZI5=CJc?&{A*^@jd*c`O)?QXZ9AgT-*{F%#J6R8;X3?ZI8;zDak)B`yd z#?lZpQj)D%RN_;_=m!nP{)xxf<1}l(gwTgwz%`sRl?(WCwt7DHmh$M;SMbNEb#ct7 z^-;|JOnApkr7|9OI=K<bMYU?Doh0fDWAAab3D!2;UgvP5UbjaSvh<VH$~_By6<r*& zB=(lFIChTm=(J_hRf>wyQijSIVFi~ePLfy?eeOfN4?l)(L~lkPN7v+T7Dk&`VLa4v z0rUsE=Znc=GTp@W5KrbtuWMNQdBI}3SoDMqhEB<gTx7Qa--?nG_66?sY*#yE7Yq5h zeZs}OP^jrNHUvXQ?D|7pjN7<15F7xcyfc6F;tXd}9ILwrA8k|>=jq%j2fer7N-mkW zE32ftyN{~z;DtZti%PFosW_{Ji5ksv+-O8rYOB9R$+=xWd{8=Tz+fWZQyGmKPzb<4 z*=ZI$t`7sSZkebvCwZ3Vekg2`vESYzq@14)==~>7XdG;})i-G=0i@KzSnZzTG#AoN zTO+<^m%C-2zZ`q$hv6tYmLXRXNrkZc+ElBWFH68yNt}c6yvR{|%q-^RR7&cm=tnWv z#>I3VYVM8ty(&^(;@BV;B@kyE#SPeFPp9*8`vdNr$vhvK@(S9SCrNC5Hvb@5k$Sy2 z4tzCsf*>fWf#bplN(A+~Rm#@uUdqr5?t*F&jJyG>)R%x6<T)lq(P)GbCQ+0?s*Nd5 z{|H&eFlGQ47^6lA#$4bWrN(4=l28&wtyZN<Nl}bOtv1Dt=5d1$7x~w6b!dbU!BLd{ zwly$yZ~t5C^R?FANa-9Gl<6>3jHxixj0*0Yl*VhuWEe`uKo}s^S_|4qf=QAVg?E@Z z9|TfjEF}j{fKW*(D60))QbutYQ0jfPmSvPAX}4FeQ&Ow09qD!nnC~XlY8%=~f=QYb zkb8%T^Bw{ze|)nrRg{7@+EOM({M(x&q*^_4q|+tFU?l5g`ZnsRRP{Y@I^4{r<LYeB z<9tgqojKIuaqtQkcZs$Q3|8#Csy-MyhFcPm7#T^LEi8W$D{p{aJ%zn+G70yloWAVZ zf1$WVkEW7?{>65e;a)nxPuGQ$%^rPpJ=_V>&km3UH%HI@So?YxftS2*f-a&*w9Ua% z;S{ITE~Bz%z0(qZYASeNcso70hIoT+#n2FuZjX8w7eVP@>ZTn4#nk@8tgN}uOWk<6 zPpS-b{dv3L?>G~WqStaH90Vtt!yep#1qzKpVopu-q)s+G7;Txm?asZU)R`LZJDyO; z3q^^{L1X3Go61dO7X`n;1XsO3ummwA5W+jMi)C#zw!z&3G%Sm9(OHd9Rx#^0&Ai~g zrLicLeLk_6&J-FFk=qu9FS@yV;cS)aQ1$D7WQ|I=e)G*YKQS^ETNjJ+-f8)|t-N^a z;OVEI{@7Q%arJF(YwOadBWJNS&i!b+{Y%b59M_vk-1_aSR*z#is8lN7I6ir6Yz)J0 zC0pMU3HS;8OTY9>)0eJYJbDzb{)rkB-~81<5CFZ==nE8dd<>=_)wi)Y=64)8g0c*C zusWNTGu8A(_zuN~%}DEblry3%EaOIx(yjHIMD6wY*l^?Q(W23*Hs-GeQg4qs5sb?- zYo|vg1l#S7*t>rHx*!B*V6We(A;^8ek7RFGN(6D=h1EEs<Q^{^SXQfb5sthkzlKhu z`_MbuE*(kRP;yFh=$agqCaCS>I&qqWzwF`x5h1-5Jl$kaC*U{+=@IUsOHwIsH5wiM z3_G?ZXJ2!5ROg`0XDwuq0ijiB5#>AN8jxp-MV+mT^Yzk6=wc7d1&gX&U98pPXs1d@ z!}!_=O<SQKHGT3Bk&iE(8JJbJsq1g*<(rzq{x#6oqk`$_phRA&pXoPv1NJK`W9-4l zIbUqYlWd4oE01MI(akaQZ~BedShLTm$VPotJ)B9N+N@uX>S5(VUF3S4g&IM$M;nJu z2H10Fj6HbR@EF4Zr)f4U7VYM&1Bt%dxw#{IXX6zjaw79aJ=J*;!h8#k8uW;xRd_Xt z0^k*s7a+YZ|D<8MTgXyXr(}VMlJ|%5GzKaeKN4JGpG*j#$=r0bx|f3h7$fwo?eOjk zdp9)bP4%PC5REs>KG+nm9sNNdk1Mwq25#={Fd#_fqwbwHI)v_kAa(kiuIqMiq_JXZ zIA1bDV$sEcl}6p(9F(NQ!?tDuX}ldfGJY}sufvkq^E+`A<6m|xQPO%pmqR;{VhZ3k z=DUKITUXWJg={mQ2T4-#4s6foo8d=0p>y0j-onmW=P3c7n~$#UuG%`wFw4xj7J#Rl zUkX6so)aLSZ}Nfbc@W>s=V8nL%4cf<#&hquvm(CZbxi*ov3}7#FmtxA=l=(17HOzI zvTx6T4$R}ssYm7RC+Ch4Pd=?j&F*g{#jHEI+w+Ta81+`j$H{usVgDLk=G<hxZvP+r zJOFr9aKNj{6l`@CqH!wt>Fe_ALLErt(saFE*$Se;ZPEAhB!)fxh@gyzWmKukF=}I8 zLb}l%_96pHS$}>kbaiD5f{Eli2%I@MfLjz&egJzFm4lu{pHUhao~?Z1wBL7JIFk#H zTjJ9ufVR}_*MKzoP~7lm?>V+L9HdM@{;a==5|SM&AilSzZbo<d=5#=>1sS6-S9-q` zy^c^SRQxRwB-jH$H_nH6cv|2DF;L!NGfa<$!y!G2{=Cbx$mZtI%~&*znY5%M*~Z(D zeb3`|D{3ifjcv{**BBO_SH%Y%%+p9#56(eem}eF1yqI+gB@&n>+_ITEOw($3F&{4Q zyuW+*<+_>4w$Dy_^tY*oxs0M%*z>TZD7rz!t8{gUZ1?Gm892y-U8zO*@|eVNq(>wo zl>WJ}L;zjf=~VEZKO65m7|&wBoVR9>KlCv6{*V}kbK%2W#o(mt>+r~wvQgiX%l@rM zyOJcX2qKXNLiXiP-}`^7DRe|}yE)yA`))9ZgW>dvx(Rn!enw6(MhBj6e`fie-+C+P z{KTAe0cD<_nE!{BhEj4*RX#Rt&uHMnsUyt0t7=^9^+aEx?paulo^vD+C&+j6?aA|| z2ZN9xJ>^#V>4VdK&BYMkCj{dgH!ZK=^hL_+lN86V%L05n$q8&KEA$wf3XWvzp3~kN z)OS++PRgx|HE2Z;PD1IrM<`Y-C!A)LM|06Yx!)m9YFJr#-mDElCGX?*HaB~{wU9L& zhyLcwKMVawOgBfHn<kq*)8E|Ogy0w6RaAPKmIOELN^$Q4?(>yI!aLQ+2|Bg8xhZl{ zZeku7Y;JCD@(9EG)q}MKdC8Deteq~Oxta)BJEsh7eYq#S5$_DY@{EX=fJVOCiY|#_ zl2juSd(P?8oJ6rmY<B_uk^MpuKT4l?u_$Wq7sw??{y>r6$1IRU;X2J7BuVnnykSgR zp6AJ;Kg@5tnm&q~kB#<Q?0vGr)ZPDfmGFK|T*KTE25@A4e*U4v@;qzWFpfj^lfS4| z{>$lp(da}%aY)6AXG}o%iq)<7zh8OtSfi9TQg@o}hpPWM?t6CJOQr4Y_Nav~o~R>j zK_&M5YG}2zf~`}C;Yu{TQl*gdLFzc+=nI>=yk=vJ@xgf3<JM$@hg%*BsljLNNx5Z{ zWYvc==p=a7xP)ipgAgQ2e(1&rR2Wx_Y4=NW1-j`k%jFCDS6AHsR2$gX$dLNtex%zP zjw*^%KJ9EV_AR5^<%vbjBO_g-6Gf`EaDSi&h0I2=d)ayTJ8_4S&v(5B9~xZ;A1cqx zlyxeLhgfcOSB@PL71@Bx(=>hBTx@-V=^x;5R0b$xS=Jvv7teSHRSa1P27iABR)fBw zSbzy0k@V@*P>PN{)rP1$T~cA6jno6|h^$S*x^EuAW9WheepvHb8qMOdZQCAC7vJ4& zu5OHrVl$g*HnQ19BP&ron<*NMn4>EmR~Nr5O1DsgU25&}%P-fo%WJio^Z>h{U*EJO zdK%-)#nEezJ@(IMf?2%{eGH^3&PI6O+wObNVRRDp(Oc1b(evm#=pSr9t9qL|xe)2h z$Yc{4g+W>yYQ|k|@EYBO77j9ZNir7nRs;c})KGwiM(o1dqT6fiV|T0BeR8-A=EU47 z#2jWtZ3gASW*genyL+0<b}?lITd~63-a<o3D<7AvPLGCi^s*&0dwjsS{6KhFl6+s1 zB<g1*N=PO{2$eEEm7b>3<h6uHl8d3xpBUSa7;B!aYxF?sw*}i&t@Q_w%Z9MFN@i7S zNK*}7P|DwC1N7Url>{6MTAS|k{3MPv%L68AK@U+MScE;I=o@Ac`sfiZc#ty&4g?U~ z!_q{ndtkm<4opDHkV+5)!vUkw1$Dah^~g%DhS7s~NTB1z7&Bo;Vazn=88b~KQxL0{ z_YqZ+&nTwJ*!*J)Wi~T5ZIJZn;jO=bSa2C8HdNxINi6?ueO}2wFX2q-RklA22T?kn ziT>g)LGMPrtF$Tzq>&OoNlr(R4MgtLsKeGLX5vFErD7|EZ9myk6yFiZ*Gj)zRsN(n zRMHqlPwvB}kmC92@L5!@z74}pl5fY9bHBzw`Y=3L3U`OB%IBbR@Q*3ogX28=UOpdr zsIQTQu1AlccOnE-LD1rXY8P)MFN#BIr^vODkwTD)t8J*N0L`{?X#E$npsvokW4k_( zQyFrbUMd?mpDGzP@OrhFBrP3ymnC>=YR~Gbs#a~g()ff5Oys`oVOhSOO+%IyrMRRh z@Itezg}J6QyzyM1b=dO(wjGm0oOWe{h;lEqvo-vQ1BaCZc7iJn+Xz2?yPdhrDq$bk zCn;Ur^gq_rMoV>b{5$Xi$%9i$iypS(-?u(GSAF6^XXQU1e#$?xH+l>Uqnmio1V@X} zO}dk6e!)ly-hGvwM)zVgyvfcQ=1bn)Tm7e3x`KOYPLib7AFKFk-hPF4%A{siIBZyh zRQVdJZfvTKR<Q*MS)GE|^(cu*?NoT$mE)^h&|{whR-?y(;xrlI(7813c8@=?zP>JN zn!L_UY_xDtMGK%0^9Xml$CJpZfXCPo$Gctp<Ms7*N*6Li>9#+ez4@oxIFmJbO?kc) z%-oBRZ}vY2O2q5HJVjrp1Oi8bc1|)}S}DABVlJXfYB^7vHjSt#Y@7Dc(o=q~Bj;VS z*M#tJonl8EW6aDDQU5(7gMpdBIC<v`rQ>&=hs`_3`LV6po7#q?xGao~m;3crqb@<$ zqdU=?&<hAzC)G`+KTw@`E=eNliAE81FR8Ra+(!An_MxTUrrz7@CG823axhhei}O;N z<a}ciD7{srB!=gbUa$B4p&B{w?^7s+B&iGi!BwxSMZ|Y*GOwL-yYaMAV^=Xhne8}E zbLYP1>?f)jT2*>-of!7Z=hbJoPU-sayas2$p7WVb)Isal9YFF(P6=(cxcW%$iGYNa zp13(z<>3xpU60_IJi!|ne&sld!>g79XYg((&=NX~u12p%kD`|l;;l-0XP}>ku1$%; zcC%Hv?z2=)=DKIe8r2dq4S2930^`OrGVNgeSPJ;FKd~|R+>e7tpIBX8r8Mre<DAD6 z$9Kvpr`%1!ZXmB-w*uDqvEcI&<^#3UF4bAb_wAxC&wjYN8t&R0E89_a&wV5ta9j%5 zEZ_*xqf*8LJ6Ym70G!7uK>XLqUhjo9>3P%B|AS9h#Mt)IZ{S@pMC0f>tMA3AgKtk4 zbaJgp&>RCP4<T6#xP2sy%X|cwbR)+{h$1iYAQzg7x}Dfs?T*2)#3a*Dc5TP=J-^dM zhj)p0XN|DJiSf|2y@KX|w6B(;)!oV2xJ(J5<#=|=scVYDafE0E&vwJ{@zA!8Y-~6$ z!zCoyF-_OCizW1fSKTNTZPztTmr6ZK*`JEYrw`0s{*+O=FAF%M=@#K0s$+X1oUCVo zGkBio4Gyxp%n|jcjN*vJ)C`8Ks`}*eh%XCR&~#9pP3*Im`&)2S&@}-IU)ISA_JzI1 z$I+z)P})d`96zy`vn}#0IV6(!N^-Ba;W(a~{06k|JCJAwkoXm|f+)Iactj;<I*wT^ z{gH{HfPgl4ztNKg=;7^u+unHy$q(w5KigAfoTB@|R#oTk49n`3X}~jk&pzX>%Ae8E zWvaRh2?tH~6}+##J?_dW3x7Dd?`iZLdI^Vg&MnnB^{K|%b!wA-Sl!xvNFLRz&FU`1 z6?(Q5P31yGMf>rsLB{xT<)v^%e09YStk;^=!`7xNz=iAKxgP5`xE~OMU4QxUnUVb7 zGfUz$M(HX;ac*p)xyE#GXLVlHTm5g~+Pd!(npJr2dd$0MC%PGbqvWSlaiLc7?BGZv zNMc-J(<G#+!sn#EbQumt&iII%V~k}J<HuwayS<8AaM;plIMvaG*#x6B5;T+X9FNY$ z)|h^VX>c)W2@;XKHN^Mept6xp6SL2vAK(V_3YIG(=hpL21J_YlB7tfpF-jmOlVtRZ z{^N?qKb77m_SjQHBy^tn%6q@HKh#-UwH?RV@UVcu$6)VA_-0Dykk71xdE7UbAN?qw z&#R72$1u)o2kCx!jK`?$sN+Vfj!o;T<7S+!Q+@ppm~kDo>SRmx`M3WtP1l6i?Se4G z-aWq9!KdBh;a4L<s?-}%YOM36Z;s>GrmC|C^KtjExKuah@g7H|c3eMBY<;c;`(0Jj zc6yWT1$Szi>hAwB1eHLPjQmKeq&Q(_T5oKV<;aV>gAg9$5?>u6PM*_24Jmn3jQ2X& z!r&SYJZW&SKPyVv4=El0r=vM<^cXz#E{X;YZ5=FPe#ag-y>iRxzVQQ_%)aaRH?jq8 zmh9a!JJ5m6`E-~?aX~$*5;uOt(}=b6;!v)_rbyHg0lu*CR4ow;+fnr+oj}dGNEOr! za7D*GbzdPP)pSBYi{tKxW!II$eW~iwNyE_12P>6|&bPlc*JXht)egqX9E5P$^71kV z;q-xjy_`*;H}m5xbBjUnk&m-DzE?ND4IKXMz)Ib6Ih4e04g=@lKtF5;GYaagwp5P} zB5-xrXve<nI_T$nxCjq%Ga|5eLd(k6usn8HY(jI=(C9xNylkH*jMch%%Yx(R81tj! z^)JudLQ7~JeH8te6FsM1EdX&qj=y%m&=sW`RcI^u-NMR*fiMVIC-9XH5g09=s_Wbi z-h`5*6@Eg1DHPXJvnQN|<73geb$uL1Tn?odKWQy2wyuRZM$V(`n<@RdV&^8_X4}po zv%kkE&q;z2-L%V&b2Chhb7z07*WG;c&Gh4pk5X;7;Y;s10}({w14=(v<(!zP*0-{> zCF1Ht753+0{xfc&n{HaaSt5wS^@jI7<Vkw;9&{Q#NzW%~qqZ)D{5<1$C~y?}8AY^8 zdxB^rCpaL~;OeqU73Hd^p9)Wy0<MZs`<VbbHjAQe4PYa0y-Qt!@gPdsrD-~{f;_`9 zYCQE!#n=Fv<1ioFv7RrY>2R8Ue`9oSRjB`~#*5E4j3^oDTd}b;`6TdXyHrH5^-cT; zykb8gyTSz@@zvz<Jwb*hu#vr2lZ2sjbT0rNAE_#*nUv^55dbJCpaiM*8A^bS5Fm*L zI6{ZSVpLJ#q<|+#CtQF-%;=`Mv&EQXlYC$5I~luI&E{&gIIh)lSxpeMF{i1b_!Z6M zJtOF*$=J@iXp_g?`J3U`Cuy2E-MRCV9>Fx>Gjq@UW3F5>q~c?g$~jdXQ#z!my)#10 z*!picDvdoOV>@@QQHwDcUZR<7yZ+*0ILGv79JoAf&I};Q$F;I1_g1cI&i}$CTxTXK z{`4w8^rz!D5t%K0=BQo(`F!)4@h7N9sdp0~|BA$QguMNMG8-Fhp&JrYX%bi*%8_&s z;<tX@c9We$9UJebkKH-s4yRzL7zqje81m!mHf??lyJ|HwMX1Tgx#>hTG(<QXqF-M4 z*5{tF+_+O<U&mIf0exx3RWhafRQy*l3SRZ-6L;NGR`*ce>Z47zP>r9Hl3Z_5y72^Y zE%%>a7M!yyl}ck#T4C&DZAe9+iA9C*IjKG;Uo_3oq9FPT2Yi)5TACI5pK32G=6tZq zns7Ei<U#SLPMD!<5Qc>WoX^lA#i2<zn6$*uKlxOEay@QCX+(TPosEKSS9=xCjec&` zAoZqe7SIS@%p;C6MJclsIz4{Xn2w+g=sP0*;1o=w&>R==Sn8(7P{{I#L4m}!f*8FS z+6)&layOt&wBaT6Py%3Nbsb8tTi3G&01@h@xh^RwDN|MD7pyf&oPU2H%eG?W^A$8T zhYc(FyrtO7PFir~H)xuzIW|*OW;>d#X)!m2?aDN?!<)|7YiI;Y(h{zP;<j7o5Dg&p zt5CO*XFLHzY6f)RX`Nklvad_6K~DE_hjN~t<4joNfdN#aLJU&`-n|P3KYUFX`l0u= zUnrY0W3pM!8CIcWS*3sjlHdb6vSeAMf@S1Zpcf51qeE}SPCggY&~DajwKZ22&w}_$ zkN4(mteoI8IiwOlqb`KKMkBx%2k6TlL3G`cZ^^dp`?f7xe#v!3U`_XI=*Xh31Ofdf zWChDa7(S<}wh~#kk83ezUGD4;PT3#}(GDL(O>b#K0_6-LJOr-!O#Scx09p}2_M;lh z*~UR%W5Jy9LTG%rLLlbgpCwAAa?L;G9GWFths9@LkWHaFNUoRtit?N90<*K^O0R}n z*Ha)pukUB$OeA2nw<AgarB*&8TOIxR6FSJI@FLG~pAMkkHzvz3wciW{t3lqLraL|5 zuhE^OXboNSms3*<XBp#rp{_&{yqGyt#LouIg+398NLPmgeEVrNR!kIM5nP~TRC}dy z9q+&ktE>HAgv+#bY2P&Q0_x$6lK@36r9Yuw&IV;i&{WAzpet<J-={PXA86>?R<9kv z`_)O)=<}x3Z#Fy2Gl{e6XF>bIQt<P{lldG#w32XxN3LSz2j&|@($@BUN$lqR(N{RW z{{Q=cr3hwk1^(AV|3(jxUheVxQ~JJC?lolFkP<7M;^9%-#;5yACw>pWcWNKNQ_A8i zd9!nFgHk0R?UO=;1Eq>MylVgiFKy#OPXuj$i`u8swui{{Up_a|%spp>Z9`_0GwHN2 zdEC<;*b&aIuC`WJ&#$h+*`6~3zk_86q#c9YP{4>k9YML3m5kuhyFN&NQaxw{P{#|v zL;j|->(;NghWJhJGP(`jgC0hYd*n>P1C6GQriufK%93Jx^8?b@Db+gDP&fnpOVZ)C zmT*2tLN|zZhrGsz#hnlRB07CW@>5gY?$lJCFh*?O&pCqZ)^pcWmSkM6E2Z>0Ghtcz zwE7RzT-}ugC+GV%VbHVP#+sjP^|F4e=h_W;8Pw@qKA)Rb0hFMSm#OOrM)57n;;VNO zfH-n_u9&XEjlZR62#!mYTp>{4dP6<?u9$GAu9G=(-Knx_yz6YcdiP)BUC>86aYH%B zF-pKl!MG~iNx6gVlpGJA!91z3OER^^EjBC!=PsZi0S#FYQT--~9VZTSldg}B)}16t zE!s9XX0enbc&|!D(*fHqs*(ilaJ*6cQ=F-vZ_=Hc2rU~(_f3tdk_5J0d`NNNkwVkm z2XK^!it&f@8CAzdKWY7Lswzwt@uOlZ{08%N6O|`8M?KxS2au~pnQ)^Eu%bQnT6ki7 zxwSk#fm={4O|~XW#qy}I{PZFPkJB{!Uu{j}Jb_UP4M~!uhdowXlAbSF481kODE;$X zwEc5D>F|}|&TjZFx}=rfJPxCzJBTYpJ9Q@!;Zh+oJLJw$ZHhL!r6_#*<6&I)v2ALq z5tiYcE-C0k=0J&CU)h+dXBj$KJB_6OmtPcjqmNZ86=J(eE~mIQsT#!OiRW?>ZwGaq zlfd%?(X#4w%N7LB1Buh?fh|bb^+drW1{~V8YnP!gdrovcUb1za2#!ZJ!6>LTLk?BL z*0WYnEi+xTUD*?qf|@tAyrx?Q(>Vz)IdI^Bs}OtJHk&B!0mX7%PV^cU_%d(Idjhx( zp^R~vZ+IYh^9C>bU^P6Eb6rdM{LIXZZktMNr^kD%Sdko$3QlAxhNJN6lw~MJSr~Io zORKxGXm@la?--I+whT=-B-`|B2DE)R(a!g{Poqzv@8gs>3D@&66<3;&arew$T{KtD za)P-{2m5X4Y~<|u;W{Zs-LGVtxXt{Y<({eRQ_u@J8gebwr+nh`dj9+zz`(a@0z<iS z%rm~64a4T4S(8@?TG!&>N$Id^1F9}aufv;eq3m{^vN*zzg{oILl8oDzB^(#1mWbzC zOrfPGsY+ji&;ycI7tNIu6Eb})1|_XTR=a+o&)V2DOVoRV5?3D(b<Rz5!5cS)^+Um1 zbSeys-+J#~%A7sa48!cp4$~}`flqPvuUQ9&(F;9AZ%RK(T8{3&yw`yLk@E%gt-ash zu2w%0|K_7&Leb0N9pI+_-mijS;JN>2(jOcFJr*H<a*u}KIN|#VJut$1ho#bep&W7e zvbq<J4o7EOH~W!cJP!}iPs4c(YSzfx?{Y)9N&e}aW0a<N2uOszfL&@@QC9e$g*{5y zC;)aFAm0q`;WpJZ!qgHv>ebQ@<)i4;J%*-5Re$}Ha5nd!RoR@g_<stWqPPU*Tlp%6 zC_nPg*#AYqtbWbP&XnKz+p0HIwn#SLE5SKx@3SHHhx{vFKt{enI|k37>o{`yIHCer z8QOB>yG!MYp0)8Bjtm=MO`?FKn*{yIo3P(oU8lbthT-HXSrrFDuF8EnjY;GOxR^BY zUz4m6X`vU1ktbE`6?B?&b8{2zG^Z*&M+e!qfA{|eUWOrBKnFaR>iC~PpTYW<kvQb+ zs^P|(IVQ5e=y==jGF#uvXfVROfa9P?139r5LDLv7JV1Hu?HI2II)LjXRK7w7l*zQ0 zQ3VvlzFVK5^eh8Vm13z&X}45VQ~-AN%+*(4J?pvHiGJS851XI|83_QU=I1B*y&O~q z>s^`NU;G_B-x7^VvsthEJnz@*&1S_ATPN%F`q%Q~;}N1g=$^awUR)hF>3JJ|(xpTw zaWfag1^m)>6YrE9XrE)rL+yv=jD)2WR`A5D_2PL{rry~mdt6XdhvkF+vOI^rKwx=E zQlI&g@Xgb=rRcEaud1qZvb%qCx=gmrVv)DhG7s5rm`z#Mf1=AW<nqz!D4*M>{|msd z#|lNGw^`iTc5W);UYgM#3a>z)pXKsV+{)$VVc)yw&^h!i^k?WF(a(Vg3(DA2g_V$> z%$lxP;MLI707vfS!HnA^cK?EF(*Z&TRmQfX4H7kOW4ALKUl#b%QF7ysyA)0K0U~&= z2P<5K#(q>1_QLi#WWd*uVGOG&QrI>nT|*l~UHStqFF{xQpzE8S=Dw%2x^{Qy7uHvQ zTWT2FS?X<~o)%xQHgfkF52ry8;J#(?yJQ5#p$z=6!+zJBK2g0c)TUK6IQ%R^BUN*? zLDh<4-tYdSXWe8fUBAu%FmCJ+MbmGnh^8r4ZqPM_bZ#^NjGJ@3tg!u6(KN;2dH5Pt znfZJ$r?Z5AxaxkU$b9bR=5_0M-$!M)hVaiYL<-8bId^VAcc8vk;GllE(M>d`7kP{n zH{vc;E|aOzP0&@9aj*f2>W@UxE`c_CBTHZbFjH--lZvm$?u+UKw8VPttKRz7w<^4S z-sY8q#bPnQZlseS*C^aED9DbJduz^dsCk?vuPtI|^vbhDtOFaZR?DN0$dhK$7Z6E3 z-|DL%cRDgCM~@!WYYlfP6hO)y(?(4{nqj)mGH+bC;@B%b5GAHri?NU~<%gG;!65-& zB<#L6<@7YSD~i!LDfL0@E^7NE{xI5Z9Ccc_qiw54whpPIw(-~FsB4#D{{8mE;m-Kr z2?g@5$e!AGhq!rACh~59ckNr0q4F1>VvIe<uyB`v{f#qfoORhV{s5`IUNKTjRutJv zjmo-C|9mg0-e~CbU&qJC$3^iCIKfUq2yf{a%J_LDh&3S<AaO#25E<%A?aY=96$k+! z|L;n{5k>VAs_VH!R}hs?Xs+jc6MpB3C!Ww<JwLrV9Dd5AG=KxD=enc6aYRvBS3TE- ziX)2Z>qmcb<j4`t(_F}6ke&aiR4WdCl(=MryG%v<+Nzz7q%lXk!G&q1PJM(HiEcd9 zNsl`EIdH9ToC{?9*12){n%iPn+k3e6z=I^@HYCyM@Tg8)kIq5piVMQOV2x<1s&E{c zE6%BN#W})pimIxTFe%fJF^o&2Ja8VC7@%)Au|HW5Yj$L&J|4pW9dw6z9~uoF2Ladd zIY;3*BB`o+d=g;txT<zxZaSYkYc2zupzClwwFCB;yLvic>k58BI(d^<FAkfrj_^90 z-eq4-vSY8kBdz0$`+uYB07@!g^9H6$DiYb}!EwD%evP6|0F`0C4+ZC4h6TI63gY=8 zg1E~MccE@fOWGChq;Hf9UL?E}gS4%-ZCh<omqCxCYErT6nfB}8$z`yQU-Yu$s*LA2 z+|pomb(M(Hl{Nhfjnq`-$TYz85k=LUOlhumr6ju0+SuyqZgG~9_T|v(X@AB&oFom{ z%!{W9q@|Qzg>w?%TN(0W7J?6|M~TqwJQ=6vNCdwn5bNTK@8OrdYNg4XWxSKG$+<eN z)JFfuzbuF~O5O=o;tJ$C<GGcK-f=|L_dx0^T9wPCC;aml$;w57@JE>M^Xf(V>dMAY zq5*3u!vR(VWd;w}HF2h#)2j#k9~tJ}0`*$>i8>F%Fvx^gc-@nFEG&z^_bcMU*Y0D% zoScd{Fgjys7VXp&Q1Xm!ZGprh@lygQr5Tc&AEOhX!Gb3*NJ6Uly}ZbH?3=P8pd@c% zv*`P(UoE-rvvN{XDSc7-eDg%B)zTbGZfUkfVZTMklzup|aO3Z59YdWg8X9`mhX5Ft zJx!e%N9OY|`pebTRf{tF#biZuM%1ZHTkGcmQ@G9o^vf~{?eO0{(ho|2j`E@Q*PNdE zV4+=QF`AXiJEd@~@4aB84u#(J-NeoQ@+{TgguaB|l0xHm%Lfl<ae=;V2j#nWqjGyf zRTmJH^>@!9au7wWuKZGP+N8mxfgr+L3^g9n>Pw$dgbRr0aM2Mne32zg1UYo=NPVt; zq$_@lkk$}S2ASSm&!1Y4d{({aeZ?Ua;~7Tj>z>16GpeR0L+5C!n*8BBj(ZUCOW#r| z`g3dueUUM%-th_asTKNyDhA7~48+d#J*fpve;R_j8n2-f&z=AX^Mof&f^_*55J3bZ z%SM7L4Y}zc?2yBjDOZF0`~AMmcqaEn>>gO(^B!=qIQrh9%DvQ_=O@n&zkK`K->xWc zC)AC@geTj_E+y|v6VwN`E;N5hH*Rs>%h}}~Mfn*VIrNHZugvpH1SfJ-F*nm%*B~t} zWBtUow^>oW%}$8!-v64eYyRXG^;8=XKprk@jr0PT(=%~wrwse3s!mK7OM(*Us^3IS zd;WahvS4Oeq7K*Y?uREA{DTwUMT_1hWxJ8Un0gK;nuhQsY1nS8t-2evU1@#4=lij( z7j>wDMfG?uR1kQT?8=irLh#?JZIP!q?ix!|v`hCZnM@F5GV<ynoyhhzg0NF!x^Wr+ zu*N$Mul>&G5DZI$f`Vi$*en5F=?jLWIHNz}_(Wo+ekmK)AKaX38+=I+&zPF3uE9GT zjGebbc69K5U4#fCbMR56MK6tHRghC=WQLHqk{nSY{8o{OIX^~Xbn~2W5MKud(2wVW zCz>8=DM!b@3!@~k%RxgFWp{MWl||7wXvgNbFF5@k)i%dv@<u*mI*#e*&3uOA+G=;^ z&v-f-e(sh_9%plyre!jkrU74dFYrOfTmfuyoT;h?&zTrjOy|Mpl;VTk`={G#EF6<U z6VV>QuYg*}n}TMfN1b6u2`EI$ZL808A#cCns4A?A-~P2b{wL^+4NO1)qjm)=vJ<^* zbUrvlag%w);O)(Kbv(Jb=k4DQ*Zsc@MQ)>wH#%m-dId<4Pn+oOe)RI{q74m5pgQfp zmdf~`X->mZ)g$6>|8`LnM~D<alXz30sn;c_EbpkMS&1#0^=S8e>LD6OyU?Mt1U!P| z(GBgjDN;_0e{ok<FgQ-4nX8GK6U_;6|CyRzo7%Q*MoNLzUE2tlift1UV`#w#YR>)~ zLLfaZRC4K;AeR6i4ST49C<OdaDg-3RpeT5J+_BJeVNl08>hkzU$aA5(t-@uJ=RP7} zz?vm(jRsw%wBn7@Kmy_9H>iKOJ`_{jEOU88DSk_^p?1>828_Y^OBvIrkd|hBPqK+} z&)-?xwQ+O)Bof$?t^eEl3El%Ar-12^p2pP769O$GZye{p3SFFk<mcMebLIR0$N<~4 zEuI#A-@4K@4S9N6Hca<Q%lC_vw=C;OGpy!|uB%9r;=09rHEbSv-AevP2E1QYR5xa( zWhb(3xvQ(LrOSzJnJjiyMP1}{-SIOS+c4}*#&>j`Tl~o;4<SU`XuOOXPg}q7M0EAw zUoi7MX5FXUn1u4P6PQuNZ)?HLBE##yO}>eE&Q1t6s;*8P{*JDDcO;TNPP4#=#YfW= zP`{6@`||h5U^~Up?-d;zWPO{A3Id_^QY@s4*&?NGk9U78{@+#D*X#8H7GVCpub55| zLDziIF<*J_jBhm^3<gv>dQ_r=c&@yM4MOyC7DSAqxURI#2ja-voGF(pm2x=)!(g)9 zMgGv0S6+Fg%9vp=ruuz`vko<v{<=%MD!Ez^hYta(wxn&E=C4gH`02T{-^Qk;tEz69 zCvNWAE*bsBzy9mL{;Q~eyFu}^T_{+pY8480)-(Z3GmAt-w!RO)gfII)#o|7C3H<^3 zk83$IhycO+N#~+mi{0oZcE=^7)W(VTlu!;5kDVFVHc=2}QoA>?uK*tuVGNs*IJ=7$ z6+B*@w;I+Xp?e*Tsw)9B>-;0~{<M+nYf;w}Zk|>6z-WEtX}c9iDp_#QfkpL=yrloT znkaIDqG*+Z6{hD!i}Ip4Fw>&Sal*%UyuPNW(wSM$JC$cSP9f6SW<0g1Q7vF<F&J$r zn?+C9q)>Tx1AhBM{@$v>6GhhK_XNex=nr&VP$=kM$KOskEGPvqje?^}Rs~;K!N7D; z6oD=g%n3>Xz%cW!D%o)M{~Isy+v!P+UvXP7<<Xxe&_9i(DT=U}Dt`YStz=AH;4oRD zAc~?=nyTb-x@0@56)jrP44)#XpjClqjH4aciRILL&>N8+3i<km8h+|y<+$Jlkv@&W zQ@<J2iid>ns~P$%v8ne+KS8xz`ZF+G2G>H0e8JBZ+yn5HC>cEX0y7Nx%KUw=dMwxl zSG5rggQ=8<c|Hr(&?>qGy$5{;eFy!}58<6VS)R}T@dLdOFylD2olFmq-9YBbx+c)~ z26NH;Qh@a@cZ;1ig`5H0D(1PvgiAa7POT^i*~M)Wxtx)8W^%bnh-t=L>jcaWS*|mS z=lzdAQ>#17Blum0Axf(wJd!KAw8VE_rIcaM;IJJ<vl*o6*(kCdb(9FY=YHOSUQ})S zvtcnmhq<Q+ekQ6$N+|IlxGA+p0B;TAd3St>?(XNT1wxab3r;7lsDkVSdijv=l1q(T zpWs8aKNFBdDF~!+p=UE-JWWN0UnV<oN9z!A8-5iXm{=7Wyba^*Bu{Rbu*S6blkOX_ zY_FmjazTO+BI};Xrr8;)#T(hBq=Kw7WpCO~`!E`f(cq=X6nR9t2xFdSURMTMe4Xie zW3ZU#eD&fhRH7K6qG}Qakmri^9YL_8UYwHwsHCY%XedOzB2LX>!VkbH#~#bzP2{oK z=zjD~8Ks|u??=8vq(_t2jP7$E5u=ElqU;A?qaKc8R8vVT?H7X)#zdn6akO_FiG`t% zXt;zP;EjZFt8#+ZP#Uh)jwbySl~Qb~ukVziD6S{)5-)fjD7LL@M!r<9mkPS3Th8dK zrlQ(yX379mf2OfC^sItzyPVxQ`}#b)Y2@WXo&5E7Zg)N9WRTS#m@G>T2|zYk+m3lf z2fgeM)kjaAI^_v&7<wRhr%cVT3_qLo4a?BX>s7^UtTys?Tct!%=pwI_txO+vm<IOs zh3IrTZ+wpDolj3kh3jq5m~(Wxk~LQL`KY20s<!QXW3^!_Dy<ag)L`lw^n#wo26>eN zB_Y*+(sy327!$vXMz8IqTmf-EjOiYcy5kGI4^5#Jbc05`aI;Eh5yC^{EOX(Z_OQA_ zf2Cm7628@1pa1;lRl`tm5%6q$aAFLgQke^*LU2>)*G0LkA}FpAzD3{l;)^dT3Z9rh z7|&u`mc?#8l7+|-9QbE7dAW=qXqrAqpL_T6KDI9Oo+_JSqbAbVw$O*v7`UgN&;PB= zr^Ca03|;kCV2`$t{){Vicz7#ySL(P3;a}YI^<lZ>H<yKn6+0p{M-D4>G?*G+?{<G! zZaxZnWQm~<i4kx_<g@g%QkRO5VEnyl)2PQjpDXnh+GTU4E~q^a<J&<%c<Wm*f^VRh zO^a@dK`0~AR^oeZH~Q0n_tD5t!dBQ}{2u~w>1tfGt)K<p!#Rq|RsSXp;|_d%d3jk~ z+J0(jVq95XUS3wlCzeiaUs6Z>l+q8f`Q_e-&gQA@OX|!vedi;oOWRM4=4w~2_N`1u zaeI+ParScGJUWT)qEnTMm(e-TZ?`21hNp}Sbz-qH8!_Sf>km{rcDZga2f-%Yz3W=L zLoUf?>g)QWgd&w}pTti-&R;!)BS($|(_x2~`OV(Wo!E1|y65YeEZj%r#EgC?E&nk1 z=79qT<{yP^omw2dAJMa%E=iED7)cocIU4y?1EoZuytr^(l9VO#)PMBByp1R_iB^cB zl9fcD=cq8#u987W{^4JF{Vujkq<NCkOM8-ZY<@r&f%p^4z7F5glh@&GbOPOkkRX;Y zNVdns&%zE7&Z{+;2t}GukXVf$^sMZO5Wd+q1YvDk9}_LUJW&y}0eg)B={gK!7W@;p z{H^KLHb7_CU>LKsW!tCR=4Tq-n&Ygw&CfL5Q?OUXoHk$>v%@D8%&A(y={|H^TwPsV zed9c4I<%CdN{hQ?Biq32mg=U>@8>>rHF_|z@!Q(g!&Qp%5)ly&s>(|e6co1kj<1x$ z)CY{865WWNNM1_kB-au}YH>UWyxHi+b%v8^Nrn;vhLlO5i)mC;S16G-()1|`ss@-P zTjwsBFJR--Wf%{-RezcKpfh|o<9S{#P(k}0hB5mf6;+Kkd7hU&&>y;1g|wdDah;0A z5H>Q$HSqGYqqDPuE=RAI&`*<x1?QEfzABDdPtlo*0TfOpjt?~!ay1>`Hi^L~Zw~b5 z-XegPbLCPdmvak+tSzZ-)>Rb?u<&?@8S^>VQmZ^KYfb}58dp*?u!K@Jy59AC5y)N+ zEahctjXp4KV$RQpVcz9=O?50uu~j6n>{w<p=h##+!&0MC5w83KqB#0JIKEU@Lw4Oa zSyaxCzO4j@1HR|N4gCqkw}<Us+mFHrZj!dTa!iMSM~p>3+I}e|CUe+O2?A{sA5t`r zC$DeOU+43Afp#gM7lb@dyHv>Y{L4vkAADYtTEDCty?QGu4Y!%P2Ai3WD@o>NpK<hU zp8wEwaB;G^{O751P}YZUY78{JiE`^Ev%bA}db5*HA4^4laA29l@jgxaGi&(-h)>{y zw>n>M@6;s5U$vT!&ul&ce$C=1zs>L+k|xEgBN)H`KSHH*2*CEzmxSqE%8Q=9@*QV0 z0MCl&Sov_CO_^Q^T(4Lvg<>)3e}aWmrbc<vK57FYdj<a{)WuP%fYE$nt3M|pK!cFq z&;i@XME9JB->Av=h?Ub}q3$%Uqmb$d3!Spa*hCgg#eAw^Dk}eyOWthj-KrrgK>@cr zSFMgoRF$U{SyAN)!>H9Ckm}weyB6aoI3?SmXnGy+UW>K=xK#dz0=W;gxSK8H^S_0s zruJ-`Y2`#Ztx%wowOVG+)D&KaX#gC8Jln&z7tm2l<VZB=Ned<^@IbhPmt)QW{?+gz zfX3>?aTuGd`PsDd=6khHDNEn-mbbX>ra>g{$%omYlr00{5R$Q1FqG`@;d}4B*D!|6 zb)?)Z^j<dMnz-0s`VG7bzK0^z)3k-NmK=2~LWwbHXYu|3bfbu)tk|j(f_{A_%lM|C zZQJKeQSuB9Q)B$bTrOY$Fnmcc&(+9eKCE|)heR4L3tv&yKJ#2S0GKl4HzEKy0ItXS zqw}EtAJ?^q_05na*oZ!dop0dl;d}N0IdBDfFZz>cV+**Kft3tZ>xo*OnJBI&&mf}` z+1J(+MwWk29)jZa3dA(~{MS)(-yWbEiTq~>&;>qc+kvIi=xp-bvGF;z?N!^})qVco z7RJM9V91Ni<0ZQ%YGWBeQK@=PGY(&T1pO*g)orzjj~@^?j@Eje;HR69I_x020`(CR zG<hqI3bV%Hg&(+1hD2i2uD;<rJ{bBGOhvt}1>OP<{bJQ|poIB@$;Wj32!X{^<3o8a z{J%~=tQHHktX1n@z;3M4%<i&Ko|iix|4oqcPT*k)eLL|=uCJfLcHB)gi2){kHu#@B zGq2C?&o!+XhS>%f*r{i&Vi>M`H2<&XeifT$X<5YmP<~#tTK2D-GM`TNG~doE{Nuq) zW+AWp_;2qS)BgM~pQ*5XpzKO?Tz#k?PO)kqM{t24Eg(<eUE##5=Of%Zieu?mZ-bkP z?KQ;Z#q4|>NuYIA;m{(#2I1U%hxn0i>bYGYa+6R;LsTc3ldj17NRMrt)5JF^@@Jz` zO4;wf<t=Z4(JR4o_hcnvY`Sh|(=bR`HG+C4QOLhTGD;iw-h1!p!<4ciI4&C+#tW?w zC^GrB&JdkOkK>7z@~^pzCL!>l^~$`h**5Ri;kW9zuKXn&G-x<-mbxerT{oV!%(@}V zokSH4N5#(Fbsw{;m5Hn$!&$qDq85y;EpEq9tL=8Y2N=?-;7)yM+sK<HWV1EbRMlXD zxKt@z8vnHh7#GSJf^XQSD@g!q&$fH*jNhW9;@BVo$^AM|@cjJAeVvXa=I_4PEb!F# zO0{ejBvIg1O;tq(4O=$u0|19Q`ZsKz=Qj*_MO9ZuU(66v``;2sVTe4`(snAK!4zCN z?(BRQMu%rtW}m=LiiMzMpggn^h#4sK?vv!|8ZKazVaN!Pghs&nq+|?T6aoGWvkjl? z6?8RvbUWfU)&-c9SqL_b)gy+t%tTTbQ-Qpt6j#^EJP)uQZGLBce0*GxfV$yz-P`N) z5ynfFRccwKNrl$@=Yp<-_nuyptpUPkOdCd4peD8L9v4Q>h~Qo{6ME3{_~W^N=*T8O zUrn$~2+lf50`l-s2B?)b8C(GoJ0L2#(#|rVHQD<|pbN4rObUh==xl5gLFfJMoSqKC z;<S;%Bz#epZ&bCz7u!y;fI!?nNUF32VhG&6Bn90dLc5}ptVSl#AL}Cf;=`JHV|zE@ zaclVKnXIDu!dCs4H)zKP48U+WzgDg=-XZm$u>Dsm3F>4eS!I(x30&@|;?aFt`31r3 z8kyJLux+f?JzD(gfB_t*4d{vQoT9_%dUOwZC;A}zBz#_eZ6upHNq{v45FHyR=R!G* zD&;{!y6}UiNBTnH1cD3k$)X%e8-zLyI(qayYC{HI0GOPgRHFKv!Z>zlF3r^=WrcZX zI($FsjK@~qiXEc`$aDAN3n-+<);G;<I(1=n^>Nh_8x<YgQ|uVSc=m}MvMIC_b9YJ* zm&?lVI;LEX+X3C+;fx2*4Hb4B|9zY5>+A9&CL3*s*o*P1zKf~?p65Ebts%bAm-ync zhHTa&K<ZWEuF51aSwyg&0lx{ABDN(7$M4lC^`zEi>#6`cFyJfFkJuJE%!;t5$O?o? z_UMc)QBpX{oHM4voHK@uJ%=gg8CzG(Gw_1I8S;=jT^<CN=KykvY1x76Hxn>TWraD0 zyuut&F>QTCHXOEs%O@LR-frKgUWpK3#uEZAzOJ~0vYH;vA_DN4^ZInJ-HKD-uy{6} z?R3EK$k}-H)*}%>e`7<?jq_=mHqutwNC8@wAo-)zmjtT?&n3wXQr(@TvUMH!9$hdT zeg^_(VxH4j0N*M9c7~{ic4^=Nrx+;y03!xygT<BgCrpD@xY2m9Cm3z7z!DQS>aZD2 z1vX>rzlJf{b?Rsc{bP%y#X7jhC=Gf&_63(=v*NkX+YIqK9|=c$UU3SOy<RU5*!gSd z!*4woV#~W_uTMFQM6un8Lysi_>HIvk@+uuB`G%bIX@4NwuPHjgLu?t+H`gJ3l%VtN zQGe(%&>sgv*r>0?yrG3JN6~T>eV?4@l+Xm)&do010Dx*w@TOAtWvYQJb0D_J;r9`X z@#r6!J}yBn*VN|b4k)ec5~Xq!<z>d?43Z_hs(+sCxbIEdEni);vg73v**`UjakqPX zYH=}{uc#{AiG*j>>!#o72wT70`Y{bZdx<7M$>WbBXfY?NI2sxE1&A%>3T;w+E4GKY zD970uR-QZc!)b>8LkuY<3h$J##W~0ElQ@jVc)H!b+Qy+ymoYsZ7d0j|JyFx>1=X<i zqZ19)wAtLjl59AvwHj%TMYHPD;o+54D)aMujkal;Go>|*ajRl}C1V(19;w57TX!M| zZ>u+IYI;SuM#G>avl<3@bl%og;|4RanQHDEw{^wbx5uKIGYOtwZS0+&uT<cLMkDUC zrg1aE23Q+2uHiM#;i)Dopsw9S97?}s@zxnd)hfbZnIzz{ZWO@)qDNq5Cm-(YdorG# zySBK9e<$AWOuXVvUf9<OP+0ZoIJgflF0P#lCp;5ic&42W>-pJ?qj|J%T~h%%hM2^2 z$K2TuT=#T@-mQ9dAZ!!%Noks@4R2d-Fkm5mU)t;S=vPCw;Ru(#yT~FrN#1b$0w<z6 zhbNrau`|F&-98V=s}&tDyS^OH|2z6n&X}K$c>GK&Zn<n0tfKXEeRmG^<9D=qf9D;x zZ8KVI?<S$`DE_qLRh_wM-k*O*nipr1onu?V`_nJbiErZZ>Ycx14=FgjVm!@xwL;@p zU<mx08x9aryIhkrbx<vZujbxYgAZ<zFGu1Ceqo5B5_u1?uB={PtYm3qGF27LOlHhs zi}gA{CL2XD&cHJT=~v;8c}3xihZG_Tja?LT$`Ju%DlIOGv<Z$~*<O4k=1r@SSL;dn z#Fi!}WcZ07ZF~8mLVYh^JuGXnJTbY{s%2v=XJEfy=a+t)EMMev5~X{mh%94uRS|g7 z?TWa)cRH%)t&3o)CI(37V5<w+B60luIQq%PNqLYV#2Fx*aK=!5chhrue*)SGWX034 zKq6jC3bX#TyPYS0rmB(J?ZYJy%UN9qa%1k%M<12t=lV0*=KgT844US-`Mm3C8kDz< z?Qdqo>+l6Xny-dYqZ;O*apR3Q643QbAVTSz$Rn47v1cLUNyH9~LlZ)W%dHvbaITpv zm!I+!JCw`0X6~>vW642v*c{J20TACo3&<r|+a{8iS=h7jM2IaS-e)4?3GY`0rRB(E z%hgaQ+9)>bMKpca?SO{QIwN-0W>q!nwH;)!UqR>E@?c`r2i(r_@TKu*Oxw3*8>+s! z)Tkh_6EYr(zfN3yf8b<+sd<oJ{4(n3!>-ZgE3cIGYsQ>5UA*oX`yL05U00mG#^c9k z)w}Lecga}zAnzW34o&s;gCT7&suP#zuqW(47T+WTOHf6A7(T(oZzqlXms(#ep<{<Q zk$21ir~<qqE!IXxNki9%u6BNG;YsokS^yL?bX@57)Yn!$T;OWw#}2`n;v(_dn|&Gg z;{&LB0o{V`Mvrh#4lqw<!^Z<EV*w2}DpO50UEJXzr9n7vdcv`8#R`iwsbUrC5OMb^ z4oU)e@KQ0cVs?YPngqhoVjhFWQ$kEFu+yhKjJ;3$qvO6m?98(({m=jWPZ5~z-7PwX z>lz3ua>gd9uVxX3v5+8+BR3vBHzl%6*fBa~bk6q~Gg5Qx0t<@f=?wCouG@dX6u24p zG3SS<5Ti=3P1E4&tay~~AQ+;(&&rCKJJCbP*8`_K-^<VAssU&ed913WM3JA68pXpQ z-NCK670>#y!>VcOs?st5Kl~@H4CU>kB<l534mo-nh95F#bC9aamtU>~$mluiu6ybd z#%zX0O`0l-EP`!OMryWNPsSmH(HM_+YpU17mzc#lNCN4|5!x+&u4fpBJgllc`f-(e zIv9x8Kf$hlo?ZV?{8L)3`??Pyg!DEe%W5h*3EG2BNG@U@_D=UhKZU-ChUgEqDJiup zKDVHD$1njxT&%b;7_~AL$%0HX2bzqN2$h7(fIga&KSaWgwC9jeNBXPM*?_k#1rk6P zBvg*cg?AXT6S4?`NP?z0;cF{qRH-+Wy@`884vErmd5LiuG(Jw5^sau%3!iBSUC2t5 zHdcJtfK9rSp$?_KA5$q@Z#!>ANa(gC+Bq%3Anyz2HbEPsDk3W_c<>pjEQ#k-z$<ju z1`lX-myY8$OjE5#zUfQw{~Tc9@OIoQ`mvY5d0iV9c0X1c3-bY}_0@b|LzVoxVpw{M zO5QB?fDrKTtS8ZyZtF@tBdN{zRXq<Nmk-BEkL?o2Rc0A2F>?)gH8Wz%u(laioKW%7 z`-_0Hx$#;qC;ClhjJIuFHBwEFX6qTUARFEilBv%|x|Tjr^j_(>!5SGcm#dBEvKWf@ zUn<fhwhT?5Cv?8NQ<lJI+F72bWM0=0KD#S^2R)8{4hSe%kVnY(rzynt3SSlJG(ta3 z)msw}dK#&BhZq2DH=YxW`^XngRQ%c$NwoV|hblFr&nJH+kq6zRB~Bu-k?*p2DAen6 zhNPQq?w2%P=6=cY<4*iL5J3QACnLjrLE>^@@QPp5#FDUhcRmRG41n#F2eHJlqNp(v za9Ew%@2|;}in&12G_lAyDIQcEo@2QjW4TZ<<VFClC`|lzaDW3zgG-s02Sp0!RRTsW z>tUXj(faA%Tvl7HR*Om6(j?)x`=_%2o>wdTp5TuYd3+m_1T7WCTI6TQgajZ>kc?li zi(;yYgl!v_$#_P{@dCps*TR9o!c4$%ImU|<v+^i@gPaYTJeO+X4`5BbTVmJOIqk3e zD1-pzQGjdEi?^Dji(9YkxAwi<4ZmKWnyT0RTPc<7(GFXp^j6R!&-1+K>t=4PVSb%< zje)TTmE1#LhaN$1MjxcFlDV;ufl(SI@mb||vCE@4gQSk=+>rXp^ZVgSf1Lkaw$`FT z;z3ge8%=HKeim`Wj<Wr{fZBX9cfd9Q?!T5&mY8f_NaEGyVnElvZRpZQdKshh+qZ9D zYGp4f%C;?kL#B!Y57-Kozd^(;yW(DM?(zGp)p&a&<{`mLWYq@SlA0n^+WQbE-dL~n z{B_q|mp1R8Gysgz_e}j~PMEN*y~VzTo`;>}%0=`0#3j9Sj+-A)I}(jTZO5%C%3(J! zl3?%Xt60gICeSw#RVA&56~|G2M5(n52SDd+^k@L4nKShtDaz5`U9av>Fe78=(Ebzu zBnHY(If#&OZ%OLN<w&|0Hn$0ljeXTnI7sb8xQ&8u$Br9<D@|uxr3z53Y*SU05RO+S zvRQDPaNwe>pDlp=*{{s^vNBArZd=&De_>ly<TzDTHIki}=*&b>e#6;VKWkMUz_}m1 z4?4Tx+vpUuV^TLeINuwEzLc0gqn=3^ASRDGR;VTCQJuIJ`?&2B@P4_yV1pJ46<s4D zm%Wupo+mLE-eHYh37<x<;ZwVJ<agx`cA9W3$Ek{@R}4cMAAMa>ly&8Ccw=A~63;7& zcKOrxt`UXZzgnYT<X`F4-o9ZRIcPuo;kBzYB67T(FH}A-dg!U570dJxvKNs01YyjM zp{r;jWcQ;t#Jsb^lM`hOV3uhQths<Ul1Gh@X18#Uk;BA!hr85i-|e{ZbLO-~&vKsM zQEtL)w=)-YrwIJiV?2MwFa7A@f3|;P8bi5|dp$+df}q?AYWWLgz|;9!(0W3F@;oKU ztNl(tYZzM|Izy_kJ7vQ#(l^OM$qp{1GamAHx#!Gm*1ULjeAis0puSF?<?_{;N7#Sq zx^6VLYur{4>1;KhV{C7%hn3}A<l>7jHnUmtFG?$ijV@%(i_Pr#^!?-2e2zsKRXXu0 zb3wU<o>L+AW4fo#X3%!KdphN-h@710WK<wEHtI+&SHkM*CySxNb#SIfed$L%@#FRL zgR3z9M*Eu~oadQv9h^l2P<pbXf9d=wRysfRcf-vwTZGgHHTwqMP2*|)N%U^?+vlX& zJ6wcA0ybw8p_t<?xPlrp&c*&iyqNIP+d152gvD&UJ)3Zw;k;W+I56z_mu-MbBq667 z8`Z<e%Q8;o#7sv5eMvduypjx;br7XYrx~?4&w*={P|g4GeBmwtO%r$lb2KLbfGIuX zRi8xNd86%i9_o<;?s(Fxx?#XY6iyEAGfI^WW+>G515b2G`r{Jdt|)T6AcB-rc}Od{ zBWurj)#I4e?N8T(`3pOC>{x_kXzd_RdesI(vFtSh&%(FRPIL&JdIl7rAdNDc++VF9 zHirRtPGS@91v+?o^us;4a)1=wC3u!c=P=VkkvrIedKAKI5@CnSN|aY*rip~3w%VXs zxSPpEn?A!l*3q@(FOPh7FqU?^isr5fO*YLxzqC}(OjO{pvaQ?4W;uM8t}c{WxTie& z!PzB@4j+KoV0ZXf^H>+wSnG6N5#gHS^x%~RO#Hp0ueTlZ*=yqOWa16*ojBV$au@nM zLLk%xiVhppV$Bto2$+=H!xof<>mwnBb}ozp$44*|s(U1Vbn_Lo=m$K1VEs|13?T-` zBl_SJo)d|xsiO;{3!17Dk>eGp=!OBpq;zgU8B9jvVgJW`{`^=cPn+hI;A?}yfT*gb z@SOPG_qv1W`BgHIqz}S7mwF3IjgR~AeLIe+$E+2fa7~}n!XZ+Ti;jD?&VU3P;kqzn z)=N|4R@FH>x|c3G!_FkJ3pORjz#c$(n}-r?+}l8OkB|L^k*=+ojo|oMcy)^=M=un8 zuT1+p7@@X%S~QguVU3twiluVSVPQv+BFec?ZTQNJOM@k<8-qQCSD^o2|Mg!~>vHtz za^NA{%;~APlIP*%)yX*vlsT<*de;6M;*D4C?-T4_T}??zWBBTn{TiO8OhqSsY0){) z6m97`gTMsILkHa0aeY(}q?tJAN+PcNUbsH5kcc?>LV?^myg5}*yvm>N+_{t4wxRJH zf$gALUaQlVC{o$7tN~z2AXt#`Zl@fK9STcjx6NT5<h#N393S^Mo(nNN;cBBtj~+d0 zV63XTq03YL5c68L0ME*nWm}?1S3wXZ*|sp;P%=%!DC`#mSvIwHR#R0idrOUhgCCRG zi*V}Z<~BEH^pv^GGkD5I-KgIm=!J`ky80_3??@4}q2XB!t8HoY&prNs%t%xQVKzJ8 z5JaLJDuSbu<>$8OZ`RrZ{Gj{&N`x1bqf)cJmr{xIFT&0GHo^eDhg7s5T~{}N)*s9X zFE}NAWeJ*XF0)=_bTH3?@rX-(PMVpSiJnFaE-FrqWxZ3}0M+r!wygoNDh=Yl_c)%1 zqqpVkR~Hr*VhQgN@~JAQns<#ap~bEAk(6BUKW`%dq~}36_=RkK??VWq(zT+_t>-q` z-l7SSEe=QG3*#%!5cZ^wwI(K(#vPKH1BaO_o<~4hGU6$pp<8>?!@E*0FcXPA2%eq} zgVu`?4tq|xPnAT5BafJ7W>pzgRNdJgP}fEUtI9W!$c)po81D3@ITN%?>t|v<SEWTW za5PuR15+85!&zwHlXG3Yf}iw60nGG#f{p)8OF6gyIm$KOBJZMn$ni(p>iZ^9S0$uh zd=tN;EB*JH)+TQE{ohR?v!&7jW`>@xL^9?F`KbW>TE4XWP`vJ!P?j%U)LVT|!2BFI zv<djQRwC*0jqy&V0puLBANGE(TaC|PXy21CApdP*065kUPb(8vuD(H}^SGCDJpa_Z z`%B-@qunG)E`8lV_8NdR?WWlQ2AD%X@TvX8<@azX55G&|<ZGawdv2O!A8^Zi;Qe$N z{K<U}spvAaQC0+BW~yH1DUYwJ?Fn<H@=VDn5yi2eW%4qX!T%QDY<b9>&x`3i-Y&PA z?-$U2Hi<kLKF|;59H*s|8uqV-`8y?%z-`5J%ta*pJ&)B!DY_542%<AY>QNoaT5F`b zIQ3Z3*o1N?@@yUj0z;xzkE~>KfoT+7RRIsS$aYP`xCwgGlelT;Qr-6goZ(t)K%O`& zzlfkY7Uti{0k#!I6RyF01`p{)Gt5!TK_iF<iEIBoAWd%`qitK?fWL(yx(HoL9W%PB z;PFi8TL&2ftglU8vQBi*8HDDQ+EQu8q|;bPP;!oN?8?HW88)e+p{vw;a0TJ8s%WY- z5Q^^8x%_lN)}k)`@C12o2e}!B9;|}3%?y?=-+qUpsS@F^`U|F;%j4U4QQT<QO2#kA zF<wIC<dl5_KV-|*@kuF(={&_`COgM;#aw4XMf+&Bq0I6~dovyy+zr|7$dkGPJs>{J z=UTBBj}SiK$DW@60XSe7h3ULE-(F1^NUEl&m?KxfYMsWql#5QX%>IRnV{7PO0@fF+ z)dwAwIgpkQUe7VU1K4HXf-#PZ#43NJT=FxD-H2w>^C~*~g^D>MshaYRwi3LgF22oz zRX+@yGR66=A9N4lg(@e@;?%z1okRTya5*#P`LQ|1b|^QzOhvQ4Rp_)WTe~$9Wmc8{ zoa+<mbO2y!HZ<emngc>YA4-Eu^dm?l=Xy%r>}^ISTNY3!O{yDIb!=zz5eJ)_n{~yD z^go$p47Sj@@Z$?gOSz0j0>~UUTS1rj?|bx~vZ*>lon%6iD~dP&d0Hi0?Q9v-zH^%` z93k}3+cpVTyhjb)QN@bes%Re*Q>X5{2yD4n2OmqX#YR&#45<}wp3hTA?0mu2=<oPB z(0w2M?a=`=Nz_`5h+3<`@%Vq-YPDblHFcDhcl8cu78e)C70l_q(Di)8d}4!T7f#D8 zpbd?Q!=q<KjggF~X;KCW_^g(P@CwpU3C&uhNMcunh|{eCVKCp$*`Jo~Jhp9z${4SQ zq0kP!d(MlJ|GC4TyBPcL)dB0z5)vlHKZsudNc%#cecthI`s_<Dz4T(2>ITz!UOH^% zzcniUYD4%e@A??@vJTp{RqC<kB}tOjJp=6hIrUq_ed(o_rZ3ZZo>JXlj~30}7n%DN zk${R@L->1m1u;}Y$F;=Ku)8=-WjGQIPD)%XZrNO76a2K_aa(cJcM~Vzi`8g8*jl=} zUc|)pBD`hLh8@f9A0_<f9bora9fST}A6p;%;0JMvyhi`f?RGz%EzD-Tt5s2AjH%*0 zR(Ot#arhABd0p3ada@8GNp&82h<RTSj5(_V?{j(W?_;pPVEXMpOrv*QcG+dOVf;%) z`Y6>@QIaIq1EOk5$_tM&L#LGI^*Kt}Z7F$Q#u)tu&lLb2SN3agaQ17ch^FWqw-4)1 zRp*{YNU%H*wo8Z#LT8Dn%>r@KX)!y!O8lhsBHfry7NW+r3U2C%s)NpXNs?fX(zQ{Z z@c$A-cRvF#Uatc-UVrZc4?Mt82R-UJN?D)78xDK}yzQe>QF!XN3O8}kpPBS24PE%8 zB&90T)J^c@*Fa-xy0Y{gO7J<%3;>-O+A?*U@aVH*oL}&It2iNub8*(){FYH4rGS!e zLN+{NL==V0%OcV7rgaB85#@Pn@u!Lg<iS94)anrUK2op#@wI*x*5}%*Di67r9T&FB zohoU4uq&uem%*{?#Yo{8x|Zr|NcUc>+Q$EPX@yf5gYz!3&>pp%Wual3ekafCZP7Gq zsJ%6)@9V=U_R8i($5uyfwa{S9G=zB_l(Vcx^Njs{pLMafmMmLl9J)h2^-ou7JcZg2 zVX5N-+Z;ys0?gioAA4gYWyBTCx*I2Fa#pl$Q7}9aT)-}sYqK{E^qYo22cN&5H*^3Q zhTft{ADi2C%_;yO<M|9g&gjoRefB&yFfFeRU9t-LUDSS^;JxpiOBCMBOETr4D=Z9p zk7}8HflaTMl_JB+vft6jXVQa(?AYxmkumBlv-M!lo71<5Mvp3gWD)mKBneH@2f#3l zP0^gj!%EC)pl=%e;Z_>mulu`I|2E+*Ipk}S)R!$0`|qE+?Y7aM-hWhT$^Ad*z3z-& zTU%RGI78vn{nf(X#L%ZbS>?sw=!?!yqTAwgs#{C5bAs6D`*<9uQhie0B>AT#*d!%G zW#iMXT*npEE2jgSSP5|j4!)|3$LIW<>W#H+^J6?AM{@y~H@>`^G_g^7a;t_35`#sX zl^RdC?1$o}7|a{r+mkLBPdVc-owY6_GI{&+r|a1-ed5RICf#=*`CTTo{zLxEo+^K7 zyn|=YR7=17&sQHqpF!V1zqfx%5p-Q{Os9t3TI9i>ygizHxH;I&Ilb%5PuN~BypQ@1 z`z$AeRh}fL;<IaH*lXeP$f{f4@RJi9w^eT&V}FyMgVU(}m^;-`O2tYWbR*tza*x)( z0Al<9_qao&L08pOl8PLsCaS8D6vL#b?zj(pho~lHk>k|YtEx%@!gI>&dH#@wW2QAk z9t2?KoN&hmu~x(P$NX7$nUj|IC@RdaVMH)3NTomLWr;IC<xO)-Wv*zNt{WZ>#yR<| z<X$3Pt~%t(<>JLR33Qjm#rr1&*P8o{AZ4pzbGly3PF`Frm$|U|mV;oX%%{gM&1LAu zU)R<~Ez{e-`Q8s89YY56SU<k!D?=`yfLBi*`Ow{&D!rnWS%DM^W`=OZ5-XV9L6v6N zPP9t372s9_I;-^o5X;;`;6x7cqdUIee_f{}L)W`I=d@Vh({x*^fw=8cCMUfd6t+T% zCr_?*U%Pj3@ix=WnpJ!Mgdk-sx4ipxxIgBsT~xT~;&&nyfG%+D$ToXzz-esfAi4^z z(~p{dah5eENb*#*e$KQu&mWMyUg`^_5IqEmM|q%HTuoL0T|lD0vxGha(8w+=@|v!Z zzp2%udNiH-TEE7GsPL*v2#DEi&E~E<wQN=Z9W%tn6zGD^q;bw{>Gb6l>1h?llaqmB zk4-c^RQHI;K<_%y2V*PLTs@a3Ubwf9<a2c%nVTu-lP)@J(KwZMo~~>!EC@}Ru{-r0 z*KcsZfQd#tj5V0t`(PZ{agXC(A;mS`n%$Lx-w}4(1_xm{FH^tGhj0}ML559zMW!z@ z?$HgkoKYGqPE4q~-)zKgUNX$3=_!+U8L)h8U%C9y=cMb0>VYqP#1z-h)EtaO0PerG z_cs;u)oYS-nP=K)oHVqz>!18@09BGR189g|`79~NxGE6zHzn6<gmo_W`-kf8FQHfq zU7X$hJf;J3qQgr6&5#QPCT!lZ`_uB~oYy1k`zwD^43Oc)O_3FYP=NnLr*Cg`VXyoJ zC%iy=Go*4)e7q*8j`U0ov<qE<?m=jRNJ^$=>ybjYbf{%5A$!2-JEB3`fsbxUa0!Qd z4dB{LCc_bt&&&~wg*pX6ATu*W5NKWCFqykH%SlnRVsjC(V4;ht-#vJ9tJM<4mINXZ zY8}G!TsFh;JejKrA_3|5(1y!?)P-C>_%5+Uf6%lS7dQ<}uR1?Ea|xpax_2Y0hdo~t ztAu7qJ8b(?;WUX!)Vf8FA$Gy2%Mak1WAKQM4UAX3<Pu65+<nnS7YUbNBwjXt=j{_N zABduO*+t@I7eQbshU+c?zlLdi@soz&Ft2<;`NHsqRqjg_fma>wev;NG_>uMePIM=F zFn&3vvmwb2MQ8BvR?BZ_yAy}lECfg@fPA!(8_#fe8PcFvk3-`&YeJ6`Z+u`Wl$f}5 zo6~d_j|?aNM2$w1<&0@c*$bL~_D6N;<W-HcOnCU^+vi{}g|&yyIG?6HHa`kIwpAiz zbB9FxV0Hjq-}mhw&WCP46mW~3eU1|rtEG~L4*^IXLZ0u#*KOM)`zQYV;6ZZUp7Wq< z7-YgUr)u>~Hpw`ixU}Qf^mjA54%|J&FrBxQ7rf*8lfl*>t}4!1&T+ztWu#9Tn>7sI zuYC%-o}m;DIf^<$o|}V&t<0z0|G>Ns-T&*F3Zwe_{O_iaFEU6rRiNbinS}Y;>j}im z=A`3K!(+enhMw)FNYGFmZ8t&M2IFc|dDL$A&0(#H1_2Wjw^1$wG$`OZp$!5(9j=z7 z%Kq2@p+;y0_*>3`g9o$fLHBT=>lv;wFB{+z6pE8&Vi@kpAWhS~!DuuC31pl1O~61^ zoYChg&BThyozs5J%1)Kb{7FYqmsbv9UG{^=f6?boe3h3Z5;i#Y8L!;iq>qqxrK30< z)qwLh%q87+3bI13yK&Js$W(Inj8f$y8*<T}>_L^|<#)a1)<wQ$8V3B^=zkKch~UH? zSVH^I8;>pZU*-EHsvsVEkM%~oMN@z+=3mZ=rU%_SZ>HV${7ewcX9CYT1N^tXmTNE= z^<XgSVPh4Tcire9lL<Tw{mk0x>ROjm+HgLBG+6WmMt$gK9+oHT@d%wEGSGHuds4|q zxLa(AJ~<i+dN@YMDrUog^#j^TOo{N=0!rfF6*BDi`!fR1%iocCUYP0k`+bp=#+yNa zbuRsNfrFqqUcwyDmu7sQVj*KQ(A!TXcDfVYAMm_Y4U_rfUF2UE$LEu<Y60f(`57;$ zm@>^78tppYMZ3`@(I0Q(-RKjTsWDGcXdQsA7%6W@36yVGh=yPlZaT!gTG0E@3gaLd z;K1?9^C1WnxSRo5!2|-x@FCNWvj~n`)|2;4T5N!U|L43Qj@g--cOYi^<Ra?T3uw%_ z=gI#B^5xu5Hy=3(19XA{j=4@zemxI-RhBOYfnqMsTNZ3<DsN31RomGOz;VI{9HznL zUxmL*u1g|!Mc|l3`*#388|!45CL0B})wA#Zhxa-3(yx8)ak?q@;Ofs6Y;LlzgGX~} zg4(WfkH0@7eQ__YDmk_N1ntn^g4IvNz758atJ-+&k_^_fThW72sX^}><wAd35DBw6 zLIt}xw}i`^uQ#ZAD5p~b=3Fu@19z>e%CZ&&k#1@7=&952z>{;tyCmlzgf~uK2CqSn z3V`q#u;bdWeou6-z>gLC_kk}iO=-$CDF2iyDG2ho8xv0p#{MW7bnVCMx82|LIT8MD z*L?;(h~9=iLj$WyY?a7~C>5)O=s}a|)0AY-aV4Q@cWEgZE#ipv1P9qs@T>r445rVF ztWf2wgwu3_Kp%1ZB!9gZoEr--%;qwg-0aT~9|`Re_;pEWU#lE8NndnH<5{aFOprt~ z7yfmZ|2}sCr9P_x3s>;?<m5QMHF4H3r29a*VU;~(@6@J8d?K7%L=$L152Q((8Volk z_Enf_=PUb55Z^X5-J43u$I~zMdOa#G=*B<bU@%Y=S+;ju8;lTss_`FWeYjh>#-uZ2 zs|W^TT9y^%#(78o*6$<U&-$QOdV~432JxZ4xa*reXlOhoiMwr!#E@BfsNVC<Eq4=7 z_Ph4$fP%m^1gRwn4Nj1O3#?@RTBm%xC)5xBc6=`dzAK7d9_T%#$ccL%hi50ob<^GE zWG_t2;I9cc(FU40OWWIvUI4=vW*pT|R0WgF1FpwJXxvKFt2{sHP?B~%U$zA*hp$tx z4vmJmEyqANvVmY132cu3agcupOa?l20z0);fN??P`O?Eu!--qy!D)iM<FkOP-M0UM zJDf%!u?&Q`OdIa5fP)@Vr*eIBYX<*BtIB2MM}szs>)t)&Sek}46UOz<R5Yr)hx%3E z*Y(%Wojdn&`P|2~C_0$fS9<eB7hUwB>DuW0U;Wiz?byBq(@<!Gw%vINf@$61Re{gb zy8RXdGX?7KP!tF9OwU9Qxwl;;?Xi<|rtk{Ry>Up{!FHDx(s8Hou0Ef*b^U1%;K-`z zy#!u1UZ#Sm>-23h=2e<~7M{LM=JYgm9Cgy7hmjt-SnVCg#tV(qwyynX!0VIJV7be4 zj)FG8T*9g{1&6sPXPUuw-;cHRthd}9^OvrQhi$QC7xH#ekZkG`iHTvTeiP@al`lCn zt?Uw~3$_JzGOzOTSY6!HIjoE?(oiGYnq7uoC-tqszxik~N^4|<_x%Z}oO#BVY|bzF zsnR|0Fxa-~d0h>O(C(l4MDpdX%(QJ4N3^lEP9zoa6Y1+I7RFvb$P}ea(7gc(Sh?c` zoDYCE=;3SWx7vP^paGX@zV7s4h~7l^G8a;0JinO-b>fi3j}fS1sj;~}?@3Ff5(0u4 zY{Zg_dZf{AqaU!bM@G`5^!uFHiCvBg+JCcrsj-d8hjWbr-?;do^s;<{1FY)+5j8s5 z7}yu59X&4u-4qI%5gM7TDP0>i!sn<2A3i-FfOiXma6zO)uDr1%yM6*zjmmC=nFNxt zz3*xrHcG&yW&{Pm$&%*)l)cBS1NY9RTI96f>sfOFh|xfN4X}Vl{&M^BpqNLAb)h@; zH%|yo1%c>H@zfZ)+(sSL4N|;?ey4KQQtiA`Zd{ok-~g#6>J;Cvfh=SeWI{MEk>$kW z2$2^ug8axS6oCHfAT@DmMUP<+(~dqUvY{x3tbmW#x1pP6)S(~6^WqWQLjmM_;xjP( z7y%!yETbCdm%)qigr@0^TG4<)EVe95tEin~sr4tER=8_0q~>+f3tKkvg4DymWz$%z zM7qWURB$Pw@;OXOudNQ}As1*TmoiRgF6p*$J-IMC3sJm)qyLmgq#dZ!Q@T}BjRv6; zqzo<OoHsiud>1)U@HjpB3F*9O&Y*&YUchsM={_{u^OZJ@1&eutn7~OCC1no{wOyN! zKmNF!0TSC*9{aFkqroXJXX7pyfN5rJnrfRt0sMWrP>dHWV<bbKGTLqnHXE8P!}t9B z3RILuwi_kDSq#z;OgLHK*`DpVn<Svw_NIaZpfX!6IP`i>3<wloG2=XwDFj&Ags-UT zK+;E>Ojf{rRRsD)MyVp}5HM*lj}1D3vT0QO_6$uElo=#ZGkmnO@MAZ|;ZBnRtgYEF z`pl#LQ`1)sV^!A-tIhg|hGjfp+b<~5+Dj-%ejWQ6th`{auC6X|A_Z8rj1^T~F)Uph zyWhjuyMIj6ea8Ak11*8{+gTW>Qh)UQ`$eGlAe_!er0{(-fleU$jtdpW1KX}MAs*UL zATTU6-4>>>2#A27Z7S`=+#nK(22YuI6Y!d4XnJ+@x{5_*->2ync;~X{3me(NGSxSj z5&6KV$nBxdc7w?jGMxMZd_~hOqf|1lY|r=TBb#e=>+F4p_fQa@G(l1HfhzU4(?)*g zm%DYSolBqUY(1*PK}D;_ZLB!EY02$s1N(yp)oOe6j>=azu<AYEX25aE`h<L1+tn(R z9@@Mmh(oY7#5;NBx1D~BKvitltY~SwFZ;9bCplB{>L$=zzPhdLF0Fpc&A*bTYbPlH zStoQ4@uToPl=ULYCP@guCv~!z-SqIpb&_L8zU?C)`3TcqaCq`g-JaP#JLLu2e*Z>Y z=F9ire?Le2My~k@Pgc_g`I5%!6FnZ*^j*3H`MrHQ$MZABl*DGnlu54_G~-Sj5>9r; z5RB}KGYClSW_MTGsB4f&BXAOFrWq0Qpik{ISkG*5kEGhD@%ij{+nT)=H>WY#oTSp@ zdr&*9xUt!`FT?w+>8Y@4pv}=po*M<mo&$$v*_X)xa;dj;ScB?uwG>1<TiM%q-J-wh z%@w5&rt@{2!ncmO>~eH{w1~a+ZKQ^Q)GdJFf^Xvd0ImSC0$SVKgwSGlu1Fl8gHY=N z>_?Q9oN32?L|y>NT9n?6je^<MNWH^*P)q*%wNq17!F2^y)l@+c3_}nE6~1*}t<(N( zm2|HO^(jGBeI55NT~Uo_^)FL=s`y*K^;_(5cC22nAF4k@Y**2B#kGl|K>aqBUlP8- z3xYbkZQHCW7}fQ2MN?Cerl_K*D)*-ZL0oV0dBd#~&AP_uPpFC+*QTbTb^R+;Rha&1 z5Pa^$i4!N@=qkhxqbRhA;%1A*taC>mG<_=>f^S>)$M`AKv)jAKE*-Qz;&BLQhL=ln z62=4Via0803tmH_;+wPp1cyeq5g&e|k~oS(LK2e179Dj?6q88A<$1OLWNe`Fydc|@ zG9mEn+k>tK7y-l?gs<G*Kwy;GvcU7|;K1VI;<mf*76f7EPT?-5D9Utr+tk#QQoToS zDR?vRbx~X;s;XM6((A&N{VOu0l&xB-s*=^w?l_L)VWCjybP6YS@7`T67VGu;?xOh^ zDEyCJ*>U{zfAUM}@QCd+4NBz`h+fD}-)=(Dab%k~AVsiY$aYP3t`T}3_?&`baPwvp z9><~QDe;@37s*VI9DwJAO`p(;Gx-_HRkwb<^<DT5yn?o&{pfo15Kld#`!{ArVbXWV zJ%L|_K{)gc?X_9bZAZOrCEy9R+_%<T^jh53Vp}>PZbV|(Iu!9;@Jr44o^S6L8RvHc zeJ~8i(PUY39K!%P;}<MTmU*lS^ZbJ<W>qy?tX4~9L&cmTTUNo($WLMf_%FL_LeX;- zRS<YyQ9M;w6!?_@ilVEYqVT*RsEX?q59myhWrgXwK~zQ34G4mA$@f)BQhmQv4l)jC zX0cc-TB;z3A_iU0W_2B~C<=mV6^q59so9xTA3MSuxN2Jz05Fwh#WWpNB0Qxv%chhk zlIobIqEL!420HpPK_U_rB_Xk8+3Cih2*AOKrnv3Ea3IorBF08iLom3(PrI}tQ`9Z| zHMVx$b=U1udBNC1Hq*pa!L+pH>lEc`FJEvSr>E$;@^9B&cipmPnc}LTF$<6>@anGX z6kS((j^h^c-qnhN5JEhHwPD6fM>c~Wf+PtILLfVajXMfvHWmA9*bHcQRs~vZP_fNE zMOmc3|D6A?pCTF4n|UW0a!S{Yp$T9P4Si<bpB?zPjF*s`fy3dnkAkmKYbEH8U17zd zl=NiVmV1Q$YDF3K<+G+C&rP1wRP5W+N7civ(BPd|W=yK89D3`M`hX$6m(=aE9Ia<% z*I8{`0A*a=5@<!zXhiPLZ#v+{+BvtiNrID5(!T>X`<}$0-|ru8yP!=OAQd-8|3CgP z9P)7wWAEdk*ioI!wzurVK5ZjSbaERX==AgU;hxjncqFY+vFsEHkGE=?t0;Yc8t(hT zrWyqJl`?GW=1N*StnDpzTvJs|*TI5(y;&0W1#Ez27raWv(=@MA@d~!p1_@qu>|tCH z>3XUndKr*iz9;_mx`#BC@=mdHEYo35^46|LQkXzdJ;!Fvnrm7e;Pdf=J13WNwF8IV zg`s!y<jIK%)Crzcg^0Vla0!py3j`(B2(l$Is|4DblMVX4?8#+A@b}X^iuAlQwShj} z%i?g3mAXx&DDkM4GPIcq2jDW^ZKmF7b#Nna%vrg`cU|MdMP;{Qj0zTdiH%!fNlxa1 z`tG1(HRr6_CIk}`6B8##7gEX7ce6%+&%$6b*fWKmH4BC8A?ok=LId18hD*5Dv%-<1 z@w<EtrULApsU7HyXJmO`1VC)No+Z}zH)2~CvL*;KPg^wHz`UVUDHT<3+($80?5Bw_ zZj(AR5`Si;QSrhJy_(Stcv2FH^uVkr66x~GaFGMu$gJU#xVh~>=-hDJ6}x3z>pQH9 z>{%uno5riXIfm`FR~?49Sj^pWOrWVG@VIuo!ApT82wbT|q>5SPkG~zR$rX$E+~($H zMV(O93aO-aYC^5xb~xfF17LA{%_|$wEz%a40-r$8uZ8&Ijw+7JWgm(x@oP-d^fqW* z;pUOY-S_CDk5V>)Rw4eh1&F@h)9)7$E&tHFZMKMx&K2F@4anA*O6CF&mP<Ls#<LX@ z62%<1uk*Qrk|&AEz(^>}I3P@44tRK%c&rw}Zf0kHBO60?zjUHk!?wkHwg;OP99ufc zD1{$Lu2W>zSz!sK?D&msOAvtVTiaxm3RX+idWt;xGH>qosf_DprlvElo0*nsBJ4tk zphK2cu+)>d-=?YRdk$wXSMq&@BlGzktfiYf;zFiA!#Ml~?DnM;&K$LuEZxL?coC_n zVqG=a<>*Wq%LUXLI|?^abfJNA3&rsxN%uGPG5N?@nyoKveU!YUbLrC4eHBvHb(KF& z;8CBWl$|7wQ(*R4c0c^!`0?ZFG~ZLtVnxT5Zj_atrnW4BQno2;+|vZB{izo!{r@Cx zj{Z8Ms)77vFt*bp2aM8^=d1L5N^(7TCdKzlJ21y)l6ZZK{c@+CD=5r;2q9VaYHbD0 zhMQkQH=ui|I&ie5>0=F0?sP~j`jwT?o$0~o7>g`C(jZaZ8*Hhq&YIK?hP7#j76ia@ zM52Z(J{U5%e!FsGKb~G$St0po)--=}?#?+YjN#Qa*Ny%qO&YiIewX+kNj!j27sXXk z1Zc3aJkvCm&+D3|=kuPf1J2HirkPdPK3LCU&~<MgQ?jNh&UY?^WANpVuy18$W#!|w zN9+%Pf5cj)UuL7$suC7XE{<_10RXL)6+iF*bluD1oNdeED$aVk4x((^xdNr<d<FfV z*<(`Fq1X-;I8MUlk=>p0=#l7*-ZADV^Xwq~7oJdm?)XZ3m4sw??zN*h;Vya}q3Mb) zRPI85e~@A|Pk-I~{QPdQr}ky5sqfum^yXU=(<7b>9mpqBm_iZv-d^U;lv9+W@nd`9 zT+nqdzc&ud0MPo5TwkXGvUDTUo?}NQ2Ro>O+GuyFGJ6tzh+kPwS()2MMY=WgkCV;9 z`rard$?qa^v&qCclpQfknM7#c>bO?I4B)zjE+Y^;0UAT1T44)bWqigxYu2iN5FO`~ z-rQ;R#!_$g?AqFzgV>O&Y1fVBmqcq3*FZkUv1_og#;VU9QtRq;PkN3*C-amyHhH5_ zFAdx`S8XYFAjy2Y4-z&vktFRJD+Xquybhjm5}y`=KF)(JB35wrmq9PIIm9_}FHMnl zcqhE3{j0))mnIkLm1u5}4ct!cta`oPXrhTvX=$mj-A^t?+t5R3Luv{*6W!NM=90Og zKh0LB)T5#@Q4*5C$H9A6h|%V%Rn+akND}fSXc$+SG*m(%l~nZ{kPM_Sd~Zt4=e~Tt zIawGUG+`LL9;KG1X_}t(B*F$$Mb==ezXi6ek24aqj*Rq5&m`|0rL2)zM2HQDO_c|r z?3pl#Xc?HEZ*trnPbBP{l`p?=&>IJRFxL>a4fPobYHP{9j}$6f{>Jz`I)}XAB}(jL zjh96JJ>YfldB01a!O*RgyS#jp#-<^Y$ptD^CiW50O<o3mBlk-pN{=E4aakc>dimy6 z2>{GCG%ipn=_sP`(}Oh1&lXCtEfCm?#%D-n1bs2!W<y#D)bwbzT>45dAs1(Uw4|v~ z=49?62kP})7G&xPZ~8TK9J-Gj5;XI9*f;`E3|N%S)lV8P$JYO7m4<8+T41YQcrbn0 z?HG}N58C?W)+T<!ALGt&2;GWgV4;idgUv?<MYFgaTq8|V8P*cETK)DK?YIuw!aFZl zEqiNO#*&0F(@YZ6yuSh9uj=s{-*~8Pnr9V0x0L!v{eWLS1+SX>{%6Hlk~~N3Rf)zN zr?GVzfcp_gax0F+TO6iKk|ct(Hb41EsH_{l_~NoH!FwN-wK<N|be7?Fk=pLywBnXI ziEZ_aQ_2IBm+r4`x4HFX{WvkUR&X5p@uKuGviR|B(#L7RgUe`gbZ(UmP;<K{_Caab zU>9OrL%3sGE01DXT?s_*Y`6@MuEx~}T(@HXjWy4f)J@QK3Ivp3>$AzC6{afR9!-@j zGnXyfCIH}Tn!8C0N;)!_FE-uLZ!*60%p3&Ro5-s;hc1xMF(!hn5v$@z3{ec*RQ-Dq zC53j}u}yn{a^qPdsCfntS1cf!1jm=r725Vv&A3$})Dmb|MZG<gdaphjnKvtDA<?Im z;t8fDA0Y7crKJ#-F{6x6EPbl8Seh7D9@)}px3s!fwfS`Ctu_nxiIQ3M^C`K5-g|3n zNQ$RD@L9L|UJ+G>vG#@Qyqw~xf4grIS&OQxM*c-%tr4SnfvEd}lOvzKykPu%s$a;? z{OAHOeG5WKcLH#_nE^$F;mt6QBxP*^T<#Lw;c2s6l`ERrA58@1(saF0r2KiF77O+1 zQW<bSe80Z;;fMFueV+sv2o5M^`ugpK$qT?&V(xVx<v4D-R3^;kd&F4H^8m`FX^zrY zqC!!&InI`gh3FMZpBgsc3d<>$cuDfT1>>QJe|r71+hYK}(~g2tl;AQ^eP&?rg|&W! zLA$4jVKw3vc^avTNkacl5Qf`!633O@4^c&LK^eU7#NQT%@a)FMhM&pie4lcz=xq6D zr_7#ir|>RUCQdw2hngjyvs>tN_hd#t>Ig!I`Xo6Xn#-W?O?!i7!FaZ2$RTI21+B0e zRwF$f2W^>5)F=wW$8ph5V;g!4A}8M@K||5Z$@F=;m5dAkIp05k>7ngWiD4=+4<4ix z=9?7zCXQ7!RaN6|ts!)>eyW+`>Vvg{>CNv52yK0}Kg1TiXbLv=0~me6sR!`zClP5o zPSX3c&|QYH|5GE3MPHfv>_!s?o{;xh;`wJiOtk!5Aly#RYR=_NmCNlGv0X*^6fpul z(2ElUsa-C^2j2VM_gcD{8ivYqiz%NDUT;DzKu6P?^f*b7oC@dRyL{Pw?!}pDf8CXd zleH8jv7giOr)L&lo8Y*jDCsfm5n;%2uSR8l=*r4|>&IGyc-ObI%Q0O-*r97C2~PuK zL|AHTm@NzB3Ho7$RZL169>{&5n(085h;Bm4jU{YjTUWz47>y6qnaK;JXQcf*i{HyD zinfJt7+Cl-@z-@8EWE}<A@|7czS?4xZt;qurG~?|q%>BZ*++r-&xwQ!XzDmD$Z8_t zQeIv0i&9=z*b{52hoWx|=0#D6!NuLcW$F=1*^`<`ID;2m4&dMnHh4wR<PC=Q0qF0f z^E&hn^dYMu>U<ylIr@8FBw#+?cw`tMYdYZjLQPnTAK3@2$8`8WqQ_}V%vanaWRx@< zzUK@TvI(LLh8fj}TTXt!#v90Im@>#<|IPwDkO-6QkL@OvC7!j*wO3jSS93(v`b?&c zW1-g96otRZ-fSc?igf@nMP6gE&k<4ELQk-;TJkr}`t8}jJG`2vsnp^fBaN_P>qoDP z;~RHw-QCaKdFf8)7sCshqVNHQB}WFFNVFT%G+lU0`fQl2@C%xv@DCmI>X9Qy)XTsM zVlx=V;5C*F!@x5K0XSFWjW_tT!(#N`aNsMAA3~S#Bx^=HWBgg{T#2Mt10l$O3}=W~ z{ofbGNo+}HNyjGjAfaW`{+C2R$fR?YSS)M5l?Ui@1RmQzGmWJ{^}-e)G1}3sJ>C3= zjLP6nW-ws5QI#m3G2-mTq5uff`Jm%y*P=)ZQ?@?`M^z0_%(I-y3axm>GE_x;{W4`f zHFi=-P3wMXER*4bmTL?6#A}XY>s?U`1<fja%|YyrpYYI(AB`~FE-IPR%szmFX_*zv z;U;u6M7M5ZF2ueH|0*c8yN60KI2i}OO;<bi!?5j2iiF>Fn5%d6%%+>0n`l>GYzo2V z=H?#m5cBspp=vt^rl+STJ~<d8{SDO!lfYN%op0gdiy9xk=%R~+y%+U^4M88Z>QYEY zL;iAeC*V+xMkFn0sT&Y6Y{_gz^hrG2x=3d?#u{u_zNP8qtz$Aqx#)n83ZEva*Hi6f zPNi_X6L)N0`1>_u=rD~fvn)!IST-#@4b^J9U9Cd4+^$w1=Vzf#*M=2zo4aa8*DIHb zf>11#y{@6@<Nw)Kt8I@#wc1`okaV_!S5G+GgFc$yOED@avhngMzut1nc4ReaAUoZ( zzZPaEAUsd_0AW3yWCXFaFc#`8`SXQvY@sBInZ4|;Jr{gV(^{&MIIUQ}<ezUEx7@Cx zwm!$Z8rndFzv}T0+QI1vnkw62<*+4QdU;4`9FgN6CpA?1f#%>6F6p?PTI|LZ%ic~` zfuUmB<PDT`DobP8v9a-H4fbUj8;*vMzFQCkqf$ie`en5!Wp@jlqUcPSso0kFQPubJ zf?*g72k_JJ9M3F=S`bMfX(g#9I+f*hZd(H>axNo0YH53CY#I((hMOD?hnieAcNV>4 z2IHBSuJKLdG&w6%+vPlvb`BowDCP(A`FI<w8$;x!x6yR}5{1fv)!>|uHh8!Z8$<uo z<nR6o9;rML+OkZLlS?tUP)@~Y8I(Jsu5OZBNkv_kGRmJCagr|YJSN<rRz&snE-y*o zYgMAdcVn8Q>*miaS)v-DB!EdC7YcjEwc=ukOX4wqCChMQN5Zf^H#d9FzP)*i{(zj& zRVW3W&LLaz^ly8iUlvB?<CwjQ(xs+;Q~t)saCYVLr{>f%I0uoDGX7qxx~K8gw;M73 z2Pf`E|7_k?nm7JREXy#oec$5S1oE$rcZCcxyWsmUL`Qv7*}kLKK;WNaFqgqanuLHU zQLn;~d~kskha6#nItS@BAuyPM#QNt6sX33kqdi}0tD0dMs+J!IYdo*1hOMibeLIln zJ>qbez+tJO(WIYHts!Af*cEozwi>s4*@{32F9rJ|?cIZZ1#jFiRKqd?fWWYI)iCrH z<nztJOktNOia?WuRnTl#Va7a;TCMfcAKxquU(tQ965?gvCbXO1w~8)B8@)4a&yS+J zBuzdK2Qvk~<`r?HhT381zgpu-+@3K-=nNZ4jPLsoj30+SQ3BnJQtY?u4xL!22#@bS zm|iYas+dw%oAWWHZ1}h=%dM7t$TLlIs&K{R<fNGockkZ4`|*=sMp4SL;%JLfW()v_ z;P|FpQ&p$={;4*ISw?9Z$MO7p{JKjnxug>WolfVH${k0J9655DQUS$}L^g$XSTRC6 z$4@V?Gj#m8<yL9*M5|9%J*viYVYRlEbV>rufbJiVs2<t^2$FgD|3T`a<B%2<OXY&; zIA%U57XV_>b&7$hYFzfMSx!?;n<spR^Zuv&HR^e#{{kBvRkZ<Z_^*=Z(OOSdj0YYt z6j=g6Tz0$#tY*(_W|sS0+XQ5~6m1w<Cq;tGFyQZCT0{Zz=)5@+n~6=F%ZnIXj!zcQ zXFvPd&lXIf;+f(0&wS=HpM~ppEvMTl8mA6F(~R4)gYd>13Kt$yseP8ZV<oO2i4+>V zWl}AV0~(7v<j5+ZW9V51ggo4eI{(cFmL&Z_2FQIHzzZuF_e@u@AsIG)7Dv@tWU!Zk zpv0s4`DWFHSEbj_!8b{o@U%hbc%Nw*^MOrjWIu&g%mP#K*HgxiIM6TH*56zz9@L;^ zM9Oj=@9zc}tFetdA!FnnOaGYN+87vmVO;4jO6@|rm4g;<M9N~EZKcR}7+)zAth}U+ z@NdF9ZcleqyE?;S-ROn3ZR!W1vR>yLs-StjFECF`lO&9F!ltNm<oOE6xb;X{^Rl<& zT4#ZJ4o(75du0GN91R=3X^2;bjsyOWrfJw|kZA@O;B*W0k$P}RPRODfaR;Z(sB=tn zGxgfkxq2=PV>Na)=l{-~2fa5L@{m;>jC1E;P#R4y$%Jq6k)-`C+=tc3b1Hh-C-j-n zxFC<V+OZWoZ6|KUUfgn9^_%qw`lAd?w{u%9&jMixuVV79YCKovxawS7#a^-G121p_ z6)^_ja5p)=(uHK@c+$n*CGlEdju&}e;IUUKdKe}{fQaKFfROXR#XMkvVX<8WF*=@f zG0e;W?k2}0vtes+IAp*b%3~Ki4xOLu5Pu)yvGbTK7FbZepuoghAaIySgbGneWDHu_ zFb(KG{dqp@x#pT{@=z>I(%DE1#tlUQRhS9N7#9i?Q;gFm6<NWQvK<yZlpp)i%{Sj% zYD|`j5D0liF+>h)7|P|D$x=z=Ih_fBvGO;JQqbQp-8eT|0$XE^cKb{_Nn<ddOQwg^ z_3!ZmwP9#G@y{*y+;-2ZUh$Up!J_y6sPp^&RdgLfEDkT|#Bn?qY1_g5ZzHVgYf$J2 zN1Kyq@D`&dD3-dCmwc0%e?kU!7Aoiw%=O&;2Y`8E7@2G}46B8rDcK?No@Ke!y?igF zOp^^N%d^<w6@?!yy1mW_#<bBt%Bm(`M1%EcUNVb?uo_mgS>1>|XnW>mg?I3*EK@_) z7?t;2-fhW1A2soz^W`<h^w9-7GldU`+aqI)bNY=0Tz%BBI3LxCi~&UYa*}(G3}sQ~ zjsRqFG)HwV;6AEaP6=r%AMBry(i)de<Z@t|C1zc5!2FGK>*atc$TIyX0a~stH5=F* z39>AGjDTEPCgglbfp<jjgx_q=HN!B=#(G7d2CJ8v{<aL{W0EWjCT=vBYNaPAkdM-3 z6=htt=YA3W0otS#MTi>^J@;Ergiq3>of1-(r%3Ft17SW%J;ivCr;pYmsntw%VuIZX z1!;xj$;JDGBHNhnuLI>*3S=U(bw4H7Jw`i8oDcaHk4JM!d~GH<-i?ZvEXj3wA)~5v zVcme5^&C#}_H5t2$CEh6bBn&nIi6%KiQZ1sg6BN_d*v5h*X4<~XK87VM|juGsvIXu zs;XuL-gUoR;`^;uixWkzMSAp(waIANxCKP}O19);t(S=Rg}WV2@@z))=Z&cn6D7~# ztZ>Zc98VI}1<m#(&e=7#FCKu&+9;Hl_?fX?6WW6M+@A@p7L$H_j<D?8r|u4)X>`>U zS6m^AS1@}vs%Fc0Oh4p0H&H@u8F-b?%H&c(yJgTWsDg?X_y`&<&$XVZxg9s~reFf1 z^to7$gU-1yc1@aWR}dSUa=qQCCy}lM+<5m8Nd2rNE$ZHU^2sNC`9|nm`F_C=fRim9 zyogO@;W0J{-gWWj{{8z2EPsmW(V#Hq@4ErQ9jbF4DI4S}*@a+$u0uYUW_Z15IwVdX zV6H<Nm5VVp9vY!k-n{`mb`WSot@nNmVJ69VB_T||ef21`Wen+QiY<{jUr<!lr7zMz zm;g{F8&TOdL<H(Ru#;M9PdF*^lc85GF>-#bHmNGX!cOZOt;2Jy>?%rr#6_uTn#6N? z!zzKKLt=aBwSW*&@Px4wXoRl;m}a@sVPOvhCOU1vKRX7w9IH9*q){qIZ}<wjwJ}KY zb}?s}F#7ebUAtVKc)NJpDXO&oIFal40m_81HNr!Z9Ym)jYLPy@FN6y8iE3DDutM7I zpG~T6l|Yx)TvRGc;x$allU1KILvH+iry6xTbK$yJjbSNOrrAO2r)G#<(MRY%UXLPH zJa#Yh+|d@*Id1d~k6>5u8w|S&9)O!~HoRyek;spj-;nt3O#K0~SYDG<#pHQOsP&18 zSO>!;R~+pS6jf72f!B?R!%XIZt#gEOI@pNfCAiyDbtmU}BE*op1_O6>TqcSNKxxi- zK;HiY6hH05=$8sJ6%{Pk)QMin(6_GgZB-O_K~c5lxNLAdrp%aF8ZQfEU&c?!+A`~+ z-I2>K5Qn2-W5f)<r4GGE&n5LRq}8?L>LXL?6OZiqp0EG6OHLnb&tfWR@Fq=)3qPmJ z^a==(?$4rGK5Ckb9S!Dx`D`*DXyMuRLAagE@YK{Ei9i~@BF+a<qfy7_!(>FWI~K|! zrjxNTknb0CCp5JKo#JxR01==@5f#zZR^`M9wg6DiWCCq{h(~P$+EAY#2Gh)ip0>&s z{O8G>X~vx<`;B&tVrbh?PTK<W&~3(vvy}xQR+A=4+(8gO!3Pv&Lqxm^xf~UL_|ZAc z-&6sUQroT+_`u8I{m7X`h<!`Lmyj&7seq|vv;wy}@ukDvB;8pH!fZFxA}>ubQTz-e zxzc&xOA;=Q=)8gOQ^hcp(rQUja{nTV#Xq53A;*|$=B`ocuN7sRVi<~4v^>wci80f> z>3ybYPA<V0lqdd>8-|iQEC|Ivq3Sg`(_}1H;OMUv!%(&<ic~bsn@p3jn?|2mT3VVk z<?r*&J&e}SwdgMNBzh-$4t)*%bj&RO7dTfhJewr(Y-hG-@(eA%)h1*J^^-;z$KOp$ zs`F7BjQ0$Qy9q#V8Y2xn@8knpGk)x~gTgeG%^Oh?EBj*qN9F{Pu?{-y)cdD%xq$?7 zjch`vR(Dl2CJ4{$BMMp1)0l1Rj0W&I-`x!@DATap^{M@SgPCsIO!K^KAw8f_ViiuG zK7IObBIWx1zN+q46b8e4c>$QB>{iu#?z!il)09jdIB=j~5vl~p-NlSjEt`d+A`mD{ zLN+V17jnK$t`=NfQ#1L=$+@{Xv+8*uWx)s2|4p|FSqVI^YR=8gO-|-BsuuL>^}6Ys z3?A`)zfsO)?g_(i91B?<m?;XR*=&vh&zlVRtbkX>#>N_cF8`2enss2NAN6{@3ycOI zpnZmH+lU4TSqjCUr})Aug`O^#P~SLqH+pzfHF%uFJ>ZHlW2`;M^XT@>TvQL?hBrbk zKC747p%eTL?ZC%kQ=IlG)4x<<ol~c{B?931y!DonlDJ74=3MvUkunwiMaT9wfqyaT z_-6+6d7cG>qk-4$ojw`@>I$g{mQ-xD)2=3G=bcAH?XX?%%q2+A1kMK}+hXoTE+iGS ztH~oMeAlbTFGLb_4_ZS<XZ3Q>Y<d`b&89!E=TcW=e6<dsAJ2?GHa=bs+?OXzt2xsb zBtjill46iv$MZ0hT~#up65-f)DaM}5f#;8bc5~992iq&x2#N)FTk32+<EbxnDhE(B zYH_w>EkGMaBSnqUCc~ID<eOE}xj-XCq^g|+(&7JgsI!toWVa*=I^dt~QL35KQ6?91 zh9c0Vs<xMt8S8z^RnG%am0ep@@iyQ6OB0Ux3r9wlP6~L(Hmj|#Q{UYqdX}+chhgd3 zE}(7<(44T)sbwb_?9z7dbHUA;zGsiF8P*D705&-RF?iKuS1coc+Y;9oVvPTo%a{0Q zj`_++gW=Sbo8|#ZdAbpS7((BuzMcz$4_Xq&s@|t`^xaQ=>Qg$<Nlutkz{K3GRI};T zpMoz@+SfCN^}#^b4OO=fvKRY~tFOMA+8UkYzyf7X;BTRzzx3N}g0L?idm<L5W1k4= zLQ;d0F)Q3di|aG8-FQ-uB#;x;%lizam8mD3^gSQ;hLA@TdEQ-z%sENA?RI@f5$V)6 z!cC@Kw})xAu0U1}0QA$P(ng)F@Hf&ubsh5^9<lDobw^zmamQz#>o^-58+pfeqqyt` zAajuq;5&|JDY$N<R05F76h~jPmT(*&z>jhg0>7MuuI>2cQjKtCno7BDJC_5fgHySG z)ur0V%0}<R*=`S)EFJ}pm8KT)BW@APv?C$cgy*=XE|wZff>Wy2D#9hXHe^OQ+fdfz z@M8qpIpTShTCM0{p&F%<GF?Y_nO5M~7RJOjjilY~o#^#p(b$l9?2M7+;U5CfP|X_d zOJg!uyMhb!5!4Su)H+sK@)7Z9bm3CzZr8Yn+E#~#>h`f_tLOhwp3iA-pr_at8E|@& znunc0Q<!aZo&9ZiUgPk;55IyZ@U!SB+C!g0{fNyp6N{ukj0ShmzJ8}aE@dNdRqk=@ zSyJtG&Hq(ESH?q<6aoV2TQQ};<q3yo5)kAvb*+?*mFjOh0%t@oMk4$1ywI!U^VDW6 zb}+V{XQOGpGEam6H>QjcvAR0y<@2^3M__7QRscX1e~k%+2lh?1dZXBAR9DxUnt5R^ zpO2Cx%I9;GGV6JtD2NX^=~8pFx++){uSSf7dC#+HK3^$lO$hrwQFzyP^&X;iWhqI7 z#hCME=Dyhn^ok^_)CPq-_m<oJ2<*7LlsezJ(R+6JD}+M|t$x3qnN}h~&4hu&)VvD6 zl2}+6(>EO=NE-P(<N5rs({2YOjF_9IrHa;s#8H6}lDsX~p@6@LEn^gN-hg^1NW5|i zt~Bqe)ouL;k&;~Zga_a~aozJx;K}Lu5*en@&tA<k@>cl@CPXN77-BQ?-DXQ$UK{0v zwJJfcMp7OP)&YUG=`cwWM~{M%;-XC;wOu7?Bd_}d-M@M9;>Asgi%3<-G~xR9d_p4( z@?wOEKk<FPwqErKjxKrv!WPWdQo3e5fCt0Q=A}!QwuC9VG^JZxl<xTiM>i`6LimjS zdwk!ouGijx<O_=r>lU7Ch@OM)MBj<tiGIXl7;$<_tR)9JP;Sd(sLSdBTYfb!<kw(5 z6rk`2h@wi5KE<ZtY)i@@jqx_xb}M`r6(4yh4CX_L{JwWT6bA1~eU|q+IHNS1Fc@r= zXkjX%(6-d0?3nKlB#w8i!%#EExnHaKoHI5}(%uJlFL+{Ri6RH>o%h6EYb$shatc}` zk8&6W6e4#&mWxfc@Qcc_!$>?jspo0E4YEzgN67kof4cwhN8GYe7-FP`;u*nEb9yZ_ z?%0(p^os(JUnu~@HCqVo@nt<~z0u8g6kIw7wj%(f(gs8t$Jou|7=vfn!Z4J_ov!;| z=twMtZ!XplnC&<jfb9Q38UP2z8~MFpng$pS&E=VixxiSsh5=v;VF1`*0tN${rU?ci zxdOF-35*2;Y#CB*W@7B}3YQ>y_@9Tr4L?WsOW8Tf#3gjE29Y8=syr=;lV}2$-lE>D zUNHAg$=wUw*SQXZ+j-;~-ekRlxvp({1X|6!`#R6EuIJ`*^~dCqmD8Q=zT4ISeYr1m z{GgOwvQeSrLAX70_TWUo^|Gd(4J)qk&A?e$GkN8}Su-JXrw^PrOef#H6by#NH$6lv zS)2LW0iRg>q7=fb{>!1hYwFq1zj_6Ms0PG%i8Prrx6-XYp;iOTF{C;knhz($@xjso z-v>juS6x{tt^R9-)Zzae9>7n-=g;r%C(wJ)N72(-6^wp`o`X53hoYwWriY%axI&OM zZp&%xzRsN+c)94ud-d`A!u2K3b-krAg6BMc>+2B5NdyojaSTh^&rYW$4q8t=&+}ee zXMNtl&#jG?skc5C?-RkROY2)$Z~gl^IP+#>mtl)aXV>AbeG|Ak`zPmRItbl&8bZh? zN-3Y$6TjS>js9l;CVB?_8Tt>PP=F(F3SI#B!Rz2X@G1CV_!;=U9`79xP4<{bG0~w~ zeX`^|4?Zc$hb35F-nRV?z6YgAp|SI*l+CG^&AofGdm+1fliwM)q73O;7XiTyqI#3L zp2GfqywLsTQM*duyZsKf9fA`ZQ#lc<UMs`CsY_!M!=nDur3DNy3aVh!O5O!Lp^W^1 z%<yhq&3I+Vavoxu?Ztl0IuuBIz;y$^R%1KS^4IVDAl&x155V{HGpuauxNRS|Y=vi3 zE4roS*&8fF^4Wl}kbO(+({>(e>&7!yy;Xz=nAf`!3Y$kP$FYu>Sc%0<XS<&H1|PID zgMIW6Y@WbkLS6!JW=HL{6uE$;Gp-h(ieId1?inT3;0YJ?gdU*4;|h{wSUC5^j>hn_ z#ptq>m!o1a2+eB}fEf6ZN3cNvWRIhKE+%Fe6c-%<`_W|?Me=gQ3vnmeCV(G#1OsXJ zE&aZNuVJ}A7ru_P|K(Ql@nq}hoM%+A-z9HvAu`91R=)xw&fLd@bd#DA2UTWh!wq_> zGLA}*(d3^&4HBm)&ow&Ra~U)kqR$?c?%Dn3lSNtoCF<UC94ROrKl$X7Gz`j(2J*d| z#cX9M54c_q0-%sWjKm$-{A5nVdEMfGaB^vXHXYL8{{QuRv&e*BNmE+sua-*$fRxIs z{R&OfiZ5manF|?QKaCD)2Z*I`ZC(t0l>|BM#23KTxep>EaJYanj7F=kz21;Ca}XH} zXen9A0|mJUQN0Do4b#TF+Sk0^TLX^j-FF0zWBe##jBGo&n9hA#Z@(1T-3!*?iJ9ol zlFZ}7B^j986&@vI`$a-%eV-89FEzP;mMhK9Y*op=M90Wg-w&l?BMd!q@k1y`-889% z3iQhN00zT=IQf1zCV*v%_#3UJifI_6NfWyiJj;S@w;xXMP8Vy7Nz236*ZwYO9~lnP zBsfpJ6Jw#w2V5>T%rB;sVmtM*Ji}FKJh3=%98rMykI(Dq%{SkSDaN11332>ifShZa zmKj!=pXpEUum8X-LLL<Um#R9F42U}+u<A6no~hByXeg*+3o6xOR0=>1egE(cKJ^ig zgF%@qq=gIQU%3QIBQSj-uykwyFdQb7VMxpH0Aubg)-kk_>erj@FzBuTHcc#QW~eWs zM_`K<62~@8%c?<^ViRltLkRm8ei0Hta<FJ2p^jmhrUCZYM|1!tQncd3$)4RC(39xX z=m*g=XS~&|$cM2jG_^5DVZR01WNRM7Irr*F5*&g^*2ewrYW&RU`1KGMxjh;yeb-z@ z%rwyv0HEx#dPqV-=j02XEM}7l*7%af5XF_nQYDJvXO;3H3jEMIU3N@=#e2@+!AfT3 zg&lXJuwQBJwilcRqW;=xJP=R0CLq>w(-L;F^~Bjr6s{fYt8W3I#V={x4(dxl6jvZ{ zxy}fjjL0;1+gX+oxJ^Dx0BKXCrS8csv=`j(a-BK9c4q|kKu*BB$JJ!=qzh!O-EMDg z+<q;|P1SJ^_u=2{X1Vha`c8CZBs7sX0AW^XsJ9m@^v8Lew8lLI3htw^tK&#oJ-CRf zoWdCYD@pWTMliojE`R_46Y|{P#Ybb7$Gi-+PWgxRS(B|{yv9sIE#@+DG|aiC4C6Qw zrke|o3g%IZk|lp(>WyF~CC`A6X7(VyTZab_`m<S>Ka?3i)*uzE?RuWuX2REwlHBwa z-4cdr8e)qo-{ev`T1(dQmi#!|{JBkbdEb;K$bDgg*q_igfb=@eV*F5Ma9upz^CiYV zh(6l_ly<H9X#h?`;HTTf{*=;aIA;-1jnw-P87Iu6;$*_fBc^wScnU*!V2K5T;b1)M z_G=!)Y9wQb7U`yEYP+BZlK$Uhx`vWcD`gm%N{>0d5NSx6uuWnaEYSwWhEAAa5z`io z1*s6e!#qi`VJNMn)CR^(idT=DW*G&mBW#n{tN0m!+w6C4;Ie57;ZrIk!$x;Kh1Z5J zz2P0rmlZhFlMD<)OQobX3}Diu)E6QR-m7hyo0`V2zO-SKu>l}FpHjJs=LEno0KlLO zW1};}Ecav}R<$nv2x}1Fc=2cYKdC;4zKVY7b9MEaS0w69mFeX%wjk5<`pG>2mgp?Y zOex^Owz~_3v-o_RGd6Fx&+@;iGsgKLvgF<S`}+b+`F-1@SiAtxXyh1bw=WP8H%&9* za|~F*tb*Fwy^fyn>AZOqW+gKz={BY>TiG8ML(+Iej$o&{Q6nms2wExGL9sz|_)ZlD zoiMa<zncp1M&T(^fElS%j&g?}*IIhUxG^Z^<T!U+ffF+ms*;J4$;6jUJY0C%`#1Q$ zE5feiA|~ho5p~r@HrkdmL6YXDGnZ=%Qtc1`veN<6Gzsr@&W`48`{{m{>m6s&bvwkq z-m?m7Ys1k#B*9(ZKBaOGBog9@BAevVlqKVX0|`RaWJSZzloS`BLY&a!3wvM7uS_Nr zYMJK1<*BQu#*`GB8I0;WYJv|bqK1cZLro`Cryb(lKWKaT@syg)#HWnp>XKagsM*;u z4J6KccfSJm(FOFw+Jw>_vc-Czi=uKk?#~SZJ43{Sj@(xS$)m*9*~u6$G~)~C7}H#5 zfq8@yDL|KTTxq}^kiih#B*c*@i^ALUH8UBC$F(jZMj<i@*-Tkv4f^o^UKxy(X9}rY z!MJVNw)ZQeU=kFu%?PpY9tN+{`+;-rafefC8cZ-Im|;1TQ|58bfh(;Q1Doi45{z={ zSPPPEbY2sf(pqsdNz)`r(*$N^=FPsmrggH{fKUbmgC~7IR6;tt<@%f7TrVH7?a*h8 zOaINU`XlgrzVEv>u^r2CrBvK@i0j(a=1NM}v59RHSG$I38m{(i+j8t>|3Rqjy2SaI z<yhbH60X7DQc#|!3I!>IEY$bH##B2BEu*aw+!3|zA|!DIIgrc%fsq+RJ$S%+h=ZBP zhD;5{V-=1&IYc0E5Cb1O8PB{gCxRy<Owz^7fh&tWxWYY;FZQ_Sai{A{U&oZ-Xz@sd zNxCBeip6yt$9TP11dzC1ENERQ)-lY|H0`?WQE9e19Q)(Z%F5{B&|*G&8Dt>Wv$AQ5 zN;{cZd0m39OC_yuIN&gMBGf?FTjd64asc^FJUP%xOM%>_BI&r&>4$}}Nb*Q4P<NKF zX5Kzpp>zhsoud|MWzFG-ijvF;n&J2{bu#bX%mdEDVjrgXh{HXH_CU*<b{wyQffD@f z#Y`rU%jQg9r;A5(zBY5J-gCxrFc?97H*$dU%i9fV*(P3zF^*TTY3oKHxh$Q(+!u3F zDVh5sr6R6dI)i-_pc=ZK>Pq%e^krC;IHI6}(Z|_nwyZ*f5~&QiX)Bnw04U_eC=Nq1 z*=0Y6R53B38yb&U(P^rsAY*~_PqS7Xr2mBo^#HxuiL??T(sUqj27(@!?(&Diy1DZh zO8o-JW5_o}XdgZO_P4){2?bp794FKlQ^(_E1Ir#lq5X64KH_<CqYyccLp_%`B9{}C zxE^&ZLd-Qn2nNTaiW6aAOKhNi_lr>!5dcD5j}qJEdYowFeQp_s9Ae`IB$q)$|NYn& zZER;B+5$o8J+5o>$}c1U2tAM5+_UYIuIpm#MAl!7?=qL$RHWcw%mlSLW3JC#kYWsT zfYwfTj9O@dZtHhE?~x30gh?{EWtr|y!?4gGJUl0;)&K%V7-A|w6v2g@Cvy)tnmB>F z5lT1fl2jqcHsbYfc6mel>Eee|UmJNqCJsg5^GFv8I&}R&MA+C3M8rVKq!(ix_bh;z z`+GR<B~k*5MBwun>|TsvCMXR)^1W@X-%C|o@x?)N*C;6_!cq(nmqNi*$#^c)CE+L1 zTjqW@EsV>dxHHBeW#WsHW+E(OYypnz7wq;3rpn%jJ^)ETw!eG!aLNw+Lgz_0PC6M2 zCcTM~sEYzR*bkVhR5`cP@AL_MB3y9Ne(D27KmxZXOSsPgG?)x)GeT5-m#2-NnSVZa z?%YW*YG?z%FACy-QNq^zG0!wkTajt_sL44aT%MK^u2D5gGOXbCVuBw`)Q+ObBacGw z(t~GJV$}0WB>IA@0FcL=dCCbTfb>%?M40zvx=dy?aY)qlQk(nkahCIWk5=P~F%wu{ z?UuuLC#Z{VLeIA}4TqK#Q;;I9u%e;|QsF{sBTx@YYeGRPno30anKi^s$lJgwR9x_q z)_;?h_C>R<O;8Fi*za^Zwa2uDF^A(Fr?L=rmZUxm7pcsCMO*NloujV5lq}yHE|)Pb z7BN(W3N8goFh_x<-5HtXr*ko$As0)D8C8t>Kx(78|5{nL_zD1wmm=dF*i+N@n+;#r z8`^dp+j6qTTY-+eRc(8W_eYFC_C4sUR%S^Tho}pniUS&n>m;Inhnh6bLkSU;Xh;Z? zuvmaggXShup%)3~YqINwm?{}o$;r_)0#Yjvv*LwjEiw|JoV{N+O#F_{PGD>E37t7k z39QJqk%yG#&v3TmQ*U|8TP$K(Gz{|+_LSs^j*QGS<I}<bIA<wKvKBD2<j1&|pGZw! zobWtm$|E<E)Ya|XB1(YUw43jTN(yHpJcs0@lrTGbRs?QkkwMW)it$XoOY9Wr&pPDq z?O3+${eHQ`w#k`^?fPlY6rWr6&Kl}cf51q&nOMFuQb9>HycD8PCJu$#k;E7k)i9(q zop`o(m`FjWBJI|JZ()qd`c719TOtrFO;X0Z>|sf9>TUp(&Oa1`<8bS(gK8C^b@BR( z&)pt#kHEmRpU<)ZR=79?&*qVT^}%qAUQoV%I4m4J?Uu$il!$L|zRZo}!_e}rm^%(s ztAk<v!gT=aD~`)`?i_m)o)?*U4wf6}4wGg00G_&a?NMd^b?9yAsTPSNaedR<q>9r2 zaCK8To9=86AN8a8utBQ)T<J{dTiIDhAU<c_&19J>)4vT;Sb767pgSNi7M-as{i95w zp>N4ly?Tp+0Uiip3RWd<cH1mn)FP6dpd@oTayX3LHrbCRE6Y73_;z%gqb!3=t8#m6 z-{ee<_Lny=@176V?6vii6eQk4S{w{c&T(1$MsMSthDFs&b^TP<K-;4Zqx<#fUFhTJ z%U=JiFFl#(Yt{~kpc2!G%DzmTjC3I7VRdb_c6uAlTuENOX32Y3*sJKV+wrPYiPxA? zC1Y)}YXK^!C<$*{?o^j+RiRaU_V2pWHIk({@ZY`mVBTad%W9*rQe7t%D{F$F1G-Ap zahc!NWsfZyyiU*zD@#3~p+0l_5Z#CE$~90-P!%9o1x=k$B501+Q$5zGiha71MV)$b zbneOmEIUP@xY}(Hb*GpY?SLRjs<|NGM%y}ez!sMnOKxHD-WD1>2y)eA^v!v69A+jI z4k!}GQz$n<McepXbtKsyf#u>)C1$4hZ_`%fx_5t^;nI2gz`Co&dYHi<GB}=DfXgsY zhny{;A?;_;t7<vstP44RYgP!I`#5Q$Sd&QGozH5v2E)Oyme(xvX6A)lP6#1#xx%we zVKT=qtnwBnJZd_XX5s#I4Jh(jBOA%a5|+({$ffywy28+B?Zu1`Q=-bPr_}^6>tm@o zY->L&Ry5#MI)14@Ep!T<LziLVK-UwRk&Z~;`V<BXoQOBrmYb~}&IZRFRP{|Jc1y<D za8$Y%2+tBCjvarIgnPR;T?<~xn0VfBpc1mPI5ld4w5_Gf7;2V5nuKD?y<kA_{Lv6& z`Ntdh+FJb&r9*Krne5un{t3%RPJ%SJ*m$)n>zDU)U|JBiNB=WFCR%nxJZNnaOtyQg ze>9>`q4fnoRr{xvzJbHf%8~|#|NRnh$NXr1i7Q}WqA{O9mVr3yptG`JM5rHf=)V)q zRtvv7u6AQ2<Z2~HipzkwlW~81S(p3$1w<e^PjB2Dj_o1_RkDE37G3<yg%HMW&zdl? zK-&z8H4WTeJy0qrMv<lT>GgH|h9X$I?T>4SqY7tnwX!^FFKe(@R*w4$KTfGD0?%`7 z+wr_WxYMR%jAIU4yJ){qtd~7ulS&kWhy4Q~;wucia=lpa^}kl47>p4aWV>$B{<xGj z*8Q`VbsoxP;CZ~gO6Yvp@1ha9&9DCIG&%}_I4%U*lex-L4HMP!PmD)>14QDYG*0D! zNVAe1BZ5Q|O5MP(PPp`O=E#GvcP5o(*#Kx%Ud&`KwpQ`t*&DXD+7-7&q%3r|g)+-p zokHgp>;}(ncMDRImRo6WZQUS;c~<DO29llU?*Fm1x#x0GM$e#7>;<j26?2J|SzhlC z$C*KMJU-PClrAQaWmb|D-`)y(#R5<&I;Y0t=HQH=&x(GyJaG?Q4BwB&o*(ANN5}p8 z>iy^0#A|D79-!pg$%vC|@gJu*H`|54H%!dk=<Dk{ayd2)KPa>}H&6czc9SRHtQq7B zT{q2Dy7?rL=R)~X=VX%PyOmt(cHiIm`*1+~a38-K_Iu(&Y!OI`7Lmf|qDRhdqIkqH z<tBs_0@NJWpaOh=`~wX;0P6zw{_Cp~Qpeq4QnDS_S>_DT(@+*grBh!=paV7Ke5!&) z&M&8~JCy-U{P5k#?rkW0taKpj-D|H%N@)xCrcSc=x<5oJ@9%FAXAgbd#1X!n>AaA~ zq;%z9^LskrUpvPobU~ECbjpWcg-`hyzo8)-jlF4%sm>H3QG3p{t^)Z)Y5GOu@xO)P z+@VOc-}SCrfy2Q0^z(+{9KI^>v%hA04q(PTm(CXN`7;w@rrY%F+Zg%u|4s>Qpkvx? z?z|M;hu&j_Mrp0>gj5T+OJv!kIUJ1pT{|Mlz=@->!%oX?jmDj@LGHq2W;7hM%tIiK z+X6m59wi_>)WB)#VPY{u+iW!M8+H&M_f#3>vpbtV@~v)jJQ%~&xZbk^zjzk#*Nnvv zGY31bGamZ&<>lp@sIRo<Tmd}wy4StVab9N_d#`%ct5o~g`dYI1`XaBT*2<^XDzAFg ztCF?#V{HZZBx~!}wbZK@o4@o+zeI_RkC}|wMS$Jo;?>^;yhVZUSIVn}ARuv?lq;!0 zv|lL~irKHf>s{{}w`)oQ2-ASIa;2hv(1Wu(M!MBLI{T7R)!O5u?Uo+hvH$RjtH+NY z$2OtA#DQ*M*gd$OX&0bqGiIQ=BJ=~_YOeQ+3vS7gk2|3|#bdohhP#3@M)%7{H7_)b zb}VYTd^n{%UwE@Q$QhbE!<kMv)Rm?a5V0%2mSfWqTEF3W<Yi+@Baa&zL*2Qe8HU0! z8=4VW)Y{czi+~u@MkzP;URzs&_P3!2!JPm=cX5w9j(vSTpO3M5Wa;t8A0NdS^obV} zZM7c+2RY`giysIQr*At8iT?~=xcFNDAUp{6Y7KEr?8cSpbc$o&>f$)YmlwZlfjufz z9Qn|rk&NA(C{+2!Vq5_$@iDUCNXj6_sB8c<ro)WZP}Bv;!-c7sfQt|~Uija`<L=Lh zP(J_?Gmoypt>$j_KV`pb;k>KL`xQ7i(eIT?j;ySr;EVEpU6`%`V7R8D4)I!fA2Z!w zz%_p!25P(j*q_olVSGQfy3aRQd8A23AhXPPVCw6BMK!u5j4oBIl^+v;h#lzxD;Y|T zcWXj5U>>b57e>|oug18#x3?D%7VU+E#d~{udl4t$Uc^Z738kj4Vc7OnHv_?j9f-~1 zouwtsJBxwZus4c*ukAD2Fx+V;%d%_&B@(P`@?$)DlRd(>I-L%SLek-3NPe-?>5wpD z53cz0j&sy;U01a!6%qZ@5*bgy&tCtOMuO6|a$S!ceSQ!G!A&>a95D{WSLl#%9+D1^ z0@7g-|JepSTXr1RZJ%e<Z=yd(|A77j9fE6BWJIr?<a4AUoDDM&L^F+{5NV=K8jq`N zQA0@Ppe{Nia3t4|>Hx6gL7I58;lQlv7*lPLO`5I2*c_Fb{eB`(E?$xtB*osC`LL5r z^I4MdF_}aY{!66TO>!}b<Us-3z{}RUQDYblJ5i_GJpynv{91#ZEGlN1?`K&t%374R zxoz_{r4q+6mR}FUP+-sXv1P7Dxm>hnSrE7$7NN_St}7AfDAIvYb<LRjll3*Gdm#S~ zUtZ27-PR3|l{+(a&lBbV3BBCNwXMtf1uNTQgtdI|84c2MX(^y?ozbrvf+j&Z?l!yi z)?3|p4-P&}y&czn(1AJR>h$d17^j|t@3pMRX3UN(i$xem?0lN0D>eyS4;beRJU1Zr zN-6>^gvBj-$CJ6A#Vz6afiPb8+g0c8;@bL<vSyT!Mo&Vaw5SzHUrOY8aFa!t#|ko+ zlcwcq?b#+X?7PLfwpll8Wb<0_24vC=JFeZK-UCgKj`~21+ubFFsX)NRRbL8N2_gjC zJtUDV2<Ul<>7xdHvIT~VxO6%cq;WB&A?y%+HT|65DO<k%14Z<tg~^Jz3>7tk-AegL zPZ!^)GG-?$K`665_JLUNCaz!ykNNgbify<I#;Jai=_LOMxnh%bVbUKqO1d)udIBA` zx4tX;@cwT1j`@#GP-zrM767DSPX)S#s(|~`X8vA}&EU=K@$X(b%`J84&~LvEoz+VH zJ^8Z8eg!(dfK7~h^;*5_{J*+YJJ#dtN=a!<7^(ZDQ&6w9iQn)%?YUaR{VqN28L^gD zK-d2dbeahf=_-akfKYxwM-D9YydZ40dRngRiP_EIJ3`&#C$s56>ZxD#6%zYn$SvDC z{08&_bT4`wy?r$D|H^y|{Q~-3^p~HxlpX>K)p<VA>vyK#B%i+L=u`Q;b}bQI#|Zjn zrWVFIA}^>wiOkM9L|Uf<=6P0y@4pr>PFJ08$wB5%6%gg<3&(KKbGk>zHDjq1<^^;F zLY7pX-WX^(Bq|S#>pmVr6~5lh=q5rU`LE=$%{H=5Bu_)0nAA+NH`T58va68Y<mr_; zuWmz#dw^vY`&U6Bc0kG;n<GYGsIKJ{qgw+WNlfQK5j|-1yW@%>uB7#JI&ZvNC4&lQ zJWlMvsC5a4ID@!$s-~OQO<X;1tf_0G%=0|0^LeekDfFT!GHlz3Fu7m<*ECdvFGUG% z<S}G;>6AMMqC;mAPQG&IuLS$Jy?mTnrkO4QlrOGKq-DGe`{<q~l$WB#&zv}M!nRM` zVmQ!UY0pT&4YDj)6=`(leX#nyZ;?nnM%z;~)$J>3d(}qrOsx>6wSs97_>p24&-&<E zTITKX-#@>xSgUP?^al7YlNCj*UfrMgbGXbr{J(KqX@8Rcl-<=bW4qeIYDTZi0MbA- zRzNWPQoeQRR;yd>R)@nzrBZ3S^m3A%f>l4W1_|?*XN3J~sqOK$Ldkv>_W$^`n1Z+X zSMWS2ca-`bvlCh*2lMq@^!B9Z-n&2V3ayj<dyO|uOV#mm!Ex@ukoS@#j)JUB@nJs- z2t+s%^oqm2$WViWb$h=%w3iiPqrlL;J3S%U2|`XVx%mDoetaeWoK9F!blh7QyG76@ zl6@e_n)WodzhC|YJ6sq#j(lVc<hSG!wPH7RGFLTQ0RcjD7|b=#qldS3wW$NuOhG_I z)?ou#ig=p!{$C1P58ZL+*jWO$ovL5BfJcd&T*~0bwx34NYwet8f1nc<7dPtGp}-dR zu$PekvlP`&pgLaGDPUD-?VJjM^X-&DseD2L`6Of03XsJZ;dR@x^TO|$ZQ1J>Z*V4e zCF2`7m@czCZf04mJ$K2F@1B;eCD(w5!tIFJiH2zyWGf=S#1=6OvvFd(anyMjPaJJ* z=Xp94_%YNNDdi#z5;V_A0yd)%LU3&}(rmS6E7k$QDjnzG0Q96Y=T*>O=0ecraH;0u ziC0~UmZ=cjulIWmAKw1|`*<?oa+7C7*`B_Oh6R(KeuZCV0DO=JOH5^%VoSkNp98R< z22cxryUl4`KT5&=S$&@$sz5Y~ME=&}zaL#o4+_^c=b7Z#SgpRqmLjR81R;y(Dx#k; z;N492dqcR|I4nBC(8fe{7nj+Vh79^`B(5s(87NvZDZ8yGkjiuI0^3*KW${{I44YtC z7BKd3?<QspQ{hD*B}ATJpT}W9F{X(E(tbJK;^>EFv3#*A17Odwtmi!LIv;Cgy`Zhf zyID%d7j8WgMi_vOrpi9uzeA~L9H-d~_U$V%LF3vI%0q$$7^PKQOVUaTtG1PySWqfJ zmBNt<g9;JYBAgx`Tr?U`2Cy_I+6w)P20@_`K+_!Ql5wj2Wx`~6d3m(5tZcfZ7zb(_ z#u79d<IxGGrYdY*8WbadASif-X*WJDt`2avJ>*KQX~k_T*CQ+-03>*ttva#dO5a@I zRy;0s8irJ44TZSw36x8NFa^$3m-1mC@X>TqtHBA)-(q*qW}Q;Owo`Upc(RCjy%B|9 za?y0kxTI<X2mw_i*vnLX4@#I2on<D1PKm<U<~ev1HsSL~m9)VgAFIvLWAq$o=O4!- zA~DG~4oD{FbvkfdlMROQzy+b)OO_f?nLG?#DoV=$6%EFW;v;kQQ)H?!+2@)tuk;ST zT%wZam&=rRqtD&XkEoh%oPz!s_xPjh8U3S^&q<=~<Z_Z|!6C@z#y8J-b6FU@i>|jc zoKOnh{~h!^iI&Q~M`*e1kKWCB=jWGYSg}MYmvd}U%H<sd4+GoljS?*Z8{KqDeYq!1 z#Z^FvqZWjAw-bh06By75sdj-t6{AQLEllKeGj(3p3z`qd0A?gjq7L*ODruwz4aeMN z%1%?;&gJZ{8D`xb$duP*nq|hIR5nfQdDwMpmcgVVzl5z$Of1?f3Dp&@vWrf;2kga( z3Dstlj#l+**f#t%W8q9I@i6wL>QT|Ks>P^2<zeh4t(lN97ByW6BV+5w{#wOu_iw6z zB;*EgvQ(tdU0Pbj3Npo|Ai0(Jkh3Ui6~^71><8mckd7FuCod!8fb`&zU1PTGwc)*L zE>6?ftl9;E>igrpm{SW23-ePogBL_qQx#zs8DlmWpg`}9H8sDmurM`d2%?~AiYoY0 zm9Mkca~N~~Q_aoHI87Dh235XrC$UHf#vER1tdd_@5yH_<+nEQU^Ar-97s{d%wh@^F zW1L`5*t{E>zMm-Nm$gNIRRDG%UK78@;P#v<D5|Q70&mnN7Z&ChrkX0#u_v9?i6A%Q zooW0C_N23hC@Rf3-5KW<K~XhL5CvmwYGHn1erjCN89<z`aG89`)3r&RF*Z4_h@#Q= zFfgVzr)OS#7P5Hjti-$Hq8LFRbr2dVi@?fs(uEYu>vCF@bT<8`N=~OPg7#@nNO{gM zIF1gKCyyPVoi3SUHOvKMuj95eW&`BrfkA#8ABUMKEk=qQXuGOZd0PUPzL_v&@PF}y z@QsF@)az}Ez_yzK$s-9nQ#VQBQ!*iQaD4Q>O-)F)5N6e^LU99VZ<PCam1_NEXDjUG z9PB?>jzk(oJ*Yr<s08kPyWT%Ay-kyEMAHyH_%!H{FSd^%e0q{Zcv?GgJ^HLZh9cYW zux;x6xsio#K((zQJn1{QBcy{~BqRA<(z#=XIbd+i@R(sNlJR%AZS^CowQo0@9r`Td z;;~Bmu3^v^7Qq}J_*4W|kP=6|y#JPg1&%M=(e?^}F7UgkV?m%HIM;mkaW?^b;OQ~o zy8#uqHsN_%a?>cWIZ+U-z3a-s-~JJ(Cu1M@zz1aCmp?#c*;eTjPf*pCWn#enqsQTX z7r-4oZs`ojO*au>x@DK78}z}iA9yKII(+3YMP!T<ygSoILnCQLHJMsKt}w>ym=7om zn4Bx>lOjLUYqr(KR3)E9j;lRD0iapjpxY&__o!Z-N_cp{wMavsdZ7ANAP4JLJxeS4 z4NTlWath1YUsTJQ2GspDWHbmG$2%UVLSOl>2?7%+cGLj8O7M6G>7b925llmZ;`0tn zn3%x1ef9PhX&$obf=@fxo!k2L)=%)G@MhFTN6<A0RVy-%M4ZUlWI&cvpG+2G2+)7S zbt9c4@aTN(d7iC~ncq5XuQE9~Asbo1jpkA#2%On5M-=3;;<=gm6UPr6$WJ(~09Ske z26KI1OewocQ50Rw{8puuiR21$IJ4AjVA~F=zV7+nl1Hgzmx}qk<~15q59>a@A>CMK z!p86uaCMp!XyiN2KZ>3~i1Lt>@|q4iN#e^Qs(x^iaUHxYBrj6OozqPy3O|p0o}o}G zvPo+qi(#S@w2z$2;sKmqxNt%1ZuSE0TRC%VdPW8>kX&f6ifOsZ*o9P$YH-{Gc-{_f zzj=^Ex67X(o%4nUXVpHs#Psc77u~TUaX|dw2S511=dDi<8-JP%|B-fEwBQ#sq5cK! z5IT+4(fc>;CcH6aItdVhictizCIy9xG}d3`M-%2lnfNh~wu%&jl&Xh_bj6$P(TG}= zMscgnVRIWn5XeQv7XcgeS?*qpdvdv)4xr~Wkjfd*Gzb4YtxgIf&lO!b>(k)DV}YKg z1_`N#4qfjYwJM>WjVAGimUlF5ir`=o%+nuQ71Ti2qII-EmCL89xd6&&QZ`a@feqIs zF2yeODdaGpDR=sgz)P+x9-wHJfdm@W44QvU>4tREFxN|CRu~zy*60_Ql|G_pSR<<q zcB9n{`ZIqnI0(`dPh8Qb+rJ-OgKp7FRX;)+Krjkt3UHMY!LK?w%va{a3Owv#9`hW$ z^j}t8SHM9pbYbhlrxo~ltnb6%qDP%C6%B?Q{Htz!fZor?9vS5c{ksn3yTy&Ws#-yR z7%0)l$skL{_33>l6iAo(f^i)>@ORZ}wb~l6E=!<Pus)tHMIlf%#L;>CN`fFsf=~io zhXJm1N=~A%(_-ms3kwSiGRLWheb>H{B$f8z_+L`xI9UpUAS{=|YV(VACM80o$xaaF z{Lmo`=s!p7;Za|;W&_%Q(oFu~4}xJW{HKa03J8;t!F3;ev)9darpQ`i$4<!uKaIZ> z|E-YYybJU=Aqhr6b7=!w=8%jIm}MqWFL_y2#@(<h)=B*>Cx1MV{+{|oDW>rQ{dXAP zbSBRi*wAb)rJm2Ha|E41cX;fZ{>0P0pCdhA#uEQ@5h_X$eh!~83_Y~pCr7<^M$%)K z2p4q9gnT*(e`<tWq{bDVq#8_g@d%)|1bU|NuGG=J_C&AI!m6XF0~X=qEL0BruEHBH z)LRYGdV|1D&PU3Lk!1|}v(9F4)>#c^`i+O+ZehI*2I`oeIF8<`k*>alZO^I2xJ_70 z!oT-~5tZ24a7Ji^5g044>a*#}f&WJ@wya0PPf}IPXLX1%f<KnPG-huJC`!BqL>z*< zn}840j8E%YF$bebLXa%Fb6Y!(ZlMzjx(*G!Re*FjGX$v41En|V`L1L#CKCl-Lvi1w zZ6<wCF$RNEuw!cC@%#P05g8{zyUCLC<6<TM<velXT)&@2mweL1DfBvRUG(FajhrSN z()jccVVMbw0A){j4k|;mT<VWy56NALO#>(G>{f6-NhKJGokU^vD;tQi9P`tlnr4FC zJB@k*9_RLx(qT>0oTJ$}xWkg|T^AIp>y)FzjBDm{lpHbrAB$nk;(p4Vdq}bR+QU~* zp*mvl&?djW+pA}f%#ru62Ol0;anxE1!HovTpYfiMkD0eD_<!bFNHl__eS)xO7C>D) zf>quYmZG_L?2t8m`(HvuXYfu~w+D3sV{I9@ZhLbIY(>jTnG7LHmHGhJpM%a+gi*8@ zzC#Jv>0)tDsh;3Aw@AA`KOHRSl3&t^B?>-qR2#yb5^~7gxin1$*8#a}(~=8<c~xfe zVBs*ct;_A$dQ0FP(!i^bP$X9{RsAeZp4o>_)>=>Af}lV9l|HKv$HM%x{_NpKTj<rK zT}Q@i$Wr*;Jv~R-t0ve^LG)zP@EnOkqhgn9&hfj+Z+yl6&j*F`+w|CL$EF4<NUaZU zV*fm<^Pvxoeu^=vw%g8GQ64CZ3wD!2Ap!lPxI&;!a83ZZxhdy~E2lpn`(InyqvP8j zuo$pUzlY)Ls`H`!I{xT+@AKRcd+D6*r_k#>@zu>1Z+s$Q)ls%Auy|or!x&=>Q1!xD z1v<Pd%XM=_7B%0I(-J-e_EB3VUwRvQ6M7qZ5Bl&pSw-3;i^F8ZsunvC1yaC^7R0)A zx2XL_se`o(guQkr9*pdet8afdnTzM7-;*e*z!gZNd74xSo%q!q2CLBE8JbqW9M*fV zb?EUOJ9Yr)lFU<Wca}E5<Se0nlx;*FCKL$Dtt})a26gt?+!c{^H@<)x&;pZNNCJ_+ z{YT0CRMS7^7A(Vjw)oIP4;4utnNrHq@k)LN9fM^%CH25QjZTBRESf4tbuTA*)Pk8Z zKpM0U>6q&1@8xzNtFn=I%8|v-;1`q;P1$FbPz!BGC(u2gAKGi0bA2whLqGDV9hk}@ z);$K;M5z~RiBkEp0wrdo9ikQ&HV5xWk8T3|Drx(1{_3iIRCBcL7MeHQ*g{&)ZUdrX zYPX(Q+<RA}k1$!5?-@L!*|w$`2f!h{M@-W+AOMNW1DZKJU%1=J{%w*d);0YojaBdV z{OWp|rj`>)CLjBj?m0i`Kci`yJ^ByS4iFnyW5C2By0>qLo5;RQLea`;<qPF1bCp;m z)f_E1ssSO_#z<3>8f+5UuOpQ%x$u>!YtgWkVkGh7?bvU36EeHr_6?<|;dF&o!_B8h z=RMr*SY5$-5Cj2ovISx-W<VfR8-SBU?d)x_58JsDgMPo?K0E?YbZKvH0xy`yMeA(u z|HyNT8$fF>Xe6Pu;I9h|g7mOGShw5Z#7z4LH0U~0sEbxPH?o}NDo{fzM=5b=9H~aV zT5GxLkP6aLuSztxl9ZCa$-up)%73{&ij9t9({s3v^aQ<D%Mn=QxCV<;gTWvGoe@9u zQ*puBR}^tLRqd@e?(NT@0Pyc}ZY}ZP^&PA+*db3%@SwGwanHrLpchhm2Tj`a-QUC_ zd&-^jFm+{W3_ib*n=rUYGoc&1E|=JI=9;Od!!h&5x~I^6I0Ac82}A$2CIy9_Uu0bD zNYX871;*L=`T2RhNWR5q=jZ3=;X<!B8h#M#!8iw(z2M=tT3PMu7-#}}uj$-4_Z%Bq z?==x?cEdQ|`oD*=-s`p7D#msXmJQI+k!_5;GjW_^I!zGS!XRIgb&ZHnqY(EWRqnaZ znjJSnS<p@9+MaKJZdiNZG%8`LL;7hl>1dX=)j^D4=~jQSv^|?8y21R)<$v6=@;Y$8 zLI$Rak|;@{RGOSDJ^PvB)OTn?q|#*0_Y9r~jst9XUOw+lss*x@wqV^Vh-rKXE~!)# zOQotC3lTGA(q;PBmSo2{o#%L-=XCDbf{BA5ijs=B&sq{im~v8MJg;`E?Hpgbj&`@u zUUU|{O)5ChcH__05I+%$8}zveY3wtQIw1(_&|DT#?kb3%cp5prU$t<_e}`>elDxTj zyBAIX85*;B-YOQy$BRYVWSRnAKJUnD+{uU4^4D^_T`Y12xKu4~Xw3dQLu2+Vc|k3I z6@|h3;nI4kS{~Z@+C-C(vLn&EM7cCJ7UDzkG-SWr$>T8ne+%>cZxqw{+Qhh<uT6}L z>nQxw8}c%xX}ojNLv(B>tpIvEoOpE*aY)Y(RM8><5+9c+C#lT_3|NQ?1&LHBopM*d zh&oshRY4Ro?YZ5@7K)xe>A4M2RBH9^^w^jI>T=_<@d%9I@gMH&TYir-;g|tqHef+j zwZ*Y9z_Ud~)K2YXfibmK0mx>XXBKK_J%^`QBU)I8MOHw&srP$#3^WO01(HNq4314x zE=p-vHOvqsweFnalh5;JS#9ZHF5CnJa#lLX7nFy5v0Dgdh-R=2i`8?XOJ&gvRPs5J z?NnCOkn#vwk05HBb5Z`%K=2WU<pyx}{nU0$|Ai#o_MhWO(%n0ucJ4j-U7k+`N`;i? z1=^<qtbA5L4ZmmCQ<!pcKui~m%La=6yubi8<1pBmnbhs)!ooCNBe^wpE>J|OU9WMm ztp|K=*gl<*L09ZUyW6233|eixH}&R@58F|isb@M?v#o=JgXLRuW(Ni@lYf^wzi@1A zaS?CIvO4^|V&m}9ySjTQND{^vpD&n(6d#$LJ%rw3MkRzxMYDDP&tu=)IyLP+j4>YQ zWFF(S#Fo8T4=@o?&{^RF-Zsp*(W8k;!ip6$rCeOd{J+~qpSnfEX|P8PPn^$F+c0dF z*g`n(;cE$l^?e>js0+xY)ZIcZol_yv>f-H-l58Tfh&;g|=2*eO%SIJTxK^XLB)azf z)H{`6Q_k5!E*<WT-u`u?#=aF0KLcCg(Kp^hH{a2s`cirn-den$#t2kpW>>XZEfE@1 z#V0l2UL(mM5o->hD)axcd-v|`WkTC|tURqlD}wt0slxGG3im&V$nW)O2UguFS<<vI zOB~j(V;4b6g5Y$n3AZix=kV-;c%aRrznA+TM4Vs>Oj3Fg;S>RnZ^EVdFvD#~%6WK} z>?7(~=qpMPw;URu05rqLuH&{s4N(kv7?DRnl3a``N_+Zg3h9=v{>9+Ai!H)|^6cX+ zQ({-KK}ZoO+K@SG<A=zq25rm>4g|-D6nU4NPrK%qjt@?Usbh3)YD9gSwT{(L1)<KM zm|9+avT$$zw&~E*eUIXk_+GW2cB<Z>e_O9@n2XVI1j#~+()i189Y5WTda~6WKOhMH zs`V4=T=N~HjZ07um*`VRSAOK4W;UX*sSZ+Aw2iB@TyQ=;(A&(T5(JIAf44+cKu}AX z_amPPE{aoC!g(DLbtx&%AyR?#kIdN;)Hi=skAF5>gOjF|OkT+;bl(f;xTO8_o_h*N z%h}uho_R;-o{c;@?++OVU$tqWG5X&^uz>|1cWHo-cw-M|pfIZ%CWp<6z~K_RCOnrs zQmMA}qk9r}g@1oOWW(3bND^*KQnFChk@c;UiYvbWbpegum5%hmdD*Mzd{R5e`u7bV zU_eqy0EiTQ*LV&#DfQ}^1qKFACI&^pRUyx61^gw?2yW7(%>sdhSNSq`>e6e#0}2qP zWPo<t-~rtzoVI8X_>Wa?@~1Yn9>kSuI_UL!t;pu3iu3T{t=7CW2#CKs>sv$EXv0x- zw5^#=H697`P0s|0F6$<QU^O?3y5I)5poTbAA(MZ_akp=eRskByyfYNsi!Z)dwC$l? z1UbdYAaJ3nu{n4<##)x0Gq7Hk0%eD?{@0~UE>~}D<jt)iXcdtO7F~SA1N+wM>_bOU z&pH=3>?T-afW}wwQ>L}`fV0})iNkiNJ{lthvY{MmYHvh^L9Xe1Z8YmcIny<kMR%u4 z+e;KZPu)FV!kG+t=!4F$tzB4Kd+-1tRS`wfE0tKj%$sI5rB+ST@?;+dQ92BP@u26i zrZY$mw`aeGu0c1W2hfKpY)g+ZtKM?fH3njT6LcO@!Fkf2de=fVc|lTRRVk>NYe#Iz zZ$z5O;L`kV)$<OjgGT+ewYB+xr3w4jURzt+n6ARv6TU`!Eh&)hzEqmlEShFblV6@> z{;${%bLY2ky|t|Tary~-dGeubf7vt;=_mbMp+hw&?4&x@f1s+k(&ok}X#Jz|r1Ai! zR232f{I&|(PQ`&<GQg6U-hJOPn7-@kt9LQYFgu41%?XwF8#2sThNjoL-I}f$RwfiI z^d;y_w~Xx=Z#OKa&0sup^@^4=N?YJ*x@C-&k74PW2ef$XHcd%o_n|l7?b%s%hx2~( z&N3HL+4Y9s?e_)~HdMrQ0?+RRMX-uj^hzm|OiOCZQ5e(61v_&4>?D?mm<faBh)!Lz z+bf6W!tfCQhfOmYaRM|zzh5t6W4x#+RIYcsb(tzkaolMI&UZsm6)Jn>vL{nT(QI2y zv+=%s1_Td+bdhIF0-pH*jtkhdq><9O&thP}1nD|jkfXAyQ~|1rD$^XSZ^I~TjZs-u zYyf-wD3#T+uZNUF2fQ{mh{vLW#FV1y@*l;}gxeyLiw?+XmH<0=8eS<kf+xneNuwxJ zrz&O-8=q<X&{!h_Iudv&$Nlk+Uh?!pO-%$7D~hE`Y=%1_+fODH95;LG`IMz!!PmnO zJ&N9JJLLjY#xjg##PRLdNY^3iMp!4wv!>^}ycW!BC$Um>W1rZatrNWSPPLKz_)I~P z+C8Lfg8K%r!tq@XW3O8_{fg@VwY~AYTB%G)K>fdYJ--_7pq8T@)U{=5IohR!LP{-1 zOF2n$tcJknW!E8jqK@(SQiab_&k?e+f3-+$FU?yv<Z?|}^)U84j6HZOk3A1VE|PND z(6cENnz=0Csi{3x--BBnjaqL4;SNWm*83=dbw{Jtx&Tr`koMT3?CvquF<#gqsfQhb zdWZ7n9^SJlSXO?jQdNzM3)ev#0(lJk#?~sT@EvpG90O;i8ncNl1SFA2KCEz6b8tdK zt1<=pBUA@&9962|aE5&ZNwl5L<xaMBAR`~>Rl(n`GE2LeN|O5e_PFasWoE`bar{}s z68J;Nyq^=jcjS(@U$06My;-xEvIM7PAl<#dyoRJ+FR7{|m7da6uUoYi@^Oywx!Fc^ zP5UZtU~S9?4Xpap7sPp<<>KY9=BetFB}r0M>3UUac=R=JEp8&PIStj~c^Q{9rnAWP zTxwRj)JYxT!d<v<^BJi)e`luIw_A-LG_2cgjg|3tNoQ^@V6evI`|0r33cJ!(J%Imn zI~s%k8^d_)|A1*V1dDXly^>X|Lb-zwLd-9-cKYy5#Jp;8r-iyGz4sv5(>}Ou`TNoH z=<^8G9D_t7wl&k9>x&I#j-oMW&=e!mKFxN_EOk7NtENa9wXJ)+uE)OygDaSBJrG%E zE-{DaldeZ?g`&nDnNkr9)HH`<Eb5Xl#r*dLdZzSIj{6G7TwhbDGA#)r3!6U%-v{R; zN#gnC8NhdPd~PoB$O8{Nz;O>q(jyB$h<E)s7CKK`wQWs_i593sQOFe8-Mp!PmWiF! z)qC?<rv2~flcaOda2-xKNx&=Tw!vB&k<vO<{VDy|a6})5=tJns$OjTgIYHVc_X<@- zG8s`8fdP;ivNYP^#84M>%}_cqki<Fi1AHzZRlz?&1x4mYv4fC|B9prl_|Bv=hK+1; zIZ4_Cx+r<F7eL@T<(yMAM9FLEpmMp!=NvBZitpu^Qk}OK$mPc=Wwk63FCt>L#wc~8 z1^*@hvssQ42_XW{W1hn}&}1d!s)|!CjZvYN&ENo3)#3@SEP9e?<h^{xwq>}t>^flh zx;ttdUkJdRwY;Lpa;-DvDGK3fer_i_9fn$)XFAzhEsNV;{>G2h@X%<x6<}-_*fcF- zJGNnL#9@FztD@47%hdrasHp;P96NR_6vE2oIY1c6SbJ`S>`W87nY0xf(24GCt5X2W zdWf)qlW-Lwqk5!?rTm1-QP#Iw#2L=e2XuwIe1j|-MCqYdu3Yh)D0J*9CFvj#*w|q9 zPZ%S|2B!XF9n7cGsnbDhqzP4piC8W5Osby^e6o{y+RrS5T$hs)Kel|iH^4r62fB(r zh7fIVX44J{dKmUdbox^4QH~a_T|)R6gh9alFd7+uYC;IsK;UYLH5pbpCVFzAULhd^ z(#E@@jfP0k@xvvf@iRsoWrZf@-cTGFHm_9I&6A@zOw%wPoix|06;5yzTeRP9g)E8< z9hZ_EWwz(Jbb>2YmX;V}ONvq)U|2SX<Sz;bm{OUioGqo*7~@!b!s0YZO0mZIFG$N2 z`8Bay4nxp7pGAfpXKVR9)P)eD4*C3A7TZRY<+X+|EOQJ>73-QY9LG2evPOzst{(P0 ztJNo?Ezf&caTlkJEC`!bwgc1kqEdkQ?t5}=V=TwShy6zTc)I)OdFVd$cB^n^Y<?=b zj3c|SnkLm&HSx#ZL}6k$7)#dy_6Z(4z)M2~t5E-Kl7>5N?NY&=9YRtOHAwFkh!FK$ zx+f<l(Vi`wGsOBwfM39BD5>$n++*@HY1&&W7QskOTs1{drWCLVLjC9JyzGN8tJq8p zC>Gc5C%WnTO-&rY#df=h!KoS;R4%6g8>XqFNSo#(h8fptv1#}cz^(X2N*3SnD1|7l z7Y6WJYPqbSH*Oz_#WhNAV7#RnPjmuCig9W{3_9UVw>Z0j(zRj{W?JHM8B47K1yJ}; zw+hq+Y-s6=zQ>dr`1=xo#5Rl)-U<Rrz4dw{YU7VN{C*D@G(l#L|IQ=ao~(&BJ*c&P z;Cw?$U78%gkX_|5!-XL-CKeNqX6wQSq%fpi@5sTBL_6-3#g`4ak<UXz1a^RYenT3- zS8->@b?_>O`?V9&6-Qwh#aaqUrm&UIfeVFLskl(UXN94XvE(V`#4D>quT=s&3|CiT zM@hbZeNV-`$m`d+{CUuRn$M@6m*(@Sui<#--oDk9ER&4Mti1ZKox59@JlEwFu)ndY zdpSNTbk}GwN?H9gaN#PA4YSZ)#;uQXzR1qYcfN(ObIkMDImT|eUB$)E?Xp{3_ZH@Q zEID^>k<Y_b$~{ZzpD)>hAAX5hMb&#=`%mB&#{Mkt9m;47X=g{!u{#!;%gfH>-J}Ai z*fg*Jl2UmRT1j(akL~wKOJtqliGBD}ic$;WO-|NS^lEnH61fJY_rL%BnE;D2^|?mQ zzck@bcd=K4E2J?gzrR%A9qhbw@wr#M>Q#kRLkcfbg@UG)?3A5;*uJZ@xu5qapU^@) zPeJn*vaI-%O(LydCCxQ=^mK*QuXuR%Ug~+1eEADJSLk2QpFRFnKz&18JujF4Df-9{ zAV;UYAq9x!P(Zo-FG;O7ERbhO6$f_;lOOcXq(q*}_G?v(m3chzTZ_kl-KgupealT@ zcB+OKa6i=&M;mhWkCvF7Lj2p6yK-rGfs@}Bghq?W!PTo*p?MYdAqdoOAvogEoBE;O zQb7Q}e)a0rtEh~|{sau4jeE~YV5Y%aI~#VbIsngfax9XIx}yaC)r<Gg{*et1(X^c* zhKcmxYfRm=_^<G|Xf=t!dh)r?d|l|{Hzm&0q&%){VPq-=!`bra3L7*cnHLCKo39qT zFhJ0OSMuc!ozY`Hj2itwCx<`UWUOfX6{9|U+x&-*blw~K=ItcDxOTE{)ri(=Cp`Q* zUOR5kf54DuJ*atiRQh=1aGZt#n_LNOTilmosr=a!S}7xUpJ$Qa$^^Wn$t!qMZ1{n= z_sPKJ^z>=U-QdZ4Mc^CpoA{0quC-l~7e6rQ{p~^_6!{+8dh%J}UjOWi8*wsyw%@~j zz72Sj96zP&scUsxM^+t(g6LJ7)X{D%wSg6>u@xt9S{0Ex_tK@Sy>PiAx+6^SVtpn( zMXF=ZdOgo03oX*uo<jDNG~#4p4#d)kV{0v}S8px%=J{c!d|lN_IH7<Y5<l7;9Up5b z6mKL^<dC$`pKd3S&U<?(l@KN9G1&KXaHY9Z;Bx}G0aG++^7YpApA7+p1KQnDWXD@| zH9qv#PwOq|U)*OZp>rZZ6F&}|>`QLEcAm-Z?(Xh05uOu&sog6~{*RLg`Uz~jpbpvp z(DTeBhLQ?u<7%y``R4$+bR#36WX;)>fWx>n*(=^l(5fciH!w9tCED3V$P=N&25_<G zgD+Ehh!|LE<Nm*~+Kc2xcJe^*M>CW@@V79i>K>v(?I+iC!nq)E^C)ahJ?bb7jqv1t zo1&<EU>Yp+A$P94+KoT&(J@q?<Wg23wBkVI6zcb7uZ-b6U{X{~URHtP`g_tYHYkh) zBF(^5`v~8&-W9|SgRU-o3hXoVIc?OBp{nHu8sHQq2!bgXMfKT?8z}gLR1x7cma9D) zCoGWyORn6t=Ej$kMB))hBr==i+RP>SXC<x6I~Vo3SnDEVsQBRF^hN4<H_f?ot4BIV zuOA77`;T^xR2}EyKbNc3mJ2#(mTR?K+m+!@gzdgfvu4+$OLtEjKqV;IVgQC&hs-*T z)_P%*>Kc#@X|x^%IOCZ**Gu9^e{tBO(rkju=Odl}<DFX#%I>2MVV4}_>{L*Cnc%6M z|1M0xLLPH2D4oHJ0tQXVA^Kr|SO!s7B^5W3fT6?Bu1i0B6A2Mo{-Ru&kSXGVC*jA? zC1e*_s<2?JR^`zr;J*N=;^Ktfx-!kRq%7*`x6c|duH-tZOW9af%QWe5Cb<L&6G-!P zNY}bQVYUL@^LUO<!+L*+ksDwPa6>shwxoL)&e3IWh&%(XI-9`UGZglwt35Q4i@J5X zR1*^@L{EDs0(4g8dPW_9o2uxKe4XlPo%Bh9Z{YrUrr=ZTvPJKB+J*1Llf@X2pK9)z z<Vv1&X@>4iq2|$$IYaL<vp_7F-pmnIB{`Pey%DBM!TLR>7ev%5_=-{dSH>HNhnu(j ztC7DNt&ov=$j(_0g7u>@i-L!@mAlv8tyR&`soDq7benG0Dv^+haqSW#Rv)pb)*U~d zD6jGP5um&J2mO5<5S^c!!Q44~o)&vz@;mYCh*Q2Y=@|_GRz?{U^T9C6yy6=pA5Ch* zaV_g53A~}#>wVnn^4{>*+?5xY+~7I*C&3Fc6GI*yQF2aYU0=TlD*#m*xH0DOBS&=H zt@#VFNXH&!%A#L%df6>>Z%1a6u;Ty~oIY+QW+H&435mz3Ra@OIbMOPznq9k}y%6@M zaxWM(bD<~V*fxd*d~5ogU~J%j=PhInB>cX7rR4hZJBF=weRMyW5SB7~?<S~xyt>W~ z<M`k~Kpw$m{pG%yD~(^Ut#zq#5i7kr5a)KJI;tObo!t*B%<i9EWrHUV@K&mZy5TNs zL@~nMR|QvGl|y!P;$Hk;(qwYo4L4Uq0O4s`Z#HY=>u%s&+FCqgMNcnnrevYI<k9HA ze1{TC>m{KTZ<x6`I)x-DfW=p-vPDoADvT(35X6VG3?%(Qdw)(jzq!f%NHUeOYN$%O z>%0jip;3ZwZk~rd-0z*cnb_bSEO3E1sj5x~7_`~xs1Q{ao3+pN`o3sr;qSu)K8Ny> z5RVapFM_IF#(+5jCg2D1t*1YW#_6|mQ6qkA?Z?2(^P<O?w4qFG>F>ind=3@RIv@X7 zr!z~n0|ffQA|k?4)j2;NC9uw)&GU}mCVLf(D}i*S2GG)#0eqZ>i;cMU)%=ko1y}h> zB#BVIa{1PE{|27H_n;+T50$<w{X-D|)w6OzYim3jHc?0z>20ed8(X`zYZ;Ea21E2? zvCs{qE0=S*Ty9yqGB{odf*`2)%2j=g`^r`RvE3WE7YILg;gjvnt<$HsHkV!Ht4gP{ zx!LJdl&{>g`DSZ<z17USGLS20&aB8lx@W^;@RLCX8xs&3pth<V0{b#KY|0;`qOMMH z-d$5?v`Vs=Kqk0L6uP|?WBZ+!g*QTK4}||fS`Z@m5VBE{a2!witj9M-FvOwAuKaT6 z9Ov2T^artbr&1KIV5Y)AQ{Bu{tM`6aHYBLl`Lw9XWHNbnUJcl&<e9Y_rUd4#n)7RO z)PGf*c`dSGa$E48$@W$s2#j*NX1_~}pjqor18IU9{RPaoQxmQA-;e6rq@~?p84<Yy zm3ae-Qn+b)VY*22^pmL=Pqw}>$HvnIL+Y|HTw5*x66O--Im<mNx7dR#|3;3E9Obp* zi`KjT7JdZgh~7sMWLQk%8iG|qP(QyOMRq~KwO}a?-{Sk%g8T<)*cC-Axhw2F_0&^K z!L=ZGOR!`Qmvzqd@Twa}6W!d-k1>Kz$XGPIg8W?#OS^*Ym`%FA5LdD)^jsi?JV`yt z%MdrC$c<26J)7+_W}2f<fX1Bn<m?wV>zEhpjZL~Cc;BOsK04m*j^EChY2Ka>!~CPB z$=ECJdCz+Y%f&D3^1c`B+{qn*4Xp_Nrwui&UU{Sjl*{nq`kf<$5qe`N@RUGh`h|eh z^~j8v^y<&nL%@Nw6^xqLEvh+f1~6P$y|?u%N9!$ELz0^Nc`~x!jpV|yS!|s!Xj?AZ z3b(Znbk+VSE>Nce-UQuBI^fXknPlR%H%2S)@@U1w{H?e0*n^kPb`KxaP7zI_OEgU? z`8f1SSksT6@!@EJ{G$+08>{#Y6052s%z`AW$q5=Fn<zM5_V>lqF50=j|H-4Njmp5| zemfA*3;`ndOeZFteMCrn54~P-_wJlsv`2#=2-4Irv>GI-E7H%cOc+a_ObQkd{<E#w zbNuSb-424zJRdMJ@p)a;ezz>k2j5v0jq^<mV(={u!8zrTa=EPCK((7sL%ED``H|M{ zq&RLPJqt#5U!gd;D20*@RLg+*tc$LL{SkFt`sAH5gDa&Ujje%&r@r&tlezWv_4#>t ziv!?{-c8Td?X4D_vL9~w)w|zac3?Ms21`5%zrz@`%wIvuULCo6+MQSpr`&{gd;(@T z?+9>MSBNNOE&h!iC>Bgpk^ru@BG(dRM5vfsUtiyNZUdUPZvw_@-B#5s7DI<5w`ee+ zlntov&@k;55<Ex?)4mjD_oEP#rYLhXIMn{cHU<7dpFwhK@v*8kcbd*Ll}D_NsU@v^ ztlGVH&k?=emMp8<H{w2pgAWfoq%sR>-DAI~EJRvs?smbaL+ap;D{7>3-6%?h0pJ{$ z=)sAah*(%}k-r5(7%-g`$F^3~w8w-r2!g$2NdpY&RUSHs@ul|+7lMW;rxQe;7W>ol zK!?lSaqnq|t??xFxs6u2$n&5G%{i`C+E=YN!*Ixu%qOcqE}RROn#rC}fVd4+snh?f z#=nH^$0TW+BrzW*XNPvZX{YXJTrsjDB<H9ksU!ntF}rXj{WDZJz$;R*A}AvaLr}@# ze@G55Qx0s>11zcmcq+{;LqUPWmzW+pyAIl4<d(gs1zRAQ0t*BPY6PtoNh_xg7OGKO z(Gc{`VN-$O>`r@>J~O-Qds!L&>dW5$w4u-T?hk(&(_a)^CqB0t=BygE?;$J7*?#Y| zn|YrnL}ZMEh>nhGXi-N*?K_cg<1_#(+BFa9qjs&_IXRZma94hzK^`x9cEi0ihXbc2 z=U&Ys$zX!xH(OI9Ae26N^S+m!b(pP%C)Z4R{21Q)?{gvBjV>FFCIQEHo@AvY0=6s9 zv>f|2$a><A1YyYCA2*87(NHnGFjNL3S<ZhMoKe-&)Qs`k^z=+D;!X&xSG~&TH0`L! z^U8Cwz>7!evU|ei!+Yy5Y$1jy*CXt#6%Ltg{nMxa_i0eopC3PZbY9_k@o0O{(Aa;Q z`p1;ovnAw(S}9%}Wn`ejj`au(6aZ}|BDG>XlVKV?#(IXyWY$T-pT9uuEo4)Nmm=xm z0=5P1(5;Gumhl=)+tl}FuCB(NG|0BfD~*IblB$tQbCRM+zPtEiy$kEl{uvGEwD&?& z1brB!w<yXZ73#N(Pt%lhir$;3JlK9S-?^@UZ1jM0K^mcK3i`N<@D}Bxs9eHL$m{@` zT3qb(yG51xWN~q-5t<(PsHRjD$+iWfsEjJX#aN)9;){jIkq8C)J<h^V-wy!|$V_pb zn#y&ZzBiQ^*1S2D+=1>V$P?2$?20RuC~~Qeb?Qb@rLt?V-!N?r_oVcR4{~Pb&LqjI zYBouB?wmQ^?c#IDa3J>qI-N`4SMXJ2qEIUUGGx;e-<G~&0nd_Z0*Z<61-v_^x+3^V zcYR6lBg^xw(zPYiv_^kM`4TTH?37Ahxb}rZWgVK_nvUKDx#7D3pES+VwI$2*EbA|+ zw#F2hFY)w+YhU;*u{N@dNcXjxh?g2ib{66L2i%Ep280qLXo#!_(vEAT(ery|ot(lq zukl$)kp)4Z*+$=*^iE+iCgqemk=3Sr=UhzddD%}Fd}#&wUsPAq`4yz_*x8eK1s4Qm ztd0RkQ^*Va*auYrQb4W0ckOb==tK4DdPQ|eREau}I#f~z^3$J`Xv==)X?cL&^GJ-~ zF*JuzP4i`*7SAhyqts<Vib(Zcn6XIUXSV(+Fm3%)Z{PWpZkzDn@?dh3`i^@XDyi?d z=U8Ew)CKpvLzSrWXmT`k{DBy@>3Aj@4~6r%u^ao5w~}+opG|h)4+3KRQ=j^S@HnqJ z)NK>~xWqfg$KP?P*X#9zP+6wy@<5fS6ZQ*#41M?nGG%PU*+;r<*`*%U4rDSJfJ`O> z!EM^`g>1t6n8pgDL4j%P9LwkQb8*#e;Po|8cWiGhY|k~hXGJk=z;Lp+cMNj}aT}(S zZVs9Ve6DI}?1@Oo7fA+0i~i54oror{N!Sw&Hy#G}T%D+}(+Cq;ToBzil$T!meK2if zs3=3@WAYrYNuo*qvL{EIqxfdY?IYK}#Ed=PvW=HE!8u$zFB!H85Bm7!IbYq7a46L} zl0#3Cm;^(4sFa3PDyJ*?3FvGSzVF8{Y;#PIDO$;(o?PM*BMK~d_f40ba}=#S8kCsg zoMWyuTVB<k%)`JK`Za?4GDCe-gCs{4eFnHs8QNk`%zK@0sJ=eWP)dgvJ<%^xWB9{I zxYmiXk-CQnP`b707hoTuh)`{ORB7tJ4+<nJc4f3%ZO$j@3wKjtKVEKA*9n0t8<>LC z2GM^y?h9!OfoovQWLtX}BljMkA{1cqmcuI>uJ1K$dp3Yf*|~((-Cs;O4%FN&US5?7 z2Uy|d;A5H+u03-{6Bv9<HNtR2YR+eS_otzhSmAbujStw&%G>X*1c943VCL>g;Ltjc za`$nl@Q~#E8`u&D8eGFCN&-ST*t!}jgb@N2xN~cDxm#R!_Sw#R%H_~AjJQ7*L!wry z9!~nTwd7WP1{_J`AWgU!A(aG6jT#$;O$*yUd+y}Z7V}&>fAMu`)!SY7+6tvZ1`rNV z8EdWu<4xv5d6V5nJP%}3_L?FNgeV40nJUDEp$MxLVwC2ZTzr1`9Ly+PiDUIn!!|Fg z@$CN3#xv&<@d~Bv-EvT#{NyGl%YpMNsNsH#-n|4KQHfd)Z=m1y0gg8RR&!i%R)<eO zq_l#1t_A=(Gp-|=6bX#)z}&3k!q<=f2b9tOXi8>wXKT9p<g7p)U3Xk83_%_JH>h^o zKLOS0Z;u#`{^#}A`xvFAvLW<G(nC)C=afNv;=<bo$;}ewv_^l3Ez%hL@DWn~Y@|kv zYEm(HPnLJb$=^67sXAXZ1Ydenkr<~9?XSE0qR5a#^?Z-eM99vw70r~E&Z~v)%9i21 zo8*7r$alpJPQFm3=}KmPFm!JUekkMwJNB~+Bls9<={-Rx4}(5p+iMpG03gC!chrHl z1?vN==qz0)lW~l7&j}x*PKsyagY&hT%d7hZn5OFmIz_aIPH7=VsCKG+p3dRBy;tw8 zG%R;of9zD1RnNWNTkSa32~JH$87%ZbgE^C5N>Ms^!HWLtV&+;f%Dsi9hbDMk6dlFs z6E#<sR3Psay}A<>PT_k~p9={W>fKxIDzC5Mega(1t#`P(zu852&ij-TyaV918*iaE zsDQGWX+~+fq$hxJ{>~d{0O!V<N}XC|U*$P;opiWvZ`}R>B6KGrh|Cgo0EVs!Nv<Fc zuE6#H7??1r*Ea(|=3{D+E=27f8Reqe`v}_sLfGc{L=oYthD9)87&SVHJI5Vyd|at+ zjY1k^G}O|JGESn7qSa9%w>*s9SE|)2tRT0{;f(f(Z83{IHSaPmLpEE(?R+MaZ(}t^ z@3yKc<_d&r2AhgH+7SJ5W(a6Q{>KGFcwljHQLASc1jqI)imw}44w-Ixe7rev-wnK! zsi=z%sEYaOx$0`WDX8Swxy@@j;m#Iz!u<*y6pu|386VP$#-jppB(3rRw|qnxg0X#S z%4#nWdRl6%Wc{cznadJpyg@u?Oi%BC-Q8|E02hk_r{{9P8R$W^lH@=G7YfuXP0uVq z;k}T9t!-mt08zAS`PgzI2zkROyX_3&dnoWLT2YrB6Ryk*U&8o5RHECoXYm3|Q{)Is z;@^>7&-dCNW~^B=T*h*)ryG<)vDBX3xwAc6DgvIE*uT3LlqF)xT2@mv%VMgUQ#A;J z7{02g^=aQx)oi&Gl#4|_?R0_wAP730bo<JI-J=^^zg`<-YEe-Q-#1ky@O^KtP(+*^ z4|MN_0ji^A58Q$<FNmlc%wQ_%A~aBX8K;jVZah>G@u^K#qq@x(@N2DDasL9ATCK6r z_Z2}<d_Np(wU(y-om4?k^GPQVIr-N{p)%&wN~ICmHl>+tnPLtG;QQ4|7#38u5QdfN zfGzWV&$lobszCXc;4qby$hN6ksWi&Ajj>F9M?_XeiM-xE+CMr>NEf!yDh_$PH?`Lj z4vF09`WfbuC=S_TL;+~=O-091cs>}Gv?s<Z>n}GJ6i_k|Y1007$Yt-z7P>|@yQ<29 z@giektF^S!Js_?2xyQ>vIU69?G|c?k(>1`2=2E>}Dphy%9T@7q3o>prmt^^(>9O$2 zaA_Ouqt36kHnC84L%gtJ(1$Iswn;7T1@|<}H@3nKAYc8FomqX}tG+7BKUTf#=^_|_ zJ=&1>`lMmqzK%j3dFaI2fi{oB*0-SDX`+iCB|-!A<qS^ptVQNF{GCtpdlGluK<#<! zUQ$Ip!!Ukh%-wXV+JJhY;k0u)a9#Jne~yEGj^8rDecI`^pUhu}?nIC2LYzHW6+<tY zES5lkw<|G_JIMaz-0e;LwdmFDsa}C(Rwpc#v*riVXND20ir;j%<Q4kF8?^eaHy>S? zm8?JEo(T|DKKR<sS{N#-dOa8(&nkp$M4b(C5+#Go1f?15Pt(&+q>2{MO)`gxPwGGk zTTDi?hm#qen@tkoHE|s<+KI?Pz0oaF9)foPlf8(*kjES4(o6vMg+`-MF3m)m9YY=m zd$9wp;`?M{)_pUj_sNEBNv((HEJx~U+I(lc27ya|+39q~YrJ<dZT@R!BsB@OKQuCt z?X^GDtWGLHzL}M1Rir!caY37sS);lJlnN%4<E^+=Kba&om5425JhYCOZ`omeQWiLJ zGYZ?l6ueDnbYAToAArS76U#CIz&v5O+T31sbO`Pz($VlQEQU+AL`=f`L@16=hMl%4 zqj4&#vNExRT5n^xgxmfdBZ*QhWV7k={IsCg>op-K?Ezl5d%>q8k4e6|&l~k%6MCrF zRsvm4Jn&x%mp6e+3yf1lBO=>`pd33V&#Cj7`Rg9k{B>u%^(%z%Ug)DKbh#%Nj5~ov z#XH3|DO;hu%Oy-DJHH|<R&t>@sg6i`0p>*OjQVA`v&c8sgJtOWr7x5EF7-hf(F(P? z=>mKlVf;41hmusG5q<<IB4U4PB#xiEkP(sO<4|u#htdvBV%yo#rXbk&Z<3&q$mDid z9jVTe27=Q3`!Y-~5)2Rc%fmrlrISmQvATfF!B92&0TMG6sa?g|f#Ns}?1lzyKSj%C z0Wt%92%K%=J^9!umP}1?z*Dl7KoEe~hbN(MMLJ<RId$sPp#AK+CuisEyj6khVRUZH z&dU~TSh6Io%hqW9NoVufXP<=zJ&oHrd()yamFbo-d?;g|Fbd-T{PLdQ+IP1MsPv`w zL-@>2%AM}CA!3u!Pnrxd0rl~3pcAt!#RyWggvM4$MW=$leg%BM8N_Z8SO;70@BW!M z(ChVfiD5eF__2ZQQK#39)4!YHz9-^1WElnFNf;G*HvkYHAe-q&9frOFAs<|91?Gda z8kl$M^-yIFZt+GHYmAT!57l(ho$8Ui#RdfK5Up09VKyPApJ3&4jF34c%>*KMt`@c5 z^<T}-&VJ_3%H(9_&c4q63LvFsKBH^x0e}xLz*HF5dHJPbe>R)#`2c=Oh};Eoo&wgZ zNwQ}JxgB*!N#~yW!>LKM(6jcELuorcB>^M}<<SLalO*=qUB%RfReIOm2jf{ReT1~7 z@Zt>*H)K-D6}r;Sb;0%Xh1^GoT+MM2>@`S50@R8Fh9~X}@mYA;r*_&OXe`BPpDRD3 za~ot00Q)WtT8KnDDrdSV;HpvfTL=rh+Bk{5sMQ)Jav3kfB6voXKyh@7KjY0%4FhmC z0nZY*!Lq*1IZk^vQ60^z0Ubr)c}@^yRx})uXR;#8Ixjj#L6-%A<9WezdtX5nc%I`$ zSuYrl$lK&h&XVQtL?*wrJ|*iC5eZQRs!2ti1K{+cq)|a7L?n_fJF=q4j;u>WkiI@e z63R^gy_yTFcV4)9c_Z9!8;rghC_%d$t3lVVZ=`n_^y%DO1D!%GtdMhn0r#3j6y%yd zJP@E~QtT+~;35yxTB1R*_q<<Wr+4q3IsJEB_jJy8oUO0IXJ}B_Y-w3Fq3L*W)1GaI z5ZE#m$0zl63>*weH;%*0qw5H8(!eV=rxwRS`_Zwln}W<`!U=$1#3(1(hM%(}{_`+; z@zeF9%<Oj=-ulhf5Z(x~Q0G8!6UScA%SZIZ(2W3BHcE7(s^3zF@oA^1EO_7#FS4N_ zlX7mUC8ANhVG5Y~e(x%$oX#|jYIAEeC@rt(UCRqiT}<VKdQM#lt5ruh-f_)t6n%bT zI#-cdL@b|-z_nGMFu1k$-~yS|7NqwmlLEU}F)=|AyPk*Fw_&K;PS}C^mE1cXle~)1 zjgvI~=C})Zki>sEhI9pJi8)wio_H9C-`bF)balYt_GV<jj5-RN>g#6ea&$(DWg2`{ ziCB#%WvMknWJyj*ng6H0i6!6#@!TS~PDR44Uj)i(oQ93fO&MkE&36Kh%Y~I%t!yfa zq8Rri8?NFSnKKkcQOt6!R;{|dID0c--pl#O#TQ>p7&Gf(#xi;Ma9B4PBNy|gneDgE zZvjcd-rm``5?GcbsG4pl0Ag2E3|&(N$+Ch<JiFJ!&UO0(THif0Q!*-k7{+g}7^Rt+ z-EkQDy!UOxPh~@kCvw6$*=J2Zo`^U}OO`~|8zG2r$BGfDG@Q(n#=G=_whvp@sCJrz z6aV#Joi3P1?a8Fv{4}48SUu1+_WWPNx8S#|Ths8kNyXdyRV2zW9J_6f5VfB`C+)Bk zV*-N5Bx-ICP?Eos$keoKb75hAa>B70&vPO->#F}Y9+WkKF;1`5W|_csKf-qsPULu= z+0Mk|{KA51TPBsiu3py4!MMf=Y_?X@ImU!C+5;HAg`$xfN2xg}x-khY((ES^UK>Uq z^F)kZ{ac+2pU_3o%`qM?zozT<O47k7GkO47<b%+t*)#RXElI+_kt!sM$<grgyL-gX z?^4ZoQ@!-;uHjhg&K{xkvy~=ru7DNM^(F;U-|wLUhD)LCcv+)&m$7YGR5exQ1<|Tj zCzpr;shwzCfWZ|qtEsN)8llgo=6OI12)rwyL$b_7RU1!JxcJ7M%KGm(3!df)Y36@? zw`CM%rDquZMga5_2so`9wb)S<*R}mc;cJ7FN#96qqCRN?EygU$d+ZPE-Ln#!$lD>7 z$Awm6ZzSo6dZkms!()zf(>Pw5WDFgrlsUr_ju1ODGe=jib?g<YF<(*O2YWfnq(&y< zVnLWn7M$S;t{z?2t{$D4fi!@lL4|_>K|NYtrrM9A3^5JkV{+cr&WsOl4}^5=noJ`# zHa6s9xa!$Pt!i!zPgkx!>eq9rX%1_S_+EuLC=yy1dD#c>Umk+72Gg<WVjwG+gCZS! zAyeN)i+b)viJc&nV<%N~NqJgi$|(IK**oHcO#0eP!rcAybQ9PF+cqX@(=%;)m6x>U zVeOge+Js@-42)k|I+Y~bDcznVQ!sETVUuHyt@Z;cw75aX9-Cx@y6+-};kt$?zU%NC z-}uHiHe9dgxs9@R`;BWOw}(kuhQ;m1G--F8hL`N6<ZNS~Zlq*l<$6kwu}*yb5dW#H zG0xb*WXf4PHJ+n0GnC`Cofb!Bw!`3<CQnVt8sqileu3%f2NS;h+P2Pr`L=;|AxS>T z$M$hfv+d|OM@>aZhLGh;WSX3RTWBZv<N+^eMr~exlGKv4001QT*x@UJ;v1QIK4YaP z5Aj^lTVkU%@Ga55pjs1y|L|Dr>YY*-BXw<hUNSl?eBH8orHMRW5;Mf_pa;CbCe|EB zZPgrh9nG*QcoZjhA|$60u|Ho{G<ZXt@$*gkl?wQI&OZv&nW(gv{AuRsGWujRQ=Jl3 z-wQq)(s4VU7pGPQu0kAfqMHQ!dvoo*G%w;N{L})%*7e86r-iYbOp|ykcBw@=Iot|o z05Iv<air)lfUF1vGz#{(MoS<20`>j7)APgjW;huFt}`C|h;*)vMid|dHA-#oPr7|o zFR3)akT|<~lHjq`zRT!`rpeg;zwj{j{$jra;y*EC>v|Cy^(bSexgUET-cNOF!Zg=$ zqn&N!KAMp28mdRzTM*dWq3LH(i2g}>gjnnD(Q9s^@3&xF4YaRYL~t-IxC$Ch^LYWX zhUt#vg`YrdF{Z{)H`(3+obvdo!ZXOpE#!S*f&RlH;6NBgsO@>(D$1cTG<QEYh%WbQ zr}Rzu_EIy7@>-TB{CL&BA^drX$!|hf{>BlzUN(`QuSqv)Ly!9k$9;t>HXiS^cb_|V zj<xQ9KmK+5S1r0&yq(XkX<S}3Y!%)^D_7D6;u+Ss+qN3X64BK!K^yX%`Wrh}dx&F? za8nYZRYXR)DMYu6MQJ3sovp`Fgsg9{w`Xb!i=0Hn!va~*K{zY`mRx_&)D)J#XwYHv z1?P*|qAh6R7G-#&Q&W3<SHd735<p)d!eNm}oQS8U_7rnpa0-SYHueRIkiz{xXD`s| zn{iMRjqRM|f!+%s+S>S=M!{q53|I1Hm58h1&I+NF;VQs->9e}FLS%(BoEKk|==a~5 zHh6`w3_q+)>5O<p!+THOZ&<4mX_zKs-jc2jCZ(sN3B@)bZ-S>Pe+h!E|J(X07WJzm zBNbQtrUf<M9SW>euC9ILm%ucQRQr-H!&4=+2iu#E*s`Q}t#$)9L-;9~hGsmb3zZUr zd=v=KOQAxst*;S@8X@=}(k2Lf2pFRC`NzDxvEdwjqG6wmq^Vc*$)G<JCfugo>8I#K z_`cg-4k~HL_#3|la;|_A;(mEjg#5Rn!pCQ5lz|~qb?um<*amJaN0d<2qSTbZw<ox% zQjca<We+kXcL~C+=V=c}l3wBcuG_C-RcpVG_t{91bCA2bXfqldwzJk71C@TZ>XAjf z%ypBwNbsVTNbW#v`B1wFw=OJxfl6GDHl~<CxEd(=%{oF*Dou}PT#TE4VPklA6Js|s zK3ysSw*TS_Gy@m(pkAN9=Y~dhhS3+ZxLa49N8_VEpT3=uebX0f*mi4+iXua)G;L#D z{#;@7tND5zpkANPVw{a57g}3?jBkVA@$<ye;szWiAVx1u8#e?)857yCUW>(4Qk*#I zUw&PbEXBavN~9h{t+Zs?y+)6$5`y=Pk4JOuNo)zqds8(9XA4Eo_ixVzLDt3C1Y(uG zyJ!-WdA>fiux)DnH@|q@KjaiB7!&&EF0=mXOy2(ascj2WHGwaKq^YWmISEXR-E2_F z-0u5cv5>`fqWtR?V+BvnwWIOz^~@i?x26i-6Y&jwfDJS%3}fe>B+=vjMWV;sg#^cu z3|m`~avxxky$dd^#zu3I78OKw(5N9gaT0eGoj@jW6W@w7ctp@k?eL|lUB{)=kYK^^ zZPIh<M%dxIk3II-V`Js{`SN%XYQe}R{_I6M>TE@R0Es{wjoHLpG(EDKwIk?jauG-A z0^KNzNmNK#_8~P6peTxnkhD8MP;Pm46xrUC??tN|0D+vMc*UakHvgV`?(vF6Pf<RY z{t%qZqj>p^QM8(4qlWZGAA|*YO>^D1z4xAb?r~jB`(XOdU#?=<^=D`EWyl0GgyB#k zSzH-m12JJ{2FJS(wzHn4y3arO;DZj^BXoiiR`*P+tE*`rwmumcvOUcCOS%$Ix}R>L zphat<o8S5ld=0+DDP_Ytfhj{q-CQlSAWdP@am9FTJ981-YG<?d%Rx|?n5aBU6@^OD zv+d>OcB}PrZDytxhUffZ(RbaA`LF$kEUW4{+lE_huwJfAOjLs4SxKUbLZ5B5+RMxB zm&33&GgCX~x_+_fZ~U^uhN{Z)IXj!R<A1_CgAZ@dtpzcXcm{gfclTg3g|?_oSe5Or z+$#pPA!q+zIs33vayNKCgfG`C%@4CtOh2lsH;pPj2=<flUqPoah&EXbcUBDnBh629 z%u9o80MMGeQ?K4&0?FGR%YKGf{9Q5C8oPZtSV&6dR)Qd3nXD3sNWj){T}p!N;YWhr zNb$M8;Kw6nscUVE>FREW6XbJ8F`nBueX~eFKsz}rpyiQ<LgTSyK!UFyx8=tkvg<U& zsbR83r}RUT0fTMm#kF$h*o?_pr3SwL-VDjZJ2geoZBtS0V$n0e2nQR-=f9>Cfv!m8 zDJaLjOpl)&KcdLY?X8Es(cdeoVJf<9WC48J&sZ)?<_ia!t{jmSa6{bvETpVv!H+P4 z7f>&e8r(Jq8>~RaXGK*=B@<<8aV&}6WIgelvQA^phF1`Y<Ay8o5e!5K1{!_!jil?| z<d%L!C|2fW$C2+j5myz7rh2ZjH`&H`M&v64gTWbI^q)Xd)&v2*CUAVIGS3{x1`dlt zpYpvT%<;UP&DeXBZA_33$vm`j8j~>3aojMg7{v>q`hE%!7Dvmg37HqATe2+K-=uC{ zV-hAJ0l)*T;%Wk5AVlI+FO!z@5<g<#FOUru53sYgD1k&7x~{-*m(u7BbTz8MUC0Us zimj2-)JG#&L=cD#rB!>bTs&clQF^;)bL;1lzB%L+`y@!QgwTSl!u(j1r1O&#mrrTp zPfZfWtOIIs6xY%>(!u`;LskumVV-r5`omtY*Rv|5`ChL#==l{DhhGoa+UT;g{aI8+ zNNT$wh=EC%n`Z_IF{IMWXUyqE{fw<I(QSu?aO5V>7geQu+^BiRLa=8G&D`>^9b%rC zIBkFO&NI1~yR!0{n)cPU+aP8Lapj1>%U9_>wj1n218o39TM`USO!2+8TfGAD!o~1i z7J^48@#9k22{#T6kfha)t=|@xW0SE3O?;DFa2iA`J*dyZXAz}!o;q+dtBIu?f?{Nq zMRvG~c(_7JjznoK_uznV{#${qU!fHC0zx((kMJpo{8lF=eYqg_5!OE-*kooK{dN4^ z`>+>M_dd);IWfj+Fyc)<ny@}3D?wVT3+2%eZrBbZyI|@w+$qslm0uK8@^Xar5ug<1 z0j&c$Y)~gBWRr)GBtQS|&>>w-b;J@jP1DaeHY=gB0gI-D2nseUO9ul5&4t)Sa+2yP z$8OO>>Bd{X+S-J@_afd>B;SOjGsly}>`zWp9Cv0htVW;Cx_&>bsU2aZ_lEZ=qvQR4 z=p#;z;QenwT1rUucK*+>?Eg9kTfaiv-;ZP9F5esB2Q)TC)5-G>P!rNzHg<h;3XBxt zz^%<ZVEx3le`2Rlh1RDM{lsLU(!LEsH9pEZP-AZW{Q2`IV(0wxn)bXuDj)wb{4*cH zY8#8hL6GJ28s~jE1rc}1)Ftio@85)~ggnefP{%2Dflj!CjU*+HqWyLU7fJBxT2VZ0 zAopq@4nZ5AFCc=QvZl#rDK%tGllhzZXP&9?vrT`ETaRB5UYuG4_!6aOWlfU}O8J}l zpWg4S(PkTH<5pW}r(tnw(U<0R=eNELAA|4nFss?Uk5#=>xRTngy@d=y-Sxxt4plV; z&-nM9D)mhAd<0*XzU?}I7}1e&4lq8Rc?zl%EogU^&Rq&<I>GCa$2@P{c^J~Xhe*$6 z3>~~cy!v(`AkY5T{8_U6gl=Shme*fLZg67b0LD=7i2?#6tM`NrAj?l=4E<*}LKxw# zA-<#CF~Ye727y}}JQmekvRkOvYVvc2J}q=8g0;+97%~=9ha1&s)Lw=A|G|s7VedXh zWvW<~U2<KKXN+%WkUYPpZCMJHDciUA21=Q&>5}17usCjjR^m3&Qq#1j@`9vFM47;| z0D7S>Z{+#66_Hel7t~&wsurVkbY8u)syv2@J7pV-tA2vEEHc`eYRBerfC`bgKCJCq z#H{<ctt}#q8|FcCgPOJQF%dK-nS8+1f>rydDFwBN?P1QLL4DgPFvO+Q727!(tWMhY zQ(fr=7KM-cONZ@Y^=>IQHtP0=Xb$bQpBUJ%gOtWf(V}&vV`_Q+ZH%FiROLh*>m#%; zmD<QuVJPF{NGM5CU=CKR!=edo71F~hYGCS$p_|c+QJT?iq4`tmTV=x1s!T9y>Y!dy z5e$GBNF~g1cQd-^!=d0wuPFN{n}&dwAW-&jBQpc1e8HMT^dR_@n~w&w2+fkpIz{If z55_X`M<gWs1(JdOPPXaMe2)hnRX}WyMv7eggu-LVX$!U<kBlJG*^hf?Cn$gmArOI4 ze5iFo_QJFMzsyzBT>Y!^$A8VNGPZi2Q(1GAYqM?Nv=92=)uW*=!D>aptK<?&ofVMy zcn0}mYn;+s2t&z$o=_MrxZ0?fcnnIfpmg{}Bt~_8zC91kC)V`T4p}!oiyc$bR(r@r zoN)nQd6-2EFFtjtVcSE>TJSBq6K^A1tKX@ce`Uo=#|ecC4nS3@QPq(tO^{^)RV@LE z{6`*G@}jr%f~e)Pok?zFkG&^3M^zylON4THvQ-XX1PFexcs4$`KaRzPa12z{$!Utp zgALyt0iV<qm8bV%|FrL;<B)8$L`=iIZ*gK=o5&aF=5Ms0j$A;y|AP1Kr>6I*6BCQ~ zxrRw3UJy0UG%7rED1F$`P#w*WVLij+m$-Es&V@+iSXU8Uvu4~0wXv<LJz~iJs2tKp z=LYwXD7(e3&S09XhyIkplZul{8@26A8o_7)y<n94<s7Z+Mc5!?4EY;OJK2U=6eS}; za2z)l^B#11@aO7jhvZspHZgK-pbe26r{j8?713lp2N#R!HuLE8q7Xj=ti$H6P@rpj zB;J!$F$hF>0(}8d?1%3OgHdYRk|^jG?IbW>+1Ta)naBms1WzT%w)W^U+KX;!vytd4 z3uQlo0Wxfog9D7woW>eR1J>BKfwU+V`WY(J=FGTVqaX<mJYKADta4vH3WvtXkgT>Y zy1lw#WFzQMQFN;)$#y+3nA5esK6*`u#xmK=)y_Osy~Q#-YAHRUdA?;V{prT2LNJwf zX=|V%prctf9t10<r{GHi+2N!NuIlaeN~RsYBvC@qEtQo^y7P=GA$#v9mInn~8)Uh; z`sAfGXlbps5Gb&AIM90+XQg}PWoxS~>t>NMV2m~8Y#tqmIsC9k=4zM3$!$^sRz+x? zBZ=wmpki~ubtYH4Bl1W|#EeIjpHsj|V}Kx%oGYXa*xs2bgNM6RY5^<Za;Yw#x;U_^ ze-W)V)<y3i^(knFg<UHXR;W>le>{S;HrXShs+y8~Y)UxkrJd^*#Dl^bBoA98eDdRg z;OXzkICGb(oMr&*w4&a1#xRSAM+FJhY(=ggWNS1Dq?^4TBm|S*9l8GoUnjaw>bzbP zwrwPo@F_tmFG@DB_aopGJ0YNezv;7UqAuEnj-bo<L#f<5H0SJA`;+w|#+___F_PQ8 zPWyQh)JOiRZC5-O)Z54xSBcC9;Cgq2uiLA0(ECO9XZk`n;pIPY>VA6hb&0Xi){wN` z=p_LAqu>M3yQ&b|JZp}Ih69oG6K(V)KwO*gvuDoSrhK60hr;=%o^8F`i>tHQ4dnk- z^(5nfn(3cg8@<YFAP(yBA5sx5a&Q<_Yl^>GByAE|PTqX~33+Vj4F-c*4vlO3ROxSn z(t4=8c{slhqzJ+0b`GfJYjs|BkU$qmWpy`!A8zO`I2zoGFCr|{!TmGYDS4C<OA~N| z>?Z%KMb_%)@BW~`d-sX+9g~|d2uoE;UeS@ShhTE3@8)WSi}Y<f2l&4R92=ldYXj%F z`oQ{#pGe*@mw$9oy~;R(V7<NY6Im1gPu|{Nu^tQ{MfB(f{_c7<fh2S!9Dcbe4B&hI zx(6NjRh2&!v)08-H9w@MJJWM_5tqxvwRF55RqBBf@VLeC>zoqz#6ML$kIPM$MyUv* z>&@5ztE+9jiOZ#m*?N)OYhez1gZzu13)mAdQaz6yt<!u#ip%zLw!`JNl=o!@8*#e% z<iTBMTR~yLGA>QcpsQ)<RJBvc0p;mKo!GY!_2V@M5LBz}QJ1kTW9XrXfbC_OvDezF zMS!Ni96RuTC_%8YNX|YRNput}2CBehKRwy@2h***hHUgMbf;FcwbP%}XDu14fVfXz zI{LN*cD3YVN@k{}UM;&52@uhMeJ+_3Vw>tS0r+@ezntg39L=52XYa5{+o&%?NIvH{ zgyi$zy8h0|<q2t?^>K&|edg{qGREz?a~IAv`oapZvSm<r@_9*grZ-1Fc~@)!uK5b* zDi|XyfRRubk{6c)fd5X9ek~-_Hz%x^k?e2f3g#vXdhovoVS5(lnG@K~$gnC^>&n+2 zCp;cf8}0K`3PSOOYlh82D;6660l+nau5ntmIz3&jYMiDEaxNE!xty&3vfu%Y6IrA8 z9}hHifzv$ZdEGC3bACiqGDC#oAm*9l{s2D|9w2FR;9~I*#p3mSgRs7|aU0MKJE%Qi zooTRVM3<E_S^Rl(yNEk3s-hXG(2z%RVs^CtS3x(qMEnLunGjs5DaV`)`MN?M6|CFa z;g+vWY1jHA25t80#ehI3{qF0^Pp;ATdiopk3>zN69!r7zdj1Id9Qro;bM%ks=XtLU z{kFa#{PvFFU+SJEUYp7I@F!n6+hQUpM^`PYHmG>lS)ErfGUI&}IIqt7H}^f9Qt}iE ze*$bXLu*oE({uV9z5J%<;p^U7*X!nMDy3=9KacK1kD-lmSWR^<fHPs;KoXlv;#4YW z+qq8Mi7hTD_O<>Da2&|}V>@&=N%AVHIwKu$P=9^KQPCcJKrC66M@#S;P&O?_ZgP7B zq;7|PzXC?--o+%W*T<--F#xA}VDDl|&6(6I@+!teid4<DGvkU<Df^DADow}IG{?@S zfN~io6$)v&;<_HH&I>b4ma{BgqLMXw&81qdTF?y$*lcwdG{^go@K+gQyV$adA*CFo zAd0(H4)$~EJ|aR2yt+e>MZ5xnaL_pLZcK$0EaD^Y*|%>W-HQb>8$uiD0!7qD$X48l z7hfa<syw23pW=`*_rRaGvMUA-QR{{>z3_FTFI{j6#=(BW*J<qcPzPO%%aUV3IA+Kp zJ6V54qj*3C8p+Am9tKZos>1g<r}Rco=2t1b?6Pc}ShDfD(GR9z8FGqnliDa9N<&>R z)KrBBPHLVywUhDsdek$u1o9`=rbm^10y)?mF5V}$bJNI22Q{qMVxq5GQycWoI)7}K zZ`bv=n+9WVe>-FE;Dr@gLvCR=AcRoB7SGF>jN=NF{DHLKS)DzuJC6Q1W0vv66NZ`L zj@6)!e#>|9HAW=G!dS4KTFp4PKyUwTLfY1Uz!%`%$cC#TV3Qxw#D-53X4s>F&x_e} zIFnU2;CkC&WJAej@VTtW`_N09KI&qGAhCC207W@$$UKa*1n|Xn(BW#BOrsXYCJd7# z`Fv-(|Mj^)J>D3WnA#Oxy*Xp%M7P`hNGFr@PkF~NkR90Zw$nd_%HUb+z`kZ#sV6Ay zEl^=--8cyUkcr_+7Av4?Su&{pdijd@RY|+m<YxF%C99R|U8|br6+^saPt`IFwDg== zy8c-iv!Us1D`opVZ)+xNJ9Nzi%gU2#<re8`DKuwp>HAgCvgYDQei&sN-8Q+Sdu(tU z;!?xqGB`0fw}v`*V6_RSn%O#u{6S&>mFpm5Cnc(ZD6kF-n=QQka*WsC2J`|;l7eQZ zGx^M`em3irq&r{u%2&R^O_l2P`slA078bBx*DcMeUuTQ2zYNj!2WKzaoS3Xc99OyX zLkiE?mGR3)?|kPwceIL>D*rG)KaV5Z-qE<GcMs7JK8{qnflh+6f}qKH=@Ot4M$j|d z{BGPL-@<2zR4|ZSIWBDhZU?@r$hUadrWx|zW7&65#e!P369O9CR=jpepznl1C9O_< zDadsQi;BPBmlIz~@Ro$Isq03d_Bfs1c->*Zv-)M1>2sehLq2&@Hi91uVPH{8jE<&r zc2qi}A@1XvJOaD_em0dqBhu%<@eZI{s9LSyp7s{1VLKKyZ%Z%?JfU{i!ya#G3k6sQ zA&eqFlbF2^g)QaRiidFozD1M`#vPd*wv`Hh6+b2r{_DT~t7Wa)`J2dId@&Ec(X!rb z=dzAS=^d*NzIhKk@vr~-uXZl$tPXVX_u!3oF6+G6vPSP)edx`*%S7xteNVu-Nkl8{ z)I+75nulz<Dg_k0aY2GcJ^_@j1S>|e_KN=13A)M9Tgu+;g-^I}x9|I#&3!J0OIPUM z1m5TpD)+VCIJrVz5J0CUx+_Kv88jdrr8eY;kgzj+a4LrgJE$YfCdPM3G-6j8wlLG$ zH9pZi0a2qXi361kUPtONus>>F!zp`OE!oPiXXI9E&&XsHfSGj-<d^bnl&|+lNiCb% zc1SJ(rNfN~98X#lmLtazkAl3N)sao(!~UkXnT3+{9)20(a&E$My0tNwfn9Z!cr^ZC zBOX(Yb3vZ{VF0~n-KR&F@~kStSglKI9Jk9<4k-RYwN*m;fTjD2Od=vBkac7bJljdN z0d;BU*@*;({TP~Xc?;mn+o^l)M!_B8cs&f$kNkV&7CQ~XjfbHA)|{K%)*8V*Ym0fq zVQhYnr|6h=AwbHGsQ>~vk~fhK(o`f<oOa+A!2b+TfaJHZb&W#W9yqFB4E(pMs%+p0 z%SF@Lw9MjsPIYX_ss!V`k8#AZ;0&1hXF!lM-IOZrwSX_ndQX=r7w~q-a{21UMm3*f zMXO^G)v4!la$zT*MaJd>j*f1G6){Cu9lZ6Mt*_JW+}1(6{2yc*l86`9lZ7s>iU7(H z1)bxFMC@>_!#`9mmo-5kH{Tj%zemS;ZhUq&j%$`cI6jx#E{IS)rK+l{TiV~3Uj2ye zESJm7Vvee+r>Y<d+jBXdBZ5_n<JsA9jz8XXJEBO~EkqEs9~WDxxb%q+Q4USghT{(M z?VTnZbp~E?soqZqpP{yP%YDhE3V+@B4BDPhI&cM_TYpdV-&SCAykQes?iwXw(i^=u z-#)KJ8h$z36H4PP&s|IP{4J2KoBvOXZ5;d7{po{pA4!cDjnW_$Rj;jQhuVn0a+d+^ z524jdlzYp-(P!;k!{0u`o~bE3kNlQe5)AQ(3WY{P|LlDGxKmSm=1n&9dDA`N<BQAV zibvvkNh?)}l<EOwgH%<)i(`gD8%kOyc^7R~eGe{F^eHhVX~6o;O;)Rx?Mh9`wtd&Y z5t5Sd!Ctw<zsd5NCOog^bp0PobyaNy#>#M(IET}YU1e=)E^3nvR}fQW6(<-`cR|`Y zSM`i&=?y3=$Wp9nInIvh+O7w+1MX+Mgh*TEHc`W^pc*(F{;av@yzAvP^DRexc!M2f zgqPHjP#=cc49c>oUgNH4{gm1h(2O0f4RH;Lr8KZAmf;@-M#54WPH-N%uBMCeqq5gf z-*=i}Tku)nb18KucxZ+6{wAe0vuAO)_)ceB`N87s$fF3Z8{u;#@^cr2!XX(EOgce5 za*r5Q>G08X`7prV-ud}Tg)4NnFn@_pwr-41l-^tbils>p9~J?ScH?I}Y)4B6dl-9{ z%rDpkabsfKSIIt!$x;!p=a502_&A+{w;0qtMdE}JxGJv=j0C^dUsF|0-B6SbRik?P z&R<8^IYvaXMl?-Y6GhZVHOHSqJ4a%TDOTgp00~j`jM`0w4=C<*TxvxG<Ee;L;3II_ zS&O<Kx8=1%X?h<iwK{&T@Tehf{EV(IYPT>TAD*eDb>DHwbTEWqktxGx*vC~yb#Rhx z9he?M!)qH(dp-aRv+!!E9m5nfp{Ea$Qc{|MW88r!^Mc_qQyfm2=jdDn1-7J?5oXI@ z32G3*OQ4hy&-M(k+iK`iw(^17apUuP-X0<I?^mD+Zx9I?;r(pFeXi#qK}?eTPw04H z_P+ukWvf3UB1w^hk6p!t=k-hl2_@qQ3Na?Ps@9@NbtqsPw<<Chw;TY~8{axMR07=F zvJ;MJn?trsM~ey$Y^C%?u(=fu-*7$B`mpo%12+AXX#mu5fI~1v{=>FxksvzLuU<v5 z0LT&IN|<0fRcZjVYIbUe1g<%#c9RyoIXkGq*7gd$>FMdv_klB1zy{_y#m~4d<CD>= zvaD<Jn^pBKROLrvn}<D>hlQ0;so#AQd_N2%qL~1^VU$Wb?ijhG%QAgXF%0D)sn_L% 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%0Dfv-*~j+;Aq%feAS3x7=YWT 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 diff --git a/dist/admin/fonts/fc2b5060f7accec5cf74.ttf b/dist/admin/fonts/fc2b5060f7accec5cf74.ttf deleted file mode 100644 index ddf4bfacb396e97546364ccfeeb9c31dfaea4c25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168260 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 diff --git a/dist/admin/js/admin.js b/dist/admin/js/admin.js deleted file mode 100644 index 07ba658..0000000 --- a/dist/admin/js/admin.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{var __webpack_modules__={976:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval('/* provided dependency */ var jQuery = __webpack_require__(796);\n/**\n * menu-aim is a jQuery plugin for dropdown menus that can differentiate\n * between a user trying hover over a dropdown item vs trying to navigate into\n * a submenu\'s contents.\n *\n * menu-aim assumes that you have are using a menu with submenus that expand\n * to the menu\'s right. It will fire events when the user\'s mouse enters a new\n * dropdown item *and* when that item is being intentionally hovered over.\n *\n * __________________________\n * | Monkeys >| Gorilla |\n * | Gorillas >| Content |\n * | Chimps >| Here |\n * |___________|____________|\n *\n * In the above example, "Gorillas" is selected and its submenu content is\n * being shown on the right. Imagine that the user\'s cursor is hovering over\n * "Gorillas." When they move their mouse into the "Gorilla Content" area, they\n * may briefly hover over "Chimps." This shouldn\'t close the "Gorilla Content"\n * area.\n *\n * This problem is normally solved using timeouts and delays. menu-aim tries to\n * solve this by detecting the direction of the user\'s mouse movement. This can\n * make for quicker transitions when navigating up and down the menu. The\n * experience is hopefully similar to amazon.com/\'s "Shop by Department"\n * dropdown.\n *\n * Use like so:\n *\n * $("#menu").menuAim({\n * activate: $.noop, // fired on row activation\n * deactivate: $.noop // fired on row deactivation\n * });\n *\n * ...to receive events when a menu\'s row has been purposefully (de)activated.\n *\n * The following options can be passed to menuAim. All functions execute with\n * the relevant row\'s HTML element as the execution context (\'this\'):\n *\n * .menuAim({\n * // Function to call when a row is purposefully activated. Use this\n * // to show a submenu\'s content for the activated row.\n * activate: function() {},\n *\n * // Function to call when a row is deactivated.\n * deactivate: function() {},\n *\n * // Function to call when mouse enters a menu row. Entering a row\n * // does not mean the row has been activated, as the user may be\n * // mousing over to a submenu.\n * enter: function() {},\n *\n * // Function to call when mouse exits a menu row.\n * exit: function() {},\n *\n * // Selector for identifying which elements in the menu are rows\n * // that can trigger the above events. Defaults to "> li".\n * rowSelector: "> li",\n *\n * // You may have some menu rows that aren\'t submenus and therefore\n * // shouldn\'t ever need to "activate." If so, filter submenu rows w/\n * // this selector. Defaults to "*" (all elements).\n * submenuSelector: "*",\n *\n * // Direction the submenu opens relative to the main menu. Can be\n * // left, right, above, or below. Defaults to "right".\n * submenuDirection: "right"\n * });\n *\n * https://github.com/kamens/jQuery-menu-aim\n*/\n(function($) {\n\n $.fn.menuAim = function(opts) {\n // Initialize menu-aim for all elements in jQuery collection\n this.each(function() {\n init.call(this, opts);\n });\n\n return this;\n };\n\n function init(opts) {\n var $menu = $(this),\n activeRow = null,\n mouseLocs = [],\n lastDelayLoc = null,\n timeoutId = null,\n options = $.extend({\n rowSelector: "> li",\n submenuSelector: "*",\n submenuDirection: "right",\n tolerance: 75, // bigger = more forgivey when entering submenu\n enter: $.noop,\n exit: $.noop,\n activate: $.noop,\n deactivate: $.noop,\n exitMenu: $.noop\n }, opts);\n\n var MOUSE_LOCS_TRACKED = 3, // number of past mouse locations to track\n DELAY = 300; // ms delay when user appears to be entering submenu\n\n /**\n * Keep track of the last few locations of the mouse.\n */\n var mousemoveDocument = function(e) {\n mouseLocs.push({x: e.pageX, y: e.pageY});\n\n if (mouseLocs.length > MOUSE_LOCS_TRACKED) {\n mouseLocs.shift();\n }\n };\n\n /**\n * Cancel possible row activations when leaving the menu entirely\n */\n var mouseleaveMenu = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // If exitMenu is supplied and returns true, deactivate the\n // currently active row on menu exit.\n if (options.exitMenu(this)) {\n if (activeRow) {\n options.deactivate(activeRow);\n }\n\n activeRow = null;\n }\n };\n\n /**\n * Trigger a possible row activation whenever entering a new row.\n */\n var mouseenterRow = function() {\n if (timeoutId) {\n // Cancel any previous activation delays\n clearTimeout(timeoutId);\n }\n\n options.enter(this);\n possiblyActivate(this);\n },\n mouseleaveRow = function() {\n options.exit(this);\n };\n\n /*\n * Immediately activate a row if the user clicks on it.\n */\n var clickRow = function() {\n activate(this);\n };\n\n /**\n * Activate a menu row.\n */\n var activate = function(row) {\n if (row == activeRow) {\n return;\n }\n\n if (activeRow) {\n options.deactivate(activeRow);\n }\n\n options.activate(row);\n activeRow = row;\n };\n\n /**\n * Possibly activate a menu row. If mouse movement indicates that we\n * shouldn\'t activate yet because user may be trying to enter\n * a submenu\'s content, then delay and check again later.\n */\n var possiblyActivate = function(row) {\n var delay = activationDelay();\n\n if (delay) {\n timeoutId = setTimeout(function() {\n possiblyActivate(row);\n }, delay);\n } else {\n activate(row);\n }\n };\n\n /**\n * Return the amount of time that should be used as a delay before the\n * currently hovered row is activated.\n *\n * Returns 0 if the activation should happen immediately. Otherwise,\n * returns the number of milliseconds that should be delayed before\n * checking again to see if the row should be activated.\n */\n var activationDelay = function() {\n if (!activeRow || !$(activeRow).is(options.submenuSelector)) {\n // If there is no other submenu row already active, then\n // go ahead and activate immediately.\n return 0;\n }\n\n var offset = $menu.offset(),\n upperLeft = {\n x: offset.left,\n y: offset.top - options.tolerance\n },\n upperRight = {\n x: offset.left + $menu.outerWidth(),\n y: upperLeft.y\n },\n lowerLeft = {\n x: offset.left,\n y: offset.top + $menu.outerHeight() + options.tolerance\n },\n lowerRight = {\n x: offset.left + $menu.outerWidth(),\n y: lowerLeft.y\n },\n loc = mouseLocs[mouseLocs.length - 1],\n prevLoc = mouseLocs[0];\n\n if (!loc) {\n return 0;\n }\n\n if (!prevLoc) {\n prevLoc = loc;\n }\n\n if (prevLoc.x < offset.left || prevLoc.x > lowerRight.x ||\n prevLoc.y < offset.top || prevLoc.y > lowerRight.y) {\n // If the previous mouse location was outside of the entire\n // menu\'s bounds, immediately activate.\n return 0;\n }\n\n if (lastDelayLoc &&\n loc.x == lastDelayLoc.x && loc.y == lastDelayLoc.y) {\n // If the mouse hasn\'t moved since the last time we checked\n // for activation status, immediately activate.\n return 0;\n }\n\n // Detect if the user is moving towards the currently activated\n // submenu.\n //\n // If the mouse is heading relatively clearly towards\n // the submenu\'s content, we should wait and give the user more\n // time before activating a new row. If the mouse is heading\n // elsewhere, we can immediately activate a new row.\n //\n // We detect this by calculating the slope formed between the\n // current mouse location and the upper/lower right points of\n // the menu. We do the same for the previous mouse location.\n // If the current mouse location\'s slopes are\n // increasing/decreasing appropriately compared to the\n // previous\'s, we know the user is moving toward the submenu.\n //\n // Note that since the y-axis increases as the cursor moves\n // down the screen, we are looking for the slope between the\n // cursor and the upper right corner to decrease over time, not\n // increase (somewhat counterintuitively).\n function slope(a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n\n var decreasingCorner = upperRight,\n increasingCorner = lowerRight;\n\n // Our expectations for decreasing or increasing slope values\n // depends on which direction the submenu opens relative to the\n // main menu. By default, if the menu opens on the right, we\n // expect the slope between the cursor and the upper right\n // corner to decrease over time, as explained above. If the\n // submenu opens in a different direction, we change our slope\n // expectations.\n if (options.submenuDirection == "left") {\n decreasingCorner = lowerLeft;\n increasingCorner = upperLeft;\n } else if (options.submenuDirection == "below") {\n decreasingCorner = lowerRight;\n increasingCorner = lowerLeft;\n } else if (options.submenuDirection == "above") {\n decreasingCorner = upperLeft;\n increasingCorner = upperRight;\n }\n\n var decreasingSlope = slope(loc, decreasingCorner),\n increasingSlope = slope(loc, increasingCorner),\n prevDecreasingSlope = slope(prevLoc, decreasingCorner),\n prevIncreasingSlope = slope(prevLoc, increasingCorner);\n\n if (decreasingSlope < prevDecreasingSlope &&\n increasingSlope > prevIncreasingSlope) {\n // Mouse is moving from previous location towards the\n // currently activated submenu. Delay before activating a\n // new menu row, because user may be moving into submenu.\n lastDelayLoc = loc;\n return DELAY;\n }\n\n lastDelayLoc = null;\n return 0;\n };\n\n /**\n * Hook up initial menu events\n */\n $menu\n .mouseleave(mouseleaveMenu)\n .find(options.rowSelector)\n .mouseenter(mouseenterRow)\n .mouseleave(mouseleaveRow)\n .click(clickRow);\n\n $(document).mousemove(mousemoveDocument);\n\n };\n})(jQuery);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc2LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0ByZWdydS9qcXVlcnktbWVudS1haW0vanF1ZXJ5Lm1lbnUtYWltLmpzP2I0OGQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtZW51LWFpbSBpcyBhIGpRdWVyeSBwbHVnaW4gZm9yIGRyb3Bkb3duIG1lbnVzIHRoYXQgY2FuIGRpZmZlcmVudGlhdGVcbiAqIGJldHdlZW4gYSB1c2VyIHRyeWluZyBob3ZlciBvdmVyIGEgZHJvcGRvd24gaXRlbSB2cyB0cnlpbmcgdG8gbmF2aWdhdGUgaW50b1xuICogYSBzdWJtZW51J3MgY29udGVudHMuXG4gKlxuICogbWVudS1haW0gYXNzdW1lcyB0aGF0IHlvdSBoYXZlIGFyZSB1c2luZyBhIG1lbnUgd2l0aCBzdWJtZW51cyB0aGF0IGV4cGFuZFxuICogdG8gdGhlIG1lbnUncyByaWdodC4gSXQgd2lsbCBmaXJlIGV2ZW50cyB3aGVuIHRoZSB1c2VyJ3MgbW91c2UgZW50ZXJzIGEgbmV3XG4gKiBkcm9wZG93biBpdGVtICphbmQqIHdoZW4gdGhhdCBpdGVtIGlzIGJlaW5nIGludGVudGlvbmFsbHkgaG92ZXJlZCBvdmVyLlxuICpcbiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fXG4gKiB8IE1vbmtleXMgID58ICAgR29yaWxsYSAgfFxuICogfCBHb3JpbGxhcyA+fCAgIENvbnRlbnQgIHxcbiAqIHwgQ2hpbXBzICAgPnwgICBIZXJlICAgICB8XG4gKiB8X19fX19fX19fX198X19fX19fX19fX19ffFxuICpcbiAqIEluIHRoZSBhYm92ZSBleGFtcGxlLCBcIkdvcmlsbGFzXCIgaXMgc2VsZWN0ZWQgYW5kIGl0cyBzdWJtZW51IGNvbnRlbnQgaXNcbiAqIGJlaW5nIHNob3duIG9uIHRoZSByaWdodC4gSW1hZ2luZSB0aGF0IHRoZSB1c2VyJ3MgY3Vyc29yIGlzIGhvdmVyaW5nIG92ZXJcbiAqIFwiR29yaWxsYXMuXCIgV2hlbiB0aGV5IG1vdmUgdGhlaXIgbW91c2UgaW50byB0aGUgXCJHb3JpbGxhIENvbnRlbnRcIiBhcmVhLCB0aGV5XG4gKiBtYXkgYnJpZWZseSBob3ZlciBvdmVyIFwiQ2hpbXBzLlwiIFRoaXMgc2hvdWxkbid0IGNsb3NlIHRoZSBcIkdvcmlsbGEgQ29udGVudFwiXG4gKiBhcmVhLlxuICpcbiAqIFRoaXMgcHJvYmxlbSBpcyBub3JtYWxseSBzb2x2ZWQgdXNpbmcgdGltZW91dHMgYW5kIGRlbGF5cy4gbWVudS1haW0gdHJpZXMgdG9cbiAqIHNvbHZlIHRoaXMgYnkgZGV0ZWN0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHVzZXIncyBtb3VzZSBtb3ZlbWVudC4gVGhpcyBjYW5cbiAqIG1ha2UgZm9yIHF1aWNrZXIgdHJhbnNpdGlvbnMgd2hlbiBuYXZpZ2F0aW5nIHVwIGFuZCBkb3duIHRoZSBtZW51LiBUaGVcbiAqIGV4cGVyaWVuY2UgaXMgaG9wZWZ1bGx5IHNpbWlsYXIgdG8gYW1hem9uLmNvbS8ncyBcIlNob3AgYnkgRGVwYXJ0bWVudFwiXG4gKiBkcm9wZG93bi5cbiAqXG4gKiBVc2UgbGlrZSBzbzpcbiAqXG4gKiAgICAgICQoXCIjbWVudVwiKS5tZW51QWltKHtcbiAqICAgICAgICAgIGFjdGl2YXRlOiAkLm5vb3AsICAvLyBmaXJlZCBvbiByb3cgYWN0aXZhdGlvblxuICogICAgICAgICAgZGVhY3RpdmF0ZTogJC5ub29wICAvLyBmaXJlZCBvbiByb3cgZGVhY3RpdmF0aW9uXG4gKiAgICAgIH0pO1xuICpcbiAqICAuLi50byByZWNlaXZlIGV2ZW50cyB3aGVuIGEgbWVudSdzIHJvdyBoYXMgYmVlbiBwdXJwb3NlZnVsbHkgKGRlKWFjdGl2YXRlZC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgY2FuIGJlIHBhc3NlZCB0byBtZW51QWltLiBBbGwgZnVuY3Rpb25zIGV4ZWN1dGUgd2l0aFxuICogdGhlIHJlbGV2YW50IHJvdydzIEhUTUwgZWxlbWVudCBhcyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgKCd0aGlzJyk6XG4gKlxuICogICAgICAubWVudUFpbSh7XG4gKiAgICAgICAgICAvLyBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSByb3cgaXMgcHVycG9zZWZ1bGx5IGFjdGl2YXRlZC4gVXNlIHRoaXNcbiAqICAgICAgICAgIC8vIHRvIHNob3cgYSBzdWJtZW51J3MgY29udGVudCBmb3IgdGhlIGFjdGl2YXRlZCByb3cuXG4gKiAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oKSB7fSxcbiAqXG4gKiAgICAgICAgICAvLyBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSByb3cgaXMgZGVhY3RpdmF0ZWQuXG4gKiAgICAgICAgICBkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHt9LFxuICpcbiAqICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3VzZSBlbnRlcnMgYSBtZW51IHJvdy4gRW50ZXJpbmcgYSByb3dcbiAqICAgICAgICAgIC8vIGRvZXMgbm90IG1lYW4gdGhlIHJvdyBoYXMgYmVlbiBhY3RpdmF0ZWQsIGFzIHRoZSB1c2VyIG1heSBiZVxuICogICAgICAgICAgLy8gbW91c2luZyBvdmVyIHRvIGEgc3VibWVudS5cbiAqICAgICAgICAgIGVudGVyOiBmdW5jdGlvbigpIHt9LFxuICpcbiAqICAgICAgICAgIC8vIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBtb3VzZSBleGl0cyBhIG1lbnUgcm93LlxuICogICAgICAgICAgZXhpdDogZnVuY3Rpb24oKSB7fSxcbiAqXG4gKiAgICAgICAgICAvLyBTZWxlY3RvciBmb3IgaWRlbnRpZnlpbmcgd2hpY2ggZWxlbWVudHMgaW4gdGhlIG1lbnUgYXJlIHJvd3NcbiAqICAgICAgICAgIC8vIHRoYXQgY2FuIHRyaWdnZXIgdGhlIGFib3ZlIGV2ZW50cy4gRGVmYXVsdHMgdG8gXCI+IGxpXCIuXG4gKiAgICAgICAgICByb3dTZWxlY3RvcjogXCI+IGxpXCIsXG4gKlxuICogICAgICAgICAgLy8gWW91IG1heSBoYXZlIHNvbWUgbWVudSByb3dzIHRoYXQgYXJlbid0IHN1Ym1lbnVzIGFuZCB0aGVyZWZvcmVcbiAqICAgICAgICAgIC8vIHNob3VsZG4ndCBldmVyIG5lZWQgdG8gXCJhY3RpdmF0ZS5cIiBJZiBzbywgZmlsdGVyIHN1Ym1lbnUgcm93cyB3L1xuICogICAgICAgICAgLy8gdGhpcyBzZWxlY3Rvci4gRGVmYXVsdHMgdG8gXCIqXCIgKGFsbCBlbGVtZW50cykuXG4gKiAgICAgICAgICBzdWJtZW51U2VsZWN0b3I6IFwiKlwiLFxuICpcbiAqICAgICAgICAgIC8vIERpcmVjdGlvbiB0aGUgc3VibWVudSBvcGVucyByZWxhdGl2ZSB0byB0aGUgbWFpbiBtZW51LiBDYW4gYmVcbiAqICAgICAgICAgIC8vIGxlZnQsIHJpZ2h0LCBhYm92ZSwgb3IgYmVsb3cuIERlZmF1bHRzIHRvIFwicmlnaHRcIi5cbiAqICAgICAgICAgIHN1Ym1lbnVEaXJlY3Rpb246IFwicmlnaHRcIlxuICogICAgICB9KTtcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20va2FtZW5zL2pRdWVyeS1tZW51LWFpbVxuKi9cbihmdW5jdGlvbigkKSB7XG5cbiAgICAkLmZuLm1lbnVBaW0gPSBmdW5jdGlvbihvcHRzKSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbWVudS1haW0gZm9yIGFsbCBlbGVtZW50cyBpbiBqUXVlcnkgY29sbGVjdGlvblxuICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpbml0LmNhbGwodGhpcywgb3B0cyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpbml0KG9wdHMpIHtcbiAgICAgICAgdmFyICRtZW51ID0gJCh0aGlzKSxcbiAgICAgICAgICAgIGFjdGl2ZVJvdyA9IG51bGwsXG4gICAgICAgICAgICBtb3VzZUxvY3MgPSBbXSxcbiAgICAgICAgICAgIGxhc3REZWxheUxvYyA9IG51bGwsXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICByb3dTZWxlY3RvcjogXCI+IGxpXCIsXG4gICAgICAgICAgICAgICAgc3VibWVudVNlbGVjdG9yOiBcIipcIixcbiAgICAgICAgICAgICAgICBzdWJtZW51RGlyZWN0aW9uOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgdG9sZXJhbmNlOiA3NSwgIC8vIGJpZ2dlciA9IG1vcmUgZm9yZ2l2ZXkgd2hlbiBlbnRlcmluZyBzdWJtZW51XG4gICAgICAgICAgICAgICAgZW50ZXI6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBleGl0OiAkLm5vb3AsXG4gICAgICAgICAgICAgICAgYWN0aXZhdGU6ICQubm9vcCxcbiAgICAgICAgICAgICAgICBkZWFjdGl2YXRlOiAkLm5vb3AsXG4gICAgICAgICAgICAgICAgZXhpdE1lbnU6ICQubm9vcFxuICAgICAgICAgICAgfSwgb3B0cyk7XG5cbiAgICAgICAgdmFyIE1PVVNFX0xPQ1NfVFJBQ0tFRCA9IDMsICAvLyBudW1iZXIgb2YgcGFzdCBtb3VzZSBsb2NhdGlvbnMgdG8gdHJhY2tcbiAgICAgICAgICAgIERFTEFZID0gMzAwOyAgLy8gbXMgZGVsYXkgd2hlbiB1c2VyIGFwcGVhcnMgdG8gYmUgZW50ZXJpbmcgc3VibWVudVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IGZldyBsb2NhdGlvbnMgb2YgdGhlIG1vdXNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIG1vdXNlbW92ZURvY3VtZW50ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIG1vdXNlTG9jcy5wdXNoKHt4OiBlLnBhZ2VYLCB5OiBlLnBhZ2VZfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobW91c2VMb2NzLmxlbmd0aCA+IE1PVVNFX0xPQ1NfVFJBQ0tFRCkge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZUxvY3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW5jZWwgcG9zc2libGUgcm93IGFjdGl2YXRpb25zIHdoZW4gbGVhdmluZyB0aGUgbWVudSBlbnRpcmVseVxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIG1vdXNlbGVhdmVNZW51ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBleGl0TWVudSBpcyBzdXBwbGllZCBhbmQgcmV0dXJucyB0cnVlLCBkZWFjdGl2YXRlIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBhY3RpdmUgcm93IG9uIG1lbnUgZXhpdC5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leGl0TWVudSh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRlYWN0aXZhdGUoYWN0aXZlUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVJvdyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVHJpZ2dlciBhIHBvc3NpYmxlIHJvdyBhY3RpdmF0aW9uIHdoZW5ldmVyIGVudGVyaW5nIGEgbmV3IHJvdy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBtb3VzZWVudGVyUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDYW5jZWwgYW55IHByZXZpb3VzIGFjdGl2YXRpb24gZGVsYXlzXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZW50ZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgcG9zc2libHlBY3RpdmF0ZSh0aGlzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3VzZWxlYXZlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5leGl0KHRoaXMpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBJbW1lZGlhdGVseSBhY3RpdmF0ZSBhIHJvdyBpZiB0aGUgdXNlciBjbGlja3Mgb24gaXQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgY2xpY2tSb3cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZSh0aGlzKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFjdGl2YXRlIGEgbWVudSByb3cuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYWN0aXZhdGUgPSBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAocm93ID09IGFjdGl2ZVJvdykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVJvdykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRlYWN0aXZhdGUoYWN0aXZlUm93KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvcHRpb25zLmFjdGl2YXRlKHJvdyk7XG4gICAgICAgICAgICAgICAgYWN0aXZlUm93ID0gcm93O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9zc2libHkgYWN0aXZhdGUgYSBtZW51IHJvdy4gSWYgbW91c2UgbW92ZW1lbnQgaW5kaWNhdGVzIHRoYXQgd2VcbiAgICAgICAgICogc2hvdWxkbid0IGFjdGl2YXRlIHlldCBiZWNhdXNlIHVzZXIgbWF5IGJlIHRyeWluZyB0byBlbnRlclxuICAgICAgICAgKiBhIHN1Ym1lbnUncyBjb250ZW50LCB0aGVuIGRlbGF5IGFuZCBjaGVjayBhZ2FpbiBsYXRlci5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBwb3NzaWJseUFjdGl2YXRlID0gZnVuY3Rpb24ocm93KSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlbGF5ID0gYWN0aXZhdGlvbkRlbGF5KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5QWN0aXZhdGUocm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIGEgZGVsYXkgYmVmb3JlIHRoZVxuICAgICAgICAgKiBjdXJyZW50bHkgaG92ZXJlZCByb3cgaXMgYWN0aXZhdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXR1cm5zIDAgaWYgdGhlIGFjdGl2YXRpb24gc2hvdWxkIGhhcHBlbiBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlLFxuICAgICAgICAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgc2hvdWxkIGJlIGRlbGF5ZWQgYmVmb3JlXG4gICAgICAgICAqIGNoZWNraW5nIGFnYWluIHRvIHNlZSBpZiB0aGUgcm93IHNob3VsZCBiZSBhY3RpdmF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYWN0aXZhdGlvbkRlbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVSb3cgfHwgISQoYWN0aXZlUm93KS5pcyhvcHRpb25zLnN1Ym1lbnVTZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb3RoZXIgc3VibWVudSByb3cgYWxyZWFkeSBhY3RpdmUsIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgLy8gZ28gYWhlYWQgYW5kIGFjdGl2YXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJG1lbnUub2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgICAgIHVwcGVyTGVmdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IG9mZnNldC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogb2Zmc2V0LnRvcCAtIG9wdGlvbnMudG9sZXJhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVwcGVyUmlnaHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBvZmZzZXQubGVmdCArICRtZW51Lm91dGVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHVwcGVyTGVmdC55XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxvd2VyTGVmdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IG9mZnNldC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogb2Zmc2V0LnRvcCArICRtZW51Lm91dGVySGVpZ2h0KCkgKyBvcHRpb25zLnRvbGVyYW5jZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBsb3dlclJpZ2h0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LmxlZnQgKyAkbWVudS5vdXRlcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBsb3dlckxlZnQueVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBsb2MgPSBtb3VzZUxvY3NbbW91c2VMb2NzLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgICAgICAgICBwcmV2TG9jID0gbW91c2VMb2NzWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZMb2MgPSBsb2M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZMb2MueCA8IG9mZnNldC5sZWZ0IHx8IHByZXZMb2MueCA+IGxvd2VyUmlnaHQueCB8fFxuICAgICAgICAgICAgICAgICAgICBwcmV2TG9jLnkgPCBvZmZzZXQudG9wIHx8IHByZXZMb2MueSA+IGxvd2VyUmlnaHQueSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbW91c2UgbG9jYXRpb24gd2FzIG91dHNpZGUgb2YgdGhlIGVudGlyZVxuICAgICAgICAgICAgICAgICAgICAvLyBtZW51J3MgYm91bmRzLCBpbW1lZGlhdGVseSBhY3RpdmF0ZS5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxhc3REZWxheUxvYyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jLnggPT0gbGFzdERlbGF5TG9jLnggJiYgbG9jLnkgPT0gbGFzdERlbGF5TG9jLnkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vdXNlIGhhc24ndCBtb3ZlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGNoZWNrZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGFjdGl2YXRpb24gc3RhdHVzLCBpbW1lZGlhdGVseSBhY3RpdmF0ZS5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGlmIHRoZSB1c2VyIGlzIG1vdmluZyB0b3dhcmRzIHRoZSBjdXJyZW50bHkgYWN0aXZhdGVkXG4gICAgICAgICAgICAgICAgLy8gc3VibWVudS5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb3VzZSBpcyBoZWFkaW5nIHJlbGF0aXZlbHkgY2xlYXJseSB0b3dhcmRzXG4gICAgICAgICAgICAgICAgLy8gdGhlIHN1Ym1lbnUncyBjb250ZW50LCB3ZSBzaG91bGQgd2FpdCBhbmQgZ2l2ZSB0aGUgdXNlciBtb3JlXG4gICAgICAgICAgICAgICAgLy8gdGltZSBiZWZvcmUgYWN0aXZhdGluZyBhIG5ldyByb3cuIElmIHRoZSBtb3VzZSBpcyBoZWFkaW5nXG4gICAgICAgICAgICAgICAgLy8gZWxzZXdoZXJlLCB3ZSBjYW4gaW1tZWRpYXRlbHkgYWN0aXZhdGUgYSBuZXcgcm93LlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gV2UgZGV0ZWN0IHRoaXMgYnkgY2FsY3VsYXRpbmcgdGhlIHNsb3BlIGZvcm1lZCBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbW91c2UgbG9jYXRpb24gYW5kIHRoZSB1cHBlci9sb3dlciByaWdodCBwb2ludHMgb2ZcbiAgICAgICAgICAgICAgICAvLyB0aGUgbWVudS4gV2UgZG8gdGhlIHNhbWUgZm9yIHRoZSBwcmV2aW91cyBtb3VzZSBsb2NhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBtb3VzZSBsb2NhdGlvbidzIHNsb3BlcyBhcmVcbiAgICAgICAgICAgICAgICAvLyBpbmNyZWFzaW5nL2RlY3JlYXNpbmcgYXBwcm9wcmlhdGVseSBjb21wYXJlZCB0byB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcmV2aW91cydzLCB3ZSBrbm93IHRoZSB1c2VyIGlzIG1vdmluZyB0b3dhcmQgdGhlIHN1Ym1lbnUuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc2luY2UgdGhlIHktYXhpcyBpbmNyZWFzZXMgYXMgdGhlIGN1cnNvciBtb3Zlc1xuICAgICAgICAgICAgICAgIC8vIGRvd24gdGhlIHNjcmVlbiwgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBzbG9wZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnNvciBhbmQgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciB0byBkZWNyZWFzZSBvdmVyIHRpbWUsIG5vdFxuICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIChzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlbHkpLlxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNsb3BlKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChiLnkgLSBhLnkpIC8gKGIueCAtIGEueCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBkZWNyZWFzaW5nQ29ybmVyID0gdXBwZXJSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZ0Nvcm5lciA9IGxvd2VyUmlnaHQ7XG5cbiAgICAgICAgICAgICAgICAvLyBPdXIgZXhwZWN0YXRpb25zIGZvciBkZWNyZWFzaW5nIG9yIGluY3JlYXNpbmcgc2xvcGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgLy8gZGVwZW5kcyBvbiB3aGljaCBkaXJlY3Rpb24gdGhlIHN1Ym1lbnUgb3BlbnMgcmVsYXRpdmUgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gbWFpbiBtZW51LiBCeSBkZWZhdWx0LCBpZiB0aGUgbWVudSBvcGVucyBvbiB0aGUgcmlnaHQsIHdlXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0IHRoZSBzbG9wZSBiZXR3ZWVuIHRoZSBjdXJzb3IgYW5kIHRoZSB1cHBlciByaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvcm5lciB0byBkZWNyZWFzZSBvdmVyIHRpbWUsIGFzIGV4cGxhaW5lZCBhYm92ZS4gSWYgdGhlXG4gICAgICAgICAgICAgICAgLy8gc3VibWVudSBvcGVucyBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24sIHdlIGNoYW5nZSBvdXIgc2xvcGVcbiAgICAgICAgICAgICAgICAvLyBleHBlY3RhdGlvbnMuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3VibWVudURpcmVjdGlvbiA9PSBcImxlZnRcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nQ29ybmVyID0gbG93ZXJMZWZ0O1xuICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nQ29ybmVyID0gdXBwZXJMZWZ0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zdWJtZW51RGlyZWN0aW9uID09IFwiYmVsb3dcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nQ29ybmVyID0gbG93ZXJSaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZ0Nvcm5lciA9IGxvd2VyTGVmdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc3VibWVudURpcmVjdGlvbiA9PSBcImFib3ZlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2luZ0Nvcm5lciA9IHVwcGVyTGVmdDtcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZ0Nvcm5lciA9IHVwcGVyUmlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRlY3JlYXNpbmdTbG9wZSA9IHNsb3BlKGxvYywgZGVjcmVhc2luZ0Nvcm5lciksXG4gICAgICAgICAgICAgICAgICAgIGluY3JlYXNpbmdTbG9wZSA9IHNsb3BlKGxvYywgaW5jcmVhc2luZ0Nvcm5lciksXG4gICAgICAgICAgICAgICAgICAgIHByZXZEZWNyZWFzaW5nU2xvcGUgPSBzbG9wZShwcmV2TG9jLCBkZWNyZWFzaW5nQ29ybmVyKSxcbiAgICAgICAgICAgICAgICAgICAgcHJldkluY3JlYXNpbmdTbG9wZSA9IHNsb3BlKHByZXZMb2MsIGluY3JlYXNpbmdDb3JuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlY3JlYXNpbmdTbG9wZSA8IHByZXZEZWNyZWFzaW5nU2xvcGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlYXNpbmdTbG9wZSA+IHByZXZJbmNyZWFzaW5nU2xvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTW91c2UgaXMgbW92aW5nIGZyb20gcHJldmlvdXMgbG9jYXRpb24gdG93YXJkcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IGFjdGl2YXRlZCBzdWJtZW51LiBEZWxheSBiZWZvcmUgYWN0aXZhdGluZyBhXG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBtZW51IHJvdywgYmVjYXVzZSB1c2VyIG1heSBiZSBtb3ZpbmcgaW50byBzdWJtZW51LlxuICAgICAgICAgICAgICAgICAgICBsYXN0RGVsYXlMb2MgPSBsb2M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBERUxBWTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsYXN0RGVsYXlMb2MgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSG9vayB1cCBpbml0aWFsIG1lbnUgZXZlbnRzXG4gICAgICAgICAqL1xuICAgICAgICAkbWVudVxuICAgICAgICAgICAgLm1vdXNlbGVhdmUobW91c2VsZWF2ZU1lbnUpXG4gICAgICAgICAgICAuZmluZChvcHRpb25zLnJvd1NlbGVjdG9yKVxuICAgICAgICAgICAgICAgIC5tb3VzZWVudGVyKG1vdXNlZW50ZXJSb3cpXG4gICAgICAgICAgICAgICAgLm1vdXNlbGVhdmUobW91c2VsZWF2ZVJvdylcbiAgICAgICAgICAgICAgICAuY2xpY2soY2xpY2tSb3cpO1xuXG4gICAgICAgICQoZG9jdW1lbnQpLm1vdXNlbW92ZShtb3VzZW1vdmVEb2N1bWVudCk7XG5cbiAgICB9O1xufSkoalF1ZXJ5KTtcblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///976\n')},123:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var jQuery = __webpack_require__(796);\n(function(document, $, undefined) {\n\n/**\n * Provede daný callback na document a pak na každý snippet při nette ajaxu.\n * Depends on 'snippets' extension\n *\n * @param function($el) {} callback jemuž je jako první parametr předán document nebo snippet.\n */\n$.nette.ext('live', {\n}, {\n\tbefore: function (callback) {\n\t\tthis.ext('snippets').before($.proxy(function ($el) {\n\t\t\tcallback($el);\n\t\t}, this));\n\t\treturn this;\n\t},\n\tafter: function (callback) {\n\t\tthis.ext('snippets').after($.proxy(function ($el) {\n\t\t\tcallback($el);\n\t\t}, this));\n\t\tcallback($(document));\n\t\treturn this;\n\t},\n\tcomplete: function (callback) {\n\t\tthis.ext('snippets').complete($.proxy(function ($el) {\n\t\t\tcallback($el);\n\t\t}, this));\n\t\tcallback($(document));\n\t\treturn this;\n\t},\n});\n\n})(document, jQuery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIzLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWR0LW5ldHRlLWFqYXgvZXh0ZW5zaW9ucy9saXZlLmpzP2EwMDciXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKGRvY3VtZW50LCAkLCB1bmRlZmluZWQpIHtcblxuLyoqXG4gKiBQcm92ZWRlIGRhbsO9IGNhbGxiYWNrIG5hIGRvY3VtZW50IGEgcGFrIG5hIGthxb5kw70gc25pcHBldCBwxZlpIG5ldHRlIGFqYXh1LlxuICogRGVwZW5kcyBvbiAnc25pcHBldHMnIGV4dGVuc2lvblxuICpcbiAqIEBwYXJhbSBmdW5jdGlvbigkZWwpIHt9IGNhbGxiYWNrIGplbXXFviBqZSBqYWtvIHBydm7DrSBwYXJhbWV0ciBwxZllZMOhbiBkb2N1bWVudCBuZWJvIHNuaXBwZXQuXG4gKi9cbiQubmV0dGUuZXh0KCdsaXZlJywge1xufSwge1xuXHRiZWZvcmU6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdHRoaXMuZXh0KCdzbmlwcGV0cycpLmJlZm9yZSgkLnByb3h5KGZ1bmN0aW9uICgkZWwpIHtcblx0XHRcdGNhbGxiYWNrKCRlbCk7XG5cdFx0fSwgdGhpcykpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRhZnRlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5leHQoJ3NuaXBwZXRzJykuYWZ0ZXIoJC5wcm94eShmdW5jdGlvbiAoJGVsKSB7XG5cdFx0XHRjYWxsYmFjaygkZWwpO1xuXHRcdH0sIHRoaXMpKTtcblx0XHRjYWxsYmFjaygkKGRvY3VtZW50KSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdGNvbXBsZXRlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHR0aGlzLmV4dCgnc25pcHBldHMnKS5jb21wbGV0ZSgkLnByb3h5KGZ1bmN0aW9uICgkZWwpIHtcblx0XHRcdGNhbGxiYWNrKCRlbCk7XG5cdFx0fSwgdGhpcykpO1xuXHRcdGNhbGxiYWNrKCQoZG9jdW1lbnQpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcbn0pO1xuXG59KShkb2N1bWVudCwgalF1ZXJ5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///123\n")},519:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// NAMESPACE OBJECT: ./node_modules/@popperjs/core/lib/index.js\nvar lib_namespaceObject = {};\n__webpack_require__.r(lib_namespaceObject);\n__webpack_require__.d(lib_namespaceObject, {\n afterMain: () => (afterMain),\n afterRead: () => (afterRead),\n afterWrite: () => (afterWrite),\n applyStyles: () => (modifiers_applyStyles),\n arrow: () => (modifiers_arrow),\n auto: () => (enums_auto),\n basePlacements: () => (basePlacements),\n beforeMain: () => (beforeMain),\n beforeRead: () => (beforeRead),\n beforeWrite: () => (beforeWrite),\n bottom: () => (bottom),\n clippingParents: () => (clippingParents),\n computeStyles: () => (modifiers_computeStyles),\n createPopper: () => (popper_createPopper),\n createPopperBase: () => (createPopper),\n createPopperLite: () => (popper_lite_createPopper),\n detectOverflow: () => (detectOverflow),\n end: () => (end),\n eventListeners: () => (eventListeners),\n flip: () => (modifiers_flip),\n hide: () => (modifiers_hide),\n left: () => (left),\n main: () => (main),\n modifierPhases: () => (modifierPhases),\n offset: () => (modifiers_offset),\n placements: () => (enums_placements),\n popper: () => (popper),\n popperGenerator: () => (popperGenerator),\n popperOffsets: () => (modifiers_popperOffsets),\n preventOverflow: () => (modifiers_preventOverflow),\n read: () => (read),\n reference: () => (reference),\n right: () => (right),\n start: () => (start),\n top: () => (enums_top),\n variationPlacements: () => (variationPlacements),\n viewport: () => (viewport),\n write: () => (write)\n});\n\n// EXTERNAL MODULE: ./node_modules/jquery/dist/jquery-exposed.js\nvar jquery_exposed = __webpack_require__(796);\nvar jquery_exposed_default = /*#__PURE__*/__webpack_require__.n(jquery_exposed);\n// EXTERNAL MODULE: ./node_modules/jquery-ui-bundle/jquery-ui.js\nvar jquery_ui = __webpack_require__(668);\n// EXTERNAL MODULE: ./node_modules/@regru/jquery-menu-aim/jquery.menu-aim.js\nvar jquery_menu_aim = __webpack_require__(976);\n;// ./node_modules/@kurkle/color/dist/color.esm.js\n/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\n\n\n;// ./node_modules/chart.js/dist/chunks/helpers.segment.js\n/*!\n * Chart.js v4.4.4\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\n\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function helpers_segment_clone(source) {\n if (isArray(source)) {\n return source.map(helpers_segment_clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = helpers_segment_clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = helpers_segment_clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = helpers_segment_clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst helpers_segment_getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return helpers_segment_getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = helpers_segment_getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = helpers_segment_getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = helpers_segment_getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\n\n//# sourceMappingURL=helpers.segment.js.map\n\n;// ./node_modules/chart.js/dist/chart.js\n/*!\n * Chart.js v4.4.4\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\n\n\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function chart_abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return chart_abstract();\n }\n parse() {\n return chart_abstract();\n }\n format() {\n return chart_abstract();\n }\n add() {\n return chart_abstract();\n }\n diff() {\n return chart_abstract();\n }\n startOf() {\n return chart_abstract();\n }\n endOf() {\n return chart_abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass chart_Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends chart_Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(chart_Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.4\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass chart_Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(chart_Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1---\x3ea---\x3e2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends chart_Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends chart_Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends chart_Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends chart_Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar chart_elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends chart_Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends chart_Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst chart_map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n chart_map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, chart_map.get(chart));\n chart_map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = chart_map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends chart_Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction chart_interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = chart_interpolate(table, this.min);\n this._tableRange = chart_interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (chart_interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return chart_interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n chart_elements,\n plugins,\n scales\n];\n\n\n//# sourceMappingURL=chart.js.map\n\n;// ./node_modules/chart.js/auto/auto.js\n\n\nchart_Chart.register(...registerables);\n\n\n/* harmony default export */ const auto = ((/* unused pure expression or super */ null && (Chart)));\n\n// EXTERNAL MODULE: ./node_modules/nette-forms/src/assets/netteForms.js\nvar netteForms = __webpack_require__(53);\nvar netteForms_default = /*#__PURE__*/__webpack_require__.n(netteForms);\n// EXTERNAL MODULE: ./vendor/nasext/dependent-select-box/client-side/dependentSelectBox.js\nvar dependentSelectBox = __webpack_require__(566);\n// EXTERNAL MODULE: ./node_modules/nette.ajax.js/nette.ajax.js\nvar nette_ajax = __webpack_require__(612);\n// EXTERNAL MODULE: ./node_modules/adt-nette-ajax/extensions/live.js\nvar live = __webpack_require__(123);\n// EXTERNAL MODULE: ./assets/js/toggleMenu.js\nvar toggleMenu = __webpack_require__(425);\n// EXTERNAL MODULE: ./assets/js/history.ajax.js\nvar history_ajax = __webpack_require__(82);\n// EXTERNAL MODULE: ./node_modules/daterangepicker/daterangepicker.js\nvar daterangepicker = __webpack_require__(335);\n;// ./node_modules/@popperjs/core/lib/enums.js\nvar enums_top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar enums_auto = 'auto';\nvar basePlacements = [enums_top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar enums_placements = /*#__PURE__*/[].concat(basePlacements, [enums_auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n;// ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_applyStyles = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});\n;// ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n;// ./node_modules/@popperjs/core/lib/utils/math.js\nvar math_max = Math.max;\nvar math_min = Math.min;\nvar math_round = Math.round;\n;// ./node_modules/@popperjs/core/lib/utils/userAgent.js\nfunction getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\n\nfunction isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n\n\n\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? math_round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? math_round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/contains.js\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n\nfunction getComputedStyle_getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n\n\n\nfunction getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle_getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle_getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle_getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle_getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle_getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n;// ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n;// ./node_modules/@popperjs/core/lib/utils/within.js\n\nfunction within(min, value, max) {\n return math_max(min, math_min(value, max));\n}\nfunction withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}\n;// ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}\n;// ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/arrow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? enums_top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction arrow_effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_arrow = ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: arrow_effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n});\n;// ./node_modules/@popperjs/core/lib/utils/getVariation.js\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: math_round(x * dpr) / dpr || 0,\n y: math_round(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = enums_top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle_getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === enums_top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === enums_top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_computeStyles = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction eventListeners_effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const eventListeners = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: eventListeners_effect,\n data: {}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n;// ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\nvar getOppositeVariationPlacement_hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return getOppositeVariationPlacement_hash[matched];\n });\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n\nfunction getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n\n\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n\n\n\n\nfunction getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = math_max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = math_max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle_getComputedStyle(body || html).direction === 'rtl') {\n x += math_max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle_getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n\n\n\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n;// ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle_getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = math_max(rect.top, accRect.top);\n accRect.right = math_min(rect.right, accRect.right);\n accRect.bottom = math_min(rect.bottom, accRect.bottom);\n accRect.left = math_max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case enums_top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}\n;// ./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [enums_top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? enums_placements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/flip.js\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === enums_auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === enums_auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [enums_top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : enums_top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_flip = ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/hide.js\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [enums_top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_hide = ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/offset.js\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, enums_top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = enums_placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_offset = ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_popperOffsets = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getAltAxis.js\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? enums_top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? math_min(min, tetherMin) : min, offset, tether ? math_max(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? enums_top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [enums_top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_preventOverflow = ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/index.js\n\n\n\n\n\n\n\n\n\n;// ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = math_round(rect.width) / element.offsetWidth || 1;\n var scaleY = math_round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n;// ./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}\n;// ./node_modules/@popperjs/core/lib/utils/debounce.js\nfunction debounce_debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergeByName.js\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}\n;// ./node_modules/@popperjs/core/lib/createPopper.js\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce_debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@popperjs/core/lib/popper.js\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [eventListeners, modifiers_popperOffsets, modifiers_computeStyles, modifiers_applyStyles, modifiers_offset, modifiers_flip, modifiers_preventOverflow, modifiers_arrow, modifiers_hide];\nvar popper_createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@popperjs/core/lib/popper-lite.js\n\n\n\n\n\nvar popper_lite_defaultModifiers = [eventListeners, modifiers_popperOffsets, modifiers_computeStyles, modifiers_applyStyles];\nvar popper_lite_createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: popper_lite_defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@popperjs/core/lib/index.js\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/bootstrap/dist/js/bootstrap.esm.js\n/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst bootstrap_esm_isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (bootstrap_esm_isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!bootstrap_esm_isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst bootstrap_esm_noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --\x3e 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass bootstrap_esm_Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = bootstrap_esm_isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(bootstrap_esm_isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = bootstrap_esm_isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends bootstrap_esm_Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends bootstrap_esm_Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', bootstrap_esm_noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', bootstrap_esm_noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !bootstrap_esm_isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof lib_namespaceObject === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (bootstrap_esm_isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = popper_createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends bootstrap_esm_Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends bootstrap_esm_Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (bootstrap_esm_isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends bootstrap_esm_Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (bootstrap_esm_isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass bootstrap_esm_Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof lib_namespaceObject === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', bootstrap_esm_noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', bootstrap_esm_noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return popper_createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = bootstrap_esm_Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(bootstrap_esm_Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...bootstrap_esm_Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...bootstrap_esm_Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends bootstrap_esm_Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE$1);\n }\n }\n }\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE$1);\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE$1);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME$1;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW$1);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW$1);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n};\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._clearTimeout();\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n this._maybeScheduleHide();\n };\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n hide() {\n if (!this.isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n dispose() {\n this._clearTimeout();\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n super.dispose();\n }\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n case 'focusin':\n case 'focusout':\n {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n }\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n this._maybeScheduleHide();\n }\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n }\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\n\n//# sourceMappingURL=bootstrap.esm.js.map\n\n// EXTERNAL MODULE: ./assets/js/sideMenu.js\nvar sideMenu = __webpack_require__(94);\n;// ./assets/js/app.js\n//\n// SCSS styles\n//\n\n\n//\n// Old non-modular JS vendor files\n//\n// import jQuery from 'jquery';\n\n\n\nwindow.$ = (jquery_exposed_default());\nwindow.jquery = (jquery_exposed_default());\nwindow.jQuery = (jquery_exposed_default());\n__webpack_require__.g.jQuery = (jquery_exposed_default());\n\n\n\nnetteForms_default().initOnLoad();\nwindow.Nette = (netteForms_default());\nwindow.Chart = chart_Chart;\n\njquery_exposed_default().nette.init({\n load: function (rh) {\n jquery_exposed_default()(this.linkSelector).off('click.nette', rh).on('click.nette', rh);\n jquery_exposed_default()(this.formSelector).off('submit.nette', rh).on('submit.nette', rh).off('click.nette', ':image', rh).on('click.nette', ':image', rh).off('click.nette', ':submit', rh).on('click.nette', ':submit', rh);\n jquery_exposed_default()(this.buttonSelector).closest('form').off('click.nette', this.buttonSelector, rh).on('click.nette', this.buttonSelector, rh);\n }\n}, {\n linkSelector: 'a:not([target]):not([href^=\"http\"]):not([href^=\"//\"]):not(.noajax)',\n formSelector: 'form',\n buttonSelector: 'input.ajax[type=\"submit\"], button.ajax[type=\"submit\"], input.ajax[type=\"image\"]'\n});\n\n\n\nif (jquery_exposed_default().nette.ext('history')) {\n // Podmíněné je to kvůli Safari na iOS, protože tam je z nějakého důvodu .ext('history') undefined\n jquery_exposed_default().nette.ext('history').cache = false; // TODO: kvůli tomuto se všechny AJAX requesty posílají 2x, ale nevíme proč!\n}\njquery_exposed_default().nette.ext('live').after(function ($el) {\n jquery_exposed_default()('[data-dependentselectbox]').dependentSelectBox();\n});\n\n\n//\n// Modular vendor JS files\n//\n\n// Alternatively, you may import plugins individually as needed\n// If you chose to import plugins individually, you must also install exports-loader\n// import 'bootstrap/js/dist/util';\n// import 'bootstrap/js/dist/dropdown';\n// ...\n\n//\n// Components & presenters JS\n//\n/*\nimport AdtJsComponents from 'adt-js-components';\nAdtJsComponents.initCurrencyInput();\n// AdtJsComponents.initDateInput();\n// AdtJsComponents.initRecaptcha();\nAdtJsComponents.initSelect2();\nAdtJsComponents.initAjaxSelect();\nAdtJsComponents.initSubmitForm();\nAdtJsComponents.initReplicator();\n\nAdtJsComponents.init('components-panels-base-baseChartPanel', 'UI/Portal/Components/Panels/Base/BaseChartPanelControl');\nAdtJsComponents.init('system-select-company-form', 'UI/Portal/Components/Forms/SystemSelectCompany');\nAdtJsComponents.init('portal-components-forms-dashboardFilter', 'UI/Portal/Components/Forms/DashboardFilter');\nAdtJsComponents.init('portal-components-forms-changeLicenceForm', 'UI/Portal/Components/Forms/ChangeLicence');\nAdtJsComponents.init('portal-components-forms-warehouseOperationForm', 'UI/Portal/Components/Forms/WarehouseOperation');\nAdtJsComponents.init('companySitePlanDetail', 'UI/Portal/Presenters/CompanySitePlans');\nAdtJsComponents.init('dashboard', 'UI/Portal/Presenters/Dashboard');\nAdtJsComponents.init('dashboard', 'assets/js/dashboard');\nAdtJsComponents.init('messaging', 'assets/js/messaging');\nAdtJsComponents.init('notifications', 'assets/js/notifications');\nAdtJsComponents.init('translate', 'assets/js/translate');\nAdtJsComponents.init('print-dashboard', 'assets/js/printDashboard');\nAdtJsComponents.init('safari-support', 'assets/js/safariSupport');\n\nimport './netteForm';\nimport './flashes';\nimport './userDropdown';\nimport './tableActionsShadow';\nimport './_datagrid';\nimport './dateRange';\nimport '../../../vendor/ublaboo/datagrid/assets/datagrid';\nimport './addToHomeScreen';\nimport './fullscreen';\nimport './structured-filter';\nimport './filteredSearch'\nimport 'forms-replicator';\n*/\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTE5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvc1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOTFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGt1cmtsZS9jb2xvci9kaXN0L2NvbG9yLmVzbS5qcz84MDlmIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9kaXN0L2NodW5rcy9oZWxwZXJzLnNlZ21lbnQuanM/NmRhNCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvZGlzdC9jaGFydC5qcz9iNDM1Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9hdXRvL2F1dG8uanM/YmYzMiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzPzc3ZjkiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanM/NTc4OCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanM/MWZjMCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzPzI3NjciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanM/MGFiNCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanM/YjUwZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanM/ODRjNiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcz8xMmQ4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanM/NzRhZiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanM/MGY4OCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzP2UyZTkiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanM/N2YzNyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzP2I1MTkiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanM/YjQ1MSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanM/ZWY1MiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzPzI4YmYiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzP2I2MmIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanM/YWQ5ZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcz9lNDNmIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzPzM1ZjYiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanM/ZDM5YiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcz85ODUyIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzPzA5MjkiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanM/M2Q4ZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzPzdjZGEiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanM/YWQ2ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzPzUyMzIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcz81MDBiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcz9hMzIxIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanM/NjEyNSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanM/N2M3MyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanM/M2U3OSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcz9hZTZjIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcz85ZDBlIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzP2VhMWEiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzPzdiY2YiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzPzlkZTAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcz81ZDdlIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanM/YjYxNyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzPzQzY2UiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcz9lY2IyIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanM/MWQ2YyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanM/OTgzNSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzPzEzNGEiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzP2YyZTAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzPzk0MzUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaW5kZXguanM/MWU3NiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcz81ZmU2Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanM/MTk5YSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzP2QxMTYiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcz9iOWU2Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanM/YjFlMiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzPzJhMzUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanM/NmNlZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcz8zOWMzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanM/NDVkMSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzPzEyMzUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5lc20uanM/N2IxNyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvYXBwLmpzPzllMGUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAa3Vya2xlL2NvbG9yIHYwLjMuMlxuICogaHR0cHM6Ly9naXRodWIuY29tL2t1cmtsZS9jb2xvciNyZWFkbWVcbiAqIChjKSAyMDIzIEp1a2thIEt1cmtlbGFcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5mdW5jdGlvbiByb3VuZCh2KSB7XG4gIHJldHVybiB2ICsgMC41IHwgMDtcbn1cbmNvbnN0IGxpbSA9ICh2LCBsLCBoKSA9PiBNYXRoLm1heChNYXRoLm1pbih2LCBoKSwgbCk7XG5mdW5jdGlvbiBwMmIodikge1xuICByZXR1cm4gbGltKHJvdW5kKHYgKiAyLjU1KSwgMCwgMjU1KTtcbn1cbmZ1bmN0aW9uIGIycCh2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAvIDIuNTUpLCAwLCAxMDApO1xufVxuZnVuY3Rpb24gbjJiKHYpIHtcbiAgcmV0dXJuIGxpbShyb3VuZCh2ICogMjU1KSwgMCwgMjU1KTtcbn1cbmZ1bmN0aW9uIGIybih2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAvIDIuNTUpIC8gMTAwLCAwLCAxKTtcbn1cbmZ1bmN0aW9uIG4ycCh2KSB7XG4gIHJldHVybiBsaW0ocm91bmQodiAqIDEwMCksIDAsIDEwMCk7XG59XG5cbmNvbnN0IG1hcCQxID0gezA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksIEE6IDEwLCBCOiAxMSwgQzogMTIsIEQ6IDEzLCBFOiAxNCwgRjogMTUsIGE6IDEwLCBiOiAxMSwgYzogMTIsIGQ6IDEzLCBlOiAxNCwgZjogMTV9O1xuY29uc3QgaGV4ID0gWy4uLicwMTIzNDU2Nzg5QUJDREVGJ107XG5jb25zdCBoMSA9IGIgPT4gaGV4W2IgJiAweEZdO1xuY29uc3QgaDIgPSBiID0+IGhleFsoYiAmIDB4RjApID4+IDRdICsgaGV4W2IgJiAweEZdO1xuY29uc3QgZXEgPSBiID0+ICgoYiAmIDB4RjApID4+IDQpID09PSAoYiAmIDB4Rik7XG5jb25zdCBpc1Nob3J0ID0gdiA9PiBlcSh2LnIpICYmIGVxKHYuZykgJiYgZXEodi5iKSAmJiBlcSh2LmEpO1xuZnVuY3Rpb24gaGV4UGFyc2Uoc3RyKSB7XG4gIHZhciBsZW4gPSBzdHIubGVuZ3RoO1xuICB2YXIgcmV0O1xuICBpZiAoc3RyWzBdID09PSAnIycpIHtcbiAgICBpZiAobGVuID09PSA0IHx8IGxlbiA9PT0gNSkge1xuICAgICAgcmV0ID0ge1xuICAgICAgICByOiAyNTUgJiBtYXAkMVtzdHJbMV1dICogMTcsXG4gICAgICAgIGc6IDI1NSAmIG1hcCQxW3N0clsyXV0gKiAxNyxcbiAgICAgICAgYjogMjU1ICYgbWFwJDFbc3RyWzNdXSAqIDE3LFxuICAgICAgICBhOiBsZW4gPT09IDUgPyBtYXAkMVtzdHJbNF1dICogMTcgOiAyNTVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsZW4gPT09IDcgfHwgbGVuID09PSA5KSB7XG4gICAgICByZXQgPSB7XG4gICAgICAgIHI6IG1hcCQxW3N0clsxXV0gPDwgNCB8IG1hcCQxW3N0clsyXV0sXG4gICAgICAgIGc6IG1hcCQxW3N0clszXV0gPDwgNCB8IG1hcCQxW3N0cls0XV0sXG4gICAgICAgIGI6IG1hcCQxW3N0cls1XV0gPDwgNCB8IG1hcCQxW3N0cls2XV0sXG4gICAgICAgIGE6IGxlbiA9PT0gOSA/IChtYXAkMVtzdHJbN11dIDw8IDQgfCBtYXAkMVtzdHJbOF1dKSA6IDI1NVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmNvbnN0IGFscGhhID0gKGEsIGYpID0+IGEgPCAyNTUgPyBmKGEpIDogJyc7XG5mdW5jdGlvbiBoZXhTdHJpbmcodikge1xuICB2YXIgZiA9IGlzU2hvcnQodikgPyBoMSA6IGgyO1xuICByZXR1cm4gdlxuICAgID8gJyMnICsgZih2LnIpICsgZih2LmcpICsgZih2LmIpICsgYWxwaGEodi5hLCBmKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5jb25zdCBIVUVfUkUgPSAvXihoc2xhP3xod2J8aHN2KVxcKFxccyooWy0rLmVcXGRdKykoPzpkZWcpP1tcXHMsXSsoWy0rLmVcXGRdKyklW1xccyxdKyhbLSsuZVxcZF0rKSUoPzpbXFxzLF0rKFstKy5lXFxkXSspKCUpPyk/XFxzKlxcKSQvO1xuZnVuY3Rpb24gaHNsMnJnYm4oaCwgcywgbCkge1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICByZXR1cm4gW2YoMCksIGYoOCksIGYoNCldO1xufVxuZnVuY3Rpb24gaHN2MnJnYm4oaCwgcywgdikge1xuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyA2MCkgJSA2KSA9PiB2IC0gdiAqIHMgKiBNYXRoLm1heChNYXRoLm1pbihrLCA0IC0gaywgMSksIDApO1xuICByZXR1cm4gW2YoNSksIGYoMyksIGYoMSldO1xufVxuZnVuY3Rpb24gaHdiMnJnYm4oaCwgdywgYikge1xuICBjb25zdCByZ2IgPSBoc2wycmdibihoLCAxLCAwLjUpO1xuICBsZXQgaTtcbiAgaWYgKHcgKyBiID4gMSkge1xuICAgIGkgPSAxIC8gKHcgKyBiKTtcbiAgICB3ICo9IGk7XG4gICAgYiAqPSBpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICByZ2JbaV0gKj0gMSAtIHcgLSBiO1xuICAgIHJnYltpXSArPSB3O1xuICB9XG4gIHJldHVybiByZ2I7XG59XG5mdW5jdGlvbiBodWVWYWx1ZShyLCBnLCBiLCBkLCBtYXgpIHtcbiAgaWYgKHIgPT09IG1heCkge1xuICAgIHJldHVybiAoKGcgLSBiKSAvIGQpICsgKGcgPCBiID8gNiA6IDApO1xuICB9XG4gIGlmIChnID09PSBtYXgpIHtcbiAgICByZXR1cm4gKGIgLSByKSAvIGQgKyAyO1xuICB9XG4gIHJldHVybiAociAtIGcpIC8gZCArIDQ7XG59XG5mdW5jdGlvbiByZ2IyaHNsKHYpIHtcbiAgY29uc3QgcmFuZ2UgPSAyNTU7XG4gIGNvbnN0IHIgPSB2LnIgLyByYW5nZTtcbiAgY29uc3QgZyA9IHYuZyAvIHJhbmdlO1xuICBjb25zdCBiID0gdi5iIC8gcmFuZ2U7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICBjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgbGV0IGgsIHMsIGQ7XG4gIGlmIChtYXggIT09IG1pbikge1xuICAgIGQgPSBtYXggLSBtaW47XG4gICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xuICAgIGggPSBodWVWYWx1ZShyLCBnLCBiLCBkLCBtYXgpO1xuICAgIGggPSBoICogNjAgKyAwLjU7XG4gIH1cbiAgcmV0dXJuIFtoIHwgMCwgcyB8fCAwLCBsXTtcbn1cbmZ1bmN0aW9uIGNhbGxuKGYsIGEsIGIsIGMpIHtcbiAgcmV0dXJuIChcbiAgICBBcnJheS5pc0FycmF5KGEpXG4gICAgICA/IGYoYVswXSwgYVsxXSwgYVsyXSlcbiAgICAgIDogZihhLCBiLCBjKVxuICApLm1hcChuMmIpO1xufVxuZnVuY3Rpb24gaHNsMnJnYihoLCBzLCBsKSB7XG4gIHJldHVybiBjYWxsbihoc2wycmdibiwgaCwgcywgbCk7XG59XG5mdW5jdGlvbiBod2IycmdiKGgsIHcsIGIpIHtcbiAgcmV0dXJuIGNhbGxuKGh3YjJyZ2JuLCBoLCB3LCBiKTtcbn1cbmZ1bmN0aW9uIGhzdjJyZ2IoaCwgcywgdikge1xuICByZXR1cm4gY2FsbG4oaHN2MnJnYm4sIGgsIHMsIHYpO1xufVxuZnVuY3Rpb24gaHVlKGgpIHtcbiAgcmV0dXJuIChoICUgMzYwICsgMzYwKSAlIDM2MDtcbn1cbmZ1bmN0aW9uIGh1ZVBhcnNlKHN0cikge1xuICBjb25zdCBtID0gSFVFX1JFLmV4ZWMoc3RyKTtcbiAgbGV0IGEgPSAyNTU7XG4gIGxldCB2O1xuICBpZiAoIW0pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1bNV0gIT09IHYpIHtcbiAgICBhID0gbVs2XSA/IHAyYigrbVs1XSkgOiBuMmIoK21bNV0pO1xuICB9XG4gIGNvbnN0IGggPSBodWUoK21bMl0pO1xuICBjb25zdCBwMSA9ICttWzNdIC8gMTAwO1xuICBjb25zdCBwMiA9ICttWzRdIC8gMTAwO1xuICBpZiAobVsxXSA9PT0gJ2h3YicpIHtcbiAgICB2ID0gaHdiMnJnYihoLCBwMSwgcDIpO1xuICB9IGVsc2UgaWYgKG1bMV0gPT09ICdoc3YnKSB7XG4gICAgdiA9IGhzdjJyZ2IoaCwgcDEsIHAyKTtcbiAgfSBlbHNlIHtcbiAgICB2ID0gaHNsMnJnYihoLCBwMSwgcDIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcjogdlswXSxcbiAgICBnOiB2WzFdLFxuICAgIGI6IHZbMl0sXG4gICAgYTogYVxuICB9O1xufVxuZnVuY3Rpb24gcm90YXRlKHYsIGRlZykge1xuICB2YXIgaCA9IHJnYjJoc2wodik7XG4gIGhbMF0gPSBodWUoaFswXSArIGRlZyk7XG4gIGggPSBoc2wycmdiKGgpO1xuICB2LnIgPSBoWzBdO1xuICB2LmcgPSBoWzFdO1xuICB2LmIgPSBoWzJdO1xufVxuZnVuY3Rpb24gaHNsU3RyaW5nKHYpIHtcbiAgaWYgKCF2KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGEgPSByZ2IyaHNsKHYpO1xuICBjb25zdCBoID0gYVswXTtcbiAgY29uc3QgcyA9IG4ycChhWzFdKTtcbiAgY29uc3QgbCA9IG4ycChhWzJdKTtcbiAgcmV0dXJuIHYuYSA8IDI1NVxuICAgID8gYGhzbGEoJHtofSwgJHtzfSUsICR7bH0lLCAke2Iybih2LmEpfSlgXG4gICAgOiBgaHNsKCR7aH0sICR7c30lLCAke2x9JSlgO1xufVxuXG5jb25zdCBtYXAgPSB7XG4gIHg6ICdkYXJrJyxcbiAgWjogJ2xpZ2h0JyxcbiAgWTogJ3JlJyxcbiAgWDogJ2JsdScsXG4gIFc6ICdncicsXG4gIFY6ICdtZWRpdW0nLFxuICBVOiAnc2xhdGUnLFxuICBBOiAnZWUnLFxuICBUOiAnb2wnLFxuICBTOiAnb3InLFxuICBCOiAncmEnLFxuICBDOiAnbGF0ZWcnLFxuICBEOiAnaWdodHMnLFxuICBSOiAnaW4nLFxuICBROiAndHVycXVvaXMnLFxuICBFOiAnaGknLFxuICBQOiAncm8nLFxuICBPOiAnYWwnLFxuICBOOiAnbGUnLFxuICBNOiAnZGUnLFxuICBMOiAneWVsbG8nLFxuICBGOiAnZW4nLFxuICBLOiAnY2gnLFxuICBHOiAnYXJrcycsXG4gIEg6ICdlYScsXG4gIEk6ICdpZ2h0ZycsXG4gIEo6ICd3aCdcbn07XG5jb25zdCBuYW1lcyQxID0ge1xuICBPaWNlWGU6ICdmMGY4ZmYnLFxuICBhbnRpcXVld0V0ZTogJ2ZhZWJkNycsXG4gIGFxdWE6ICdmZmZmJyxcbiAgYXF1YW1hclJlOiAnN2ZmZmQ0JyxcbiAgYXp1WTogJ2YwZmZmZicsXG4gIGJlaWdlOiAnZjVmNWRjJyxcbiAgYmlzcXVlOiAnZmZlNGM0JyxcbiAgYmxhY2s6ICcwJyxcbiAgYmxhbktlZE9tb25kOiAnZmZlYmNkJyxcbiAgWGU6ICdmZicsXG4gIFhldmlUZXQ6ICc4YTJiZTInLFxuICBiUHduOiAnYTUyYTJhJyxcbiAgYnVybHl3b29kOiAnZGViODg3JyxcbiAgY2FNdFhlOiAnNWY5ZWEwJyxcbiAgS2FydFl1c2U6ICc3ZmZmMDAnLFxuICBLb2NUYXRlOiAnZDI2OTFlJyxcbiAgY1NPOiAnZmY3ZjUwJyxcbiAgY1NuZmxvd2VyWGU6ICc2NDk1ZWQnLFxuICBjU25zaWxrOiAnZmZmOGRjJyxcbiAgY3JpbXNvbjogJ2RjMTQzYycsXG4gIGN5YW46ICdmZmZmJyxcbiAgeFhlOiAnOGInLFxuICB4Y3lhbjogJzhiOGInLFxuICB4Z1RNblBkOiAnYjg4NjBiJyxcbiAgeFdheTogJ2E5YTlhOScsXG4gIHhnWUY6ICc2NDAwJyxcbiAgeGdZeTogJ2E5YTlhOScsXG4gIHhraGFraTogJ2JkYjc2YicsXG4gIHhtYWdGdGE6ICc4YjAwOGInLFxuICB4VGl2ZWdZRjogJzU1NmIyZicsXG4gIHhTYW5nZTogJ2ZmOGMwMCcsXG4gIHhTY0VkOiAnOTkzMmNjJyxcbiAgeFlkOiAnOGIwMDAwJyxcbiAgeHNPbW9uOiAnZTk5NjdhJyxcbiAgeHNIZ1lGOiAnOGZiYzhmJyxcbiAgeFVYZTogJzQ4M2Q4YicsXG4gIHhVV2F5OiAnMmY0ZjRmJyxcbiAgeFVnWXk6ICcyZjRmNGYnLFxuICB4UWU6ICdjZWQxJyxcbiAgeHZpVGV0OiAnOTQwMGQzJyxcbiAgZEFwcFJrOiAnZmYxNDkzJyxcbiAgZEFwc2t5WGU6ICdiZmZmJyxcbiAgZGltV2F5OiAnNjk2OTY5JyxcbiAgZGltZ1l5OiAnNjk2OTY5JyxcbiAgZG9kZ2VyWGU6ICcxZTkwZmYnLFxuICBmaVlicmljazogJ2IyMjIyMicsXG4gIGZsU093RXRlOiAnZmZmYWYwJyxcbiAgZm9Zc3RXQW46ICcyMjhiMjInLFxuICBmdUtzaWE6ICdmZjAwZmYnLFxuICBnYVJzYlNvOiAnZGNkY2RjJyxcbiAgZ2hvc3R3RXRlOiAnZjhmOGZmJyxcbiAgZ1RkOiAnZmZkNzAwJyxcbiAgZ1RNblBkOiAnZGFhNTIwJyxcbiAgV2F5OiAnODA4MDgwJyxcbiAgZ1lGOiAnODAwMCcsXG4gIGdZRkx3OiAnYWRmZjJmJyxcbiAgZ1l5OiAnODA4MDgwJyxcbiAgaG9uZXlNdzogJ2YwZmZmMCcsXG4gIGhvdHBSazogJ2ZmNjliNCcsXG4gIFJkaWFuWWQ6ICdjZDVjNWMnLFxuICBSZGlnbzogJzRiMDA4MicsXG4gIGl2U3k6ICdmZmZmZjAnLFxuICBraGFraTogJ2YwZTY4YycsXG4gIGxhdkZNcjogJ2U2ZTZmYScsXG4gIGxhdkZNclhzaDogJ2ZmZjBmNScsXG4gIGxhd25nWUY6ICc3Y2ZjMDAnLFxuICBObW9uY0VmZm9uOiAnZmZmYWNkJyxcbiAgWlhlOiAnYWRkOGU2JyxcbiAgWmNTTzogJ2YwODA4MCcsXG4gIFpjeWFuOiAnZTBmZmZmJyxcbiAgWmdUTW5QZEx3OiAnZmFmYWQyJyxcbiAgWldheTogJ2QzZDNkMycsXG4gIFpnWUY6ICc5MGVlOTAnLFxuICBaZ1l5OiAnZDNkM2QzJyxcbiAgWnBSazogJ2ZmYjZjMScsXG4gIFpzT21vbjogJ2ZmYTA3YScsXG4gIFpzSGdZRjogJzIwYjJhYScsXG4gIFpza3lYZTogJzg3Y2VmYScsXG4gIFpVV2F5OiAnNzc4ODk5JyxcbiAgWlVnWXk6ICc3Nzg4OTknLFxuICBac3RBbFhlOiAnYjBjNGRlJyxcbiAgWkx3OiAnZmZmZmUwJyxcbiAgbGltZTogJ2ZmMDAnLFxuICBsaW1lZ1lGOiAnMzJjZDMyJyxcbiAgbFJGOiAnZmFmMGU2JyxcbiAgbWFnRnRhOiAnZmYwMGZmJyxcbiAgbWFQb246ICc4MDAwMDAnLFxuICBWYXF1YW1hclJlOiAnNjZjZGFhJyxcbiAgVlhlOiAnY2QnLFxuICBWU2NFZDogJ2JhNTVkMycsXG4gIFZwdXJwTjogJzkzNzBkYicsXG4gIFZzSGdZRjogJzNjYjM3MScsXG4gIFZVWGU6ICc3YjY4ZWUnLFxuICBWc3ByUmdnWUY6ICdmYTlhJyxcbiAgVlFlOiAnNDhkMWNjJyxcbiAgVnZpVGV0WWQ6ICdjNzE1ODUnLFxuICBtaWRuaWdodFhlOiAnMTkxOTcwJyxcbiAgbVJ0Y1lhbTogJ2Y1ZmZmYScsXG4gIG1pc3R5UHNlOiAnZmZlNGUxJyxcbiAgbW9jY2FzUjogJ2ZmZTRiNScsXG4gIG5hdmFqb3dFdGU6ICdmZmRlYWQnLFxuICBuYXZ5OiAnODAnLFxuICBUZGxhY2U6ICdmZGY1ZTYnLFxuICBUaXZlOiAnODA4MDAwJyxcbiAgVGl2ZWRCYjogJzZiOGUyMycsXG4gIFNhbmdlOiAnZmZhNTAwJyxcbiAgU2FuZ2VZZDogJ2ZmNDUwMCcsXG4gIFNjRWQ6ICdkYTcwZDYnLFxuICBwT2VnVE1uUGQ6ICdlZWU4YWEnLFxuICBwT2VnWUY6ICc5OGZiOTgnLFxuICBwT2VRZTogJ2FmZWVlZScsXG4gIHBPZXZpVGV0WWQ6ICdkYjcwOTMnLFxuICBwYXBheWF3RXA6ICdmZmVmZDUnLFxuICBwSEtwdWZmOiAnZmZkYWI5JyxcbiAgcGVydTogJ2NkODUzZicsXG4gIHBSazogJ2ZmYzBjYicsXG4gIHBsdW06ICdkZGEwZGQnLFxuICBwb3dNclhlOiAnYjBlMGU2JyxcbiAgcHVycE46ICc4MDAwODAnLFxuICBZYmVjY2FwdXJwTjogJzY2MzM5OScsXG4gIFlkOiAnZmYwMDAwJyxcbiAgUHN5YnJvd246ICdiYzhmOGYnLFxuICBQeU9YZTogJzQxNjllMScsXG4gIHNhZGROYlB3bjogJzhiNDUxMycsXG4gIHNPbW9uOiAnZmE4MDcyJyxcbiAgc2FuZHliUHduOiAnZjRhNDYwJyxcbiAgc0hnWUY6ICcyZThiNTcnLFxuICBzSHNoZWxsOiAnZmZmNWVlJyxcbiAgc2lGbmE6ICdhMDUyMmQnLFxuICBzaWx2ZXI6ICdjMGMwYzAnLFxuICBza3lYZTogJzg3Y2VlYicsXG4gIFVYZTogJzZhNWFjZCcsXG4gIFVXYXk6ICc3MDgwOTAnLFxuICBVZ1l5OiAnNzA4MDkwJyxcbiAgc25vdzogJ2ZmZmFmYScsXG4gIHNwclJnZ1lGOiAnZmY3ZicsXG4gIHN0QWxYZTogJzQ2ODJiNCcsXG4gIHRhbjogJ2QyYjQ4YycsXG4gIHRlTzogJzgwODAnLFxuICB0RXN0TjogJ2Q4YmZkOCcsXG4gIHRvbWF0bzogJ2ZmNjM0NycsXG4gIFFlOiAnNDBlMGQwJyxcbiAgdmlUZXQ6ICdlZTgyZWUnLFxuICBKSHQ6ICdmNWRlYjMnLFxuICB3RXRlOiAnZmZmZmZmJyxcbiAgd0V0ZXNtb2tlOiAnZjVmNWY1JyxcbiAgTHc6ICdmZmZmMDAnLFxuICBMd2dZRjogJzlhY2QzMidcbn07XG5mdW5jdGlvbiB1bnBhY2soKSB7XG4gIGNvbnN0IHVucGFja2VkID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhuYW1lcyQxKTtcbiAgY29uc3QgdGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICBsZXQgaSwgaiwgaywgb2ssIG5rO1xuICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIG9rID0gbmsgPSBrZXlzW2ldO1xuICAgIGZvciAoaiA9IDA7IGogPCB0a2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgayA9IHRrZXlzW2pdO1xuICAgICAgbmsgPSBuay5yZXBsYWNlKGssIG1hcFtrXSk7XG4gICAgfVxuICAgIGsgPSBwYXJzZUludChuYW1lcyQxW29rXSwgMTYpO1xuICAgIHVucGFja2VkW25rXSA9IFtrID4+IDE2ICYgMHhGRiwgayA+PiA4ICYgMHhGRiwgayAmIDB4RkZdO1xuICB9XG4gIHJldHVybiB1bnBhY2tlZDtcbn1cblxubGV0IG5hbWVzO1xuZnVuY3Rpb24gbmFtZVBhcnNlKHN0cikge1xuICBpZiAoIW5hbWVzKSB7XG4gICAgbmFtZXMgPSB1bnBhY2soKTtcbiAgICBuYW1lcy50cmFuc3BhcmVudCA9IFswLCAwLCAwLCAwXTtcbiAgfVxuICBjb25zdCBhID0gbmFtZXNbc3RyLnRvTG93ZXJDYXNlKCldO1xuICByZXR1cm4gYSAmJiB7XG4gICAgcjogYVswXSxcbiAgICBnOiBhWzFdLFxuICAgIGI6IGFbMl0sXG4gICAgYTogYS5sZW5ndGggPT09IDQgPyBhWzNdIDogMjU1XG4gIH07XG59XG5cbmNvbnN0IFJHQl9SRSA9IC9ecmdiYT9cXChcXHMqKFstKy5cXGRdKykoJSk/W1xccyxdKyhbLSsuZVxcZF0rKSglKT9bXFxzLF0rKFstKy5lXFxkXSspKCUpPyg/OltcXHMsL10rKFstKy5lXFxkXSspKCUpPyk/XFxzKlxcKSQvO1xuZnVuY3Rpb24gcmdiUGFyc2Uoc3RyKSB7XG4gIGNvbnN0IG0gPSBSR0JfUkUuZXhlYyhzdHIpO1xuICBsZXQgYSA9IDI1NTtcbiAgbGV0IHIsIGcsIGI7XG4gIGlmICghbSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobVs3XSAhPT0gcikge1xuICAgIGNvbnN0IHYgPSArbVs3XTtcbiAgICBhID0gbVs4XSA/IHAyYih2KSA6IGxpbSh2ICogMjU1LCAwLCAyNTUpO1xuICB9XG4gIHIgPSArbVsxXTtcbiAgZyA9ICttWzNdO1xuICBiID0gK21bNV07XG4gIHIgPSAyNTUgJiAobVsyXSA/IHAyYihyKSA6IGxpbShyLCAwLCAyNTUpKTtcbiAgZyA9IDI1NSAmIChtWzRdID8gcDJiKGcpIDogbGltKGcsIDAsIDI1NSkpO1xuICBiID0gMjU1ICYgKG1bNl0gPyBwMmIoYikgOiBsaW0oYiwgMCwgMjU1KSk7XG4gIHJldHVybiB7XG4gICAgcjogcixcbiAgICBnOiBnLFxuICAgIGI6IGIsXG4gICAgYTogYVxuICB9O1xufVxuZnVuY3Rpb24gcmdiU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHYgJiYgKFxuICAgIHYuYSA8IDI1NVxuICAgICAgPyBgcmdiYSgke3Yucn0sICR7di5nfSwgJHt2LmJ9LCAke2Iybih2LmEpfSlgXG4gICAgICA6IGByZ2IoJHt2LnJ9LCAke3YuZ30sICR7di5ifSlgXG4gICk7XG59XG5cbmNvbnN0IHRvID0gdiA9PiB2IDw9IDAuMDAzMTMwOCA/IHYgKiAxMi45MiA6IE1hdGgucG93KHYsIDEuMCAvIDIuNCkgKiAxLjA1NSAtIDAuMDU1O1xuY29uc3QgZnJvbSA9IHYgPT4gdiA8PSAwLjA0MDQ1ID8gdiAvIDEyLjkyIDogTWF0aC5wb3coKHYgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbmZ1bmN0aW9uIGludGVycG9sYXRlKHJnYjEsIHJnYjIsIHQpIHtcbiAgY29uc3QgciA9IGZyb20oYjJuKHJnYjEucikpO1xuICBjb25zdCBnID0gZnJvbShiMm4ocmdiMS5nKSk7XG4gIGNvbnN0IGIgPSBmcm9tKGIybihyZ2IxLmIpKTtcbiAgcmV0dXJuIHtcbiAgICByOiBuMmIodG8ociArIHQgKiAoZnJvbShiMm4ocmdiMi5yKSkgLSByKSkpLFxuICAgIGc6IG4yYih0byhnICsgdCAqIChmcm9tKGIybihyZ2IyLmcpKSAtIGcpKSksXG4gICAgYjogbjJiKHRvKGIgKyB0ICogKGZyb20oYjJuKHJnYjIuYikpIC0gYikpKSxcbiAgICBhOiByZ2IxLmEgKyB0ICogKHJnYjIuYSAtIHJnYjEuYSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gbW9kSFNMKHYsIGksIHJhdGlvKSB7XG4gIGlmICh2KSB7XG4gICAgbGV0IHRtcCA9IHJnYjJoc2wodik7XG4gICAgdG1wW2ldID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG1wW2ldICsgdG1wW2ldICogcmF0aW8sIGkgPT09IDAgPyAzNjAgOiAxKSk7XG4gICAgdG1wID0gaHNsMnJnYih0bXApO1xuICAgIHYuciA9IHRtcFswXTtcbiAgICB2LmcgPSB0bXBbMV07XG4gICAgdi5iID0gdG1wWzJdO1xuICB9XG59XG5mdW5jdGlvbiBjbG9uZSh2LCBwcm90bykge1xuICByZXR1cm4gdiA/IE9iamVjdC5hc3NpZ24ocHJvdG8gfHwge30sIHYpIDogdjtcbn1cbmZ1bmN0aW9uIGZyb21PYmplY3QoaW5wdXQpIHtcbiAgdmFyIHYgPSB7cjogMCwgZzogMCwgYjogMCwgYTogMjU1fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+PSAzKSB7XG4gICAgICB2ID0ge3I6IGlucHV0WzBdLCBnOiBpbnB1dFsxXSwgYjogaW5wdXRbMl0sIGE6IDI1NX07XG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID4gMykge1xuICAgICAgICB2LmEgPSBuMmIoaW5wdXRbM10pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2ID0gY2xvbmUoaW5wdXQsIHtyOiAwLCBnOiAwLCBiOiAwLCBhOiAxfSk7XG4gICAgdi5hID0gbjJiKHYuYSk7XG4gIH1cbiAgcmV0dXJuIHY7XG59XG5mdW5jdGlvbiBmdW5jdGlvblBhcnNlKHN0cikge1xuICBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJ3InKSB7XG4gICAgcmV0dXJuIHJnYlBhcnNlKHN0cik7XG4gIH1cbiAgcmV0dXJuIGh1ZVBhcnNlKHN0cik7XG59XG5jbGFzcyBDb2xvciB7XG4gIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBpbnB1dDtcbiAgICBsZXQgdjtcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHYgPSBmcm9tT2JqZWN0KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2ID0gaGV4UGFyc2UoaW5wdXQpIHx8IG5hbWVQYXJzZShpbnB1dCkgfHwgZnVuY3Rpb25QYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHRoaXMuX3JnYiA9IHY7XG4gICAgdGhpcy5fdmFsaWQgPSAhIXY7XG4gIH1cbiAgZ2V0IHZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZDtcbiAgfVxuICBnZXQgcmdiKCkge1xuICAgIHZhciB2ID0gY2xvbmUodGhpcy5fcmdiKTtcbiAgICBpZiAodikge1xuICAgICAgdi5hID0gYjJuKHYuYSk7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG4gIHNldCByZ2Iob2JqKSB7XG4gICAgdGhpcy5fcmdiID0gZnJvbU9iamVjdChvYmopO1xuICB9XG4gIHJnYlN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWQgPyByZ2JTdHJpbmcodGhpcy5fcmdiKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBoZXhTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkID8gaGV4U3RyaW5nKHRoaXMuX3JnYikgOiB1bmRlZmluZWQ7XG4gIH1cbiAgaHNsU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZCA/IGhzbFN0cmluZyh0aGlzLl9yZ2IpIDogdW5kZWZpbmVkO1xuICB9XG4gIG1peChjb2xvciwgd2VpZ2h0KSB7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBjb25zdCBjMSA9IHRoaXMucmdiO1xuICAgICAgY29uc3QgYzIgPSBjb2xvci5yZ2I7XG4gICAgICBsZXQgdzI7XG4gICAgICBjb25zdCBwID0gd2VpZ2h0ID09PSB3MiA/IDAuNSA6IHdlaWdodDtcbiAgICAgIGNvbnN0IHcgPSAyICogcCAtIDE7XG4gICAgICBjb25zdCBhID0gYzEuYSAtIGMyLmE7XG4gICAgICBjb25zdCB3MSA9ICgodyAqIGEgPT09IC0xID8gdyA6ICh3ICsgYSkgLyAoMSArIHcgKiBhKSkgKyAxKSAvIDIuMDtcbiAgICAgIHcyID0gMSAtIHcxO1xuICAgICAgYzEuciA9IDB4RkYgJiB3MSAqIGMxLnIgKyB3MiAqIGMyLnIgKyAwLjU7XG4gICAgICBjMS5nID0gMHhGRiAmIHcxICogYzEuZyArIHcyICogYzIuZyArIDAuNTtcbiAgICAgIGMxLmIgPSAweEZGICYgdzEgKiBjMS5iICsgdzIgKiBjMi5iICsgMC41O1xuICAgICAgYzEuYSA9IHAgKiBjMS5hICsgKDEgLSBwKSAqIGMyLmE7XG4gICAgICB0aGlzLnJnYiA9IGMxO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBpbnRlcnBvbGF0ZShjb2xvciwgdCkge1xuICAgIGlmIChjb2xvcikge1xuICAgICAgdGhpcy5fcmdiID0gaW50ZXJwb2xhdGUodGhpcy5fcmdiLCBjb2xvci5fcmdiLCB0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih0aGlzLnJnYik7XG4gIH1cbiAgYWxwaGEoYSkge1xuICAgIHRoaXMuX3JnYi5hID0gbjJiKGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGNsZWFyZXIocmF0aW8pIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmdiLmEgKj0gMSAtIHJhdGlvO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdyZXlzY2FsZSgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgdmFsID0gcm91bmQocmdiLnIgKiAwLjMgKyByZ2IuZyAqIDAuNTkgKyByZ2IuYiAqIDAuMTEpO1xuICAgIHJnYi5yID0gcmdiLmcgPSByZ2IuYiA9IHZhbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcGFxdWVyKHJhdGlvKSB7XG4gICAgY29uc3QgcmdiID0gdGhpcy5fcmdiO1xuICAgIHJnYi5hICo9IDEgKyByYXRpbztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBuZWdhdGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuX3JnYjtcbiAgICB2LnIgPSAyNTUgLSB2LnI7XG4gICAgdi5nID0gMjU1IC0gdi5nO1xuICAgIHYuYiA9IDI1NSAtIHYuYjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBsaWdodGVuKHJhdGlvKSB7XG4gICAgbW9kSFNMKHRoaXMuX3JnYiwgMiwgcmF0aW8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGRhcmtlbihyYXRpbykge1xuICAgIG1vZEhTTCh0aGlzLl9yZ2IsIDIsIC1yYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2F0dXJhdGUocmF0aW8pIHtcbiAgICBtb2RIU0wodGhpcy5fcmdiLCAxLCByYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZGVzYXR1cmF0ZShyYXRpbykge1xuICAgIG1vZEhTTCh0aGlzLl9yZ2IsIDEsIC1yYXRpbyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcm90YXRlKGRlZykge1xuICAgIHJvdGF0ZSh0aGlzLl9yZ2IsIGRlZyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhfZXNtKGlucHV0KSB7XG4gIHJldHVybiBuZXcgQ29sb3IoaW5wdXQpO1xufVxuXG5leHBvcnQgeyBDb2xvciwgYjJuLCBiMnAsIGluZGV4X2VzbSBhcyBkZWZhdWx0LCBoZXhQYXJzZSwgaGV4U3RyaW5nLCBoc2wycmdiLCBoc2xTdHJpbmcsIGhzdjJyZ2IsIGh1ZVBhcnNlLCBod2IycmdiLCBsaW0sIG4yYiwgbjJwLCBuYW1lUGFyc2UsIHAyYiwgcmdiMmhzbCwgcmdiUGFyc2UsIHJnYlN0cmluZywgcm90YXRlLCByb3VuZCB9O1xuIiwiLyohXG4gKiBDaGFydC5qcyB2NC40LjRcbiAqIGh0dHBzOi8vd3d3LmNoYXJ0anMub3JnXG4gKiAoYykgMjAyNCBDaGFydC5qcyBDb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJ0BrdXJrbGUvY29sb3InO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgQ2hhcnQuaGVscGVyc1xuICovIC8qKlxuICogQW4gZW1wdHkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGZvciBvcHRpb25hbCBjYWxsYmFjay5cbiAqLyBmdW5jdGlvbiBub29wKCkge1xuLyogbm9vcCAqLyB9XG4vKipcbiAqIFJldHVybnMgYSB1bmlxdWUgaWQsIHNlcXVlbnRpYWxseSBnZW5lcmF0ZWQgZnJvbSBhIGdsb2JhbCB2YXJpYWJsZS5cbiAqLyBjb25zdCB1aWQgPSAoKCk9PntcbiAgICBsZXQgaWQgPSAwO1xuICAgIHJldHVybiAoKT0+aWQrKztcbn0pKCk7XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIG5laXRoZXIgbnVsbCBub3IgdW5kZWZpbmVkLCBlbHNlIHJldHVybnMgZmFsc2UuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEBzaW5jZSAyLjcuMFxuICovIGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWYodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgKGluY2x1ZGluZyB0eXBlZCBhcnJheXMpLCBlbHNlIHJldHVybnMgZmFsc2UuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEBmdW5jdGlvblxuICovIGZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgaWYgKHR5cGUuc2xpY2UoMCwgNykgPT09ICdbb2JqZWN0JyAmJiB0eXBlLnNsaWNlKC02KSA9PT0gJ0FycmF5XScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0IChleGNsdWRpbmcgbnVsbCksIGVsc2UgcmV0dXJucyBmYWxzZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICogQHNpbmNlIDIuNy4wXG4gKi8gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIG51bWJlciwgZWxzZSByZXR1cm5zIGZhbHNlXG4gKiBAcGFyYW0gdmFsdWUgIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKi8gZnVuY3Rpb24gaXNOdW1iZXJGaW5pdGUodmFsdWUpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpICYmIGlzRmluaXRlKCt2YWx1ZSk7XG59XG4vKipcbiAqIFJldHVybnMgYHZhbHVlYCBpZiBmaW5pdGUsIGVsc2UgcmV0dXJucyBgZGVmYXVsdFZhbHVlYC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgZGVmaW5lZC5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGB2YWx1ZWAgaXMgbm90IGZpbml0ZS5cbiAqLyBmdW5jdGlvbiBmaW5pdGVPckRlZmF1bHQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBpc051bWJlckZpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cbi8qKlxuICogUmV0dXJucyBgdmFsdWVgIGlmIGRlZmluZWQsIGVsc2UgcmV0dXJucyBgZGVmYXVsdFZhbHVlYC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgZGVmaW5lZC5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLlxuICovIGZ1bmN0aW9uIHZhbHVlT3JEZWZhdWx0KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuY29uc3QgdG9QZXJjZW50YWdlID0gKHZhbHVlLCBkaW1lbnNpb24pPT50eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmVuZHNXaXRoKCclJykgPyBwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCA6ICt2YWx1ZSAvIGRpbWVuc2lvbjtcbmNvbnN0IHRvRGltZW5zaW9uID0gKHZhbHVlLCBkaW1lbnNpb24pPT50eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmVuZHNXaXRoKCclJykgPyBwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCAqIGRpbWVuc2lvbiA6ICt2YWx1ZTtcbi8qKlxuICogQ2FsbHMgYGZuYCB3aXRoIHRoZSBnaXZlbiBgYXJnc2AgaW4gdGhlIHNjb3BlIGRlZmluZWQgYnkgYHRoaXNBcmdgIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgcmV0dXJuZWQgYnkgYGZuYC4gSWYgYGZuYCBpcyBub3QgYSBmdW5jdGlvbiwgdGhpcyBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIGBmbmAgc2hvdWxkIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSBbdGhpc0FyZ10gLSBUaGUgdmFsdWUgb2YgYHRoaXNgIHByb3ZpZGVkIGZvciB0aGUgY2FsbCB0byBgZm5gLlxuICovIGZ1bmN0aW9uIGNhbGxiYWNrKGZuLCBhcmdzLCB0aGlzQXJnKSB7XG4gICAgaWYgKGZuICYmIHR5cGVvZiBmbi5jYWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlYWNoKGxvb3BhYmxlLCBmbiwgdGhpc0FyZywgcmV2ZXJzZSkge1xuICAgIGxldCBpLCBsZW4sIGtleXM7XG4gICAgaWYgKGlzQXJyYXkobG9vcGFibGUpKSB7XG4gICAgICAgIGxlbiA9IGxvb3BhYmxlLmxlbmd0aDtcbiAgICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgICAgIGZvcihpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgICAgICAgICAgIGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVbaV0sIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgICAgIGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVbaV0sIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChsb29wYWJsZSkpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGxvb3BhYmxlKTtcbiAgICAgICAgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpc0FyZywgbG9vcGFibGVba2V5c1tpXV0sIGtleXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBhMGAgYW5kIGBhMWAgYXJyYXlzIGhhdmUgdGhlIHNhbWUgY29udGVudCwgZWxzZSByZXR1cm5zIGZhbHNlLlxuICogQHBhcmFtIGEwIC0gVGhlIGFycmF5IHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBhMSAtIFRoZSBhcnJheSB0byBjb21wYXJlXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9lbGVtZW50c0VxdWFsKGEwLCBhMSkge1xuICAgIGxldCBpLCBpbGVuLCB2MCwgdjE7XG4gICAgaWYgKCFhMCB8fCAhYTEgfHwgYTAubGVuZ3RoICE9PSBhMS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBhMC5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICB2MCA9IGEwW2ldO1xuICAgICAgICB2MSA9IGExW2ldO1xuICAgICAgICBpZiAodjAuZGF0YXNldEluZGV4ICE9PSB2MS5kYXRhc2V0SW5kZXggfHwgdjAuaW5kZXggIT09IHYxLmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgYHNvdXJjZWAgd2l0aG91dCBrZWVwaW5nIHJlZmVyZW5jZXMgb24gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqLyBmdW5jdGlvbiBjbG9uZShzb3VyY2UpIHtcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubWFwKGNsb25lKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IGtsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGsgPSAwO1xuICAgICAgICBmb3IoOyBrIDwga2xlbjsgKytrKXtcbiAgICAgICAgICAgIHRhcmdldFtrZXlzW2tdXSA9IGNsb25lKHNvdXJjZVtrZXlzW2tdXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ19fcHJvdG9fXycsXG4gICAgICAgICdwcm90b3R5cGUnLFxuICAgICAgICAnY29uc3RydWN0b3InXG4gICAgXS5pbmRleE9mKGtleSkgPT09IC0xO1xufVxuLyoqXG4gKiBUaGUgZGVmYXVsdCBtZXJnZXIgd2hlbiBDaGFydC5oZWxwZXJzLm1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IG1lcmdlciBvcHRpb24uXG4gKiBOb3RlKFNCKTogYWxzbyB1c2VkIGJ5IG1lcmdlQ29uZmlnIGFuZCBtZXJnZVNjYWxlQ29uZmlnIGFzIGZhbGxiYWNrLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbWVyZ2VyKGtleSwgdGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWlzVmFsaWRLZXkoa2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR2YWwgPSB0YXJnZXRba2V5XTtcbiAgICBjb25zdCBzdmFsID0gc291cmNlW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHR2YWwpICYmIGlzT2JqZWN0KHN2YWwpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgbWVyZ2UodHZhbCwgc3ZhbCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBjbG9uZShzdmFsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBpc0FycmF5KHNvdXJjZSkgPyBzb3VyY2UgOiBbXG4gICAgICAgIHNvdXJjZVxuICAgIF07XG4gICAgY29uc3QgaWxlbiA9IHNvdXJjZXMubGVuZ3RoO1xuICAgIGlmICghaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBtZXJnZXIgPSBvcHRpb25zLm1lcmdlciB8fCBfbWVyZ2VyO1xuICAgIGxldCBjdXJyZW50O1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBjdXJyZW50ID0gc291cmNlc1tpXTtcbiAgICAgICAgaWYgKCFpc09iamVjdChjdXJyZW50KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnQpO1xuICAgICAgICBmb3IobGV0IGsgPSAwLCBrbGVuID0ga2V5cy5sZW5ndGg7IGsgPCBrbGVuOyArK2spe1xuICAgICAgICAgICAgbWVyZ2VyKGtleXNba10sIHRhcmdldCwgY3VycmVudCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIG1lcmdlSWYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgcmV0dXJuIG1lcmdlKHRhcmdldCwgc291cmNlLCB7XG4gICAgICAgIG1lcmdlcjogX21lcmdlcklmXG4gICAgfSk7XG59XG4vKipcbiAqIE1lcmdlcyBzb3VyY2Vba2V5XSBpbiB0YXJnZXRba2V5XSBvbmx5IGlmIHRhcmdldFtrZXldIGlzIHVuZGVmaW5lZC5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX21lcmdlcklmKGtleSwgdGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAoIWlzVmFsaWRLZXkoa2V5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR2YWwgPSB0YXJnZXRba2V5XTtcbiAgICBjb25zdCBzdmFsID0gc291cmNlW2tleV07XG4gICAgaWYgKGlzT2JqZWN0KHR2YWwpICYmIGlzT2JqZWN0KHN2YWwpKSB7XG4gICAgICAgIG1lcmdlSWYodHZhbCwgc3ZhbCk7XG4gICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IGNsb25lKHN2YWwpO1xuICAgIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZGVwcmVjYXRlZChzY29wZSwgdmFsdWUsIHByZXZpb3VzLCBjdXJyZW50KSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKHNjb3BlICsgJzogXCInICsgcHJldmlvdXMgKyAnXCIgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBcIicgKyBjdXJyZW50ICsgJ1wiIGluc3RlYWQnKTtcbiAgICB9XG59XG4vLyByZXNvbHZlT2JqZWN0S2V5IHJlc29sdmVyIGNhY2hlXG5jb25zdCBrZXlSZXNvbHZlcnMgPSB7XG4gICAgLy8gQ2hhcnQuaGVscGVycy5jb3JlIHJlc29sdmVPYmplY3RLZXkgc2hvdWxkIHJlc29sdmUgZW1wdHkga2V5IHRvIHJvb3Qgb2JqZWN0XG4gICAgJyc6ICh2KT0+dixcbiAgICAvLyBkZWZhdWx0IHJlc29sdmVyc1xuICAgIHg6IChvKT0+by54LFxuICAgIHk6IChvKT0+by55XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zcGxpdEtleShrZXkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICBsZXQgdG1wID0gJyc7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKXtcbiAgICAgICAgdG1wICs9IHBhcnQ7XG4gICAgICAgIGlmICh0bXAuZW5kc1dpdGgoJ1xcXFwnKSkge1xuICAgICAgICAgICAgdG1wID0gdG1wLnNsaWNlKDAsIC0xKSArICcuJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleXMucHVzaCh0bXApO1xuICAgICAgICAgICAgdG1wID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG5mdW5jdGlvbiBfZ2V0S2V5UmVzb2x2ZXIoa2V5KSB7XG4gICAgY29uc3Qga2V5cyA9IF9zcGxpdEtleShrZXkpO1xuICAgIHJldHVybiAob2JqKT0+e1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cyl7XG4gICAgICAgICAgICBpZiAoayA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iaiA9IG9iaiAmJiBvYmpba107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVzb2x2ZU9iamVjdEtleShvYmosIGtleSkge1xuICAgIGNvbnN0IHJlc29sdmVyID0ga2V5UmVzb2x2ZXJzW2tleV0gfHwgKGtleVJlc29sdmVyc1trZXldID0gX2dldEtleVJlc29sdmVyKGtleSkpO1xuICAgIHJldHVybiByZXNvbHZlcihvYmopO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5jb25zdCBkZWZpbmVkID0gKHZhbHVlKT0+dHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbmNvbnN0IGlzRnVuY3Rpb24gPSAodmFsdWUpPT50eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzExMjg4NTUvY29tcGFyaW5nLWVjbWE2LXNldHMtZm9yLWVxdWFsaXR5IzMxMTI5Mzg0XG5jb25zdCBzZXRzRXF1YWwgPSAoYSwgYik9PntcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYSl7XG4gICAgICAgIGlmICghYi5oYXMoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIEBwYXJhbSBlIC0gVGhlIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9pc0NsaWNrRXZlbnQoZSkge1xuICAgIHJldHVybiBlLnR5cGUgPT09ICdtb3VzZXVwJyB8fCBlLnR5cGUgPT09ICdjbGljaycgfHwgZS50eXBlID09PSAnY29udGV4dG1lbnUnO1xufVxuXG4vKipcbiAqIEBhbGlhcyBDaGFydC5oZWxwZXJzLm1hdGhcbiAqIEBuYW1lc3BhY2VcbiAqLyBjb25zdCBQSSA9IE1hdGguUEk7XG5jb25zdCBUQVUgPSAyICogUEk7XG5jb25zdCBQSVRBVSA9IFRBVSArIFBJO1xuY29uc3QgSU5GSU5JVFkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5jb25zdCBSQURfUEVSX0RFRyA9IFBJIC8gMTgwO1xuY29uc3QgSEFMRl9QSSA9IFBJIC8gMjtcbmNvbnN0IFFVQVJURVJfUEkgPSBQSSAvIDQ7XG5jb25zdCBUV09fVEhJUkRTX1BJID0gUEkgKiAyIC8gMztcbmNvbnN0IGxvZzEwID0gTWF0aC5sb2cxMDtcbmNvbnN0IHNpZ24gPSBNYXRoLnNpZ247XG5mdW5jdGlvbiBhbG1vc3RFcXVhbHMoeCwgeSwgZXBzaWxvbikge1xuICAgIHJldHVybiBNYXRoLmFicyh4IC0geSkgPCBlcHNpbG9uO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmljZSBudW1iZXIgYWxnb3JpdGhtIHVzZWQgaW4gZGV0ZXJtaW5pbmcgd2hlcmUgYXhpcyBsYWJlbHMgd2lsbCBnb1xuICovIGZ1bmN0aW9uIG5pY2VOdW0ocmFuZ2UpIHtcbiAgICBjb25zdCByb3VuZGVkUmFuZ2UgPSBNYXRoLnJvdW5kKHJhbmdlKTtcbiAgICByYW5nZSA9IGFsbW9zdEVxdWFscyhyYW5nZSwgcm91bmRlZFJhbmdlLCByYW5nZSAvIDEwMDApID8gcm91bmRlZFJhbmdlIDogcmFuZ2U7XG4gICAgY29uc3QgbmljZVJhbmdlID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IobG9nMTAocmFuZ2UpKSk7XG4gICAgY29uc3QgZnJhY3Rpb24gPSByYW5nZSAvIG5pY2VSYW5nZTtcbiAgICBjb25zdCBuaWNlRnJhY3Rpb24gPSBmcmFjdGlvbiA8PSAxID8gMSA6IGZyYWN0aW9uIDw9IDIgPyAyIDogZnJhY3Rpb24gPD0gNSA/IDUgOiAxMDtcbiAgICByZXR1cm4gbmljZUZyYWN0aW9uICogbmljZVJhbmdlO1xufVxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZhY3RvcnMgc29ydGVkIGZyb20gMSB0byBzcXJ0KHZhbHVlKVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZmFjdG9yaXplKHZhbHVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3Qgc3FydCA9IE1hdGguc3FydCh2YWx1ZSk7XG4gICAgbGV0IGk7XG4gICAgZm9yKGkgPSAxOyBpIDwgc3FydDsgaSsrKXtcbiAgICAgICAgaWYgKHZhbHVlICUgaSA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSAvIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzcXJ0ID09PSAoc3FydCB8IDApKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHNxcnQpO1xuICAgIH1cbiAgICByZXN1bHQuc29ydCgoYSwgYik9PmEgLSBiKS5wb3AoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gaXNOdW1iZXIobikge1xuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG59XG5mdW5jdGlvbiBhbG1vc3RXaG9sZSh4LCBlcHNpbG9uKSB7XG4gICAgY29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQoeCk7XG4gICAgcmV0dXJuIHJvdW5kZWQgLSBlcHNpbG9uIDw9IHggJiYgcm91bmRlZCArIGVwc2lsb24gPj0geDtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfc2V0TWluQW5kTWF4QnlLZXkoYXJyYXksIHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICBsZXQgaSwgaWxlbiwgdmFsdWU7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgdmFsdWUgPSBhcnJheVtpXVtwcm9wZXJ0eV07XG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB0YXJnZXQubWluID0gTWF0aC5taW4odGFyZ2V0Lm1pbiwgdmFsdWUpO1xuICAgICAgICAgICAgdGFyZ2V0Lm1heCA9IE1hdGgubWF4KHRhcmdldC5tYXgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiAoUEkgLyAxODApO1xufVxuZnVuY3Rpb24gdG9EZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqICgxODAgLyBQSSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xuICogaS5lLiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgTnVtYmVyLlxuICogQHBhcmFtIHggLSBBIG51bWJlci5cbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9kZWNpbWFsUGxhY2VzKHgpIHtcbiAgICBpZiAoIWlzTnVtYmVyRmluaXRlKHgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGUgPSAxO1xuICAgIGxldCBwID0gMDtcbiAgICB3aGlsZShNYXRoLnJvdW5kKHggKiBlKSAvIGUgIT09IHgpe1xuICAgICAgICBlICo9IDEwO1xuICAgICAgICBwKys7XG4gICAgfVxuICAgIHJldHVybiBwO1xufVxuLy8gR2V0cyB0aGUgYW5nbGUgZnJvbSB2ZXJ0aWNhbCB1cHJpZ2h0IHRvIHRoZSBwb2ludCBhYm91dCBhIGNlbnRyZS5cbmZ1bmN0aW9uIGdldEFuZ2xlRnJvbVBvaW50KGNlbnRyZVBvaW50LCBhbmdsZVBvaW50KSB7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tWENlbnRlciA9IGFuZ2xlUG9pbnQueCAtIGNlbnRyZVBvaW50Lng7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tWUNlbnRlciA9IGFuZ2xlUG9pbnQueSAtIGNlbnRyZVBvaW50Lnk7XG4gICAgY29uc3QgcmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyID0gTWF0aC5zcXJ0KGRpc3RhbmNlRnJvbVhDZW50ZXIgKiBkaXN0YW5jZUZyb21YQ2VudGVyICsgZGlzdGFuY2VGcm9tWUNlbnRlciAqIGRpc3RhbmNlRnJvbVlDZW50ZXIpO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoZGlzdGFuY2VGcm9tWUNlbnRlciwgZGlzdGFuY2VGcm9tWENlbnRlcik7XG4gICAgaWYgKGFuZ2xlIDwgLTAuNSAqIFBJKSB7XG4gICAgICAgIGFuZ2xlICs9IFRBVTsgLy8gbWFrZSBzdXJlIHRoZSByZXR1cm5lZCBhbmdsZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgKC1QSS8yLCAzUEkvMl1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYW5nbGUsXG4gICAgICAgIGRpc3RhbmNlOiByYWRpYWxEaXN0YW5jZUZyb21DZW50ZXJcbiAgICB9O1xufVxuZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKHB0MSwgcHQyKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhwdDIueCAtIHB0MS54LCAyKSArIE1hdGgucG93KHB0Mi55IC0gcHQxLnksIDIpKTtcbn1cbi8qKlxuICogU2hvcnRlc3QgZGlzdGFuY2UgYmV0d2VlbiBhbmdsZXMsIGluIGVpdGhlciBkaXJlY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9hbmdsZURpZmYoYSwgYikge1xuICAgIHJldHVybiAoYSAtIGIgKyBQSVRBVSkgJSBUQVUgLSBQSTtcbn1cbi8qKlxuICogTm9ybWFsaXplIGFuZ2xlIHRvIGJlIGJldHdlZW4gMCBhbmQgMipQSVxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfbm9ybWFsaXplQW5nbGUoYSkge1xuICAgIHJldHVybiAoYSAlIFRBVSArIFRBVSkgJSBUQVU7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnQsIGVuZCwgc2FtZUFuZ2xlSXNGdWxsQ2lyY2xlKSB7XG4gICAgY29uc3QgYSA9IF9ub3JtYWxpemVBbmdsZShhbmdsZSk7XG4gICAgY29uc3QgcyA9IF9ub3JtYWxpemVBbmdsZShzdGFydCk7XG4gICAgY29uc3QgZSA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICAgIGNvbnN0IGFuZ2xlVG9TdGFydCA9IF9ub3JtYWxpemVBbmdsZShzIC0gYSk7XG4gICAgY29uc3QgYW5nbGVUb0VuZCA9IF9ub3JtYWxpemVBbmdsZShlIC0gYSk7XG4gICAgY29uc3Qgc3RhcnRUb0FuZ2xlID0gX25vcm1hbGl6ZUFuZ2xlKGEgLSBzKTtcbiAgICBjb25zdCBlbmRUb0FuZ2xlID0gX25vcm1hbGl6ZUFuZ2xlKGEgLSBlKTtcbiAgICByZXR1cm4gYSA9PT0gcyB8fCBhID09PSBlIHx8IHNhbWVBbmdsZUlzRnVsbENpcmNsZSAmJiBzID09PSBlIHx8IGFuZ2xlVG9TdGFydCA+IGFuZ2xlVG9FbmQgJiYgc3RhcnRUb0FuZ2xlIDwgZW5kVG9BbmdsZTtcbn1cbi8qKlxuICogTGltaXQgYHZhbHVlYCBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9saW1pdFZhbHVlKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn1cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9pbnQxNlJhbmdlKHZhbHVlKSB7XG4gICAgcmV0dXJuIF9saW1pdFZhbHVlKHZhbHVlLCAtMzI3NjgsIDMyNzY3KTtcbn1cbi8qKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gc3RhcnRcbiAqIEBwYXJhbSBlbmRcbiAqIEBwYXJhbSBbZXBzaWxvbl1cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzQmV0d2Vlbih2YWx1ZSwgc3RhcnQsIGVuZCwgZXBzaWxvbiA9IDFlLTYpIHtcbiAgICByZXR1cm4gdmFsdWUgPj0gTWF0aC5taW4oc3RhcnQsIGVuZCkgLSBlcHNpbG9uICYmIHZhbHVlIDw9IE1hdGgubWF4KHN0YXJ0LCBlbmQpICsgZXBzaWxvbjtcbn1cblxuZnVuY3Rpb24gX2xvb2t1cCh0YWJsZSwgdmFsdWUsIGNtcCkge1xuICAgIGNtcCA9IGNtcCB8fCAoKGluZGV4KT0+dGFibGVbaW5kZXhdIDwgdmFsdWUpO1xuICAgIGxldCBoaSA9IHRhYmxlLmxlbmd0aCAtIDE7XG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgbWlkO1xuICAgIHdoaWxlKGhpIC0gbG8gPiAxKXtcbiAgICAgICAgbWlkID0gbG8gKyBoaSA+PiAxO1xuICAgICAgICBpZiAoY21wKG1pZCkpIHtcbiAgICAgICAgICAgIGxvID0gbWlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGkgPSBtaWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG8sXG4gICAgICAgIGhpXG4gICAgfTtcbn1cbi8qKlxuICogQmluYXJ5IHNlYXJjaFxuICogQHBhcmFtIHRhYmxlIC0gdGhlIHRhYmxlIHNlYXJjaC4gbXVzdCBiZSBzb3J0ZWQhXG4gKiBAcGFyYW0ga2V5IC0gcHJvcGVydHkgbmFtZSBmb3IgdGhlIHZhbHVlIGluIGVhY2ggZW50cnlcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIGZpbmRcbiAqIEBwYXJhbSBsYXN0IC0gbG9va3VwIGxhc3QgaW5kZXhcbiAqIEBwcml2YXRlXG4gKi8gY29uc3QgX2xvb2t1cEJ5S2V5ID0gKHRhYmxlLCBrZXksIHZhbHVlLCBsYXN0KT0+X2xvb2t1cCh0YWJsZSwgdmFsdWUsIGxhc3QgPyAoaW5kZXgpPT57XG4gICAgICAgIGNvbnN0IHRpID0gdGFibGVbaW5kZXhdW2tleV07XG4gICAgICAgIHJldHVybiB0aSA8IHZhbHVlIHx8IHRpID09PSB2YWx1ZSAmJiB0YWJsZVtpbmRleCArIDFdW2tleV0gPT09IHZhbHVlO1xuICAgIH0gOiAoaW5kZXgpPT50YWJsZVtpbmRleF1ba2V5XSA8IHZhbHVlKTtcbi8qKlxuICogUmV2ZXJzZSBiaW5hcnkgc2VhcmNoXG4gKiBAcGFyYW0gdGFibGUgLSB0aGUgdGFibGUgc2VhcmNoLiBtdXN0IGJlIHNvcnRlZCFcbiAqIEBwYXJhbSBrZXkgLSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgdmFsdWUgaW4gZWFjaCBlbnRyeVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gZmluZFxuICogQHByaXZhdGVcbiAqLyBjb25zdCBfcmxvb2t1cEJ5S2V5ID0gKHRhYmxlLCBrZXksIHZhbHVlKT0+X2xvb2t1cCh0YWJsZSwgdmFsdWUsIChpbmRleCk9PnRhYmxlW2luZGV4XVtrZXldID49IHZhbHVlKTtcbi8qKlxuICogUmV0dXJuIHN1YnNldCBvZiBgdmFsdWVzYCBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCBpbmNsdXNpdmUuXG4gKiBWYWx1ZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc29ydGVkIG9yZGVyLlxuICogQHBhcmFtIHZhbHVlcyAtIHNvcnRlZCBhcnJheSBvZiB2YWx1ZXNcbiAqIEBwYXJhbSBtaW4gLSBtaW4gdmFsdWVcbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWVcbiAqLyBmdW5jdGlvbiBfZmlsdGVyQmV0d2Vlbih2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gdmFsdWVzLmxlbmd0aDtcbiAgICB3aGlsZShzdGFydCA8IGVuZCAmJiB2YWx1ZXNbc3RhcnRdIDwgbWluKXtcbiAgICAgICAgc3RhcnQrKztcbiAgICB9XG4gICAgd2hpbGUoZW5kID4gc3RhcnQgJiYgdmFsdWVzW2VuZCAtIDFdID4gbWF4KXtcbiAgICAgICAgZW5kLS07XG4gICAgfVxuICAgIHJldHVybiBzdGFydCA+IDAgfHwgZW5kIDwgdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5zbGljZShzdGFydCwgZW5kKSA6IHZhbHVlcztcbn1cbmNvbnN0IGFycmF5RXZlbnRzID0gW1xuICAgICdwdXNoJyxcbiAgICAncG9wJyxcbiAgICAnc2hpZnQnLFxuICAgICdzcGxpY2UnLFxuICAgICd1bnNoaWZ0J1xuXTtcbmZ1bmN0aW9uIGxpc3RlbkFycmF5RXZlbnRzKGFycmF5LCBsaXN0ZW5lcikge1xuICAgIGlmIChhcnJheS5fY2hhcnRqcykge1xuICAgICAgICBhcnJheS5fY2hhcnRqcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCAnX2NoYXJ0anMnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBsaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgYXJyYXlFdmVudHMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBtZXRob2QgPSAnX29uRGF0YScgKyBfY2FwaXRhbGl6ZShrZXkpO1xuICAgICAgICBjb25zdCBiYXNlID0gYXJyYXlba2V5XTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWUgKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBiYXNlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGFycmF5Ll9jaGFydGpzLmxpc3RlbmVycy5mb3JFYWNoKChvYmplY3QpPT57XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1bmxpc3RlbkFycmF5RXZlbnRzKGFycmF5LCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IHN0dWIgPSBhcnJheS5fY2hhcnRqcztcbiAgICBpZiAoIXN0dWIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBzdHViLmxpc3RlbmVycztcbiAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcnJheUV2ZW50cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGRlbGV0ZSBhcnJheVtrZXldO1xuICAgIH0pO1xuICAgIGRlbGV0ZSBhcnJheS5fY2hhcnRqcztcbn1cbi8qKlxuICogQHBhcmFtIGl0ZW1zXG4gKi8gZnVuY3Rpb24gX2FycmF5VW5pcXVlKGl0ZW1zKSB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldChpdGVtcyk7XG4gICAgaWYgKHNldC5zaXplID09PSBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXQpO1xufVxuXG5mdW5jdGlvbiBmb250U3RyaW5nKHBpeGVsU2l6ZSwgZm9udFN0eWxlLCBmb250RmFtaWx5KSB7XG4gICAgcmV0dXJuIGZvbnRTdHlsZSArICcgJyArIHBpeGVsU2l6ZSArICdweCAnICsgZm9udEZhbWlseTtcbn1cbi8qKlxuKiBSZXF1ZXN0IGFuaW1hdGlvbiBwb2x5ZmlsbFxuKi8gY29uc3QgcmVxdWVzdEFuaW1GcmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbn0oKTtcbi8qKlxuICogVGhyb3R0bGVzIGNhbGxpbmcgYGZuYCBvbmNlIHBlciBhbmltYXRpb24gZnJhbWVcbiAqIExhdGVzdCBhcmd1bWVudHMgYXJlIHVzZWQgb24gdGhlIGFjdHVhbCBjYWxsXG4gKi8gZnVuY3Rpb24gdGhyb3R0bGVkKGZuLCB0aGlzQXJnKSB7XG4gICAgbGV0IGFyZ3NUb1VzZSA9IFtdO1xuICAgIGxldCB0aWNraW5nID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgYXJncyBmb3IgdXNlIGxhdGVyXG4gICAgICAgIGFyZ3NUb1VzZSA9IGFyZ3M7XG4gICAgICAgIGlmICghdGlja2luZykge1xuICAgICAgICAgICAgdGlja2luZyA9IHRydWU7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCAoKT0+e1xuICAgICAgICAgICAgICAgIHRpY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmbi5hcHBseSh0aGlzQXJnLCBhcmdzVG9Vc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBEZWJvdW5jZXMgY2FsbGluZyBgZm5gIGZvciBgZGVsYXlgIG1zXG4gKi8gZnVuY3Rpb24gZGVib3VuY2UoZm4sIGRlbGF5KSB7XG4gICAgbGV0IHRpbWVvdXQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGRlbGF5KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChmbiwgZGVsYXksIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGF5O1xuICAgIH07XG59XG4vKipcbiAqIENvbnZlcnRzICdzdGFydCcgdG8gJ2xlZnQnLCAnZW5kJyB0byAncmlnaHQnIGFuZCBvdGhlcnMgdG8gJ2NlbnRlcidcbiAqIEBwcml2YXRlXG4gKi8gY29uc3QgX3RvTGVmdFJpZ2h0Q2VudGVyID0gKGFsaWduKT0+YWxpZ24gPT09ICdzdGFydCcgPyAnbGVmdCcgOiBhbGlnbiA9PT0gJ2VuZCcgPyAncmlnaHQnIDogJ2NlbnRlcic7XG4vKipcbiAqIFJldHVybnMgYHN0YXJ0YCwgYGVuZGAgb3IgYChzdGFydCArIGVuZCkgLyAyYCBkZXBlbmRpbmcgb24gYGFsaWduYC4gRGVmYXVsdHMgdG8gYGNlbnRlcmBcbiAqIEBwcml2YXRlXG4gKi8gY29uc3QgX2FsaWduU3RhcnRFbmQgPSAoYWxpZ24sIHN0YXJ0LCBlbmQpPT5hbGlnbiA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogYWxpZ24gPT09ICdlbmQnID8gZW5kIDogKHN0YXJ0ICsgZW5kKSAvIDI7XG4vKipcbiAqIFJldHVybnMgYGxlZnRgLCBgcmlnaHRgIG9yIGAobGVmdCArIHJpZ2h0KSAvIDJgIGRlcGVuZGluZyBvbiBgYWxpZ25gLiBEZWZhdWx0cyB0byBgbGVmdGBcbiAqIEBwcml2YXRlXG4gKi8gY29uc3QgX3RleHRYID0gKGFsaWduLCBsZWZ0LCByaWdodCwgcnRsKT0+e1xuICAgIGNvbnN0IGNoZWNrID0gcnRsID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICByZXR1cm4gYWxpZ24gPT09IGNoZWNrID8gcmlnaHQgOiBhbGlnbiA9PT0gJ2NlbnRlcicgPyAobGVmdCArIHJpZ2h0KSAvIDIgOiBsZWZ0O1xufTtcbi8qKlxuICogUmV0dXJuIHN0YXJ0IGFuZCBjb3VudCBvZiB2aXNpYmxlIHBvaW50cy5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2dldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHMobWV0YSwgcG9pbnRzLCBhbmltYXRpb25zRGlzYWJsZWQpIHtcbiAgICBjb25zdCBwb2ludENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBjb3VudCA9IHBvaW50Q291bnQ7XG4gICAgaWYgKG1ldGEuX3NvcnRlZCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIF9wYXJzZWQgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBheGlzID0gaVNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICwgbWluRGVmaW5lZCAsIG1heERlZmluZWQgIH0gPSBpU2NhbGUuZ2V0VXNlckJvdW5kcygpO1xuICAgICAgICBpZiAobWluRGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShNYXRoLm1pbigvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gdHlwZSBfcGFyc2VkXG4gICAgICAgICAgICBfbG9va3VwQnlLZXkoX3BhcnNlZCwgYXhpcywgbWluKS5sbywgLy8gQHRzLWV4cGVjdC1lcnJvciBOZWVkIHRvIGZpeCB0eXBlcyBvbiBfbG9va3VwQnlLZXlcbiAgICAgICAgICAgIGFuaW1hdGlvbnNEaXNhYmxlZCA/IHBvaW50Q291bnQgOiBfbG9va3VwQnlLZXkocG9pbnRzLCBheGlzLCBpU2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShtaW4pKS5sbyksIDAsIHBvaW50Q291bnQgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4RGVmaW5lZCkge1xuICAgICAgICAgICAgY291bnQgPSBfbGltaXRWYWx1ZShNYXRoLm1heCgvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gdHlwZSBfcGFyc2VkXG4gICAgICAgICAgICBfbG9va3VwQnlLZXkoX3BhcnNlZCwgaVNjYWxlLmF4aXMsIG1heCwgdHJ1ZSkuaGkgKyAxLCAvLyBAdHMtZXhwZWN0LWVycm9yIE5lZWQgdG8gZml4IHR5cGVzIG9uIF9sb29rdXBCeUtleVxuICAgICAgICAgICAgYW5pbWF0aW9uc0Rpc2FibGVkID8gMCA6IF9sb29rdXBCeUtleShwb2ludHMsIGF4aXMsIGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKG1heCksIHRydWUpLmhpICsgMSksIHN0YXJ0LCBwb2ludENvdW50KSAtIHN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnQgPSBwb2ludENvdW50IC0gc3RhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGNvdW50XG4gICAgfTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzY2FsZSByYW5nZXMgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIHtvYmplY3R9IG1ldGEgLSBkYXRhc2V0IG1ldGEuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSB7XG4gICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgLCBfc2NhbGVSYW5nZXMgIH0gPSBtZXRhO1xuICAgIGNvbnN0IG5ld1JhbmdlcyA9IHtcbiAgICAgICAgeG1pbjogeFNjYWxlLm1pbixcbiAgICAgICAgeG1heDogeFNjYWxlLm1heCxcbiAgICAgICAgeW1pbjogeVNjYWxlLm1pbixcbiAgICAgICAgeW1heDogeVNjYWxlLm1heFxuICAgIH07XG4gICAgaWYgKCFfc2NhbGVSYW5nZXMpIHtcbiAgICAgICAgbWV0YS5fc2NhbGVSYW5nZXMgPSBuZXdSYW5nZXM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjaGFuZ2VkID0gX3NjYWxlUmFuZ2VzLnhtaW4gIT09IHhTY2FsZS5taW4gfHwgX3NjYWxlUmFuZ2VzLnhtYXggIT09IHhTY2FsZS5tYXggfHwgX3NjYWxlUmFuZ2VzLnltaW4gIT09IHlTY2FsZS5taW4gfHwgX3NjYWxlUmFuZ2VzLnltYXggIT09IHlTY2FsZS5tYXg7XG4gICAgT2JqZWN0LmFzc2lnbihfc2NhbGVSYW5nZXMsIG5ld1Jhbmdlcyk7XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG59XG5cbmNvbnN0IGF0RWRnZSA9ICh0KT0+dCA9PT0gMCB8fCB0ID09PSAxO1xuY29uc3QgZWxhc3RpY0luID0gKHQsIHMsIHApPT4tKE1hdGgucG93KDIsIDEwICogKHQgLT0gMSkpICogTWF0aC5zaW4oKHQgLSBzKSAqIFRBVSAvIHApKTtcbmNvbnN0IGVsYXN0aWNPdXQgPSAodCwgcywgcCk9Pk1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHQgLSBzKSAqIFRBVSAvIHApICsgMTtcbi8qKlxuICogRWFzaW5nIGZ1bmN0aW9ucyBhZGFwdGVkIGZyb20gUm9iZXJ0IFBlbm5lcidzIGVhc2luZyBlcXVhdGlvbnMuXG4gKiBAbmFtZXNwYWNlIENoYXJ0LmhlbHBlcnMuZWFzaW5nLmVmZmVjdHNcbiAqIEBzZWUgaHR0cDovL3d3dy5yb2JlcnRwZW5uZXIuY29tL2Vhc2luZy9cbiAqLyBjb25zdCBlZmZlY3RzID0ge1xuICAgIGxpbmVhcjogKHQpPT50LFxuICAgIGVhc2VJblF1YWQ6ICh0KT0+dCAqIHQsXG4gICAgZWFzZU91dFF1YWQ6ICh0KT0+LXQgKiAodCAtIDIpLFxuICAgIGVhc2VJbk91dFF1YWQ6ICh0KT0+KHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCA6IC0wLjUgKiAoLS10ICogKHQgLSAyKSAtIDEpLFxuICAgIGVhc2VJbkN1YmljOiAodCk9PnQgKiB0ICogdCxcbiAgICBlYXNlT3V0Q3ViaWM6ICh0KT0+KHQgLT0gMSkgKiB0ICogdCArIDEsXG4gICAgZWFzZUluT3V0Q3ViaWM6ICh0KT0+KHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCAqIHQgOiAwLjUgKiAoKHQgLT0gMikgKiB0ICogdCArIDIpLFxuICAgIGVhc2VJblF1YXJ0OiAodCk9PnQgKiB0ICogdCAqIHQsXG4gICAgZWFzZU91dFF1YXJ0OiAodCk9Pi0oKHQgLT0gMSkgKiB0ICogdCAqIHQgLSAxKSxcbiAgICBlYXNlSW5PdXRRdWFydDogKHQpPT4odCAvPSAwLjUpIDwgMSA/IDAuNSAqIHQgKiB0ICogdCAqIHQgOiAtMC41ICogKCh0IC09IDIpICogdCAqIHQgKiB0IC0gMiksXG4gICAgZWFzZUluUXVpbnQ6ICh0KT0+dCAqIHQgKiB0ICogdCAqIHQsXG4gICAgZWFzZU91dFF1aW50OiAodCk9Pih0IC09IDEpICogdCAqIHQgKiB0ICogdCArIDEsXG4gICAgZWFzZUluT3V0UXVpbnQ6ICh0KT0+KHQgLz0gMC41KSA8IDEgPyAwLjUgKiB0ICogdCAqIHQgKiB0ICogdCA6IDAuNSAqICgodCAtPSAyKSAqIHQgKiB0ICogdCAqIHQgKyAyKSxcbiAgICBlYXNlSW5TaW5lOiAodCk9Pi1NYXRoLmNvcyh0ICogSEFMRl9QSSkgKyAxLFxuICAgIGVhc2VPdXRTaW5lOiAodCk9Pk1hdGguc2luKHQgKiBIQUxGX1BJKSxcbiAgICBlYXNlSW5PdXRTaW5lOiAodCk9Pi0wLjUgKiAoTWF0aC5jb3MoUEkgKiB0KSAtIDEpLFxuICAgIGVhc2VJbkV4cG86ICh0KT0+dCA9PT0gMCA/IDAgOiBNYXRoLnBvdygyLCAxMCAqICh0IC0gMSkpLFxuICAgIGVhc2VPdXRFeHBvOiAodCk9PnQgPT09IDEgPyAxIDogLU1hdGgucG93KDIsIC0xMCAqIHQpICsgMSxcbiAgICBlYXNlSW5PdXRFeHBvOiAodCk9PmF0RWRnZSh0KSA/IHQgOiB0IDwgMC41ID8gMC41ICogTWF0aC5wb3coMiwgMTAgKiAodCAqIDIgLSAxKSkgOiAwLjUgKiAoLU1hdGgucG93KDIsIC0xMCAqICh0ICogMiAtIDEpKSArIDIpLFxuICAgIGVhc2VJbkNpcmM6ICh0KT0+dCA+PSAxID8gdCA6IC0oTWF0aC5zcXJ0KDEgLSB0ICogdCkgLSAxKSxcbiAgICBlYXNlT3V0Q2lyYzogKHQpPT5NYXRoLnNxcnQoMSAtICh0IC09IDEpICogdCksXG4gICAgZWFzZUluT3V0Q2lyYzogKHQpPT4odCAvPSAwLjUpIDwgMSA/IC0wLjUgKiAoTWF0aC5zcXJ0KDEgLSB0ICogdCkgLSAxKSA6IDAuNSAqIChNYXRoLnNxcnQoMSAtICh0IC09IDIpICogdCkgKyAxKSxcbiAgICBlYXNlSW5FbGFzdGljOiAodCk9PmF0RWRnZSh0KSA/IHQgOiBlbGFzdGljSW4odCwgMC4wNzUsIDAuMyksXG4gICAgZWFzZU91dEVsYXN0aWM6ICh0KT0+YXRFZGdlKHQpID8gdCA6IGVsYXN0aWNPdXQodCwgMC4wNzUsIDAuMyksXG4gICAgZWFzZUluT3V0RWxhc3RpYyAodCkge1xuICAgICAgICBjb25zdCBzID0gMC4xMTI1O1xuICAgICAgICBjb25zdCBwID0gMC40NTtcbiAgICAgICAgcmV0dXJuIGF0RWRnZSh0KSA/IHQgOiB0IDwgMC41ID8gMC41ICogZWxhc3RpY0luKHQgKiAyLCBzLCBwKSA6IDAuNSArIDAuNSAqIGVsYXN0aWNPdXQodCAqIDIgLSAxLCBzLCBwKTtcbiAgICB9LFxuICAgIGVhc2VJbkJhY2sgKHQpIHtcbiAgICAgICAgY29uc3QgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiB0ICogdCAqICgocyArIDEpICogdCAtIHMpO1xuICAgIH0sXG4gICAgZWFzZU91dEJhY2sgKHQpIHtcbiAgICAgICAgY29uc3QgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiAodCAtPSAxKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDE7XG4gICAgfSxcbiAgICBlYXNlSW5PdXRCYWNrICh0KSB7XG4gICAgICAgIGxldCBzID0gMS43MDE1ODtcbiAgICAgICAgaWYgKCh0IC89IDAuNSkgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41ICogKHQgKiB0ICogKCgocyAqPSAxLjUyNSkgKyAxKSAqIHQgLSBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgodCAtPSAyKSAqIHQgKiAoKChzICo9IDEuNTI1KSArIDEpICogdCArIHMpICsgMik7XG4gICAgfSxcbiAgICBlYXNlSW5Cb3VuY2U6ICh0KT0+MSAtIGVmZmVjdHMuZWFzZU91dEJvdW5jZSgxIC0gdCksXG4gICAgZWFzZU91dEJvdW5jZSAodCkge1xuICAgICAgICBjb25zdCBtID0gNy41NjI1O1xuICAgICAgICBjb25zdCBkID0gMi43NTtcbiAgICAgICAgaWYgKHQgPCAxIC8gZCkge1xuICAgICAgICAgICAgcmV0dXJuIG0gKiB0ICogdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodCA8IDIgLyBkKSB7XG4gICAgICAgICAgICByZXR1cm4gbSAqICh0IC09IDEuNSAvIGQpICogdCArIDAuNzU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHQgPCAyLjUgLyBkKSB7XG4gICAgICAgICAgICByZXR1cm4gbSAqICh0IC09IDIuMjUgLyBkKSAqIHQgKyAwLjkzNzU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0gKiAodCAtPSAyLjYyNSAvIGQpICogdCArIDAuOTg0Mzc1O1xuICAgIH0sXG4gICAgZWFzZUluT3V0Qm91bmNlOiAodCk9PnQgPCAwLjUgPyBlZmZlY3RzLmVhc2VJbkJvdW5jZSh0ICogMikgKiAwLjUgOiBlZmZlY3RzLmVhc2VPdXRCb3VuY2UodCAqIDIgLSAxKSAqIDAuNSArIDAuNVxufTtcblxuZnVuY3Rpb24gaXNQYXR0ZXJuT3JHcmFkaWVudCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ1tvYmplY3QgQ2FudmFzUGF0dGVybl0nIHx8IHR5cGUgPT09ICdbb2JqZWN0IENhbnZhc0dyYWRpZW50XSc7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbG9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpID8gdmFsdWUgOiBuZXcgQ29sb3IodmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0SG92ZXJDb2xvcih2YWx1ZSkge1xuICAgIHJldHVybiBpc1BhdHRlcm5PckdyYWRpZW50KHZhbHVlKSA/IHZhbHVlIDogbmV3IENvbG9yKHZhbHVlKS5zYXR1cmF0ZSgwLjUpLmRhcmtlbigwLjEpLmhleFN0cmluZygpO1xufVxuXG5jb25zdCBudW1iZXJzID0gW1xuICAgICd4JyxcbiAgICAneScsXG4gICAgJ2JvcmRlcldpZHRoJyxcbiAgICAncmFkaXVzJyxcbiAgICAndGVuc2lvbidcbl07XG5jb25zdCBjb2xvcnMgPSBbXG4gICAgJ2NvbG9yJyxcbiAgICAnYm9yZGVyQ29sb3InLFxuICAgICdiYWNrZ3JvdW5kQ29sb3InXG5dO1xuZnVuY3Rpb24gYXBwbHlBbmltYXRpb25zRGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBkZWZhdWx0cy5zZXQoJ2FuaW1hdGlvbicsIHtcbiAgICAgICAgZGVsYXk6IHVuZGVmaW5lZCxcbiAgICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICAgIGVhc2luZzogJ2Vhc2VPdXRRdWFydCcsXG4gICAgICAgIGZuOiB1bmRlZmluZWQsXG4gICAgICAgIGZyb206IHVuZGVmaW5lZCxcbiAgICAgICAgbG9vcDogdW5kZWZpbmVkLFxuICAgICAgICB0bzogdW5kZWZpbmVkLFxuICAgICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnYW5pbWF0aW9uJywge1xuICAgICAgICBfZmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICBfaW5kZXhhYmxlOiBmYWxzZSxcbiAgICAgICAgX3NjcmlwdGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ29uUHJvZ3Jlc3MnICYmIG5hbWUgIT09ICdvbkNvbXBsZXRlJyAmJiBuYW1lICE9PSAnZm4nXG4gICAgfSk7XG4gICAgZGVmYXVsdHMuc2V0KCdhbmltYXRpb25zJywge1xuICAgICAgICBjb2xvcnM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdjb2xvcicsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBjb2xvcnNcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBudW1iZXJzXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZhdWx0cy5kZXNjcmliZSgnYW5pbWF0aW9ucycsIHtcbiAgICAgICAgX2ZhbGxiYWNrOiAnYW5pbWF0aW9uJ1xuICAgIH0pO1xuICAgIGRlZmF1bHRzLnNldCgndHJhbnNpdGlvbnMnLCB7XG4gICAgICAgIGFjdGl2ZToge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDQwMFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXNpemU6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBjb2xvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3RyYW5zcGFyZW50J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdmlzaWJsZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoaWRlOiB7XG4gICAgICAgICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgICAgICAgICAgY29sb3JzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvOiAndHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiAnbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgZm46ICh2KT0+diB8IDBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwbHlMYXlvdXRzRGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBkZWZhdWx0cy5zZXQoJ2xheW91dCcsIHtcbiAgICAgICAgYXV0b1BhZGRpbmc6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgbGVmdDogMFxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IGludGxDYWNoZSA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldE51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBjYWNoZUtleSA9IGxvY2FsZSArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICAgIGxldCBmb3JtYXR0ZXIgPSBpbnRsQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgICBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcbiAgICAgICAgaW50bENhY2hlLnNldChjYWNoZUtleSwgZm9ybWF0dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlcjtcbn1cbmZ1bmN0aW9uIGZvcm1hdE51bWJlcihudW0sIGxvY2FsZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBnZXROdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQobnVtKTtcbn1cblxuY29uc3QgZm9ybWF0dGVycyA9IHtcbiB2YWx1ZXMgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/ICB2YWx1ZSA6ICcnICsgdmFsdWU7XG4gICAgfSxcbiBudW1lcmljICh0aWNrVmFsdWUsIGluZGV4LCB0aWNrcykge1xuICAgICAgICBpZiAodGlja1ZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGU7XG4gICAgICAgIGxldCBub3RhdGlvbjtcbiAgICAgICAgbGV0IGRlbHRhID0gdGlja1ZhbHVlO1xuICAgICAgICBpZiAodGlja3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgbWF4VGljayA9IE1hdGgubWF4KE1hdGguYWJzKHRpY2tzWzBdLnZhbHVlKSwgTWF0aC5hYnModGlja3NbdGlja3MubGVuZ3RoIC0gMV0udmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChtYXhUaWNrIDwgMWUtNCB8fCBtYXhUaWNrID4gMWUrMTUpIHtcbiAgICAgICAgICAgICAgICBub3RhdGlvbiA9ICdzY2llbnRpZmljJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbHRhID0gY2FsY3VsYXRlRGVsdGEodGlja1ZhbHVlLCB0aWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9nRGVsdGEgPSBsb2cxMChNYXRoLmFicyhkZWx0YSkpO1xuICAgICAgICBjb25zdCBudW1EZWNpbWFsID0gaXNOYU4obG9nRGVsdGEpID8gMSA6IE1hdGgubWF4KE1hdGgubWluKC0xICogTWF0aC5mbG9vcihsb2dEZWx0YSksIDIwKSwgMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBub3RhdGlvbixcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbnVtRGVjaW1hbCxcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbnVtRGVjaW1hbFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpO1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHRpY2tWYWx1ZSwgbG9jYWxlLCBvcHRpb25zKTtcbiAgICB9LFxuIGxvZ2FyaXRobWljICh0aWNrVmFsdWUsIGluZGV4LCB0aWNrcykge1xuICAgICAgICBpZiAodGlja1ZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbWFpbiA9IHRpY2tzW2luZGV4XS5zaWduaWZpY2FuZCB8fCB0aWNrVmFsdWUgLyBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihsb2cxMCh0aWNrVmFsdWUpKSk7XG4gICAgICAgIGlmIChbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIDMsXG4gICAgICAgICAgICA1LFxuICAgICAgICAgICAgMTAsXG4gICAgICAgICAgICAxNVxuICAgICAgICBdLmluY2x1ZGVzKHJlbWFpbikgfHwgaW5kZXggPiAwLjggKiB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXJzLm51bWVyaWMuY2FsbCh0aGlzLCB0aWNrVmFsdWUsIGluZGV4LCB0aWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn07XG5mdW5jdGlvbiBjYWxjdWxhdGVEZWx0YSh0aWNrVmFsdWUsIHRpY2tzKSB7XG4gICAgbGV0IGRlbHRhID0gdGlja3MubGVuZ3RoID4gMyA/IHRpY2tzWzJdLnZhbHVlIC0gdGlja3NbMV0udmFsdWUgOiB0aWNrc1sxXS52YWx1ZSAtIHRpY2tzWzBdLnZhbHVlO1xuICAgIGlmIChNYXRoLmFicyhkZWx0YSkgPj0gMSAmJiB0aWNrVmFsdWUgIT09IE1hdGguZmxvb3IodGlja1ZhbHVlKSkge1xuICAgICAgICBkZWx0YSA9IHRpY2tWYWx1ZSAtIE1hdGguZmxvb3IodGlja1ZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbHRhO1xufVxuIHZhciBUaWNrcyA9IHtcbiAgICBmb3JtYXR0ZXJzXG59O1xuXG5mdW5jdGlvbiBhcHBseVNjYWxlRGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBkZWZhdWx0cy5zZXQoJ3NjYWxlJywge1xuICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICByZXZlcnNlOiBmYWxzZSxcbiAgICAgICAgYmVnaW5BdFplcm86IGZhbHNlLFxuIGJvdW5kczogJ3RpY2tzJyxcbiAgICAgICAgY2xpcDogdHJ1ZSxcbiBncmFjZTogMCxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICAgIGRyYXdPbkNoYXJ0QXJlYTogdHJ1ZSxcbiAgICAgICAgICAgIGRyYXdUaWNrczogdHJ1ZSxcbiAgICAgICAgICAgIHRpY2tMZW5ndGg6IDgsXG4gICAgICAgICAgICB0aWNrV2lkdGg6IChfY3R4LCBvcHRpb25zKT0+b3B0aW9ucy5saW5lV2lkdGgsXG4gICAgICAgICAgICB0aWNrQ29sb3I6IChfY3R4LCBvcHRpb25zKT0+b3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIG9mZnNldDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgZGFzaDogW10sXG4gICAgICAgICAgICBkYXNoT2Zmc2V0OiAwLjAsXG4gICAgICAgICAgICB3aWR0aDogMVxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICB0b3A6IDQsXG4gICAgICAgICAgICAgICAgYm90dG9tOiA0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBtaW5Sb3RhdGlvbjogMCxcbiAgICAgICAgICAgIG1heFJvdGF0aW9uOiA1MCxcbiAgICAgICAgICAgIG1pcnJvcjogZmFsc2UsXG4gICAgICAgICAgICB0ZXh0U3Ryb2tlV2lkdGg6IDAsXG4gICAgICAgICAgICB0ZXh0U3Ryb2tlQ29sb3I6ICcnLFxuICAgICAgICAgICAgcGFkZGluZzogMyxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBhdXRvU2tpcDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Ta2lwUGFkZGluZzogMyxcbiAgICAgICAgICAgIGxhYmVsT2Zmc2V0OiAwLFxuICAgICAgICAgICAgY2FsbGJhY2s6IFRpY2tzLmZvcm1hdHRlcnMudmFsdWVzLFxuICAgICAgICAgICAgbWlub3I6IHt9LFxuICAgICAgICAgICAgbWFqb3I6IHt9LFxuICAgICAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgY3Jvc3NBbGlnbjogJ25lYXInLFxuICAgICAgICAgICAgc2hvd0xhYmVsQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgYmFja2Ryb3BDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSknLFxuICAgICAgICAgICAgYmFja2Ryb3BQYWRkaW5nOiAyXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUudGlja3MnLCAnY29sb3InLCAnJywgJ2NvbG9yJyk7XG4gICAgZGVmYXVsdHMucm91dGUoJ3NjYWxlLmdyaWQnLCAnY29sb3InLCAnJywgJ2JvcmRlckNvbG9yJyk7XG4gICAgZGVmYXVsdHMucm91dGUoJ3NjYWxlLmJvcmRlcicsICdjb2xvcicsICcnLCAnYm9yZGVyQ29sb3InKTtcbiAgICBkZWZhdWx0cy5yb3V0ZSgnc2NhbGUudGl0bGUnLCAnY29sb3InLCAnJywgJ2NvbG9yJyk7XG4gICAgZGVmYXVsdHMuZGVzY3JpYmUoJ3NjYWxlJywge1xuICAgICAgICBfZmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT4hbmFtZS5zdGFydHNXaXRoKCdiZWZvcmUnKSAmJiAhbmFtZS5zdGFydHNXaXRoKCdhZnRlcicpICYmIG5hbWUgIT09ICdjYWxsYmFjaycgJiYgbmFtZSAhPT0gJ3BhcnNlcicsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JvcmRlckRhc2gnICYmIG5hbWUgIT09ICd0aWNrQm9yZGVyRGFzaCcgJiYgbmFtZSAhPT0gJ2Rhc2gnXG4gICAgfSk7XG4gICAgZGVmYXVsdHMuZGVzY3JpYmUoJ3NjYWxlcycsIHtcbiAgICAgICAgX2ZhbGxiYWNrOiAnc2NhbGUnXG4gICAgfSk7XG4gICAgZGVmYXVsdHMuZGVzY3JpYmUoJ3NjYWxlLnRpY2tzJywge1xuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYmFja2Ryb3BQYWRkaW5nJyAmJiBuYW1lICE9PSAnY2FsbGJhY2snLFxuICAgICAgICBfaW5kZXhhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdiYWNrZHJvcFBhZGRpbmcnXG4gICAgfSk7XG59XG5cbmNvbnN0IG92ZXJyaWRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5jb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gZnVuY3Rpb24gZ2V0U2NvcGUkMShub2RlLCBrZXkpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnLicpO1xuICAgIGZvcihsZXQgaSA9IDAsIG4gPSBrZXlzLmxlbmd0aDsgaSA8IG47ICsraSl7XG4gICAgICAgIGNvbnN0IGsgPSBrZXlzW2ldO1xuICAgICAgICBub2RlID0gbm9kZVtrXSB8fCAobm9kZVtrXSA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIHNldChyb290LCBzY29wZSwgdmFsdWVzKSB7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKGdldFNjb3BlJDEocm9vdCwgc2NvcGUpLCB2YWx1ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2UoZ2V0U2NvcGUkMShyb290LCAnJyksIHNjb3BlKTtcbn1cbiBjbGFzcyBEZWZhdWx0cyB7XG4gICAgY29uc3RydWN0b3IoX2Rlc2NyaXB0b3JzLCBfYXBwbGllcnMpe1xuICAgICAgICB0aGlzLmFuaW1hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgwLDAsMCwwLjEpJztcbiAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9ICdyZ2JhKDAsMCwwLDAuMSknO1xuICAgICAgICB0aGlzLmNvbG9yID0gJyM2NjYnO1xuICAgICAgICB0aGlzLmRhdGFzZXRzID0ge307XG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IChjb250ZXh0KT0+Y29udGV4dC5jaGFydC5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXG4gICAgICAgICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgICAgICAgICdtb3VzZW91dCcsXG4gICAgICAgICAgICAnY2xpY2snLFxuICAgICAgICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgICAgICAgJ3RvdWNobW92ZSdcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICAgICAgZmFtaWx5OiBcIidIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICBzaXplOiAxMixcbiAgICAgICAgICAgIHN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgICAgICAgIHdlaWdodDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvdmVyID0ge307XG4gICAgICAgIHRoaXMuaG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSAoY3R4LCBvcHRpb25zKT0+Z2V0SG92ZXJDb2xvcihvcHRpb25zLmJhY2tncm91bmRDb2xvcik7XG4gICAgICAgIHRoaXMuaG92ZXJCb3JkZXJDb2xvciA9IChjdHgsIG9wdGlvbnMpPT5nZXRIb3ZlckNvbG9yKG9wdGlvbnMuYm9yZGVyQ29sb3IpO1xuICAgICAgICB0aGlzLmhvdmVyQ29sb3IgPSAoY3R4LCBvcHRpb25zKT0+Z2V0SG92ZXJDb2xvcihvcHRpb25zLmNvbG9yKTtcbiAgICAgICAgdGhpcy5pbmRleEF4aXMgPSAneCc7XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb24gPSB7XG4gICAgICAgICAgICBtb2RlOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbnRlcnNlY3Q6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlSW52aXNpYmxlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1haW50YWluQXNwZWN0UmF0aW8gPSB0cnVlO1xuICAgICAgICB0aGlzLm9uSG92ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLm9uQ2xpY2sgPSBudWxsO1xuICAgICAgICB0aGlzLnBhcnNpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnBsdWdpbnMgPSB7fTtcbiAgICAgICAgdGhpcy5yZXNwb25zaXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5zaG93TGluZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlc2NyaWJlKF9kZXNjcmlwdG9ycyk7XG4gICAgICAgIHRoaXMuYXBwbHkoX2FwcGxpZXJzKTtcbiAgICB9XG4gc2V0KHNjb3BlLCB2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIHNldCh0aGlzLCBzY29wZSwgdmFsdWVzKTtcbiAgICB9XG4gZ2V0KHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBnZXRTY29wZSQxKHRoaXMsIHNjb3BlKTtcbiAgICB9XG4gZGVzY3JpYmUoc2NvcGUsIHZhbHVlcykge1xuICAgICAgICByZXR1cm4gc2V0KGRlc2NyaXB0b3JzLCBzY29wZSwgdmFsdWVzKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUoc2NvcGUsIHZhbHVlcykge1xuICAgICAgICByZXR1cm4gc2V0KG92ZXJyaWRlcywgc2NvcGUsIHZhbHVlcyk7XG4gICAgfVxuIHJvdXRlKHNjb3BlLCBuYW1lLCB0YXJnZXRTY29wZSwgdGFyZ2V0TmFtZSkge1xuICAgICAgICBjb25zdCBzY29wZU9iamVjdCA9IGdldFNjb3BlJDEodGhpcywgc2NvcGUpO1xuICAgICAgICBjb25zdCB0YXJnZXRTY29wZU9iamVjdCA9IGdldFNjb3BlJDEodGhpcywgdGFyZ2V0U2NvcGUpO1xuICAgICAgICBjb25zdCBwcml2YXRlTmFtZSA9ICdfJyArIG5hbWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNjb3BlT2JqZWN0LCB7XG4gICAgICAgICAgICBbcHJpdmF0ZU5hbWVdOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHNjb3BlT2JqZWN0W25hbWVdLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXNbcHJpdmF0ZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRTY29wZU9iamVjdFt0YXJnZXROYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGxvY2FsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRhcmdldCwgbG9jYWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZU9yRGVmYXVsdChsb2NhbCwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1twcml2YXRlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhcHBseShhcHBsaWVycykge1xuICAgICAgICBhcHBsaWVycy5mb3JFYWNoKChhcHBseSk9PmFwcGx5KHRoaXMpKTtcbiAgICB9XG59XG52YXIgZGVmYXVsdHMgPSAvKiAjX19QVVJFX18gKi8gbmV3IERlZmF1bHRzKHtcbiAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT4hbmFtZS5zdGFydHNXaXRoKCdvbicpLFxuICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2V2ZW50cycsXG4gICAgaG92ZXI6IHtcbiAgICAgICAgX2ZhbGxiYWNrOiAnaW50ZXJhY3Rpb24nXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvbjoge1xuICAgICAgICBfc2NyaXB0YWJsZTogZmFsc2UsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufSwgW1xuICAgIGFwcGx5QW5pbWF0aW9uc0RlZmF1bHRzLFxuICAgIGFwcGx5TGF5b3V0c0RlZmF1bHRzLFxuICAgIGFwcGx5U2NhbGVEZWZhdWx0c1xuXSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIGZvbnQgb2JqZWN0IGludG8gYSBDU1MgZm9udCBzdHJpbmcuXG4gKiBAcGFyYW0gZm9udCAtIEEgZm9udCBvYmplY3QuXG4gKiBAcmV0dXJuIFRoZSBDU1MgZm9udCBzdHJpbmcuIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udFxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiB0b0ZvbnRTdHJpbmcoZm9udCkge1xuICAgIGlmICghZm9udCB8fCBpc051bGxPclVuZGVmKGZvbnQuc2l6ZSkgfHwgaXNOdWxsT3JVbmRlZihmb250LmZhbWlseSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoZm9udC5zdHlsZSA/IGZvbnQuc3R5bGUgKyAnICcgOiAnJykgKyAoZm9udC53ZWlnaHQgPyBmb250LndlaWdodCArICcgJyA6ICcnKSArIGZvbnQuc2l6ZSArICdweCAnICsgZm9udC5mYW1pbHk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX21lYXN1cmVUZXh0KGN0eCwgZGF0YSwgZ2MsIGxvbmdlc3QsIHN0cmluZykge1xuICAgIGxldCB0ZXh0V2lkdGggPSBkYXRhW3N0cmluZ107XG4gICAgaWYgKCF0ZXh0V2lkdGgpIHtcbiAgICAgICAgdGV4dFdpZHRoID0gZGF0YVtzdHJpbmddID0gY3R4Lm1lYXN1cmVUZXh0KHN0cmluZykud2lkdGg7XG4gICAgICAgIGdjLnB1c2goc3RyaW5nKTtcbiAgICB9XG4gICAgaWYgKHRleHRXaWR0aCA+IGxvbmdlc3QpIHtcbiAgICAgICAgbG9uZ2VzdCA9IHRleHRXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIGxvbmdlc3Q7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIF9sb25nZXN0VGV4dChjdHgsIGZvbnQsIGFycmF5T2ZUaGluZ3MsIGNhY2hlKSB7XG4gICAgY2FjaGUgPSBjYWNoZSB8fCB7fTtcbiAgICBsZXQgZGF0YSA9IGNhY2hlLmRhdGEgPSBjYWNoZS5kYXRhIHx8IHt9O1xuICAgIGxldCBnYyA9IGNhY2hlLmdhcmJhZ2VDb2xsZWN0ID0gY2FjaGUuZ2FyYmFnZUNvbGxlY3QgfHwgW107XG4gICAgaWYgKGNhY2hlLmZvbnQgIT09IGZvbnQpIHtcbiAgICAgICAgZGF0YSA9IGNhY2hlLmRhdGEgPSB7fTtcbiAgICAgICAgZ2MgPSBjYWNoZS5nYXJiYWdlQ29sbGVjdCA9IFtdO1xuICAgICAgICBjYWNoZS5mb250ID0gZm9udDtcbiAgICB9XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHguZm9udCA9IGZvbnQ7XG4gICAgbGV0IGxvbmdlc3QgPSAwO1xuICAgIGNvbnN0IGlsZW4gPSBhcnJheU9mVGhpbmdzLmxlbmd0aDtcbiAgICBsZXQgaSwgaiwgamxlbiwgdGhpbmcsIG5lc3RlZFRoaW5nO1xuICAgIGZvcihpID0gMDsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgIHRoaW5nID0gYXJyYXlPZlRoaW5nc1tpXTtcbiAgICAgICAgLy8gVW5kZWZpbmVkIHN0cmluZ3MgYW5kIGFycmF5cyBzaG91bGQgbm90IGJlIG1lYXN1cmVkXG4gICAgICAgIGlmICh0aGluZyAhPT0gdW5kZWZpbmVkICYmIHRoaW5nICE9PSBudWxsICYmICFpc0FycmF5KHRoaW5nKSkge1xuICAgICAgICAgICAgbG9uZ2VzdCA9IF9tZWFzdXJlVGV4dChjdHgsIGRhdGEsIGdjLCBsb25nZXN0LCB0aGluZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0aGluZykpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0IGlzIGFuIGFycmF5IGxldHMgbWVhc3VyZSBlYWNoIGVsZW1lbnRcbiAgICAgICAgICAgIC8vIHRvIGRvIG1heWJlIHNpbXBsaWZ5IHRoaXMgZnVuY3Rpb24gYSBiaXQgc28gd2UgY2FuIGRvIHRoaXMgbW9yZSByZWN1cnNpdmVseT9cbiAgICAgICAgICAgIGZvcihqID0gMCwgamxlbiA9IHRoaW5nLmxlbmd0aDsgaiA8IGpsZW47IGorKyl7XG4gICAgICAgICAgICAgICAgbmVzdGVkVGhpbmcgPSB0aGluZ1tqXTtcbiAgICAgICAgICAgICAgICAvLyBVbmRlZmluZWQgc3RyaW5ncyBhbmQgYXJyYXlzIHNob3VsZCBub3QgYmUgbWVhc3VyZWRcbiAgICAgICAgICAgICAgICBpZiAobmVzdGVkVGhpbmcgIT09IHVuZGVmaW5lZCAmJiBuZXN0ZWRUaGluZyAhPT0gbnVsbCAmJiAhaXNBcnJheShuZXN0ZWRUaGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9uZ2VzdCA9IF9tZWFzdXJlVGV4dChjdHgsIGRhdGEsIGdjLCBsb25nZXN0LCBuZXN0ZWRUaGluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgY29uc3QgZ2NMZW4gPSBnYy5sZW5ndGggLyAyO1xuICAgIGlmIChnY0xlbiA+IGFycmF5T2ZUaGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGdjTGVuOyBpKyspe1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFbZ2NbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGdjLnNwbGljZSgwLCBnY0xlbik7XG4gICAgfVxuICAgIHJldHVybiBsb25nZXN0O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbGlnbmVkIHBpeGVsIHZhbHVlIHRvIGF2b2lkIGFudGktYWxpYXNpbmcgYmx1clxuICogQHBhcmFtIGNoYXJ0IC0gVGhlIGNoYXJ0IGluc3RhbmNlLlxuICogQHBhcmFtIHBpeGVsIC0gQSBwaXhlbCB2YWx1ZS5cbiAqIEBwYXJhbSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBhbGlnbmVkIHBpeGVsIHZhbHVlLlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYWxpZ25QaXhlbChjaGFydCwgcGl4ZWwsIHdpZHRoKSB7XG4gICAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvO1xuICAgIGNvbnN0IGhhbGZXaWR0aCA9IHdpZHRoICE9PSAwID8gTWF0aC5tYXgod2lkdGggLyAyLCAwLjUpIDogMDtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgocGl4ZWwgLSBoYWxmV2lkdGgpICogZGV2aWNlUGl4ZWxSYXRpbykgLyBkZXZpY2VQaXhlbFJhdGlvICsgaGFsZldpZHRoO1xufVxuLyoqXG4gKiBDbGVhcnMgdGhlIGVudGlyZSBjYW52YXMuXG4gKi8gZnVuY3Rpb24gY2xlYXJDYW52YXMoY2FudmFzLCBjdHgpIHtcbiAgICBpZiAoIWN0eCAmJiAhY2FudmFzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4ID0gY3R4IHx8IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gY2FudmFzLndpZHRoIGFuZCBjYW52YXMuaGVpZ2h0IGRvIG5vdCBjb25zaWRlciB0aGUgY2FudmFzIHRyYW5zZm9ybSxcbiAgICAvLyB3aGlsZSBjbGVhclJlY3QgZG9lc1xuICAgIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICBjdHgucmVzdG9yZSgpO1xufVxuZnVuY3Rpb24gZHJhd1BvaW50KGN0eCwgb3B0aW9ucywgeCwgeSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBkcmF3UG9pbnRMZWdlbmQoY3R4LCBvcHRpb25zLCB4LCB5LCBudWxsKTtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBkcmF3UG9pbnRMZWdlbmQoY3R4LCBvcHRpb25zLCB4LCB5LCB3KSB7XG4gICAgbGV0IHR5cGUsIHhPZmZzZXQsIHlPZmZzZXQsIHNpemUsIGNvcm5lclJhZGl1cywgd2lkdGgsIHhPZmZzZXRXLCB5T2Zmc2V0VztcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMucG9pbnRTdHlsZTtcbiAgICBjb25zdCByb3RhdGlvbiA9IG9wdGlvbnMucm90YXRpb247XG4gICAgY29uc3QgcmFkaXVzID0gb3B0aW9ucy5yYWRpdXM7XG4gICAgbGV0IHJhZCA9IChyb3RhdGlvbiB8fCAwKSAqIFJBRF9QRVJfREVHO1xuICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHR5cGUgPSBzdHlsZS50b1N0cmluZygpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgSFRNTEltYWdlRWxlbWVudF0nIHx8IHR5cGUgPT09ICdbb2JqZWN0IEhUTUxDYW52YXNFbGVtZW50XScpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICAgICAgY3R4LnJvdGF0ZShyYWQpO1xuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShzdHlsZSwgLXN0eWxlLndpZHRoIC8gMiwgLXN0eWxlLmhlaWdodCAvIDIsIHN0eWxlLndpZHRoLCBzdHlsZS5oZWlnaHQpO1xuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNOYU4ocmFkaXVzKSB8fCByYWRpdXMgPD0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBzd2l0Y2goc3R5bGUpe1xuICAgICAgICAvLyBEZWZhdWx0IGluY2x1ZGVzIGNpcmNsZVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKHcpIHtcbiAgICAgICAgICAgICAgICBjdHguZWxsaXBzZSh4LCB5LCB3IC8gMiwgcmFkaXVzLCAwLCAwLCBUQVUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgMCwgVEFVKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0cmlhbmdsZSc6XG4gICAgICAgICAgICB3aWR0aCA9IHcgPyB3IC8gMiA6IHJhZGl1cztcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCArIE1hdGguc2luKHJhZCkgKiB3aWR0aCwgeSAtIE1hdGguY29zKHJhZCkgKiByYWRpdXMpO1xuICAgICAgICAgICAgcmFkICs9IFRXT19USElSRFNfUEk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBNYXRoLnNpbihyYWQpICogd2lkdGgsIHkgLSBNYXRoLmNvcyhyYWQpICogcmFkaXVzKTtcbiAgICAgICAgICAgIHJhZCArPSBUV09fVEhJUkRTX1BJO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgTWF0aC5zaW4ocmFkKSAqIHdpZHRoLCB5IC0gTWF0aC5jb3MocmFkKSAqIHJhZGl1cyk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVjdFJvdW5kZWQnOlxuICAgICAgICAgICAgLy8gTk9URTogdGhlIHJvdW5kZWQgcmVjdCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIHRvIHVzZSBgYXJjYCBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAvLyBgcXVhZHJhdGljQ3VydmVUb2Agc2luY2UgaXQgZ2VuZXJhdGVzIGJldHRlciByZXN1bHRzIHdoZW4gcmVjdCBpc1xuICAgICAgICAgICAgLy8gYWxtb3N0IGEgY2lyY2xlLiAwLjUxNiAoaW5zdGVhZCBvZiAwLjUpIHByb2R1Y2VzIHJlc3VsdHMgd2l0aCB2aXN1YWxseVxuICAgICAgICAgICAgLy8gY2xvc2VyIHByb3BvcnRpb24gdG8gdGhlIHByZXZpb3VzIGltcGwgYW5kIGl0IGlzIGluc2NyaWJlZCBpbiB0aGVcbiAgICAgICAgICAgIC8vIGNpcmNsZSB3aXRoIGByYWRpdXNgLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIGZvbGxvd2luZyBQUnM6XG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhcnRqcy9DaGFydC5qcy9pc3N1ZXMvNTU5N1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzU4NThcbiAgICAgICAgICAgIGNvcm5lclJhZGl1cyA9IHJhZGl1cyAqIDAuNTE2O1xuICAgICAgICAgICAgc2l6ZSA9IHJhZGl1cyAtIGNvcm5lclJhZGl1cztcbiAgICAgICAgICAgIHhPZmZzZXQgPSBNYXRoLmNvcyhyYWQgKyBRVUFSVEVSX1BJKSAqIHNpemU7XG4gICAgICAgICAgICB4T2Zmc2V0VyA9IE1hdGguY29zKHJhZCArIFFVQVJURVJfUEkpICogKHcgPyB3IC8gMiAtIGNvcm5lclJhZGl1cyA6IHNpemUpO1xuICAgICAgICAgICAgeU9mZnNldCA9IE1hdGguc2luKHJhZCArIFFVQVJURVJfUEkpICogc2l6ZTtcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkICsgUVVBUlRFUl9QSSkgKiAodyA/IHcgLyAyIC0gY29ybmVyUmFkaXVzIDogc2l6ZSk7XG4gICAgICAgICAgICBjdHguYXJjKHggLSB4T2Zmc2V0VywgeSAtIHlPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkIC0gUEksIHJhZCAtIEhBTEZfUEkpO1xuICAgICAgICAgICAgY3R4LmFyYyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0LCBjb3JuZXJSYWRpdXMsIHJhZCAtIEhBTEZfUEksIHJhZCk7XG4gICAgICAgICAgICBjdHguYXJjKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQsIGNvcm5lclJhZGl1cywgcmFkLCByYWQgKyBIQUxGX1BJKTtcbiAgICAgICAgICAgIGN0eC5hcmMoeCAtIHlPZmZzZXRXLCB5ICsgeE9mZnNldCwgY29ybmVyUmFkaXVzLCByYWQgKyBIQUxGX1BJLCByYWQgKyBQSSk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVjdCc6XG4gICAgICAgICAgICBpZiAoIXJvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2l6ZSA9IE1hdGguU1FSVDFfMiAqIHJhZGl1cztcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHcgPyB3IC8gMiA6IHNpemU7XG4gICAgICAgICAgICAgICAgY3R4LnJlY3QoeCAtIHdpZHRoLCB5IC0gc2l6ZSwgMiAqIHdpZHRoLCAyICogc2l6ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYWQgKz0gUVVBUlRFUl9QSTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLyBjYXNlICdyZWN0Um90JzpcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHlPZmZzZXRXLCB5IC0geE9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjcm9zc1JvdCc6XG4gICAgICAgICAgICByYWQgKz0gUVVBUlRFUl9QSTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLyBjYXNlICdjcm9zcyc6XG4gICAgICAgICAgICB4T2Zmc2V0VyA9IE1hdGguY29zKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgICAgICAgIHhPZmZzZXQgPSBNYXRoLmNvcyhyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldCA9IE1hdGguc2luKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0VyA9IE1hdGguc2luKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIHlPZmZzZXRXLCB5ICsgeE9mZnNldCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3Rhcic6XG4gICAgICAgICAgICB4T2Zmc2V0VyA9IE1hdGguY29zKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgICAgICAgIHhPZmZzZXQgPSBNYXRoLmNvcyhyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldCA9IE1hdGguc2luKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0VyA9IE1hdGguc2luKHJhZCkgKiAodyA/IHcgLyAyIDogcmFkaXVzKTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHhPZmZzZXRXLCB5IC0geU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0VywgeSArIHlPZmZzZXQpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4ICsgeU9mZnNldFcsIHkgLSB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIHlPZmZzZXRXLCB5ICsgeE9mZnNldCk7XG4gICAgICAgICAgICByYWQgKz0gUVVBUlRFUl9QSTtcbiAgICAgICAgICAgIHhPZmZzZXRXID0gTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgeE9mZnNldCA9IE1hdGguY29zKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICB5T2Zmc2V0ID0gTWF0aC5zaW4ocmFkKSAqIHJhZGl1cztcbiAgICAgICAgICAgIHlPZmZzZXRXID0gTWF0aC5zaW4ocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4IC0geE9mZnNldFcsIHkgLSB5T2Zmc2V0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhPZmZzZXRXLCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggKyB5T2Zmc2V0VywgeSAtIHhPZmZzZXQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4IC0geU9mZnNldFcsIHkgKyB4T2Zmc2V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICAgIHhPZmZzZXQgPSB3ID8gdyAvIDIgOiBNYXRoLmNvcyhyYWQpICogcmFkaXVzO1xuICAgICAgICAgICAgeU9mZnNldCA9IE1hdGguc2luKHJhZCkgKiByYWRpdXM7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHggLSB4T2Zmc2V0LCB5IC0geU9mZnNldCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyB4T2Zmc2V0LCB5ICsgeU9mZnNldCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGFzaCc6XG4gICAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgTWF0aC5jb3MocmFkKSAqICh3ID8gdyAvIDIgOiByYWRpdXMpLCB5ICsgTWF0aC5zaW4ocmFkKSAqIHJhZGl1cyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBmYWxzZTpcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdHguZmlsbCgpO1xuICAgIGlmIChvcHRpb25zLmJvcmRlcldpZHRoID4gMCkge1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfVxufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50IGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gcG9pbnQgLSBUaGUgcG9pbnQgdG8gdGVzdFxuICogQHBhcmFtIGFyZWEgLSBUaGUgcmVjdGFuZ2xlXG4gKiBAcGFyYW0gbWFyZ2luIC0gYWxsb3dlZCBtYXJnaW5cbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2lzUG9pbnRJbkFyZWEocG9pbnQsIGFyZWEsIG1hcmdpbikge1xuICAgIG1hcmdpbiA9IG1hcmdpbiB8fCAwLjU7IC8vIG1hcmdpbiAtIGRlZmF1bHQgaXMgdG8gbWF0Y2ggcm91bmRlZCBkZWNpbWFsc1xuICAgIHJldHVybiAhYXJlYSB8fCBwb2ludCAmJiBwb2ludC54ID4gYXJlYS5sZWZ0IC0gbWFyZ2luICYmIHBvaW50LnggPCBhcmVhLnJpZ2h0ICsgbWFyZ2luICYmIHBvaW50LnkgPiBhcmVhLnRvcCAtIG1hcmdpbiAmJiBwb2ludC55IDwgYXJlYS5ib3R0b20gKyBtYXJnaW47XG59XG5mdW5jdGlvbiBjbGlwQXJlYShjdHgsIGFyZWEpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgucmVjdChhcmVhLmxlZnQsIGFyZWEudG9wLCBhcmVhLnJpZ2h0IC0gYXJlYS5sZWZ0LCBhcmVhLmJvdHRvbSAtIGFyZWEudG9wKTtcbiAgICBjdHguY2xpcCgpO1xufVxuZnVuY3Rpb24gdW5jbGlwQXJlYShjdHgpIHtcbiAgICBjdHgucmVzdG9yZSgpO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9zdGVwcGVkTGluZVRvKGN0eCwgcHJldmlvdXMsIHRhcmdldCwgZmxpcCwgbW9kZSkge1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICdtaWRkbGUnKSB7XG4gICAgICAgIGNvbnN0IG1pZHBvaW50ID0gKHByZXZpb3VzLnggKyB0YXJnZXQueCkgLyAyLjA7XG4gICAgICAgIGN0eC5saW5lVG8obWlkcG9pbnQsIHByZXZpb3VzLnkpO1xuICAgICAgICBjdHgubGluZVRvKG1pZHBvaW50LCB0YXJnZXQueSk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSAnYWZ0ZXInICE9PSAhIWZsaXApIHtcbiAgICAgICAgY3R4LmxpbmVUbyhwcmV2aW91cy54LCB0YXJnZXQueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxpbmVUbyh0YXJnZXQueCwgcHJldmlvdXMueSk7XG4gICAgfVxuICAgIGN0eC5saW5lVG8odGFyZ2V0LngsIHRhcmdldC55KTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfYmV6aWVyQ3VydmVUbyhjdHgsIHByZXZpb3VzLCB0YXJnZXQsIGZsaXApIHtcbiAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICAgIHJldHVybiBjdHgubGluZVRvKHRhcmdldC54LCB0YXJnZXQueSk7XG4gICAgfVxuICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGZsaXAgPyBwcmV2aW91cy5jcDF4IDogcHJldmlvdXMuY3AyeCwgZmxpcCA/IHByZXZpb3VzLmNwMXkgOiBwcmV2aW91cy5jcDJ5LCBmbGlwID8gdGFyZ2V0LmNwMnggOiB0YXJnZXQuY3AxeCwgZmxpcCA/IHRhcmdldC5jcDJ5IDogdGFyZ2V0LmNwMXksIHRhcmdldC54LCB0YXJnZXQueSk7XG59XG5mdW5jdGlvbiBzZXRSZW5kZXJPcHRzKGN0eCwgb3B0cykge1xuICAgIGlmIChvcHRzLnRyYW5zbGF0aW9uKSB7XG4gICAgICAgIGN0eC50cmFuc2xhdGUob3B0cy50cmFuc2xhdGlvblswXSwgb3B0cy50cmFuc2xhdGlvblsxXSk7XG4gICAgfVxuICAgIGlmICghaXNOdWxsT3JVbmRlZihvcHRzLnJvdGF0aW9uKSkge1xuICAgICAgICBjdHgucm90YXRlKG9wdHMucm90YXRpb24pO1xuICAgIH1cbiAgICBpZiAob3B0cy5jb2xvcikge1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0cy5jb2xvcjtcbiAgICB9XG4gICAgaWYgKG9wdHMudGV4dEFsaWduKSB7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBvcHRzLnRleHRBbGlnbjtcbiAgICB9XG4gICAgaWYgKG9wdHMudGV4dEJhc2VsaW5lKSB7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBvcHRzLnRleHRCYXNlbGluZTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNvcmF0ZVRleHQoY3R4LCB4LCB5LCBsaW5lLCBvcHRzKSB7XG4gICAgaWYgKG9wdHMuc3RyaWtldGhyb3VnaCB8fCBvcHRzLnVuZGVybGluZSkge1xuICAgICAgICAvKipcbiAgICAgKiBOb3cgdGhhdCBJRTExIHN1cHBvcnQgaGFzIGJlZW4gZHJvcHBlZCwgd2UgY2FuIHVzZSBtb3JlXG4gICAgICogb2YgdGhlIFRleHRNZXRyaWNzIG9iamVjdC4gVGhlIGFjdHVhbCBib3VuZGluZyBib3hlc1xuICAgICAqIGFyZSB1bmZsYWdnZWQgaW4gQ2hyb21lLCBGaXJlZm94LCBFZGdlLCBhbmQgU2FmYXJpIHNvIHRoZXlcbiAgICAgKiBjYW4gYmUgc2FmZWx5IHVzZWQuXG4gICAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0TWV0cmljcyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgKi8gY29uc3QgbWV0cmljcyA9IGN0eC5tZWFzdXJlVGV4dChsaW5lKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHggLSBtZXRyaWNzLmFjdHVhbEJvdW5kaW5nQm94TGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB4ICsgbWV0cmljcy5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0O1xuICAgICAgICBjb25zdCB0b3AgPSB5IC0gbWV0cmljcy5hY3R1YWxCb3VuZGluZ0JveEFzY2VudDtcbiAgICAgICAgY29uc3QgYm90dG9tID0geSArIG1ldHJpY3MuYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50O1xuICAgICAgICBjb25zdCB5RGVjb3JhdGlvbiA9IG9wdHMuc3RyaWtldGhyb3VnaCA/ICh0b3AgKyBib3R0b20pIC8gMiA6IGJvdHRvbTtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0cy5kZWNvcmF0aW9uV2lkdGggfHwgMjtcbiAgICAgICAgY3R4Lm1vdmVUbyhsZWZ0LCB5RGVjb3JhdGlvbik7XG4gICAgICAgIGN0eC5saW5lVG8ocmlnaHQsIHlEZWNvcmF0aW9uKTtcbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRyYXdCYWNrZHJvcChjdHgsIG9wdHMpIHtcbiAgICBjb25zdCBvbGRDb2xvciA9IGN0eC5maWxsU3R5bGU7XG4gICAgY3R4LmZpbGxTdHlsZSA9IG9wdHMuY29sb3I7XG4gICAgY3R4LmZpbGxSZWN0KG9wdHMubGVmdCwgb3B0cy50b3AsIG9wdHMud2lkdGgsIG9wdHMuaGVpZ2h0KTtcbiAgICBjdHguZmlsbFN0eWxlID0gb2xkQ29sb3I7XG59XG4vKipcbiAqIFJlbmRlciB0ZXh0IG9udG8gdGhlIGNhbnZhc1xuICovIGZ1bmN0aW9uIHJlbmRlclRleHQoY3R4LCB0ZXh0LCB4LCB5LCBmb250LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBsaW5lcyA9IGlzQXJyYXkodGV4dCkgPyB0ZXh0IDogW1xuICAgICAgICB0ZXh0XG4gICAgXTtcbiAgICBjb25zdCBzdHJva2UgPSBvcHRzLnN0cm9rZVdpZHRoID4gMCAmJiBvcHRzLnN0cm9rZUNvbG9yICE9PSAnJztcbiAgICBsZXQgaSwgbGluZTtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5mb250ID0gZm9udC5zdHJpbmc7XG4gICAgc2V0UmVuZGVyT3B0cyhjdHgsIG9wdHMpO1xuICAgIGZvcihpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKXtcbiAgICAgICAgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgICBpZiAob3B0cy5iYWNrZHJvcCkge1xuICAgICAgICAgICAgZHJhd0JhY2tkcm9wKGN0eCwgb3B0cy5iYWNrZHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc3Ryb2tlQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRzLnN0cm9rZUNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKG9wdHMuc3Ryb2tlV2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IG9wdHMuc3Ryb2tlV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChsaW5lLCB4LCB5LCBvcHRzLm1heFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguZmlsbFRleHQobGluZSwgeCwgeSwgb3B0cy5tYXhXaWR0aCk7XG4gICAgICAgIGRlY29yYXRlVGV4dChjdHgsIHgsIHksIGxpbmUsIG9wdHMpO1xuICAgICAgICB5ICs9IE51bWJlcihmb250LmxpbmVIZWlnaHQpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xufVxuLyoqXG4gKiBBZGQgYSBwYXRoIG9mIGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzIHRvIHRoZSBjdXJyZW50IHN1Yi1wYXRoXG4gKiBAcGFyYW0gY3R4IC0gQ29udGV4dFxuICogQHBhcmFtIHJlY3QgLSBCb3VuZGluZyByZWN0XG4gKi8gZnVuY3Rpb24gYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwgcmVjdCkge1xuICAgIGNvbnN0IHsgeCAsIHkgLCB3ICwgaCAsIHJhZGl1cyAgfSA9IHJlY3Q7XG4gICAgLy8gdG9wIGxlZnQgYXJjXG4gICAgY3R4LmFyYyh4ICsgcmFkaXVzLnRvcExlZnQsIHkgKyByYWRpdXMudG9wTGVmdCwgcmFkaXVzLnRvcExlZnQsIDEuNSAqIFBJLCBQSSwgdHJ1ZSk7XG4gICAgLy8gbGluZSBmcm9tIHRvcCBsZWZ0IHRvIGJvdHRvbSBsZWZ0XG4gICAgY3R4LmxpbmVUbyh4LCB5ICsgaCAtIHJhZGl1cy5ib3R0b21MZWZ0KTtcbiAgICAvLyBib3R0b20gbGVmdCBhcmNcbiAgICBjdHguYXJjKHggKyByYWRpdXMuYm90dG9tTGVmdCwgeSArIGggLSByYWRpdXMuYm90dG9tTGVmdCwgcmFkaXVzLmJvdHRvbUxlZnQsIFBJLCBIQUxGX1BJLCB0cnVlKTtcbiAgICAvLyBsaW5lIGZyb20gYm90dG9tIGxlZnQgdG8gYm90dG9tIHJpZ2h0XG4gICAgY3R4LmxpbmVUbyh4ICsgdyAtIHJhZGl1cy5ib3R0b21SaWdodCwgeSArIGgpO1xuICAgIC8vIGJvdHRvbSByaWdodCBhcmNcbiAgICBjdHguYXJjKHggKyB3IC0gcmFkaXVzLmJvdHRvbVJpZ2h0LCB5ICsgaCAtIHJhZGl1cy5ib3R0b21SaWdodCwgcmFkaXVzLmJvdHRvbVJpZ2h0LCBIQUxGX1BJLCAwLCB0cnVlKTtcbiAgICAvLyBsaW5lIGZyb20gYm90dG9tIHJpZ2h0IHRvIHRvcCByaWdodFxuICAgIGN0eC5saW5lVG8oeCArIHcsIHkgKyByYWRpdXMudG9wUmlnaHQpO1xuICAgIC8vIHRvcCByaWdodCBhcmNcbiAgICBjdHguYXJjKHggKyB3IC0gcmFkaXVzLnRvcFJpZ2h0LCB5ICsgcmFkaXVzLnRvcFJpZ2h0LCByYWRpdXMudG9wUmlnaHQsIDAsIC1IQUxGX1BJLCB0cnVlKTtcbiAgICAvLyBsaW5lIGZyb20gdG9wIHJpZ2h0IHRvIHRvcCBsZWZ0XG4gICAgY3R4LmxpbmVUbyh4ICsgcmFkaXVzLnRvcExlZnQsIHkpO1xufVxuXG5jb25zdCBMSU5FX0hFSUdIVCA9IC9eKG5vcm1hbHwoXFxkKyg/OlxcLlxcZCspPykocHh8ZW18JSk/KSQvO1xuY29uc3QgRk9OVF9TVFlMRSA9IC9eKG5vcm1hbHxpdGFsaWN8aW5pdGlhbHxpbmhlcml0fHVuc2V0fChvYmxpcXVlKCAtP1swLTldP1swLTldZGVnKT8pKSQvO1xuLyoqXG4gKiBAYWxpYXMgQ2hhcnQuaGVscGVycy5vcHRpb25zXG4gKiBAbmFtZXNwYWNlXG4gKi8gLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gbGluZSBoZWlnaHQgYHZhbHVlYCBpbiBwaXhlbHMgZm9yIGEgc3BlY2lmaWMgZm9udCBgc2l6ZWAuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbGluZUhlaWdodCB0byBwYXJzZSAoZWcuIDEuNiwgJzE0cHgnLCAnNzUlJywgJzEuNmVtJykuXG4gKiBAcGFyYW0gc2l6ZSAtIFRoZSBmb250IHNpemUgKGluIHBpeGVscykgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIGB2YWx1ZWAuXG4gKiBAcmV0dXJucyBUaGUgZWZmZWN0aXZlIGxpbmUgaGVpZ2h0IGluIHBpeGVscyAoc2l6ZSAqIDEuMiBpZiB2YWx1ZSBpcyBpbnZhbGlkKS5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0XG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiB0b0xpbmVIZWlnaHQodmFsdWUsIHNpemUpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gKCcnICsgdmFsdWUpLm1hdGNoKExJTkVfSEVJR0hUKTtcbiAgICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlc1sxXSA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgcmV0dXJuIHNpemUgKiAxLjI7XG4gICAgfVxuICAgIHZhbHVlID0gK21hdGNoZXNbMl07XG4gICAgc3dpdGNoKG1hdGNoZXNbM10pe1xuICAgICAgICBjYXNlICdweCc6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgdmFsdWUgLz0gMTAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBzaXplICogdmFsdWU7XG59XG5jb25zdCBudW1iZXJPclplcm8gPSAodik9Pit2IHx8IDA7XG5mdW5jdGlvbiBfcmVhZFZhbHVlVG9Qcm9wcyh2YWx1ZSwgcHJvcHMpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcbiAgICBjb25zdCBvYmpQcm9wcyA9IGlzT2JqZWN0KHByb3BzKTtcbiAgICBjb25zdCBrZXlzID0gb2JqUHJvcHMgPyBPYmplY3Qua2V5cyhwcm9wcykgOiBwcm9wcztcbiAgICBjb25zdCByZWFkID0gaXNPYmplY3QodmFsdWUpID8gb2JqUHJvcHMgPyAocHJvcCk9PnZhbHVlT3JEZWZhdWx0KHZhbHVlW3Byb3BdLCB2YWx1ZVtwcm9wc1twcm9wXV0pIDogKHByb3ApPT52YWx1ZVtwcm9wXSA6ICgpPT52YWx1ZTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2Yga2V5cyl7XG4gICAgICAgIHJldFtwcm9wXSA9IG51bWJlck9yWmVybyhyZWFkKHByb3ApKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIGludG8gYSBUUkJMIG9iamVjdC5cbiAqIEBwYXJhbSB2YWx1ZSAtIElmIGEgbnVtYmVyLCBzZXQgdGhlIHZhbHVlIHRvIGFsbCBUUkJMIGNvbXBvbmVudCxcbiAqICBlbHNlLCBpZiBhbiBvYmplY3QsIHVzZSBkZWZpbmVkIHByb3BlcnRpZXMgYW5kIHNldHMgdW5kZWZpbmVkIG9uZXMgdG8gMC5cbiAqICB4IC8geSBhcmUgc2hvcnRoYW5kcyBmb3Igc2FtZSB2YWx1ZSBmb3IgbGVmdC9yaWdodCBhbmQgdG9wL2JvdHRvbS5cbiAqIEByZXR1cm5zIFRoZSBwYWRkaW5nIHZhbHVlcyAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KVxuICogQHNpbmNlIDMuMC4wXG4gKi8gZnVuY3Rpb24gdG9UUkJMKHZhbHVlKSB7XG4gICAgcmV0dXJuIF9yZWFkVmFsdWVUb1Byb3BzKHZhbHVlLCB7XG4gICAgICAgIHRvcDogJ3knLFxuICAgICAgICByaWdodDogJ3gnLFxuICAgICAgICBib3R0b206ICd5JyxcbiAgICAgICAgbGVmdDogJ3gnXG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIGEgVFJCTCBjb3JuZXJzIG9iamVjdCAoc2ltaWxhciB3aXRoIGNzcyBib3JkZXItcmFkaXVzKS5cbiAqIEBwYXJhbSB2YWx1ZSAtIElmIGEgbnVtYmVyLCBzZXQgdGhlIHZhbHVlIHRvIGFsbCBUUkJMIGNvcm5lciBjb21wb25lbnRzLFxuICogIGVsc2UsIGlmIGFuIG9iamVjdCwgdXNlIGRlZmluZWQgcHJvcGVydGllcyBhbmQgc2V0cyB1bmRlZmluZWQgb25lcyB0byAwLlxuICogQHJldHVybnMgVGhlIFRSQkwgY29ybmVyIHZhbHVlcyAodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KVxuICogQHNpbmNlIDMuMC4wXG4gKi8gZnVuY3Rpb24gdG9UUkJMQ29ybmVycyh2YWx1ZSkge1xuICAgIHJldHVybiBfcmVhZFZhbHVlVG9Qcm9wcyh2YWx1ZSwgW1xuICAgICAgICAndG9wTGVmdCcsXG4gICAgICAgICd0b3BSaWdodCcsXG4gICAgICAgICdib3R0b21MZWZ0JyxcbiAgICAgICAgJ2JvdHRvbVJpZ2h0J1xuICAgIF0pO1xufVxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIHBhZGRpbmcgb2JqZWN0IHdpdGggcHJlLWNvbXB1dGVkIHdpZHRoL2hlaWdodC5cbiAqIEBwYXJhbSB2YWx1ZSAtIElmIGEgbnVtYmVyLCBzZXQgdGhlIHZhbHVlIHRvIGFsbCBUUkJMIGNvbXBvbmVudCxcbiAqICBlbHNlLCBpZiBhbiBvYmplY3QsIHVzZSBkZWZpbmVkIHByb3BlcnRpZXMgYW5kIHNldHMgdW5kZWZpbmVkIG9uZXMgdG8gMC5cbiAqICB4IC8geSBhcmUgc2hvcnRoYW5kcyBmb3Igc2FtZSB2YWx1ZSBmb3IgbGVmdC9yaWdodCBhbmQgdG9wL2JvdHRvbS5cbiAqIEByZXR1cm5zIFRoZSBwYWRkaW5nIHZhbHVlcyAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0KVxuICogQHNpbmNlIDIuNy4wXG4gKi8gZnVuY3Rpb24gdG9QYWRkaW5nKHZhbHVlKSB7XG4gICAgY29uc3Qgb2JqID0gdG9UUkJMKHZhbHVlKTtcbiAgICBvYmoud2lkdGggPSBvYmoubGVmdCArIG9iai5yaWdodDtcbiAgICBvYmouaGVpZ2h0ID0gb2JqLnRvcCArIG9iai5ib3R0b207XG4gICAgcmV0dXJuIG9iajtcbn1cbi8qKlxuICogUGFyc2VzIGZvbnQgb3B0aW9ucyBhbmQgcmV0dXJucyB0aGUgZm9udCBvYmplY3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEEgb2JqZWN0IHRoYXQgY29udGFpbnMgZm9udCBvcHRpb25zIHRvIGJlIHBhcnNlZC5cbiAqIEBwYXJhbSBmYWxsYmFjayAtIEEgb2JqZWN0IHRoYXQgY29udGFpbnMgZmFsbGJhY2sgZm9udCBvcHRpb25zLlxuICogQHJldHVybiBUaGUgZm9udCBvYmplY3QuXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIHRvRm9udChvcHRpb25zLCBmYWxsYmFjaykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGZhbGxiYWNrID0gZmFsbGJhY2sgfHwgZGVmYXVsdHMuZm9udDtcbiAgICBsZXQgc2l6ZSA9IHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMuc2l6ZSwgZmFsbGJhY2suc2l6ZSk7XG4gICAgaWYgKHR5cGVvZiBzaXplID09PSAnc3RyaW5nJykge1xuICAgICAgICBzaXplID0gcGFyc2VJbnQoc2l6ZSwgMTApO1xuICAgIH1cbiAgICBsZXQgc3R5bGUgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnN0eWxlLCBmYWxsYmFjay5zdHlsZSk7XG4gICAgaWYgKHN0eWxlICYmICEoJycgKyBzdHlsZSkubWF0Y2goRk9OVF9TVFlMRSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGZvbnQgc3R5bGUgc3BlY2lmaWVkOiBcIicgKyBzdHlsZSArICdcIicpO1xuICAgICAgICBzdHlsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZm9udCA9IHtcbiAgICAgICAgZmFtaWx5OiB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLmZhbWlseSwgZmFsbGJhY2suZmFtaWx5KSxcbiAgICAgICAgbGluZUhlaWdodDogdG9MaW5lSGVpZ2h0KHZhbHVlT3JEZWZhdWx0KG9wdGlvbnMubGluZUhlaWdodCwgZmFsbGJhY2subGluZUhlaWdodCksIHNpemUpLFxuICAgICAgICBzaXplLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgd2VpZ2h0OiB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLndlaWdodCwgZmFsbGJhY2sud2VpZ2h0KSxcbiAgICAgICAgc3RyaW5nOiAnJ1xuICAgIH07XG4gICAgZm9udC5zdHJpbmcgPSB0b0ZvbnRTdHJpbmcoZm9udCk7XG4gICAgcmV0dXJuIGZvbnQ7XG59XG4vKipcbiAqIEV2YWx1YXRlcyB0aGUgZ2l2ZW4gYGlucHV0c2Agc2VxdWVudGlhbGx5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCBkZWZpbmVkIHZhbHVlLlxuICogQHBhcmFtIGlucHV0cyAtIEFuIGFycmF5IG9mIHZhbHVlcywgZmFsbGluZyBiYWNrIHRvIHRoZSBsYXN0IHZhbHVlLlxuICogQHBhcmFtIGNvbnRleHQgLSBJZiBkZWZpbmVkIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCB0aGUgdmFsdWVcbiAqIGlzIGNhbGxlZCB3aXRoIGBjb250ZXh0YCBhcyBmaXJzdCBhcmd1bWVudCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBuZXcgaW5wdXQuXG4gKiBAcGFyYW0gaW5kZXggLSBJZiBkZWZpbmVkIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBhbiBhcnJheSwgdGhlIHZhbHVlXG4gKiBhdCBgaW5kZXhgIGJlY29tZSB0aGUgbmV3IGlucHV0LlxuICogQHBhcmFtIGluZm8gLSBvYmplY3QgdG8gcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHJlc29sdXRpb24gaW5cbiAqIEBwYXJhbSBpbmZvLmNhY2hlYWJsZSAtIFdpbGwgYmUgc2V0IHRvIGBmYWxzZWAgaWYgb3B0aW9uIGlzIG5vdCBjYWNoZWFibGUuXG4gKiBAc2luY2UgMi43LjBcbiAqLyBmdW5jdGlvbiByZXNvbHZlKGlucHV0cywgY29udGV4dCwgaW5kZXgsIGluZm8pIHtcbiAgICBsZXQgY2FjaGVhYmxlID0gdHJ1ZTtcbiAgICBsZXQgaSwgaWxlbiwgdmFsdWU7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gaW5wdXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHZhbHVlID0gaW5wdXRzW2ldO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoY29udGV4dCk7XG4gICAgICAgICAgICBjYWNoZWFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtpbmRleCAlIHZhbHVlLmxlbmd0aF07XG4gICAgICAgICAgICBjYWNoZWFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGluZm8gJiYgIWNhY2hlYWJsZSkge1xuICAgICAgICAgICAgICAgIGluZm8uY2FjaGVhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEBwYXJhbSBtaW5tYXhcbiAqIEBwYXJhbSBncmFjZVxuICogQHBhcmFtIGJlZ2luQXRaZXJvXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9hZGRHcmFjZShtaW5tYXgsIGdyYWNlLCBiZWdpbkF0WmVybykge1xuICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gbWlubWF4O1xuICAgIGNvbnN0IGNoYW5nZSA9IHRvRGltZW5zaW9uKGdyYWNlLCAobWF4IC0gbWluKSAvIDIpO1xuICAgIGNvbnN0IGtlZXBaZXJvID0gKHZhbHVlLCBhZGQpPT5iZWdpbkF0WmVybyAmJiB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSArIGFkZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IGtlZXBaZXJvKG1pbiwgLU1hdGguYWJzKGNoYW5nZSkpLFxuICAgICAgICBtYXg6IGtlZXBaZXJvKG1heCwgY2hhbmdlKVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KHBhcmVudENvbnRleHQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHBhcmVudENvbnRleHQpLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJveHkgZm9yIHJlc29sdmluZyByYXcgdmFsdWVzIGZvciBvcHRpb25zLlxuICogQHBhcmFtIHNjb3BlcyAtIFRoZSBvcHRpb24gc2NvcGVzIHRvIGxvb2sgZm9yIHZhbHVlcywgaW4gcmVzb2x1dGlvbiBvcmRlclxuICogQHBhcmFtIHByZWZpeGVzIC0gVGhlIHByZWZpeGVzIGZvciB2YWx1ZXMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKiBAcGFyYW0gcm9vdFNjb3BlcyAtIFRoZSByb290IG9wdGlvbiBzY29wZXNcbiAqIEBwYXJhbSBmYWxsYmFjayAtIFBhcmVudCBzY29wZXMgZmFsbGJhY2tcbiAqIEBwYXJhbSBnZXRUYXJnZXQgLSBjYWxsYmFjayBmb3IgZ2V0dGluZyB0aGUgdGFyZ2V0IGZvciBjaGFuZ2VkIHZhbHVlc1xuICogQHJldHVybnMgUHJveHlcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2NyZWF0ZVJlc29sdmVyKHNjb3BlcywgcHJlZml4ZXMgPSBbXG4gICAgJydcbl0sIHJvb3RTY29wZXMsIGZhbGxiYWNrLCBnZXRUYXJnZXQgPSAoKT0+c2NvcGVzWzBdKSB7XG4gICAgY29uc3QgZmluYWxSb290U2NvcGVzID0gcm9vdFNjb3BlcyB8fCBzY29wZXM7XG4gICAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZmFsbGJhY2sgPSBfcmVzb2x2ZSgnX2ZhbGxiYWNrJywgc2NvcGVzKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGUgPSB7XG4gICAgICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnT2JqZWN0JyxcbiAgICAgICAgX2NhY2hlYWJsZTogdHJ1ZSxcbiAgICAgICAgX3Njb3Blczogc2NvcGVzLFxuICAgICAgICBfcm9vdFNjb3BlczogZmluYWxSb290U2NvcGVzLFxuICAgICAgICBfZmFsbGJhY2s6IGZhbGxiYWNrLFxuICAgICAgICBfZ2V0VGFyZ2V0OiBnZXRUYXJnZXQsXG4gICAgICAgIG92ZXJyaWRlOiAoc2NvcGUpPT5fY3JlYXRlUmVzb2x2ZXIoW1xuICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgIC4uLnNjb3Blc1xuICAgICAgICAgICAgXSwgcHJlZml4ZXMsIGZpbmFsUm9vdFNjb3BlcywgZmFsbGJhY2spXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb3h5KGNhY2hlLCB7XG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRvci5cbiAgICAgKi8gZGVsZXRlUHJvcGVydHkgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtwcm9wXTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuX2tleXM7IC8vIHJlbW92ZSBjYWNoZWQga2V5c1xuICAgICAgICAgICAgZGVsZXRlIHNjb3Blc1swXVtwcm9wXTsgLy8gcmVtb3ZlIGZyb20gdG9wIGxldmVsIHNjb3BlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBnZXR0aW5nIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKi8gZ2V0ICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBfY2FjaGVkKHRhcmdldCwgcHJvcCwgKCk9Pl9yZXNvbHZlV2l0aFByZWZpeGVzKHByb3AsIHByZWZpeGVzLCBzY29wZXMsIHRhcmdldCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuXG4gICAgICogQWxzbyB1c2VkIGJ5IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5cbiAgICAgKi8gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQuX3Njb3Blc1swXSwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mLlxuICAgICAqLyBnZXRQcm90b3R5cGVPZiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihzY29wZXNbMF0pO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHRoZSBpbiBvcGVyYXRvci5cbiAgICAgKi8gaGFzICh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpLmluY2x1ZGVzKHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLlxuICAgICAqLyBvd25LZXlzICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRLZXlzRnJvbUFsbFNjb3Blcyh0YXJnZXQpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHNldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqLyBzZXQgKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0YXJnZXQuX3N0b3JhZ2UgfHwgKHRhcmdldC5fc3RvcmFnZSA9IGdldFRhcmdldCgpKTtcbiAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHN0b3JhZ2VbcHJvcF0gPSB2YWx1ZTsgLy8gc2V0IHRvIHRvcCBsZXZlbCBzY29wZSArIGNhY2hlXG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0Ll9rZXlzOyAvLyByZW1vdmUgY2FjaGVkIGtleXNcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybnMgYW4gUHJveHkgZm9yIHJlc29sdmluZyBvcHRpb24gdmFsdWVzIHdpdGggY29udGV4dC5cbiAqIEBwYXJhbSBwcm94eSAtIFRoZSBQcm94eSByZXR1cm5lZCBieSBgX2NyZWF0ZVJlc29sdmVyYFxuICogQHBhcmFtIGNvbnRleHQgLSBDb250ZXh0IG9iamVjdCBmb3Igc2NyaXB0YWJsZS9pbmRleGFibGUgb3B0aW9uc1xuICogQHBhcmFtIHN1YlByb3h5IC0gVGhlIHByb3h5IHByb3ZpZGVkIGZvciBzY3JpcHRhYmxlIG9wdGlvbnNcbiAqIEBwYXJhbSBkZXNjcmlwdG9yRGVmYXVsdHMgLSBEZWZhdWx0cyBmb3IgZGVzY3JpcHRvcnNcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2F0dGFjaENvbnRleHQocHJveHksIGNvbnRleHQsIHN1YlByb3h5LCBkZXNjcmlwdG9yRGVmYXVsdHMpIHtcbiAgICBjb25zdCBjYWNoZSA9IHtcbiAgICAgICAgX2NhY2hlYWJsZTogZmFsc2UsXG4gICAgICAgIF9wcm94eTogcHJveHksXG4gICAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgICBfc3ViUHJveHk6IHN1YlByb3h5LFxuICAgICAgICBfc3RhY2s6IG5ldyBTZXQoKSxcbiAgICAgICAgX2Rlc2NyaXB0b3JzOiBfZGVzY3JpcHRvcnMocHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cyksXG4gICAgICAgIHNldENvbnRleHQ6IChjdHgpPT5fYXR0YWNoQ29udGV4dChwcm94eSwgY3R4LCBzdWJQcm94eSwgZGVzY3JpcHRvckRlZmF1bHRzKSxcbiAgICAgICAgb3ZlcnJpZGU6IChzY29wZSk9Pl9hdHRhY2hDb250ZXh0KHByb3h5Lm92ZXJyaWRlKHNjb3BlKSwgY29udGV4dCwgc3ViUHJveHksIGRlc2NyaXB0b3JEZWZhdWx0cylcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJveHkoY2FjaGUsIHtcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciB0aGUgZGVsZXRlIG9wZXJhdG9yLlxuICAgICAqLyBkZWxldGVQcm9wZXJ0eSAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgZGVsZXRlIHByb3h5W3Byb3BdOyAvLyByZW1vdmUgZnJvbSBwcm94eVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgZ2V0dGluZyBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICovIGdldCAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgcmV0dXJuIF9jYWNoZWQodGFyZ2V0LCBwcm9wLCAoKT0+X3Jlc29sdmVXaXRoQ29udGV4dCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAqIEEgdHJhcCBmb3IgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5cbiAgICAgKiBBbHNvIHVzZWQgYnkgT2JqZWN0Lmhhc093blByb3BlcnR5LlxuICAgICAqLyBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgKHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5fZGVzY3JpcHRvcnMuYWxsS2V5cyA/IFJlZmxlY3QuaGFzKHByb3h5LCBwcm9wKSA/IHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCA6IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3h5LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YuXG4gICAgICovIGdldFByb3RvdHlwZU9mICgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHByb3h5KTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICogQSB0cmFwIGZvciB0aGUgaW4gb3BlcmF0b3IuXG4gICAgICovIGhhcyAodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5oYXMocHJveHksIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLlxuICAgICAqLyBvd25LZXlzICgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMocHJveHkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgKiBBIHRyYXAgZm9yIHNldHRpbmcgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqLyBzZXQgKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgIHByb3h5W3Byb3BdID0gdmFsdWU7IC8vIHNldCB0byBwcm94eVxuICAgICAgICAgICAgZGVsZXRlIHRhcmdldFtwcm9wXTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2Rlc2NyaXB0b3JzKHByb3h5LCBkZWZhdWx0cyA9IHtcbiAgICBzY3JpcHRhYmxlOiB0cnVlLFxuICAgIGluZGV4YWJsZTogdHJ1ZVxufSkge1xuICAgIGNvbnN0IHsgX3NjcmlwdGFibGUgPWRlZmF1bHRzLnNjcmlwdGFibGUgLCBfaW5kZXhhYmxlID1kZWZhdWx0cy5pbmRleGFibGUgLCBfYWxsS2V5cyA9ZGVmYXVsdHMuYWxsS2V5cyAgfSA9IHByb3h5O1xuICAgIHJldHVybiB7XG4gICAgICAgIGFsbEtleXM6IF9hbGxLZXlzLFxuICAgICAgICBzY3JpcHRhYmxlOiBfc2NyaXB0YWJsZSxcbiAgICAgICAgaW5kZXhhYmxlOiBfaW5kZXhhYmxlLFxuICAgICAgICBpc1NjcmlwdGFibGU6IGlzRnVuY3Rpb24oX3NjcmlwdGFibGUpID8gX3NjcmlwdGFibGUgOiAoKT0+X3NjcmlwdGFibGUsXG4gICAgICAgIGlzSW5kZXhhYmxlOiBpc0Z1bmN0aW9uKF9pbmRleGFibGUpID8gX2luZGV4YWJsZSA6ICgpPT5faW5kZXhhYmxlXG4gICAgfTtcbn1cbmNvbnN0IHJlYWRLZXkgPSAocHJlZml4LCBuYW1lKT0+cHJlZml4ID8gcHJlZml4ICsgX2NhcGl0YWxpemUobmFtZSkgOiBuYW1lO1xuY29uc3QgbmVlZHNTdWJSZXNvbHZlciA9IChwcm9wLCB2YWx1ZSk9PmlzT2JqZWN0KHZhbHVlKSAmJiBwcm9wICE9PSAnYWRhcHRlcnMnICYmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBudWxsIHx8IHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xuZnVuY3Rpb24gX2NhY2hlZCh0YXJnZXQsIHByb3AsIHJlc29sdmUpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcCkgfHwgcHJvcCA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmUoKTtcbiAgICAvLyBjYWNoZSB0aGUgcmVzb2x2ZWQgdmFsdWVcbiAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfcmVzb2x2ZVdpdGhDb250ZXh0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICBjb25zdCB7IF9wcm94eSAsIF9jb250ZXh0ICwgX3N1YlByb3h5ICwgX2Rlc2NyaXB0b3JzOiBkZXNjcmlwdG9ycyAgfSA9IHRhcmdldDtcbiAgICBsZXQgdmFsdWUgPSBfcHJveHlbcHJvcF07IC8vIHJlc29sdmUgZnJvbSBwcm94eVxuICAgIC8vIHJlc29sdmUgd2l0aCBjb250ZXh0XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmIGRlc2NyaXB0b3JzLmlzU2NyaXB0YWJsZShwcm9wKSkge1xuICAgICAgICB2YWx1ZSA9IF9yZXNvbHZlU2NyaXB0YWJsZShwcm9wLCB2YWx1ZSwgdGFyZ2V0LCByZWNlaXZlcik7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBfcmVzb2x2ZUFycmF5KHByb3AsIHZhbHVlLCB0YXJnZXQsIGRlc2NyaXB0b3JzLmlzSW5kZXhhYmxlKTtcbiAgICB9XG4gICAgaWYgKG5lZWRzU3ViUmVzb2x2ZXIocHJvcCwgdmFsdWUpKSB7XG4gICAgICAgIC8vIGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhbiBvYmplY3QsIGNyZWF0ZSBhIHN1YiByZXNvbHZlciBmb3IgaXRcbiAgICAgICAgdmFsdWUgPSBfYXR0YWNoQ29udGV4dCh2YWx1ZSwgX2NvbnRleHQsIF9zdWJQcm94eSAmJiBfc3ViUHJveHlbcHJvcF0sIGRlc2NyaXB0b3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gX3Jlc29sdmVTY3JpcHRhYmxlKHByb3AsIGdldFZhbHVlLCB0YXJnZXQsIHJlY2VpdmVyKSB7XG4gICAgY29uc3QgeyBfcHJveHkgLCBfY29udGV4dCAsIF9zdWJQcm94eSAsIF9zdGFjayAgfSA9IHRhcmdldDtcbiAgICBpZiAoX3N0YWNrLmhhcyhwcm9wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY3Vyc2lvbiBkZXRlY3RlZDogJyArIEFycmF5LmZyb20oX3N0YWNrKS5qb2luKCctPicpICsgJy0+JyArIHByb3ApO1xuICAgIH1cbiAgICBfc3RhY2suYWRkKHByb3ApO1xuICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKF9jb250ZXh0LCBfc3ViUHJveHkgfHwgcmVjZWl2ZXIpO1xuICAgIF9zdGFjay5kZWxldGUocHJvcCk7XG4gICAgaWYgKG5lZWRzU3ViUmVzb2x2ZXIocHJvcCwgdmFsdWUpKSB7XG4gICAgICAgIC8vIFdoZW4gc2NyaXB0YWJsZSBvcHRpb24gcmV0dXJucyBhbiBvYmplY3QsIGNyZWF0ZSBhIHJlc29sdmVyIG9uIHRoYXQuXG4gICAgICAgIHZhbHVlID0gY3JlYXRlU3ViUmVzb2x2ZXIoX3Byb3h5Ll9zY29wZXMsIF9wcm94eSwgcHJvcCwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBfcmVzb2x2ZUFycmF5KHByb3AsIHZhbHVlLCB0YXJnZXQsIGlzSW5kZXhhYmxlKSB7XG4gICAgY29uc3QgeyBfcHJveHkgLCBfY29udGV4dCAsIF9zdWJQcm94eSAsIF9kZXNjcmlwdG9yczogZGVzY3JpcHRvcnMgIH0gPSB0YXJnZXQ7XG4gICAgaWYgKHR5cGVvZiBfY29udGV4dC5pbmRleCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbmRleGFibGUocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW19jb250ZXh0LmluZGV4ICUgdmFsdWUubGVuZ3RoXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlWzBdKSkge1xuICAgICAgICAvLyBBcnJheSBvZiBvYmplY3RzLCByZXR1cm4gYXJyYXkgb3IgcmVzb2x2ZXJzXG4gICAgICAgIGNvbnN0IGFyciA9IHZhbHVlO1xuICAgICAgICBjb25zdCBzY29wZXMgPSBfcHJveHkuX3Njb3Blcy5maWx0ZXIoKHMpPT5zICE9PSBhcnIpO1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKXtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVyID0gY3JlYXRlU3ViUmVzb2x2ZXIoc2NvcGVzLCBfcHJveHksIHByb3AsIGl0ZW0pO1xuICAgICAgICAgICAgdmFsdWUucHVzaChfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgX2NvbnRleHQsIF9zdWJQcm94eSAmJiBfc3ViUHJveHlbcHJvcF0sIGRlc2NyaXB0b3JzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZhbGxiYWNrKGZhbGxiYWNrLCBwcm9wLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGZhbGxiYWNrKSA/IGZhbGxiYWNrKHByb3AsIHZhbHVlKSA6IGZhbGxiYWNrO1xufVxuY29uc3QgZ2V0U2NvcGUgPSAoa2V5LCBwYXJlbnQpPT5rZXkgPT09IHRydWUgPyBwYXJlbnQgOiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IHJlc29sdmVPYmplY3RLZXkocGFyZW50LCBrZXkpIDogdW5kZWZpbmVkO1xuZnVuY3Rpb24gYWRkU2NvcGVzKHNldCwgcGFyZW50U2NvcGVzLCBrZXksIHBhcmVudEZhbGxiYWNrLCB2YWx1ZSkge1xuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudFNjb3Blcyl7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoa2V5LCBwYXJlbnQpO1xuICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICAgIHNldC5hZGQoc2NvcGUpO1xuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2sgPSByZXNvbHZlRmFsbGJhY2soc2NvcGUuX2ZhbGxiYWNrLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2sgIT09ICd1bmRlZmluZWQnICYmIGZhbGxiYWNrICE9PSBrZXkgJiYgZmFsbGJhY2sgIT09IHBhcmVudEZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSByZWFjaCB0aGUgZGVzY3JpcHRvciB0aGF0IGRlZmluZXMgYSBuZXcgX2ZhbGxiYWNrLCByZXR1cm4gdGhhdC5cbiAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgd2lsbCByZXN1bWUgdG8gdGhhdCBuZXcgc2NvcGUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNjb3BlID09PSBmYWxzZSAmJiB0eXBlb2YgcGFyZW50RmFsbGJhY2sgIT09ICd1bmRlZmluZWQnICYmIGtleSAhPT0gcGFyZW50RmFsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGBmYWxzZWAgcmVzdWx0cyB0byBgZmFsc2VgLCB3aGVuIGZhbGxpbmcgYmFjayB0byBkaWZmZXJlbnQga2V5LlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgYGludGVyYWN0aW9uYCBmcm9tIGBob3ZlcmAgb3IgYHBsdWdpbnMudG9vbHRpcGAgYW5kIGBhbmltYXRpb25gIGZyb20gYGFuaW1hdGlvbnNgXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjcmVhdGVTdWJSZXNvbHZlcihwYXJlbnRTY29wZXMsIHJlc29sdmVyLCBwcm9wLCB2YWx1ZSkge1xuICAgIGNvbnN0IHJvb3RTY29wZXMgPSByZXNvbHZlci5fcm9vdFNjb3BlcztcbiAgICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVGYWxsYmFjayhyZXNvbHZlci5fZmFsbGJhY2ssIHByb3AsIHZhbHVlKTtcbiAgICBjb25zdCBhbGxTY29wZXMgPSBbXG4gICAgICAgIC4uLnBhcmVudFNjb3BlcyxcbiAgICAgICAgLi4ucm9vdFNjb3Blc1xuICAgIF07XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgIHNldC5hZGQodmFsdWUpO1xuICAgIGxldCBrZXkgPSBhZGRTY29wZXNGcm9tS2V5KHNldCwgYWxsU2NvcGVzLCBwcm9wLCBmYWxsYmFjayB8fCBwcm9wLCB2YWx1ZSk7XG4gICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmFsbGJhY2sgIT09ICd1bmRlZmluZWQnICYmIGZhbGxiYWNrICE9PSBwcm9wKSB7XG4gICAgICAgIGtleSA9IGFkZFNjb3Blc0Zyb21LZXkoc2V0LCBhbGxTY29wZXMsIGZhbGxiYWNrLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUmVzb2x2ZXIoQXJyYXkuZnJvbShzZXQpLCBbXG4gICAgICAgICcnXG4gICAgXSwgcm9vdFNjb3BlcywgZmFsbGJhY2ssICgpPT5zdWJHZXRUYXJnZXQocmVzb2x2ZXIsIHByb3AsIHZhbHVlKSk7XG59XG5mdW5jdGlvbiBhZGRTY29wZXNGcm9tS2V5KHNldCwgYWxsU2NvcGVzLCBrZXksIGZhbGxiYWNrLCBpdGVtKSB7XG4gICAgd2hpbGUoa2V5KXtcbiAgICAgICAga2V5ID0gYWRkU2NvcGVzKHNldCwgYWxsU2NvcGVzLCBrZXksIGZhbGxiYWNrLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbn1cbmZ1bmN0aW9uIHN1YkdldFRhcmdldChyZXNvbHZlciwgcHJvcCwgdmFsdWUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSByZXNvbHZlci5fZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKCEocHJvcCBpbiBwYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudFtwcm9wXSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBwYXJlbnRbcHJvcF07XG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgLy8gRm9yIGFycmF5IG9mIG9iamVjdHMsIHRoZSBvYmplY3QgaXMgdXNlZCB0byBzdG9yZSB1cGRhdGVkIHZhbHVlc1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQgfHwge307XG59XG5mdW5jdGlvbiBfcmVzb2x2ZVdpdGhQcmVmaXhlcyhwcm9wLCBwcmVmaXhlcywgc2NvcGVzLCBwcm94eSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBmb3IgKGNvbnN0IHByZWZpeCBvZiBwcmVmaXhlcyl7XG4gICAgICAgIHZhbHVlID0gX3Jlc29sdmUocmVhZEtleShwcmVmaXgsIHByb3ApLCBzY29wZXMpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5lZWRzU3ViUmVzb2x2ZXIocHJvcCwgdmFsdWUpID8gY3JlYXRlU3ViUmVzb2x2ZXIoc2NvcGVzLCBwcm94eSwgcHJvcCwgdmFsdWUpIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBfcmVzb2x2ZShrZXksIHNjb3Blcykge1xuICAgIGZvciAoY29uc3Qgc2NvcGUgb2Ygc2NvcGVzKXtcbiAgICAgICAgaWYgKCFzY29wZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBzY29wZVtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0S2V5c0Zyb21BbGxTY29wZXModGFyZ2V0KSB7XG4gICAgbGV0IGtleXMgPSB0YXJnZXQuX2tleXM7XG4gICAgaWYgKCFrZXlzKSB7XG4gICAgICAgIGtleXMgPSB0YXJnZXQuX2tleXMgPSByZXNvbHZlS2V5c0Zyb21BbGxTY29wZXModGFyZ2V0Ll9zY29wZXMpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIHJlc29sdmVLZXlzRnJvbUFsbFNjb3BlcyhzY29wZXMpIHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpe1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY29wZSkuZmlsdGVyKChrKT0+IWsuc3RhcnRzV2l0aCgnXycpKSl7XG4gICAgICAgICAgICBzZXQuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2V0KTtcbn1cbmZ1bmN0aW9uIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICBjb25zdCB7IGlTY2FsZSAgfSA9IG1ldGE7XG4gICAgY29uc3QgeyBrZXkgPSdyJyAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBsZXQgaSwgaWxlbiwgaW5kZXgsIGl0ZW07XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgaXRlbSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBwYXJzZWRbaV0gPSB7XG4gICAgICAgICAgICByOiBpU2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCBrZXkpLCBpbmRleClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cblxuY29uc3QgRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OIHx8IDFlLTE0O1xuY29uc3QgZ2V0UG9pbnQgPSAocG9pbnRzLCBpKT0+aSA8IHBvaW50cy5sZW5ndGggJiYgIXBvaW50c1tpXS5za2lwICYmIHBvaW50c1tpXTtcbmNvbnN0IGdldFZhbHVlQXhpcyA9IChpbmRleEF4aXMpPT5pbmRleEF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbmZ1bmN0aW9uIHNwbGluZUN1cnZlKGZpcnN0UG9pbnQsIG1pZGRsZVBvaW50LCBhZnRlclBvaW50LCB0KSB7XG4gICAgLy8gUHJvcHMgdG8gUm9iIFNwZW5jZXIgYXQgc2NhbGVkIGlubm92YXRpb24gZm9yIGhpcyBwb3N0IG9uIHNwbGluaW5nIGJldHdlZW4gcG9pbnRzXG4gICAgLy8gaHR0cDovL3NjYWxlZGlubm92YXRpb24uY29tL2FuYWx5dGljcy9zcGxpbmVzL2Fib3V0U3BsaW5lcy5odG1sXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGFsc28gcmVzcGVjdCBcInNraXBwZWRcIiBwb2ludHNcbiAgICBjb25zdCBwcmV2aW91cyA9IGZpcnN0UG9pbnQuc2tpcCA/IG1pZGRsZVBvaW50IDogZmlyc3RQb2ludDtcbiAgICBjb25zdCBjdXJyZW50ID0gbWlkZGxlUG9pbnQ7XG4gICAgY29uc3QgbmV4dCA9IGFmdGVyUG9pbnQuc2tpcCA/IG1pZGRsZVBvaW50IDogYWZ0ZXJQb2ludDtcbiAgICBjb25zdCBkMDEgPSBkaXN0YW5jZUJldHdlZW5Qb2ludHMoY3VycmVudCwgcHJldmlvdXMpO1xuICAgIGNvbnN0IGQxMiA9IGRpc3RhbmNlQmV0d2VlblBvaW50cyhuZXh0LCBjdXJyZW50KTtcbiAgICBsZXQgczAxID0gZDAxIC8gKGQwMSArIGQxMik7XG4gICAgbGV0IHMxMiA9IGQxMiAvIChkMDEgKyBkMTIpO1xuICAgIC8vIElmIGFsbCBwb2ludHMgYXJlIHRoZSBzYW1lLCBzMDEgJiBzMDIgd2lsbCBiZSBpbmZcbiAgICBzMDEgPSBpc05hTihzMDEpID8gMCA6IHMwMTtcbiAgICBzMTIgPSBpc05hTihzMTIpID8gMCA6IHMxMjtcbiAgICBjb25zdCBmYSA9IHQgKiBzMDE7IC8vIHNjYWxpbmcgZmFjdG9yIGZvciB0cmlhbmdsZSBUYVxuICAgIGNvbnN0IGZiID0gdCAqIHMxMjtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aW91czoge1xuICAgICAgICAgICAgeDogY3VycmVudC54IC0gZmEgKiAobmV4dC54IC0gcHJldmlvdXMueCksXG4gICAgICAgICAgICB5OiBjdXJyZW50LnkgLSBmYSAqIChuZXh0LnkgLSBwcmV2aW91cy55KVxuICAgICAgICB9LFxuICAgICAgICBuZXh0OiB7XG4gICAgICAgICAgICB4OiBjdXJyZW50LnggKyBmYiAqIChuZXh0LnggLSBwcmV2aW91cy54KSxcbiAgICAgICAgICAgIHk6IGN1cnJlbnQueSArIGZiICogKG5leHQueSAtIHByZXZpb3VzLnkpXG4gICAgICAgIH1cbiAgICB9O1xufVxuLyoqXG4gKiBBZGp1c3QgdGFuZ2VudHMgdG8gZW5zdXJlIG1vbm90b25pYyBwcm9wZXJ0aWVzXG4gKi8gZnVuY3Rpb24gbW9ub3RvbmVBZGp1c3QocG9pbnRzLCBkZWx0YUssIG1LKSB7XG4gICAgY29uc3QgcG9pbnRzTGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgYWxwaGFLLCBiZXRhSywgdGF1Sywgc3F1YXJlZE1hZ25pdHVkZSwgcG9pbnRDdXJyZW50O1xuICAgIGxldCBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCAwKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgcG9pbnRzTGVuIC0gMTsgKytpKXtcbiAgICAgICAgcG9pbnRDdXJyZW50ID0gcG9pbnRBZnRlcjtcbiAgICAgICAgcG9pbnRBZnRlciA9IGdldFBvaW50KHBvaW50cywgaSArIDEpO1xuICAgICAgICBpZiAoIXBvaW50Q3VycmVudCB8fCAhcG9pbnRBZnRlcikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbW9zdEVxdWFscyhkZWx0YUtbaV0sIDAsIEVQU0lMT04pKSB7XG4gICAgICAgICAgICBtS1tpXSA9IG1LW2kgKyAxXSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhbHBoYUsgPSBtS1tpXSAvIGRlbHRhS1tpXTtcbiAgICAgICAgYmV0YUsgPSBtS1tpICsgMV0gLyBkZWx0YUtbaV07XG4gICAgICAgIHNxdWFyZWRNYWduaXR1ZGUgPSBNYXRoLnBvdyhhbHBoYUssIDIpICsgTWF0aC5wb3coYmV0YUssIDIpO1xuICAgICAgICBpZiAoc3F1YXJlZE1hZ25pdHVkZSA8PSA5KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0YXVLID0gMyAvIE1hdGguc3FydChzcXVhcmVkTWFnbml0dWRlKTtcbiAgICAgICAgbUtbaV0gPSBhbHBoYUsgKiB0YXVLICogZGVsdGFLW2ldO1xuICAgICAgICBtS1tpICsgMV0gPSBiZXRhSyAqIHRhdUsgKiBkZWx0YUtbaV07XG4gICAgfVxufVxuZnVuY3Rpb24gbW9ub3RvbmVDb21wdXRlKHBvaW50cywgbUssIGluZGV4QXhpcyA9ICd4Jykge1xuICAgIGNvbnN0IHZhbHVlQXhpcyA9IGdldFZhbHVlQXhpcyhpbmRleEF4aXMpO1xuICAgIGNvbnN0IHBvaW50c0xlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IGRlbHRhLCBwb2ludEJlZm9yZSwgcG9pbnRDdXJyZW50O1xuICAgIGxldCBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCAwKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgcG9pbnRzTGVuOyArK2kpe1xuICAgICAgICBwb2ludEJlZm9yZSA9IHBvaW50Q3VycmVudDtcbiAgICAgICAgcG9pbnRDdXJyZW50ID0gcG9pbnRBZnRlcjtcbiAgICAgICAgcG9pbnRBZnRlciA9IGdldFBvaW50KHBvaW50cywgaSArIDEpO1xuICAgICAgICBpZiAoIXBvaW50Q3VycmVudCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaVBpeGVsID0gcG9pbnRDdXJyZW50W2luZGV4QXhpc107XG4gICAgICAgIGNvbnN0IHZQaXhlbCA9IHBvaW50Q3VycmVudFt2YWx1ZUF4aXNdO1xuICAgICAgICBpZiAocG9pbnRCZWZvcmUpIHtcbiAgICAgICAgICAgIGRlbHRhID0gKGlQaXhlbCAtIHBvaW50QmVmb3JlW2luZGV4QXhpc10pIC8gMztcbiAgICAgICAgICAgIHBvaW50Q3VycmVudFtgY3AxJHtpbmRleEF4aXN9YF0gPSBpUGl4ZWwgLSBkZWx0YTtcbiAgICAgICAgICAgIHBvaW50Q3VycmVudFtgY3AxJHt2YWx1ZUF4aXN9YF0gPSB2UGl4ZWwgLSBkZWx0YSAqIG1LW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2ludEFmdGVyKSB7XG4gICAgICAgICAgICBkZWx0YSA9IChwb2ludEFmdGVyW2luZGV4QXhpc10gLSBpUGl4ZWwpIC8gMztcbiAgICAgICAgICAgIHBvaW50Q3VycmVudFtgY3AyJHtpbmRleEF4aXN9YF0gPSBpUGl4ZWwgKyBkZWx0YTtcbiAgICAgICAgICAgIHBvaW50Q3VycmVudFtgY3AyJHt2YWx1ZUF4aXN9YF0gPSB2UGl4ZWwgKyBkZWx0YSAqIG1LW2ldO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgQsOpemllciBjb250cm9sIHBvaW50cyBpbiBhIHNpbWlsYXIgd2F5IHRoYW4gfHNwbGluZUN1cnZlfCxcbiAqIGJ1dCBwcmVzZXJ2ZXMgbW9ub3RvbmljaXR5IG9mIHRoZSBwcm92aWRlZCBkYXRhIGFuZCBlbnN1cmVzIG5vIGxvY2FsIGV4dHJlbXVtcyBhcmUgYWRkZWRcbiAqIGJldHdlZW4gdGhlIGRhdGFzZXQgZGlzY3JldGUgcG9pbnRzIGR1ZSB0byB0aGUgaW50ZXJwb2xhdGlvbi5cbiAqIFNlZSA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vbm90b25lX2N1YmljX2ludGVycG9sYXRpb25cbiAqLyBmdW5jdGlvbiBzcGxpbmVDdXJ2ZU1vbm90b25lKHBvaW50cywgaW5kZXhBeGlzID0gJ3gnKSB7XG4gICAgY29uc3QgdmFsdWVBeGlzID0gZ2V0VmFsdWVBeGlzKGluZGV4QXhpcyk7XG4gICAgY29uc3QgcG9pbnRzTGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBjb25zdCBkZWx0YUsgPSBBcnJheShwb2ludHNMZW4pLmZpbGwoMCk7XG4gICAgY29uc3QgbUsgPSBBcnJheShwb2ludHNMZW4pO1xuICAgIC8vIENhbGN1bGF0ZSBzbG9wZXMgKGRlbHRhSykgYW5kIGluaXRpYWxpemUgdGFuZ2VudHMgKG1LKVxuICAgIGxldCBpLCBwb2ludEJlZm9yZSwgcG9pbnRDdXJyZW50O1xuICAgIGxldCBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCAwKTtcbiAgICBmb3IoaSA9IDA7IGkgPCBwb2ludHNMZW47ICsraSl7XG4gICAgICAgIHBvaW50QmVmb3JlID0gcG9pbnRDdXJyZW50O1xuICAgICAgICBwb2ludEN1cnJlbnQgPSBwb2ludEFmdGVyO1xuICAgICAgICBwb2ludEFmdGVyID0gZ2V0UG9pbnQocG9pbnRzLCBpICsgMSk7XG4gICAgICAgIGlmICghcG9pbnRDdXJyZW50KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9pbnRBZnRlcikge1xuICAgICAgICAgICAgY29uc3Qgc2xvcGVEZWx0YSA9IHBvaW50QWZ0ZXJbaW5kZXhBeGlzXSAtIHBvaW50Q3VycmVudFtpbmRleEF4aXNdO1xuICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgdHdvIHBvaW50cyB0aGF0IGFwcGVhciBhdCB0aGUgc2FtZSB4IHBpeGVsLCBzbG9wZURlbHRhWCBpcyAwXG4gICAgICAgICAgICBkZWx0YUtbaV0gPSBzbG9wZURlbHRhICE9PSAwID8gKHBvaW50QWZ0ZXJbdmFsdWVBeGlzXSAtIHBvaW50Q3VycmVudFt2YWx1ZUF4aXNdKSAvIHNsb3BlRGVsdGEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIG1LW2ldID0gIXBvaW50QmVmb3JlID8gZGVsdGFLW2ldIDogIXBvaW50QWZ0ZXIgPyBkZWx0YUtbaSAtIDFdIDogc2lnbihkZWx0YUtbaSAtIDFdKSAhPT0gc2lnbihkZWx0YUtbaV0pID8gMCA6IChkZWx0YUtbaSAtIDFdICsgZGVsdGFLW2ldKSAvIDI7XG4gICAgfVxuICAgIG1vbm90b25lQWRqdXN0KHBvaW50cywgZGVsdGFLLCBtSyk7XG4gICAgbW9ub3RvbmVDb21wdXRlKHBvaW50cywgbUssIGluZGV4QXhpcyk7XG59XG5mdW5jdGlvbiBjYXBDb250cm9sUG9pbnQocHQsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHB0LCBtYXgpLCBtaW4pO1xufVxuZnVuY3Rpb24gY2FwQmV6aWVyUG9pbnRzKHBvaW50cywgYXJlYSkge1xuICAgIGxldCBpLCBpbGVuLCBwb2ludCwgaW5BcmVhLCBpbkFyZWFQcmV2O1xuICAgIGxldCBpbkFyZWFOZXh0ID0gX2lzUG9pbnRJbkFyZWEocG9pbnRzWzBdLCBhcmVhKTtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgaW5BcmVhUHJldiA9IGluQXJlYTtcbiAgICAgICAgaW5BcmVhID0gaW5BcmVhTmV4dDtcbiAgICAgICAgaW5BcmVhTmV4dCA9IGkgPCBpbGVuIC0gMSAmJiBfaXNQb2ludEluQXJlYShwb2ludHNbaSArIDFdLCBhcmVhKTtcbiAgICAgICAgaWYgKCFpbkFyZWEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICBpZiAoaW5BcmVhUHJldikge1xuICAgICAgICAgICAgcG9pbnQuY3AxeCA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDF4LCBhcmVhLmxlZnQsIGFyZWEucmlnaHQpO1xuICAgICAgICAgICAgcG9pbnQuY3AxeSA9IGNhcENvbnRyb2xQb2ludChwb2ludC5jcDF5LCBhcmVhLnRvcCwgYXJlYS5ib3R0b20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbkFyZWFOZXh0KSB7XG4gICAgICAgICAgICBwb2ludC5jcDJ4ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMngsIGFyZWEubGVmdCwgYXJlYS5yaWdodCk7XG4gICAgICAgICAgICBwb2ludC5jcDJ5ID0gY2FwQ29udHJvbFBvaW50KHBvaW50LmNwMnksIGFyZWEudG9wLCBhcmVhLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3VwZGF0ZUJlemllckNvbnRyb2xQb2ludHMocG9pbnRzLCBvcHRpb25zLCBhcmVhLCBsb29wLCBpbmRleEF4aXMpIHtcbiAgICBsZXQgaSwgaWxlbiwgcG9pbnQsIGNvbnRyb2xQb2ludHM7XG4gICAgLy8gT25seSBjb25zaWRlciBwb2ludHMgdGhhdCBhcmUgZHJhd24gaW4gY2FzZSB0aGUgc3BhbkdhcHMgb3B0aW9uIGlzIHVzZWRcbiAgICBpZiAob3B0aW9ucy5zcGFuR2Fwcykge1xuICAgICAgICBwb2ludHMgPSBwb2ludHMuZmlsdGVyKChwdCk9PiFwdC5za2lwKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykge1xuICAgICAgICBzcGxpbmVDdXJ2ZU1vbm90b25lKHBvaW50cywgaW5kZXhBeGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJldiA9IGxvb3AgPyBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdIDogcG9pbnRzWzBdO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29udHJvbFBvaW50cyA9IHNwbGluZUN1cnZlKHByZXYsIHBvaW50LCBwb2ludHNbTWF0aC5taW4oaSArIDEsIGlsZW4gLSAobG9vcCA/IDAgOiAxKSkgJSBpbGVuXSwgb3B0aW9ucy50ZW5zaW9uKTtcbiAgICAgICAgICAgIHBvaW50LmNwMXggPSBjb250cm9sUG9pbnRzLnByZXZpb3VzLng7XG4gICAgICAgICAgICBwb2ludC5jcDF5ID0gY29udHJvbFBvaW50cy5wcmV2aW91cy55O1xuICAgICAgICAgICAgcG9pbnQuY3AyeCA9IGNvbnRyb2xQb2ludHMubmV4dC54O1xuICAgICAgICAgICAgcG9pbnQuY3AyeSA9IGNvbnRyb2xQb2ludHMubmV4dC55O1xuICAgICAgICAgICAgcHJldiA9IHBvaW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNhcEJlemllclBvaW50cykge1xuICAgICAgICBjYXBCZXppZXJQb2ludHMocG9pbnRzLCBhcmVhKTtcbiAgICB9XG59XG5cbi8qKlxuICogTm90ZTogdHlwZWRlZnMgYXJlIGF1dG8tZXhwb3J0ZWQsIHNvIHVzZSBhIG1hZGUtdXAgYGRvbWAgbmFtZXNwYWNlIHdoZXJlXG4gKiBuZWNlc3NhcnkgdG8gYXZvaWQgZHVwbGljYXRlcyB3aXRoIGBleHBvcnQgKiBmcm9tICcuL2hlbHBlcnNgOyBzZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNDYwMTFcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCcuLi9jb3JlL2NvcmUuY29udHJvbGxlci5qcycpLmRlZmF1bHQgfSBkb20uQ2hhcnRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCcuLi8uLi90eXBlcycpLkNoYXJ0RXZlbnQgfSBDaGFydEV2ZW50XG4gKi8gLyoqXG4gKiBAcHJpdmF0ZVxuICovIGZ1bmN0aW9uIF9pc0RvbVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfZ2V0UGFyZW50Tm9kZShkb21Ob2RlKSB7XG4gICAgbGV0IHBhcmVudCA9IGRvbU5vZGUucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC50b1N0cmluZygpID09PSAnW29iamVjdCBTaGFkb3dSb290XScpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Lmhvc3Q7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnQ7XG59XG4vKipcbiAqIGNvbnZlcnQgbWF4LXdpZHRoL21heC1oZWlnaHQgdmFsdWVzIHRoYXQgbWF5IGJlIHBlcmNlbnRhZ2VzIGludG8gYSBudW1iZXJcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gcGFyc2VNYXhTdHlsZShzdHlsZVZhbHVlLCBub2RlLCBwYXJlbnRQcm9wZXJ0eSkge1xuICAgIGxldCB2YWx1ZUluUGl4ZWxzO1xuICAgIGlmICh0eXBlb2Ygc3R5bGVWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWVJblBpeGVscyA9IHBhcnNlSW50KHN0eWxlVmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKHN0eWxlVmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gcGVyY2VudGFnZSAqIHNpemUgaW4gZGltZW5zaW9uXG4gICAgICAgICAgICB2YWx1ZUluUGl4ZWxzID0gdmFsdWVJblBpeGVscyAvIDEwMCAqIG5vZGUucGFyZW50Tm9kZVtwYXJlbnRQcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZUluUGl4ZWxzID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlSW5QaXhlbHM7XG59XG5jb25zdCBnZXRDb21wdXRlZFN0eWxlID0gKGVsZW1lbnQpPT5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbmZ1bmN0aW9uIGdldFN0eWxlKGVsLCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbn1cbmNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAndG9wJyxcbiAgICAncmlnaHQnLFxuICAgICdib3R0b20nLFxuICAgICdsZWZ0J1xuXTtcbmZ1bmN0aW9uIGdldFBvc2l0aW9uZWRTdHlsZShzdHlsZXMsIHN0eWxlLCBzdWZmaXgpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBzdWZmaXggPSBzdWZmaXggPyAnLScgKyBzdWZmaXggOiAnJztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25zW2ldO1xuICAgICAgICByZXN1bHRbcG9zXSA9IHBhcnNlRmxvYXQoc3R5bGVzW3N0eWxlICsgJy0nICsgcG9zICsgc3VmZml4XSkgfHwgMDtcbiAgICB9XG4gICAgcmVzdWx0LndpZHRoID0gcmVzdWx0LmxlZnQgKyByZXN1bHQucmlnaHQ7XG4gICAgcmVzdWx0LmhlaWdodCA9IHJlc3VsdC50b3AgKyByZXN1bHQuYm90dG9tO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5jb25zdCB1c2VPZmZzZXRQb3MgPSAoeCwgeSwgdGFyZ2V0KT0+KHggPiAwIHx8IHkgPiAwKSAmJiAoIXRhcmdldCB8fCAhdGFyZ2V0LnNoYWRvd1Jvb3QpO1xuLyoqXG4gKiBAcGFyYW0gZVxuICogQHBhcmFtIGNhbnZhc1xuICogQHJldHVybnMgQ2FudmFzIHBvc2l0aW9uXG4gKi8gZnVuY3Rpb24gZ2V0Q2FudmFzUG9zaXRpb24oZSwgY2FudmFzKSB7XG4gICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcztcbiAgICBjb25zdCBzb3VyY2UgPSB0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID8gdG91Y2hlc1swXSA6IGU7XG4gICAgY29uc3QgeyBvZmZzZXRYICwgb2Zmc2V0WSAgfSA9IHNvdXJjZTtcbiAgICBsZXQgYm94ID0gZmFsc2U7XG4gICAgbGV0IHgsIHk7XG4gICAgaWYgKHVzZU9mZnNldFBvcyhvZmZzZXRYLCBvZmZzZXRZLCBlLnRhcmdldCkpIHtcbiAgICAgICAgeCA9IG9mZnNldFg7XG4gICAgICAgIHkgPSBvZmZzZXRZO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHggPSBzb3VyY2UuY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICAgICAgeSA9IHNvdXJjZS5jbGllbnRZIC0gcmVjdC50b3A7XG4gICAgICAgIGJveCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGJveFxuICAgIH07XG59XG4vKipcbiAqIEdldHMgYW4gZXZlbnQncyB4LCB5IGNvb3JkaW5hdGVzLCByZWxhdGl2ZSB0byB0aGUgY2hhcnQgYXJlYVxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gY2hhcnRcbiAqIEByZXR1cm5zIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlIGV2ZW50XG4gKi8gZnVuY3Rpb24gZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpIHtcbiAgICBpZiAoJ25hdGl2ZScgaW4gZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgICBjb25zdCB7IGNhbnZhcyAsIGN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICB9ID0gY2hhcnQ7XG4gICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNhbnZhcyk7XG4gICAgY29uc3QgYm9yZGVyQm94ID0gc3R5bGUuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCc7XG4gICAgY29uc3QgcGFkZGluZ3MgPSBnZXRQb3NpdGlvbmVkU3R5bGUoc3R5bGUsICdwYWRkaW5nJyk7XG4gICAgY29uc3QgYm9yZGVycyA9IGdldFBvc2l0aW9uZWRTdHlsZShzdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgIGNvbnN0IHsgeCAsIHkgLCBib3ggIH0gPSBnZXRDYW52YXNQb3NpdGlvbihldmVudCwgY2FudmFzKTtcbiAgICBjb25zdCB4T2Zmc2V0ID0gcGFkZGluZ3MubGVmdCArIChib3ggJiYgYm9yZGVycy5sZWZ0KTtcbiAgICBjb25zdCB5T2Zmc2V0ID0gcGFkZGluZ3MudG9wICsgKGJveCAmJiBib3JkZXJzLnRvcCk7XG4gICAgbGV0IHsgd2lkdGggLCBoZWlnaHQgIH0gPSBjaGFydDtcbiAgICBpZiAoYm9yZGVyQm94KSB7XG4gICAgICAgIHdpZHRoIC09IHBhZGRpbmdzLndpZHRoICsgYm9yZGVycy53aWR0aDtcbiAgICAgICAgaGVpZ2h0IC09IHBhZGRpbmdzLmhlaWdodCArIGJvcmRlcnMuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKCh4IC0geE9mZnNldCkgLyB3aWR0aCAqIGNhbnZhcy53aWR0aCAvIGN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKSxcbiAgICAgICAgeTogTWF0aC5yb3VuZCgoeSAtIHlPZmZzZXQpIC8gaGVpZ2h0ICogY2FudmFzLmhlaWdodCAvIGN1cnJlbnREZXZpY2VQaXhlbFJhdGlvKVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJTaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCkge1xuICAgIGxldCBtYXhXaWR0aCwgbWF4SGVpZ2h0O1xuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNhbnZhcyAmJiBfZ2V0UGFyZW50Tm9kZShjYW52YXMpO1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgICAgd2lkdGggPSBjYW52YXMuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSBjYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gdGhpcyBpcyB0aGUgYm9yZGVyIGJveCBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckJvcmRlciA9IGdldFBvc2l0aW9uZWRTdHlsZShjb250YWluZXJTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUGFkZGluZyA9IGdldFBvc2l0aW9uZWRTdHlsZShjb250YWluZXJTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgICAgICAgIHdpZHRoID0gcmVjdC53aWR0aCAtIGNvbnRhaW5lclBhZGRpbmcud2lkdGggLSBjb250YWluZXJCb3JkZXIud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSByZWN0LmhlaWdodCAtIGNvbnRhaW5lclBhZGRpbmcuaGVpZ2h0IC0gY29udGFpbmVyQm9yZGVyLmhlaWdodDtcbiAgICAgICAgICAgIG1heFdpZHRoID0gcGFyc2VNYXhTdHlsZShjb250YWluZXJTdHlsZS5tYXhXaWR0aCwgY29udGFpbmVyLCAnY2xpZW50V2lkdGgnKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHBhcnNlTWF4U3R5bGUoY29udGFpbmVyU3R5bGUubWF4SGVpZ2h0LCBjb250YWluZXIsICdjbGllbnRIZWlnaHQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBtYXhXaWR0aDogbWF4V2lkdGggfHwgSU5GSU5JVFksXG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0IHx8IElORklOSVRZXG4gICAgfTtcbn1cbmNvbnN0IHJvdW5kMSA9ICh2KT0+TWF0aC5yb3VuZCh2ICogMTApIC8gMTA7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gZ2V0TWF4aW11bVNpemUoY2FudmFzLCBiYldpZHRoLCBiYkhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY2FudmFzKTtcbiAgICBjb25zdCBtYXJnaW5zID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnbWFyZ2luJyk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBwYXJzZU1heFN0eWxlKHN0eWxlLm1heFdpZHRoLCBjYW52YXMsICdjbGllbnRXaWR0aCcpIHx8IElORklOSVRZO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHBhcnNlTWF4U3R5bGUoc3R5bGUubWF4SGVpZ2h0LCBjYW52YXMsICdjbGllbnRIZWlnaHQnKSB8fCBJTkZJTklUWTtcbiAgICBjb25zdCBjb250YWluZXJTaXplID0gZ2V0Q29udGFpbmVyU2l6ZShjYW52YXMsIGJiV2lkdGgsIGJiSGVpZ2h0KTtcbiAgICBsZXQgeyB3aWR0aCAsIGhlaWdodCAgfSA9IGNvbnRhaW5lclNpemU7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuICAgICAgICBjb25zdCBib3JkZXJzID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdzID0gZ2V0UG9zaXRpb25lZFN0eWxlKHN0eWxlLCAncGFkZGluZycpO1xuICAgICAgICB3aWR0aCAtPSBwYWRkaW5ncy53aWR0aCArIGJvcmRlcnMud2lkdGg7XG4gICAgICAgIGhlaWdodCAtPSBwYWRkaW5ncy5oZWlnaHQgKyBib3JkZXJzLmhlaWdodDtcbiAgICB9XG4gICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCAtIG1hcmdpbnMud2lkdGgpO1xuICAgIGhlaWdodCA9IE1hdGgubWF4KDAsIGFzcGVjdFJhdGlvID8gd2lkdGggLyBhc3BlY3RSYXRpbyA6IGhlaWdodCAtIG1hcmdpbnMuaGVpZ2h0KTtcbiAgICB3aWR0aCA9IHJvdW5kMShNYXRoLm1pbih3aWR0aCwgbWF4V2lkdGgsIGNvbnRhaW5lclNpemUubWF4V2lkdGgpKTtcbiAgICBoZWlnaHQgPSByb3VuZDEoTWF0aC5taW4oaGVpZ2h0LCBtYXhIZWlnaHQsIGNvbnRhaW5lclNpemUubWF4SGVpZ2h0KSk7XG4gICAgaWYgKHdpZHRoICYmICFoZWlnaHQpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzQ2NTlcbiAgICAgICAgLy8gSWYgdGhlIGNhbnZhcyBoYXMgd2lkdGgsIGJ1dCBubyBoZWlnaHQsIGRlZmF1bHQgdG8gYXNwZWN0UmF0aW8gb2YgMiAoY2FudmFzIGRlZmF1bHQpXG4gICAgICAgIGhlaWdodCA9IHJvdW5kMSh3aWR0aCAvIDIpO1xuICAgIH1cbiAgICBjb25zdCBtYWludGFpbkhlaWdodCA9IGJiV2lkdGggIT09IHVuZGVmaW5lZCB8fCBiYkhlaWdodCAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYWludGFpbkhlaWdodCAmJiBhc3BlY3RSYXRpbyAmJiBjb250YWluZXJTaXplLmhlaWdodCAmJiBoZWlnaHQgPiBjb250YWluZXJTaXplLmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBjb250YWluZXJTaXplLmhlaWdodDtcbiAgICAgICAgd2lkdGggPSByb3VuZDEoTWF0aC5mbG9vcihoZWlnaHQgKiBhc3BlY3RSYXRpbykpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbn1cbi8qKlxuICogQHBhcmFtIGNoYXJ0XG4gKiBAcGFyYW0gZm9yY2VSYXRpb1xuICogQHBhcmFtIGZvcmNlU3R5bGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNhbnZhcyBjb250ZXh0IHNpemUgb3IgdHJhbnNmb3JtYXRpb24gaGFzIGNoYW5nZWQuXG4gKi8gZnVuY3Rpb24gcmV0aW5hU2NhbGUoY2hhcnQsIGZvcmNlUmF0aW8sIGZvcmNlU3R5bGUpIHtcbiAgICBjb25zdCBwaXhlbFJhdGlvID0gZm9yY2VSYXRpbyB8fCAxO1xuICAgIGNvbnN0IGRldmljZUhlaWdodCA9IE1hdGguZmxvb3IoY2hhcnQuaGVpZ2h0ICogcGl4ZWxSYXRpbyk7XG4gICAgY29uc3QgZGV2aWNlV2lkdGggPSBNYXRoLmZsb29yKGNoYXJ0LndpZHRoICogcGl4ZWxSYXRpbyk7XG4gICAgY2hhcnQuaGVpZ2h0ID0gTWF0aC5mbG9vcihjaGFydC5oZWlnaHQpO1xuICAgIGNoYXJ0LndpZHRoID0gTWF0aC5mbG9vcihjaGFydC53aWR0aCk7XG4gICAgY29uc3QgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICAgIC8vIElmIG5vIHN0eWxlIGhhcyBiZWVuIHNldCBvbiB0aGUgY2FudmFzLCB0aGUgcmVuZGVyIHNpemUgaXMgdXNlZCBhcyBkaXNwbGF5IHNpemUsXG4gICAgLy8gbWFraW5nIHRoZSBjaGFydCB2aXN1YWxseSBiaWdnZXIsIHNvIGxldCdzIGVuZm9yY2UgaXQgdG8gdGhlIFwiY29ycmVjdFwiIHZhbHVlcy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NoYXJ0anMvQ2hhcnQuanMvaXNzdWVzLzM1NzVcbiAgICBpZiAoY2FudmFzLnN0eWxlICYmIChmb3JjZVN0eWxlIHx8ICFjYW52YXMuc3R5bGUuaGVpZ2h0ICYmICFjYW52YXMuc3R5bGUud2lkdGgpKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtjaGFydC5oZWlnaHR9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtjaGFydC53aWR0aH1weGA7XG4gICAgfVxuICAgIGlmIChjaGFydC5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyAhPT0gcGl4ZWxSYXRpbyB8fCBjYW52YXMuaGVpZ2h0ICE9PSBkZXZpY2VIZWlnaHQgfHwgY2FudmFzLndpZHRoICE9PSBkZXZpY2VXaWR0aCkge1xuICAgICAgICBjaGFydC5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBkZXZpY2VIZWlnaHQ7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGRldmljZVdpZHRoO1xuICAgICAgICBjaGFydC5jdHguc2V0VHJhbnNmb3JtKHBpeGVsUmF0aW8sIDAsIDAsIHBpeGVsUmF0aW8sIDAsIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBEZXRlY3RzIHN1cHBvcnQgZm9yIG9wdGlvbnMgb2JqZWN0IGFyZ3VtZW50IGluIGFkZEV2ZW50TGlzdGVuZXIuXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG4gKiBAcHJpdmF0ZVxuICovIGNvbnN0IHN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICBsZXQgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBnZXQgcGFzc2l2ZSAoKSB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoX2lzRG9tU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG51bGwsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3Mgb2YgZXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHBhc3NpdmVTdXBwb3J0ZWQ7XG59KCk7XG4vKipcbiAqIFRoZSBcInVzZWRcIiBzaXplIGlzIHRoZSBmaW5hbCB2YWx1ZSBvZiBhIGRpbWVuc2lvbiBwcm9wZXJ0eSBhZnRlciBhbGwgY2FsY3VsYXRpb25zIGhhdmVcbiAqIGJlZW4gcGVyZm9ybWVkLiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBjb21wdXRlZCBzdHlsZSBvZiBgZWxlbWVudGAgYnV0IHJldHVybnMgdW5kZWZpbmVkXG4gKiBpZiB0aGUgY29tcHV0ZWQgc3R5bGUgaXMgbm90IGV4cHJlc3NlZCBpbiBwaXhlbHMuIFRoYXQgY2FuIGhhcHBlbiBpbiBzb21lIGNhc2VzIHdoZXJlXG4gKiBgZWxlbWVudGAgaGFzIGEgc2l6ZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGFuZCB0aGlzIGxhc3Qgb25lIGlzIG5vdCB5ZXQgZGlzcGxheWVkLFxuICogZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBgZGlzcGxheTogbm9uZWAgb24gYSBwYXJlbnQgbm9kZS5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3VzZWRfdmFsdWVcbiAqIEByZXR1cm5zIFNpemUgaW4gcGl4ZWxzIG9yIHVuZGVmaW5lZCBpZiB1bmtub3duLlxuICovIGZ1bmN0aW9uIHJlYWRVc2VkU2l6ZShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHkpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCgvXihcXGQrKShcXC5cXGQrKT9weCQvKTtcbiAgICByZXR1cm4gbWF0Y2hlcyA/ICttYXRjaGVzWzFdIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX3BvaW50SW5MaW5lKHAxLCBwMiwgdCwgbW9kZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHAxLnggKyB0ICogKHAyLnggLSBwMS54KSxcbiAgICAgICAgeTogcDEueSArIHQgKiAocDIueSAtIHAxLnkpXG4gICAgfTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBfc3RlcHBlZEludGVycG9sYXRpb24ocDEsIHAyLCB0LCBtb2RlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcDEueCArIHQgKiAocDIueCAtIHAxLngpLFxuICAgICAgICB5OiBtb2RlID09PSAnbWlkZGxlJyA/IHQgPCAwLjUgPyBwMS55IDogcDIueSA6IG1vZGUgPT09ICdhZnRlcicgPyB0IDwgMSA/IHAxLnkgOiBwMi55IDogdCA+IDAgPyBwMi55IDogcDEueVxuICAgIH07XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi8gZnVuY3Rpb24gX2JlemllckludGVycG9sYXRpb24ocDEsIHAyLCB0LCBtb2RlKSB7XG4gICAgY29uc3QgY3AxID0ge1xuICAgICAgICB4OiBwMS5jcDJ4LFxuICAgICAgICB5OiBwMS5jcDJ5XG4gICAgfTtcbiAgICBjb25zdCBjcDIgPSB7XG4gICAgICAgIHg6IHAyLmNwMXgsXG4gICAgICAgIHk6IHAyLmNwMXlcbiAgICB9O1xuICAgIGNvbnN0IGEgPSBfcG9pbnRJbkxpbmUocDEsIGNwMSwgdCk7XG4gICAgY29uc3QgYiA9IF9wb2ludEluTGluZShjcDEsIGNwMiwgdCk7XG4gICAgY29uc3QgYyA9IF9wb2ludEluTGluZShjcDIsIHAyLCB0KTtcbiAgICBjb25zdCBkID0gX3BvaW50SW5MaW5lKGEsIGIsIHQpO1xuICAgIGNvbnN0IGUgPSBfcG9pbnRJbkxpbmUoYiwgYywgdCk7XG4gICAgcmV0dXJuIF9wb2ludEluTGluZShkLCBlLCB0KTtcbn1cblxuY29uc3QgZ2V0UmlnaHRUb0xlZnRBZGFwdGVyID0gZnVuY3Rpb24ocmVjdFgsIHdpZHRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3RYICsgcmVjdFggKyB3aWR0aCAtIHg7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFdpZHRoICh3KSB7XG4gICAgICAgICAgICB3aWR0aCA9IHc7XG4gICAgICAgIH0sXG4gICAgICAgIHRleHRBbGlnbiAoYWxpZ24pIHtcbiAgICAgICAgICAgIGlmIChhbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxpZ247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWxpZ24gPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB9LFxuICAgICAgICB4UGx1cyAoeCwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB4IC0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxlZnRGb3JMdHIgKHgsIGl0ZW1XaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSBpdGVtV2lkdGg7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmNvbnN0IGdldExlZnRUb1JpZ2h0QWRhcHRlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9LFxuICAgICAgICBzZXRXaWR0aCAodykge30sXG4gICAgICAgIHRleHRBbGlnbiAoYWxpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBhbGlnbjtcbiAgICAgICAgfSxcbiAgICAgICAgeFBsdXMgKHgsIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4geCArIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBsZWZ0Rm9yTHRyICh4LCBfaXRlbVdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZnVuY3Rpb24gZ2V0UnRsQWRhcHRlcihydGwsIHJlY3RYLCB3aWR0aCkge1xuICAgIHJldHVybiBydGwgPyBnZXRSaWdodFRvTGVmdEFkYXB0ZXIocmVjdFgsIHdpZHRoKSA6IGdldExlZnRUb1JpZ2h0QWRhcHRlcigpO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVUZXh0RGlyZWN0aW9uKGN0eCwgZGlyZWN0aW9uKSB7XG4gICAgbGV0IHN0eWxlLCBvcmlnaW5hbDtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbHRyJyB8fCBkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgIHN0eWxlID0gY3R4LmNhbnZhcy5zdHlsZTtcbiAgICAgICAgb3JpZ2luYWwgPSBbXG4gICAgICAgICAgICBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSxcbiAgICAgICAgICAgIHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoJ2RpcmVjdGlvbicpXG4gICAgICAgIF07XG4gICAgICAgIHN0eWxlLnNldFByb3BlcnR5KCdkaXJlY3Rpb24nLCBkaXJlY3Rpb24sICdpbXBvcnRhbnQnKTtcbiAgICAgICAgY3R4LnByZXZUZXh0RGlyZWN0aW9uID0gb3JpZ2luYWw7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZVRleHREaXJlY3Rpb24oY3R4LCBvcmlnaW5hbCkge1xuICAgIGlmIChvcmlnaW5hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSBjdHgucHJldlRleHREaXJlY3Rpb247XG4gICAgICAgIGN0eC5jYW52YXMuc3R5bGUuc2V0UHJvcGVydHkoJ2RpcmVjdGlvbicsIG9yaWdpbmFsWzBdLCBvcmlnaW5hbFsxXSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZuKHByb3BlcnR5KSB7XG4gICAgaWYgKHByb3BlcnR5ID09PSAnYW5nbGUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiZXR3ZWVuOiBfYW5nbGVCZXR3ZWVuLFxuICAgICAgICAgICAgY29tcGFyZTogX2FuZ2xlRGlmZixcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogX25vcm1hbGl6ZUFuZ2xlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJldHdlZW46IF9pc0JldHdlZW4sXG4gICAgICAgIGNvbXBhcmU6IChhLCBiKT0+YSAtIGIsXG4gICAgICAgIG5vcm1hbGl6ZTogKHgpPT54XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlZ21lbnQoeyBzdGFydCAsIGVuZCAsIGNvdW50ICwgbG9vcCAsIHN0eWxlICB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0ICUgY291bnQsXG4gICAgICAgIGVuZDogZW5kICUgY291bnQsXG4gICAgICAgIGxvb3A6IGxvb3AgJiYgKGVuZCAtIHN0YXJ0ICsgMSkgJSBjb3VudCA9PT0gMCxcbiAgICAgICAgc3R5bGVcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0U2VnbWVudChzZWdtZW50LCBwb2ludHMsIGJvdW5kcykge1xuICAgIGNvbnN0IHsgcHJvcGVydHkgLCBzdGFydDogc3RhcnRCb3VuZCAsIGVuZDogZW5kQm91bmQgIH0gPSBib3VuZHM7XG4gICAgY29uc3QgeyBiZXR3ZWVuICwgbm9ybWFsaXplICB9ID0gcHJvcGVydHlGbihwcm9wZXJ0eSk7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCB7IHN0YXJ0ICwgZW5kICwgbG9vcCAgfSA9IHNlZ21lbnQ7XG4gICAgbGV0IGksIGlsZW47XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgc3RhcnQgKz0gY291bnQ7XG4gICAgICAgIGVuZCArPSBjb3VudDtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgaWYgKCFiZXR3ZWVuKG5vcm1hbGl6ZShwb2ludHNbc3RhcnQgJSBjb3VudF1bcHJvcGVydHldKSwgc3RhcnRCb3VuZCwgZW5kQm91bmQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydC0tO1xuICAgICAgICAgICAgZW5kLS07XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgJT0gY291bnQ7XG4gICAgICAgIGVuZCAlPSBjb3VudDtcbiAgICB9XG4gICAgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgICAgIGVuZCArPSBjb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZCxcbiAgICAgICAgbG9vcCxcbiAgICAgICAgc3R5bGU6IHNlZ21lbnQuc3R5bGVcbiAgICB9O1xufVxuIGZ1bmN0aW9uIF9ib3VuZFNlZ21lbnQoc2VnbWVudCwgcG9pbnRzLCBib3VuZHMpIHtcbiAgICBpZiAoIWJvdW5kcykge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgc2VnbWVudFxuICAgICAgICBdO1xuICAgIH1cbiAgICBjb25zdCB7IHByb3BlcnR5ICwgc3RhcnQ6IHN0YXJ0Qm91bmQgLCBlbmQ6IGVuZEJvdW5kICB9ID0gYm91bmRzO1xuICAgIGNvbnN0IGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBjb25zdCB7IGNvbXBhcmUgLCBiZXR3ZWVuICwgbm9ybWFsaXplICB9ID0gcHJvcGVydHlGbihwcm9wZXJ0eSk7XG4gICAgY29uc3QgeyBzdGFydCAsIGVuZCAsIGxvb3AgLCBzdHlsZSAgfSA9IGdldFNlZ21lbnQoc2VnbWVudCwgcG9pbnRzLCBib3VuZHMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBsZXQgc3ViU3RhcnQgPSBudWxsO1xuICAgIGxldCB2YWx1ZSwgcG9pbnQsIHByZXZWYWx1ZTtcbiAgICBjb25zdCBzdGFydElzQmVmb3JlID0gKCk9PmJldHdlZW4oc3RhcnRCb3VuZCwgcHJldlZhbHVlLCB2YWx1ZSkgJiYgY29tcGFyZShzdGFydEJvdW5kLCBwcmV2VmFsdWUpICE9PSAwO1xuICAgIGNvbnN0IGVuZElzQmVmb3JlID0gKCk9PmNvbXBhcmUoZW5kQm91bmQsIHZhbHVlKSA9PT0gMCB8fCBiZXR3ZWVuKGVuZEJvdW5kLCBwcmV2VmFsdWUsIHZhbHVlKTtcbiAgICBjb25zdCBzaG91bGRTdGFydCA9ICgpPT5pbnNpZGUgfHwgc3RhcnRJc0JlZm9yZSgpO1xuICAgIGNvbnN0IHNob3VsZFN0b3AgPSAoKT0+IWluc2lkZSB8fCBlbmRJc0JlZm9yZSgpO1xuICAgIGZvcihsZXQgaSA9IHN0YXJ0LCBwcmV2ID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpe1xuICAgICAgICBwb2ludCA9IHBvaW50c1tpICUgY291bnRdO1xuICAgICAgICBpZiAocG9pbnQuc2tpcCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBub3JtYWxpemUocG9pbnRbcHJvcGVydHldKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluc2lkZSA9IGJldHdlZW4odmFsdWUsIHN0YXJ0Qm91bmQsIGVuZEJvdW5kKTtcbiAgICAgICAgaWYgKHN1YlN0YXJ0ID09PSBudWxsICYmIHNob3VsZFN0YXJ0KCkpIHtcbiAgICAgICAgICAgIHN1YlN0YXJ0ID0gY29tcGFyZSh2YWx1ZSwgc3RhcnRCb3VuZCkgPT09IDAgPyBpIDogcHJldjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ViU3RhcnQgIT09IG51bGwgJiYgc2hvdWxkU3RvcCgpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub3JtYWxpemVTZWdtZW50KHtcbiAgICAgICAgICAgICAgICBzdGFydDogc3ViU3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBpLFxuICAgICAgICAgICAgICAgIGxvb3AsXG4gICAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHN1YlN0YXJ0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gaTtcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmIChzdWJTdGFydCAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucHVzaChub3JtYWxpemVTZWdtZW50KHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdWJTdGFydCxcbiAgICAgICAgICAgIGVuZCxcbiAgICAgICAgICAgIGxvb3AsXG4gICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgIHN0eWxlXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiBmdW5jdGlvbiBfYm91bmRTZWdtZW50cyhsaW5lLCBib3VuZHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3Qgc3ViID0gX2JvdW5kU2VnbWVudChzZWdtZW50c1tpXSwgbGluZS5wb2ludHMsIGJvdW5kcyk7XG4gICAgICAgIGlmIChzdWIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5zdWIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4gZnVuY3Rpb24gZmluZFN0YXJ0QW5kRW5kKHBvaW50cywgY291bnQsIGxvb3AsIHNwYW5HYXBzKSB7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gY291bnQgLSAxO1xuICAgIGlmIChsb29wICYmICFzcGFuR2Fwcykge1xuICAgICAgICB3aGlsZShzdGFydCA8IGNvdW50ICYmICFwb2ludHNbc3RhcnRdLnNraXApe1xuICAgICAgICAgICAgc3RhcnQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZShzdGFydCA8IGNvdW50ICYmIHBvaW50c1tzdGFydF0uc2tpcCl7XG4gICAgICAgIHN0YXJ0Kys7XG4gICAgfVxuICAgIHN0YXJ0ICU9IGNvdW50O1xuICAgIGlmIChsb29wKSB7XG4gICAgICAgIGVuZCArPSBzdGFydDtcbiAgICB9XG4gICAgd2hpbGUoZW5kID4gc3RhcnQgJiYgcG9pbnRzW2VuZCAlIGNvdW50XS5za2lwKXtcbiAgICAgICAgZW5kLS07XG4gICAgfVxuICAgIGVuZCAlPSBjb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kXG4gICAgfTtcbn1cbiBmdW5jdGlvbiBzb2xpZFNlZ21lbnRzKHBvaW50cywgc3RhcnQsIG1heCwgbG9vcCkge1xuICAgIGNvbnN0IGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgbGFzdCA9IHN0YXJ0O1xuICAgIGxldCBwcmV2ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICBsZXQgZW5kO1xuICAgIGZvcihlbmQgPSBzdGFydCArIDE7IGVuZCA8PSBtYXg7ICsrZW5kKXtcbiAgICAgICAgY29uc3QgY3VyID0gcG9pbnRzW2VuZCAlIGNvdW50XTtcbiAgICAgICAgaWYgKGN1ci5za2lwIHx8IGN1ci5zdG9wKSB7XG4gICAgICAgICAgICBpZiAoIXByZXYuc2tpcCkge1xuICAgICAgICAgICAgICAgIGxvb3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCAlIGNvdW50LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IChlbmQgLSAxKSAlIGNvdW50LFxuICAgICAgICAgICAgICAgICAgICBsb29wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBsYXN0ID0gY3VyLnN0b3AgPyBlbmQgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdCA9IGVuZDtcbiAgICAgICAgICAgIGlmIChwcmV2LnNraXApIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gY3VyO1xuICAgIH1cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogc3RhcnQgJSBjb3VudCxcbiAgICAgICAgICAgIGVuZDogbGFzdCAlIGNvdW50LFxuICAgICAgICAgICAgbG9vcFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiBmdW5jdGlvbiBfY29tcHV0ZVNlZ21lbnRzKGxpbmUsIHNlZ21lbnRPcHRpb25zKSB7XG4gICAgY29uc3QgcG9pbnRzID0gbGluZS5wb2ludHM7XG4gICAgY29uc3Qgc3BhbkdhcHMgPSBsaW5lLm9wdGlvbnMuc3BhbkdhcHM7XG4gICAgY29uc3QgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgIGlmICghY291bnQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBsb29wID0gISFsaW5lLl9sb29wO1xuICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBmaW5kU3RhcnRBbmRFbmQocG9pbnRzLCBjb3VudCwgbG9vcCwgc3BhbkdhcHMpO1xuICAgIGlmIChzcGFuR2FwcyA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gc3BsaXRCeVN0eWxlcyhsaW5lLCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgIGxvb3BcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSwgcG9pbnRzLCBzZWdtZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IG1heCA9IGVuZCA8IHN0YXJ0ID8gZW5kICsgY291bnQgOiBlbmQ7XG4gICAgY29uc3QgY29tcGxldGVMb29wID0gISFsaW5lLl9mdWxsTG9vcCAmJiBzdGFydCA9PT0gMCAmJiBlbmQgPT09IGNvdW50IC0gMTtcbiAgICByZXR1cm4gc3BsaXRCeVN0eWxlcyhsaW5lLCBzb2xpZFNlZ21lbnRzKHBvaW50cywgc3RhcnQsIG1heCwgY29tcGxldGVMb29wKSwgcG9pbnRzLCBzZWdtZW50T3B0aW9ucyk7XG59XG4gZnVuY3Rpb24gc3BsaXRCeVN0eWxlcyhsaW5lLCBzZWdtZW50cywgcG9pbnRzLCBzZWdtZW50T3B0aW9ucykge1xuICAgIGlmICghc2VnbWVudE9wdGlvbnMgfHwgIXNlZ21lbnRPcHRpb25zLnNldENvbnRleHQgfHwgIXBvaW50cykge1xuICAgICAgICByZXR1cm4gc2VnbWVudHM7XG4gICAgfVxuICAgIHJldHVybiBkb1NwbGl0QnlTdHlsZXMobGluZSwgc2VnbWVudHMsIHBvaW50cywgc2VnbWVudE9wdGlvbnMpO1xufVxuIGZ1bmN0aW9uIGRvU3BsaXRCeVN0eWxlcyhsaW5lLCBzZWdtZW50cywgcG9pbnRzLCBzZWdtZW50T3B0aW9ucykge1xuICAgIGNvbnN0IGNoYXJ0Q29udGV4dCA9IGxpbmUuX2NoYXJ0LmdldENvbnRleHQoKTtcbiAgICBjb25zdCBiYXNlU3R5bGUgPSByZWFkU3R5bGUobGluZS5vcHRpb25zKTtcbiAgICBjb25zdCB7IF9kYXRhc2V0SW5kZXg6IGRhdGFzZXRJbmRleCAsIG9wdGlvbnM6IHsgc3BhbkdhcHMgIH0gIH0gPSBsaW5lO1xuICAgIGNvbnN0IGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgcHJldlN0eWxlID0gYmFzZVN0eWxlO1xuICAgIGxldCBzdGFydCA9IHNlZ21lbnRzWzBdLnN0YXJ0O1xuICAgIGxldCBpID0gc3RhcnQ7XG4gICAgZnVuY3Rpb24gYWRkU3R5bGUocywgZSwgbCwgc3QpIHtcbiAgICAgICAgY29uc3QgZGlyID0gc3BhbkdhcHMgPyAtMSA6IDE7XG4gICAgICAgIGlmIChzID09PSBlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcyArPSBjb3VudDtcbiAgICAgICAgd2hpbGUocG9pbnRzW3MgJSBjb3VudF0uc2tpcCl7XG4gICAgICAgICAgICBzIC09IGRpcjtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZShwb2ludHNbZSAlIGNvdW50XS5za2lwKXtcbiAgICAgICAgICAgIGUgKz0gZGlyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzICUgY291bnQgIT09IGUgJSBjb3VudCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBzICUgY291bnQsXG4gICAgICAgICAgICAgICAgZW5kOiBlICUgY291bnQsXG4gICAgICAgICAgICAgICAgbG9vcDogbCxcbiAgICAgICAgICAgICAgICBzdHlsZTogc3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldlN0eWxlID0gc3Q7XG4gICAgICAgICAgICBzdGFydCA9IGUgJSBjb3VudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe1xuICAgICAgICBzdGFydCA9IHNwYW5HYXBzID8gc3RhcnQgOiBzZWdtZW50LnN0YXJ0O1xuICAgICAgICBsZXQgcHJldiA9IHBvaW50c1tzdGFydCAlIGNvdW50XTtcbiAgICAgICAgbGV0IHN0eWxlO1xuICAgICAgICBmb3IoaSA9IHN0YXJ0ICsgMTsgaSA8PSBzZWdtZW50LmVuZDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IHB0ID0gcG9pbnRzW2kgJSBjb3VudF07XG4gICAgICAgICAgICBzdHlsZSA9IHJlYWRTdHlsZShzZWdtZW50T3B0aW9ucy5zZXRDb250ZXh0KGNyZWF0ZUNvbnRleHQoY2hhcnRDb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlZ21lbnQnLFxuICAgICAgICAgICAgICAgIHAwOiBwcmV2LFxuICAgICAgICAgICAgICAgIHAxOiBwdCxcbiAgICAgICAgICAgICAgICBwMERhdGFJbmRleDogKGkgLSAxKSAlIGNvdW50LFxuICAgICAgICAgICAgICAgIHAxRGF0YUluZGV4OiBpICUgY291bnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlZChzdHlsZSwgcHJldlN0eWxlKSkge1xuICAgICAgICAgICAgICAgIGFkZFN0eWxlKHN0YXJ0LCBpIC0gMSwgc2VnbWVudC5sb29wLCBwcmV2U3R5bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldiA9IHB0O1xuICAgICAgICAgICAgcHJldlN0eWxlID0gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0IDwgaSAtIDEpIHtcbiAgICAgICAgICAgIGFkZFN0eWxlKHN0YXJ0LCBpIC0gMSwgc2VnbWVudC5sb29wLCBwcmV2U3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiByZWFkU3R5bGUob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgIGJvcmRlckNhcFN0eWxlOiBvcHRpb25zLmJvcmRlckNhcFN0eWxlLFxuICAgICAgICBib3JkZXJEYXNoOiBvcHRpb25zLmJvcmRlckRhc2gsXG4gICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IG9wdGlvbnMuYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgYm9yZGVySm9pblN0eWxlOiBvcHRpb25zLmJvcmRlckpvaW5TdHlsZSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IG9wdGlvbnMuYm9yZGVyV2lkdGgsXG4gICAgICAgIGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0eWxlQ2hhbmdlZChzdHlsZSwgcHJldlN0eWxlKSB7XG4gICAgaWYgKCFwcmV2U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuICAgIGNvbnN0IHJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUGF0dGVybk9yR3JhZGllbnQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZS5pbmRleE9mKHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdHlsZSwgcmVwbGFjZXIpICE9PSBKU09OLnN0cmluZ2lmeShwcmV2U3R5bGUsIHJlcGxhY2VyKTtcbn1cblxuZXhwb3J0IHsgdW5jbGlwQXJlYSBhcyAkLCBfcmxvb2t1cEJ5S2V5IGFzIEEsIF9sb29rdXBCeUtleSBhcyBCLCBfaXNQb2ludEluQXJlYSBhcyBDLCBnZXRBbmdsZUZyb21Qb2ludCBhcyBELCB0b1BhZGRpbmcgYXMgRSwgZWFjaCBhcyBGLCBnZXRNYXhpbXVtU2l6ZSBhcyBHLCBIQUxGX1BJIGFzIEgsIF9nZXRQYXJlbnROb2RlIGFzIEksIHJlYWRVc2VkU2l6ZSBhcyBKLCBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIGFzIEssIHRocm90dGxlZCBhcyBMLCBfaXNEb21TdXBwb3J0ZWQgYXMgTSwgX2ZhY3Rvcml6ZSBhcyBOLCBmaW5pdGVPckRlZmF1bHQgYXMgTywgUEkgYXMgUCwgY2FsbGJhY2sgYXMgUSwgX2FkZEdyYWNlIGFzIFIsIF9saW1pdFZhbHVlIGFzIFMsIFRBVSBhcyBULCB0b0RlZ3JlZXMgYXMgVSwgX21lYXN1cmVUZXh0IGFzIFYsIF9pbnQxNlJhbmdlIGFzIFcsIF9hbGlnblBpeGVsIGFzIFgsIGNsaXBBcmVhIGFzIFksIHJlbmRlclRleHQgYXMgWiwgX2FycmF5VW5pcXVlIGFzIF8sIHJlc29sdmUgYXMgYSwgZm9udFN0cmluZyBhcyBhJCwgdG9Gb250IGFzIGEwLCBfdG9MZWZ0UmlnaHRDZW50ZXIgYXMgYTEsIF9hbGlnblN0YXJ0RW5kIGFzIGEyLCBvdmVycmlkZXMgYXMgYTMsIG1lcmdlIGFzIGE0LCBfY2FwaXRhbGl6ZSBhcyBhNSwgZGVzY3JpcHRvcnMgYXMgYTYsIGlzRnVuY3Rpb24gYXMgYTcsIF9hdHRhY2hDb250ZXh0IGFzIGE4LCBfY3JlYXRlUmVzb2x2ZXIgYXMgYTksIG92ZXJyaWRlVGV4dERpcmVjdGlvbiBhcyBhQSwgX3RleHRYIGFzIGFCLCByZXN0b3JlVGV4dERpcmVjdGlvbiBhcyBhQywgZHJhd1BvaW50TGVnZW5kIGFzIGFELCBkaXN0YW5jZUJldHdlZW5Qb2ludHMgYXMgYUUsIG5vb3AgYXMgYUYsIF9zZXRNaW5BbmRNYXhCeUtleSBhcyBhRywgbmljZU51bSBhcyBhSCwgYWxtb3N0V2hvbGUgYXMgYUksIGFsbW9zdEVxdWFscyBhcyBhSiwgX2RlY2ltYWxQbGFjZXMgYXMgYUssIFRpY2tzIGFzIGFMLCBsb2cxMCBhcyBhTSwgX2xvbmdlc3RUZXh0IGFzIGFOLCBfZmlsdGVyQmV0d2VlbiBhcyBhTywgX2xvb2t1cCBhcyBhUCwgaXNQYXR0ZXJuT3JHcmFkaWVudCBhcyBhUSwgZ2V0SG92ZXJDb2xvciBhcyBhUiwgY2xvbmUgYXMgYVMsIF9tZXJnZXIgYXMgYVQsIF9tZXJnZXJJZiBhcyBhVSwgX2RlcHJlY2F0ZWQgYXMgYVYsIF9zcGxpdEtleSBhcyBhVywgdG9Gb250U3RyaW5nIGFzIGFYLCBzcGxpbmVDdXJ2ZSBhcyBhWSwgc3BsaW5lQ3VydmVNb25vdG9uZSBhcyBhWiwgZ2V0U3R5bGUgYXMgYV8sIF9kZXNjcmlwdG9ycyBhcyBhYSwgbWVyZ2VJZiBhcyBhYiwgdWlkIGFzIGFjLCBkZWJvdW5jZSBhcyBhZCwgcmV0aW5hU2NhbGUgYXMgYWUsIGNsZWFyQ2FudmFzIGFzIGFmLCBzZXRzRXF1YWwgYXMgYWcsIF9lbGVtZW50c0VxdWFsIGFzIGFoLCBfaXNDbGlja0V2ZW50IGFzIGFpLCBfaXNCZXR3ZWVuIGFzIGFqLCBfcmVhZFZhbHVlVG9Qcm9wcyBhcyBhaywgX3VwZGF0ZUJlemllckNvbnRyb2xQb2ludHMgYXMgYWwsIF9jb21wdXRlU2VnbWVudHMgYXMgYW0sIF9ib3VuZFNlZ21lbnRzIGFzIGFuLCBfc3RlcHBlZEludGVycG9sYXRpb24gYXMgYW8sIF9iZXppZXJJbnRlcnBvbGF0aW9uIGFzIGFwLCBfcG9pbnRJbkxpbmUgYXMgYXEsIF9zdGVwcGVkTGluZVRvIGFzIGFyLCBfYmV6aWVyQ3VydmVUbyBhcyBhcywgZHJhd1BvaW50IGFzIGF0LCBhZGRSb3VuZGVkUmVjdFBhdGggYXMgYXUsIHRvVFJCTCBhcyBhdiwgdG9UUkJMQ29ybmVycyBhcyBhdywgX2JvdW5kU2VnbWVudCBhcyBheCwgX25vcm1hbGl6ZUFuZ2xlIGFzIGF5LCBnZXRSdGxBZGFwdGVyIGFzIGF6LCBpc0FycmF5IGFzIGIsIHRvTGluZUhlaWdodCBhcyBiMCwgUElUQVUgYXMgYjEsIElORklOSVRZIGFzIGIyLCBSQURfUEVSX0RFRyBhcyBiMywgUVVBUlRFUl9QSSBhcyBiNCwgVFdPX1RISVJEU19QSSBhcyBiNSwgX2FuZ2xlRGlmZiBhcyBiNiwgY29sb3IgYXMgYywgZGVmYXVsdHMgYXMgZCwgZWZmZWN0cyBhcyBlLCByZXNvbHZlT2JqZWN0S2V5IGFzIGYsIGlzTnVtYmVyRmluaXRlIGFzIGcsIGRlZmluZWQgYXMgaCwgaXNPYmplY3QgYXMgaSwgY3JlYXRlQ29udGV4dCBhcyBqLCBpc051bGxPclVuZGVmIGFzIGssIGxpc3RlbkFycmF5RXZlbnRzIGFzIGwsIHRvUGVyY2VudGFnZSBhcyBtLCB0b0RpbWVuc2lvbiBhcyBuLCBmb3JtYXROdW1iZXIgYXMgbywgX2FuZ2xlQmV0d2VlbiBhcyBwLCBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyBhcyBxLCByZXF1ZXN0QW5pbUZyYW1lIGFzIHIsIHNpZ24gYXMgcywgdG9SYWRpYW5zIGFzIHQsIHVubGlzdGVuQXJyYXlFdmVudHMgYXMgdSwgdmFsdWVPckRlZmF1bHQgYXMgdiwgX3NjYWxlUmFuZ2VzQ2hhbmdlZCBhcyB3LCBpc051bWJlciBhcyB4LCBfcGFyc2VPYmplY3REYXRhUmFkaWFsU2NhbGUgYXMgeSwgZ2V0UmVsYXRpdmVQb3NpdGlvbiBhcyB6IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLnNlZ21lbnQuanMubWFwXG4iLCIvKiFcbiAqIENoYXJ0LmpzIHY0LjQuNFxuICogaHR0cHM6Ly93d3cuY2hhcnRqcy5vcmdcbiAqIChjKSAyMDI0IENoYXJ0LmpzIENvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cbmltcG9ydCB7IHIgYXMgcmVxdWVzdEFuaW1GcmFtZSwgYSBhcyByZXNvbHZlLCBlIGFzIGVmZmVjdHMsIGMgYXMgY29sb3IsIGkgYXMgaXNPYmplY3QsIGQgYXMgZGVmYXVsdHMsIGIgYXMgaXNBcnJheSwgdiBhcyB2YWx1ZU9yRGVmYXVsdCwgdSBhcyB1bmxpc3RlbkFycmF5RXZlbnRzLCBsIGFzIGxpc3RlbkFycmF5RXZlbnRzLCBmIGFzIHJlc29sdmVPYmplY3RLZXksIGcgYXMgaXNOdW1iZXJGaW5pdGUsIGggYXMgZGVmaW5lZCwgcyBhcyBzaWduLCBqIGFzIGNyZWF0ZUNvbnRleHQsIGsgYXMgaXNOdWxsT3JVbmRlZiwgXyBhcyBfYXJyYXlVbmlxdWUsIHQgYXMgdG9SYWRpYW5zLCBtIGFzIHRvUGVyY2VudGFnZSwgbiBhcyB0b0RpbWVuc2lvbiwgVCBhcyBUQVUsIG8gYXMgZm9ybWF0TnVtYmVyLCBwIGFzIF9hbmdsZUJldHdlZW4sIEggYXMgSEFMRl9QSSwgUCBhcyBQSSwgcSBhcyBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cywgdyBhcyBfc2NhbGVSYW5nZXNDaGFuZ2VkLCB4IGFzIGlzTnVtYmVyLCB5IGFzIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZSwgeiBhcyBnZXRSZWxhdGl2ZVBvc2l0aW9uLCBBIGFzIF9ybG9va3VwQnlLZXksIEIgYXMgX2xvb2t1cEJ5S2V5LCBDIGFzIF9pc1BvaW50SW5BcmVhLCBEIGFzIGdldEFuZ2xlRnJvbVBvaW50LCBFIGFzIHRvUGFkZGluZywgRiBhcyBlYWNoLCBHIGFzIGdldE1heGltdW1TaXplLCBJIGFzIF9nZXRQYXJlbnROb2RlLCBKIGFzIHJlYWRVc2VkU2l6ZSwgSyBhcyBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zLCBMIGFzIHRocm90dGxlZCwgTSBhcyBfaXNEb21TdXBwb3J0ZWQsIE4gYXMgX2ZhY3Rvcml6ZSwgTyBhcyBmaW5pdGVPckRlZmF1bHQsIFEgYXMgY2FsbGJhY2ssIFIgYXMgX2FkZEdyYWNlLCBTIGFzIF9saW1pdFZhbHVlLCBVIGFzIHRvRGVncmVlcywgViBhcyBfbWVhc3VyZVRleHQsIFcgYXMgX2ludDE2UmFuZ2UsIFggYXMgX2FsaWduUGl4ZWwsIFkgYXMgY2xpcEFyZWEsIFogYXMgcmVuZGVyVGV4dCwgJCBhcyB1bmNsaXBBcmVhLCBhMCBhcyB0b0ZvbnQsIGExIGFzIF90b0xlZnRSaWdodENlbnRlciwgYTIgYXMgX2FsaWduU3RhcnRFbmQsIGEzIGFzIG92ZXJyaWRlcywgYTQgYXMgbWVyZ2UsIGE1IGFzIF9jYXBpdGFsaXplLCBhNiBhcyBkZXNjcmlwdG9ycywgYTcgYXMgaXNGdW5jdGlvbiwgYTggYXMgX2F0dGFjaENvbnRleHQsIGE5IGFzIF9jcmVhdGVSZXNvbHZlciwgYWEgYXMgX2Rlc2NyaXB0b3JzLCBhYiBhcyBtZXJnZUlmLCBhYyBhcyB1aWQsIGFkIGFzIGRlYm91bmNlLCBhZSBhcyByZXRpbmFTY2FsZSwgYWYgYXMgY2xlYXJDYW52YXMsIGFnIGFzIHNldHNFcXVhbCwgYWggYXMgX2VsZW1lbnRzRXF1YWwsIGFpIGFzIF9pc0NsaWNrRXZlbnQsIGFqIGFzIF9pc0JldHdlZW4sIGFrIGFzIF9yZWFkVmFsdWVUb1Byb3BzLCBhbCBhcyBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cywgYW0gYXMgX2NvbXB1dGVTZWdtZW50cywgYW4gYXMgX2JvdW5kU2VnbWVudHMsIGFvIGFzIF9zdGVwcGVkSW50ZXJwb2xhdGlvbiwgYXAgYXMgX2JlemllckludGVycG9sYXRpb24sIGFxIGFzIF9wb2ludEluTGluZSwgYXIgYXMgX3N0ZXBwZWRMaW5lVG8sIGFzIGFzIF9iZXppZXJDdXJ2ZVRvLCBhdCBhcyBkcmF3UG9pbnQsIGF1IGFzIGFkZFJvdW5kZWRSZWN0UGF0aCwgYXYgYXMgdG9UUkJMLCBhdyBhcyB0b1RSQkxDb3JuZXJzLCBheCBhcyBfYm91bmRTZWdtZW50LCBheSBhcyBfbm9ybWFsaXplQW5nbGUsIGF6IGFzIGdldFJ0bEFkYXB0ZXIsIGFBIGFzIG92ZXJyaWRlVGV4dERpcmVjdGlvbiwgYUIgYXMgX3RleHRYLCBhQyBhcyByZXN0b3JlVGV4dERpcmVjdGlvbiwgYUQgYXMgZHJhd1BvaW50TGVnZW5kLCBhRSBhcyBkaXN0YW5jZUJldHdlZW5Qb2ludHMsIGFGIGFzIG5vb3AsIGFHIGFzIF9zZXRNaW5BbmRNYXhCeUtleSwgYUggYXMgbmljZU51bSwgYUkgYXMgYWxtb3N0V2hvbGUsIGFKIGFzIGFsbW9zdEVxdWFscywgYUsgYXMgX2RlY2ltYWxQbGFjZXMsIGFMIGFzIFRpY2tzLCBhTSBhcyBsb2cxMCwgYU4gYXMgX2xvbmdlc3RUZXh0LCBhTyBhcyBfZmlsdGVyQmV0d2VlbiwgYVAgYXMgX2xvb2t1cCB9IGZyb20gJy4vY2h1bmtzL2hlbHBlcnMuc2VnbWVudC5qcyc7XG5pbXBvcnQgJ0BrdXJrbGUvY29sb3InO1xuXG5jbGFzcyBBbmltYXRvciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYXJ0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9sYXN0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gYW5pbXMubGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICBjb25zdCBudW1TdGVwcyA9IGFuaW1zLmR1cmF0aW9uO1xuICAgICAgICBjYWxsYmFja3MuZm9yRWFjaCgoZm4pPT5mbih7XG4gICAgICAgICAgICAgICAgY2hhcnQsXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogYW5pbXMuaW5pdGlhbCxcbiAgICAgICAgICAgICAgICBudW1TdGVwcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RlcDogTWF0aC5taW4oZGF0ZSAtIGFuaW1zLnN0YXJ0LCBudW1TdGVwcylcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3JlZnJlc2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCAoKT0+e1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ydW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZShkYXRlID0gRGF0ZS5ub3coKSkge1xuICAgICAgICBsZXQgcmVtYWluaW5nID0gMDtcbiAgICAgICAgdGhpcy5fY2hhcnRzLmZvckVhY2goKGFuaW1zLCBjaGFydCk9PntcbiAgICAgICAgICAgIGlmICghYW5pbXMucnVubmluZyB8fCAhYW5pbXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBhbmltcy5pdGVtcztcbiAgICAgICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBkcmF3ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uX2FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5fdG90YWwgPiBhbmltcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBpdGVtLl90b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdGVtLnRpY2soZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkcmF3KSB7XG4gICAgICAgICAgICAgICAgY2hhcnQuZHJhdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIGRhdGUsICdwcm9ncmVzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhbmltcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGNoYXJ0LCBhbmltcywgZGF0ZSwgJ2NvbXBsZXRlJyk7XG4gICAgICAgICAgICAgICAgYW5pbXMuaW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVtYWluaW5nICs9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xhc3REYXRlID0gZGF0ZTtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRBbmltcyhjaGFydCkge1xuICAgICAgICBjb25zdCBjaGFydHMgPSB0aGlzLl9jaGFydHM7XG4gICAgICAgIGxldCBhbmltcyA9IGNoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICBhbmltcyA9IHtcbiAgICAgICAgICAgICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IFtdLFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnRzLnNldChjaGFydCwgYW5pbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltcztcbiAgICB9XG4gbGlzdGVuKGNoYXJ0LCBldmVudCwgY2IpIHtcbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLmxpc3RlbmVyc1tldmVudF0ucHVzaChjYik7XG4gICAgfVxuIGFkZChjaGFydCwgaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ2V0QW5pbXMoY2hhcnQpLml0ZW1zLnB1c2goLi4uaXRlbXMpO1xuICAgIH1cbiBoYXMoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFuaW1zKGNoYXJ0KS5pdGVtcy5sZW5ndGggPiAwO1xuICAgIH1cbiBzdGFydChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYW5pbXMucnVubmluZyA9IHRydWU7XG4gICAgICAgIGFuaW1zLnN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYW5pbXMuZHVyYXRpb24gPSBhbmltcy5pdGVtcy5yZWR1Y2UoKGFjYywgY3VyKT0+TWF0aC5tYXgoYWNjLCBjdXIuX2R1cmF0aW9uKSwgMCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gICAgcnVubmluZyhjaGFydCkge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5ydW5uaW5nIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gc3RvcChjaGFydCkge1xuICAgICAgICBjb25zdCBhbmltcyA9IHRoaXMuX2NoYXJ0cy5nZXQoY2hhcnQpO1xuICAgICAgICBpZiAoIWFuaW1zIHx8ICFhbmltcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IGFuaW1zLml0ZW1zO1xuICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvcig7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGl0ZW1zW2ldLmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1zLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX25vdGlmeShjaGFydCwgYW5pbXMsIERhdGUubm93KCksICdjb21wbGV0ZScpO1xuICAgIH1cbiByZW1vdmUoY2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIH1cbn1cbnZhciBhbmltYXRvciA9IC8qICNfX1BVUkVfXyAqLyBuZXcgQW5pbWF0b3IoKTtcblxuY29uc3QgdHJhbnNwYXJlbnQgPSAndHJhbnNwYXJlbnQnO1xuY29uc3QgaW50ZXJwb2xhdG9ycyA9IHtcbiAgICBib29sZWFuIChmcm9tLCB0bywgZmFjdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWN0b3IgPiAwLjUgPyB0byA6IGZyb207XG4gICAgfSxcbiBjb2xvciAoZnJvbSwgdG8sIGZhY3Rvcikge1xuICAgICAgICBjb25zdCBjMCA9IGNvbG9yKGZyb20gfHwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBjb25zdCBjMSA9IGMwLnZhbGlkICYmIGNvbG9yKHRvIHx8IHRyYW5zcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGMxICYmIGMxLnZhbGlkID8gYzEubWl4KGMwLCBmYWN0b3IpLmhleFN0cmluZygpIDogdG87XG4gICAgfSxcbiAgICBudW1iZXIgKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIGZhY3RvcjtcbiAgICB9XG59O1xuY2xhc3MgQW5pbWF0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihjZmcsIHRhcmdldCwgcHJvcCwgdG8pe1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIHRvID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICB0byxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBmcm9tID0gcmVzb2x2ZShbXG4gICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIHRvXG4gICAgICAgIF0pO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9mbiA9IGNmZy5mbiB8fCBpbnRlcnBvbGF0b3JzW2NmZy50eXBlIHx8IHR5cGVvZiBmcm9tXTtcbiAgICAgICAgdGhpcy5fZWFzaW5nID0gZWZmZWN0c1tjZmcuZWFzaW5nXSB8fCBlZmZlY3RzLmxpbmVhcjtcbiAgICAgICAgdGhpcy5fc3RhcnQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgKyAoY2ZnLmRlbGF5IHx8IDApKTtcbiAgICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl90b3RhbCA9IE1hdGguZmxvb3IoY2ZnLmR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fbG9vcCA9ICEhY2ZnLmxvb3A7XG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5fcHJvcCA9IHByb3A7XG4gICAgICAgIHRoaXMuX2Zyb20gPSBmcm9tO1xuICAgICAgICB0aGlzLl90byA9IHRvO1xuICAgICAgICB0aGlzLl9wcm9taXNlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbiAgICB1cGRhdGUoY2ZnLCB0bywgZGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGRhdGUgLSB0aGlzLl9zdGFydDtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbiA9IHRoaXMuX2R1cmF0aW9uIC0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gTWF0aC5mbG9vcihNYXRoLm1heChyZW1haW4sIGNmZy5kdXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5fdG90YWwgKz0gZWxhcHNlZDtcbiAgICAgICAgICAgIHRoaXMuX2xvb3AgPSAhIWNmZy5sb29wO1xuICAgICAgICAgICAgdGhpcy5fdG8gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcudG8sXG4gICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIGNmZy5mcm9tXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHRoaXMuX2Zyb20gPSByZXNvbHZlKFtcbiAgICAgICAgICAgICAgICBjZmcuZnJvbSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgdG9cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50aWNrKERhdGUubm93KCkpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRpY2soZGF0ZSkge1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gZGF0ZSAtIHRoaXMuX3N0YXJ0O1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uO1xuICAgICAgICBjb25zdCBwcm9wID0gdGhpcy5fcHJvcDtcbiAgICAgICAgY29uc3QgZnJvbSA9IHRoaXMuX2Zyb207XG4gICAgICAgIGNvbnN0IGxvb3AgPSB0aGlzLl9sb29wO1xuICAgICAgICBjb25zdCB0byA9IHRoaXMuX3RvO1xuICAgICAgICBsZXQgZmFjdG9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmcm9tICE9PSB0byAmJiAobG9vcCB8fCBlbGFwc2VkIDwgZHVyYXRpb24pO1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFyZ2V0W3Byb3BdID0gdG87XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsYXBzZWQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRbcHJvcF0gPSBmcm9tO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZhY3RvciA9IGVsYXBzZWQgLyBkdXJhdGlvbiAlIDI7XG4gICAgICAgIGZhY3RvciA9IGxvb3AgJiYgZmFjdG9yID4gMSA/IDIgLSBmYWN0b3IgOiBmYWN0b3I7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBmYWN0b3IpKSk7XG4gICAgICAgIHRoaXMuX3RhcmdldFtwcm9wXSA9IHRoaXMuX2ZuKGZyb20sIHRvLCBmYWN0b3IpO1xuICAgIH1cbiAgICB3YWl0KCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuX3Byb21pc2VzIHx8ICh0aGlzLl9wcm9taXNlcyA9IFtdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaik9PntcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgICByZWpcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX25vdGlmeShyZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSByZXNvbHZlZCA/ICdyZXMnIDogJ3Jlaic7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5fcHJvbWlzZXMgfHwgW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwcm9taXNlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBwcm9taXNlc1tpXVttZXRob2RdKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKGNoYXJ0LCBjb25maWcpe1xuICAgICAgICB0aGlzLl9jaGFydCA9IGNoYXJ0O1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cbiAgICBjb25maWd1cmUoY29uZmlnKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QoY29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5hbmltYXRpb24pO1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY29uZmlnKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjb25zdCBjZmcgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3QoY2ZnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBhbmltYXRpb25PcHRpb25zKXtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFtvcHRpb25dID0gY2ZnW29wdGlvbl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoaXNBcnJheShjZmcucHJvcGVydGllcykgJiYgY2ZnLnByb3BlcnRpZXMgfHwgW1xuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgXSkuZm9yRWFjaCgocHJvcCk9PntcbiAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0ga2V5IHx8ICFhbmltYXRlZFByb3BzLmhhcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZFByb3BzLnNldChwcm9wLCByZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfYW5pbWF0ZU9wdGlvbnModGFyZ2V0LCB2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHZhbHVlcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gcmVzb2x2ZVRhcmdldE9wdGlvbnModGFyZ2V0LCBuZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IHRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMob3B0aW9ucywgbmV3T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZXdPcHRpb25zLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIGF3YWl0QWxsKHRhcmdldC5vcHRpb25zLiRhbmltYXRpb25zLCBuZXdPcHRpb25zKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgICAgICAgICAgfSwgKCk9PntcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH1cbiBfY3JlYXRlQW5pbWF0aW9ucyh0YXJnZXQsIHZhbHVlcykge1xuICAgICAgICBjb25zdCBhbmltYXRlZFByb3BzID0gdGhpcy5fcHJvcGVydGllcztcbiAgICAgICAgY29uc3QgYW5pbWF0aW9ucyA9IFtdO1xuICAgICAgICBjb25zdCBydW5uaW5nID0gdGFyZ2V0LiRhbmltYXRpb25zIHx8ICh0YXJnZXQuJGFuaW1hdGlvbnMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXModmFsdWVzKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IHByb3BzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wLmNoYXJBdCgwKSA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ29wdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKC4uLnRoaXMuX2FuaW1hdGVPcHRpb25zKHRhcmdldCwgdmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1twcm9wXTtcbiAgICAgICAgICAgIGxldCBhbmltYXRpb24gPSBydW5uaW5nW3Byb3BdO1xuICAgICAgICAgICAgY29uc3QgY2ZnID0gYW5pbWF0ZWRQcm9wcy5nZXQocHJvcCk7XG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNmZyAmJiBhbmltYXRpb24uYWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnVwZGF0ZShjZmcsIHZhbHVlLCBkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2ZnIHx8ICFjZmcuZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bm5pbmdbcHJvcF0gPSBhbmltYXRpb24gPSBuZXcgQW5pbWF0aW9uKGNmZywgdGFyZ2V0LCBwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9XG4gdXBkYXRlKHRhcmdldCwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wcm9wZXJ0aWVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB2YWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLl9jcmVhdGVBbmltYXRpb25zKHRhcmdldCwgdmFsdWVzKTtcbiAgICAgICAgaWYgKGFuaW1hdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbmltYXRvci5hZGQodGhpcy5fY2hhcnQsIGFuaW1hdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhd2FpdEFsbChhbmltYXRpb25zLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgcnVubmluZyA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGFuaW0gPSBhbmltYXRpb25zW2tleXNbaV1dO1xuICAgICAgICBpZiAoYW5pbSAmJiBhbmltLmFjdGl2ZSgpKSB7XG4gICAgICAgICAgICBydW5uaW5nLnB1c2goYW5pbS53YWl0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChydW5uaW5nKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXRPcHRpb25zKHRhcmdldCwgbmV3T3B0aW9ucykge1xuICAgIGlmICghbmV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvcHRpb25zID0gdGFyZ2V0Lm9wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gbmV3T3B0aW9ucztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy4kc2hhcmVkKSB7XG4gICAgICAgIHRhcmdldC5vcHRpb25zID0gb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICRzaGFyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgJGFuaW1hdGlvbnM6IHt9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gc2NhbGVDbGlwKHNjYWxlLCBhbGxvd2VkT3ZlcmZsb3cpIHtcbiAgICBjb25zdCBvcHRzID0gc2NhbGUgJiYgc2NhbGUub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCByZXZlcnNlID0gb3B0cy5yZXZlcnNlO1xuICAgIGNvbnN0IG1pbiA9IG9wdHMubWluID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIGNvbnN0IG1heCA9IG9wdHMubWF4ID09PSB1bmRlZmluZWQgPyBhbGxvd2VkT3ZlcmZsb3cgOiAwO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiByZXZlcnNlID8gbWF4IDogbWluLFxuICAgICAgICBlbmQ6IHJldmVyc2UgPyBtaW4gOiBtYXhcbiAgICB9O1xufVxuZnVuY3Rpb24gZGVmYXVsdENsaXAoeFNjYWxlLCB5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdykge1xuICAgIGlmIChhbGxvd2VkT3ZlcmZsb3cgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeCA9IHNjYWxlQ2xpcCh4U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgY29uc3QgeSA9IHNjYWxlQ2xpcCh5U2NhbGUsIGFsbG93ZWRPdmVyZmxvdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB5LmVuZCxcbiAgICAgICAgcmlnaHQ6IHguZW5kLFxuICAgICAgICBib3R0b206IHkuc3RhcnQsXG4gICAgICAgIGxlZnQ6IHguc3RhcnRcbiAgICB9O1xufVxuZnVuY3Rpb24gdG9DbGlwKHZhbHVlKSB7XG4gICAgbGV0IHQsIHIsIGIsIGw7XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0ID0gdmFsdWUudG9wO1xuICAgICAgICByID0gdmFsdWUucmlnaHQ7XG4gICAgICAgIGIgPSB2YWx1ZS5ib3R0b207XG4gICAgICAgIGwgPSB2YWx1ZS5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSByID0gYiA9IGwgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB0LFxuICAgICAgICByaWdodDogcixcbiAgICAgICAgYm90dG9tOiBiLFxuICAgICAgICBsZWZ0OiBsLFxuICAgICAgICBkaXNhYmxlZDogdmFsdWUgPT09IGZhbHNlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFNvcnRlZERhdGFzZXRJbmRpY2VzKGNoYXJ0LCBmaWx0ZXJWaXNpYmxlKSB7XG4gICAgY29uc3Qga2V5cyA9IFtdO1xuICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcyhmaWx0ZXJWaXNpYmxlKTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBrZXlzLnB1c2gobWV0YXNldHNbaV0uaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIGFwcGx5U3RhY2soc3RhY2ssIHZhbHVlLCBkc0luZGV4LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBrZXlzID0gc3RhY2sua2V5cztcbiAgICBjb25zdCBzaW5nbGVNb2RlID0gb3B0aW9ucy5tb2RlID09PSAnc2luZ2xlJztcbiAgICBsZXQgaSwgaWxlbiwgZGF0YXNldEluZGV4LCBvdGhlclZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvcihpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgZGF0YXNldEluZGV4ID0gK2tleXNbaV07XG4gICAgICAgIGlmIChkYXRhc2V0SW5kZXggPT09IGRzSW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJWYWx1ZSA9IHN0YWNrLnZhbHVlc1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAoaXNOdW1iZXJGaW5pdGUob3RoZXJWYWx1ZSkgJiYgKHNpbmdsZU1vZGUgfHwgdmFsdWUgPT09IDAgfHwgc2lnbih2YWx1ZSkgPT09IHNpZ24ob3RoZXJWYWx1ZSkpKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRPYmplY3REYXRhVG9BcnJheShkYXRhLCBtZXRhKSB7XG4gICAgY29uc3QgeyBpU2NhbGUgLCB2U2NhbGUgIH0gPSBtZXRhO1xuICAgIGNvbnN0IGlBeGlzS2V5ID0gaVNjYWxlLmF4aXMgPT09ICd4JyA/ICd4JyA6ICd5JztcbiAgICBjb25zdCB2QXhpc0tleSA9IHZTY2FsZS5heGlzID09PSAneCcgPyAneCcgOiAneSc7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgIGNvbnN0IGFkYXRhID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICBsZXQgaSwgaWxlbiwga2V5O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGtleXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgYWRhdGFbaV0gPSB7XG4gICAgICAgICAgICBbaUF4aXNLZXldOiBrZXksXG4gICAgICAgICAgICBbdkF4aXNLZXldOiBkYXRhW2tleV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFkYXRhO1xufVxuZnVuY3Rpb24gaXNTdGFja2VkKHNjYWxlLCBtZXRhKSB7XG4gICAgY29uc3Qgc3RhY2tlZCA9IHNjYWxlICYmIHNjYWxlLm9wdGlvbnMuc3RhY2tlZDtcbiAgICByZXR1cm4gc3RhY2tlZCB8fCBzdGFja2VkID09PSB1bmRlZmluZWQgJiYgbWV0YS5zdGFjayAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0U3RhY2tLZXkoaW5kZXhTY2FsZSwgdmFsdWVTY2FsZSwgbWV0YSkge1xuICAgIHJldHVybiBgJHtpbmRleFNjYWxlLmlkfS4ke3ZhbHVlU2NhbGUuaWR9LiR7bWV0YS5zdGFjayB8fCBtZXRhLnR5cGV9YDtcbn1cbmZ1bmN0aW9uIGdldFVzZXJCb3VuZHMoc2NhbGUpIHtcbiAgICBjb25zdCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gc2NhbGUuZ2V0VXNlckJvdW5kcygpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogbWluRGVmaW5lZCA/IG1pbiA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgICAgICAgbWF4OiBtYXhEZWZpbmVkID8gbWF4IDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlU3RhY2soc3RhY2tzLCBzdGFja0tleSwgaW5kZXhWYWx1ZSkge1xuICAgIGNvbnN0IHN1YlN0YWNrID0gc3RhY2tzW3N0YWNrS2V5XSB8fCAoc3RhY2tzW3N0YWNrS2V5XSA9IHt9KTtcbiAgICByZXR1cm4gc3ViU3RhY2tbaW5kZXhWYWx1ZV0gfHwgKHN1YlN0YWNrW2luZGV4VmFsdWVdID0ge30pO1xufVxuZnVuY3Rpb24gZ2V0TGFzdEluZGV4SW5TdGFjayhzdGFjaywgdlNjYWxlLCBwb3NpdGl2ZSwgdHlwZSkge1xuICAgIGZvciAoY29uc3QgbWV0YSBvZiB2U2NhbGUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModHlwZSkucmV2ZXJzZSgpKXtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdGFja1ttZXRhLmluZGV4XTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIHZhbHVlID4gMCB8fCAhcG9zaXRpdmUgJiYgdmFsdWUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbWV0YS5pbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN0YWNrcyhjb250cm9sbGVyLCBwYXJzZWQpIHtcbiAgICBjb25zdCB7IGNoYXJ0ICwgX2NhY2hlZE1ldGE6IG1ldGEgIH0gPSBjb250cm9sbGVyO1xuICAgIGNvbnN0IHN0YWNrcyA9IGNoYXJ0Ll9zdGFja3MgfHwgKGNoYXJ0Ll9zdGFja3MgPSB7fSk7XG4gICAgY29uc3QgeyBpU2NhbGUgLCB2U2NhbGUgLCBpbmRleDogZGF0YXNldEluZGV4ICB9ID0gbWV0YTtcbiAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gICAgY29uc3Qga2V5ID0gZ2V0U3RhY2tLZXkoaVNjYWxlLCB2U2NhbGUsIG1ldGEpO1xuICAgIGNvbnN0IGlsZW4gPSBwYXJzZWQubGVuZ3RoO1xuICAgIGxldCBzdGFjaztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY29uc3QgaXRlbSA9IHBhcnNlZFtpXTtcbiAgICAgICAgY29uc3QgeyBbaUF4aXNdOiBpbmRleCAsIFt2QXhpc106IHZhbHVlICB9ID0gaXRlbTtcbiAgICAgICAgY29uc3QgaXRlbVN0YWNrcyA9IGl0ZW0uX3N0YWNrcyB8fCAoaXRlbS5fc3RhY2tzID0ge30pO1xuICAgICAgICBzdGFjayA9IGl0ZW1TdGFja3NbdkF4aXNdID0gZ2V0T3JDcmVhdGVTdGFjayhzdGFja3MsIGtleSwgaW5kZXgpO1xuICAgICAgICBzdGFja1tkYXRhc2V0SW5kZXhdID0gdmFsdWU7XG4gICAgICAgIHN0YWNrLl90b3AgPSBnZXRMYXN0SW5kZXhJblN0YWNrKHN0YWNrLCB2U2NhbGUsIHRydWUsIG1ldGEudHlwZSk7XG4gICAgICAgIHN0YWNrLl9ib3R0b20gPSBnZXRMYXN0SW5kZXhJblN0YWNrKHN0YWNrLCB2U2NhbGUsIGZhbHNlLCBtZXRhLnR5cGUpO1xuICAgICAgICBjb25zdCB2aXN1YWxWYWx1ZXMgPSBzdGFjay5fdmlzdWFsVmFsdWVzIHx8IChzdGFjay5fdmlzdWFsVmFsdWVzID0ge30pO1xuICAgICAgICB2aXN1YWxWYWx1ZXNbZGF0YXNldEluZGV4XSA9IHZhbHVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEZpcnN0U2NhbGVJZChjaGFydCwgYXhpcykge1xuICAgIGNvbnN0IHNjYWxlcyA9IGNoYXJ0LnNjYWxlcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2NhbGVzKS5maWx0ZXIoKGtleSk9PnNjYWxlc1trZXldLmF4aXMgPT09IGF4aXMpLnNoaWZ0KCk7XG59XG5mdW5jdGlvbiBjcmVhdGVEYXRhc2V0Q29udGV4dChwYXJlbnQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQocGFyZW50LCB7XG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGRhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0YXNldEluZGV4OiBpbmRleCxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgICAgdHlwZTogJ2RhdGFzZXQnXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGV4dChwYXJlbnQsIGluZGV4LCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQocGFyZW50LCB7XG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgIGRhdGFJbmRleDogaW5kZXgsXG4gICAgICAgIHBhcnNlZDogdW5kZWZpbmVkLFxuICAgICAgICByYXc6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgICAgdHlwZTogJ2RhdGEnXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjbGVhclN0YWNrcyhtZXRhLCBpdGVtcykge1xuICAgIGNvbnN0IGRhdGFzZXRJbmRleCA9IG1ldGEuY29udHJvbGxlci5pbmRleDtcbiAgICBjb25zdCBheGlzID0gbWV0YS52U2NhbGUgJiYgbWV0YS52U2NhbGUuYXhpcztcbiAgICBpZiAoIWF4aXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtcyA9IGl0ZW1zIHx8IG1ldGEuX3BhcnNlZDtcbiAgICBmb3IgKGNvbnN0IHBhcnNlZCBvZiBpdGVtcyl7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IHBhcnNlZC5fc3RhY2tzO1xuICAgICAgICBpZiAoIXN0YWNrcyB8fCBzdGFja3NbYXhpc10gPT09IHVuZGVmaW5lZCB8fCBzdGFja3NbYXhpc11bZGF0YXNldEluZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0YWNrc1theGlzXVtkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAoc3RhY2tzW2F4aXNdLl92aXN1YWxWYWx1ZXMgIT09IHVuZGVmaW5lZCAmJiBzdGFja3NbYXhpc10uX3Zpc3VhbFZhbHVlc1tkYXRhc2V0SW5kZXhdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzdGFja3NbYXhpc10uX3Zpc3VhbFZhbHVlc1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICB9XG4gICAgfVxufVxuY29uc3QgaXNEaXJlY3RVcGRhdGVNb2RlID0gKG1vZGUpPT5tb2RlID09PSAncmVzZXQnIHx8IG1vZGUgPT09ICdub25lJztcbmNvbnN0IGNsb25lSWZOb3RTaGFyZWQgPSAoY2FjaGVkLCBzaGFyZWQpPT5zaGFyZWQgPyBjYWNoZWQgOiBPYmplY3QuYXNzaWduKHt9LCBjYWNoZWQpO1xuY29uc3QgY3JlYXRlU3RhY2sgPSAoY2FuU3RhY2ssIG1ldGEsIGNoYXJ0KT0+Y2FuU3RhY2sgJiYgIW1ldGEuaGlkZGVuICYmIG1ldGEuX3N0YWNrZWQgJiYge1xuICAgICAgICBrZXlzOiBnZXRTb3J0ZWREYXRhc2V0SW5kaWNlcyhjaGFydCwgdHJ1ZSksXG4gICAgICAgIHZhbHVlczogbnVsbFxuICAgIH07XG5jbGFzcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gc3RhdGljIGRlZmF1bHRzID0ge307XG4gc3RhdGljIGRhdGFzZXRFbGVtZW50VHlwZSA9IG51bGw7XG4gc3RhdGljIGRhdGFFbGVtZW50VHlwZSA9IG51bGw7XG4gY29uc3RydWN0b3IoY2hhcnQsIGRhdGFzZXRJbmRleCl7XG4gICAgICAgIHRoaXMuY2hhcnQgPSBjaGFydDtcbiAgICAgICAgdGhpcy5fY3R4ID0gY2hhcnQuY3R4O1xuICAgICAgICB0aGlzLmluZGV4ID0gZGF0YXNldEluZGV4O1xuICAgICAgICB0aGlzLl9jYWNoZWREYXRhT3B0cyA9IHt9O1xuICAgICAgICB0aGlzLl9jYWNoZWRNZXRhID0gdGhpcy5nZXRNZXRhKCk7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB0aGlzLl9jYWNoZWRNZXRhLnR5cGU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX3BhcnNpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fb2JqZWN0RGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc2hhcmVkT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9kcmF3Q291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSA9IG5ldy50YXJnZXQuZGF0YXNldEVsZW1lbnRUeXBlO1xuICAgICAgICB0aGlzLmRhdGFFbGVtZW50VHlwZSA9IG5ldy50YXJnZXQuZGF0YUVsZW1lbnRUeXBlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMubGlua1NjYWxlcygpO1xuICAgICAgICBtZXRhLl9zdGFja2VkID0gaXNTdGFja2VkKG1ldGEudlNjYWxlLCBtZXRhKTtcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50cygpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZpbGwgJiYgIXRoaXMuY2hhcnQuaXNQbHVnaW5FbmFibGVkKCdmaWxsZXInKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVHJpZWQgdG8gdXNlIHRoZSAnZmlsbCcgb3B0aW9uIHdpdGhvdXQgdGhlICdGaWxsZXInIHBsdWdpbiBlbmFibGVkLiBQbGVhc2UgaW1wb3J0IGFuZCByZWdpc3RlciB0aGUgJ0ZpbGxlcicgcGx1Z2luIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IGRpc2FibGVkIGluIHRoZSBvcHRpb25zXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUluZGV4KGRhdGFzZXRJbmRleCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleCAhPT0gZGF0YXNldEluZGV4KSB7XG4gICAgICAgICAgICBjbGVhclN0YWNrcyh0aGlzLl9jYWNoZWRNZXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4ID0gZGF0YXNldEluZGV4O1xuICAgIH1cbiAgICBsaW5rU2NhbGVzKCkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG4gICAgICAgIGNvbnN0IGNob29zZUlkID0gKGF4aXMsIHgsIHksIHIpPT5heGlzID09PSAneCcgPyB4IDogYXhpcyA9PT0gJ3InID8gciA6IHk7XG4gICAgICAgIGNvbnN0IHhpZCA9IG1ldGEueEF4aXNJRCA9IHZhbHVlT3JEZWZhdWx0KGRhdGFzZXQueEF4aXNJRCwgZ2V0Rmlyc3RTY2FsZUlkKGNoYXJ0LCAneCcpKTtcbiAgICAgICAgY29uc3QgeWlkID0gbWV0YS55QXhpc0lEID0gdmFsdWVPckRlZmF1bHQoZGF0YXNldC55QXhpc0lELCBnZXRGaXJzdFNjYWxlSWQoY2hhcnQsICd5JykpO1xuICAgICAgICBjb25zdCByaWQgPSBtZXRhLnJBeGlzSUQgPSB2YWx1ZU9yRGVmYXVsdChkYXRhc2V0LnJBeGlzSUQsIGdldEZpcnN0U2NhbGVJZChjaGFydCwgJ3InKSk7XG4gICAgICAgIGNvbnN0IGluZGV4QXhpcyA9IG1ldGEuaW5kZXhBeGlzO1xuICAgICAgICBjb25zdCBpaWQgPSBtZXRhLmlBeGlzSUQgPSBjaG9vc2VJZChpbmRleEF4aXMsIHhpZCwgeWlkLCByaWQpO1xuICAgICAgICBjb25zdCB2aWQgPSBtZXRhLnZBeGlzSUQgPSBjaG9vc2VJZChpbmRleEF4aXMsIHlpZCwgeGlkLCByaWQpO1xuICAgICAgICBtZXRhLnhTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZCh4aWQpO1xuICAgICAgICBtZXRhLnlTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZCh5aWQpO1xuICAgICAgICBtZXRhLnJTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZChyaWQpO1xuICAgICAgICBtZXRhLmlTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZChpaWQpO1xuICAgICAgICBtZXRhLnZTY2FsZSA9IHRoaXMuZ2V0U2NhbGVGb3JJZCh2aWQpO1xuICAgIH1cbiAgICBnZXREYXRhc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW3RoaXMuaW5kZXhdO1xuICAgIH1cbiAgICBnZXRNZXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YSh0aGlzLmluZGV4KTtcbiAgICB9XG4gZ2V0U2NhbGVGb3JJZChzY2FsZUlEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tzY2FsZUlEXTtcbiAgICB9XG4gX2dldE90aGVyU2NhbGUoc2NhbGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIHJldHVybiBzY2FsZSA9PT0gbWV0YS5pU2NhbGUgPyBtZXRhLnZTY2FsZSA6IG1ldGEuaVNjYWxlO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCdyZXNldCcpO1xuICAgIH1cbiBfZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAgICAgICB1bmxpc3RlbkFycmF5RXZlbnRzKHRoaXMuX2RhdGEsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgICAgICBjbGVhclN0YWNrcyhtZXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBfZGF0YUNoZWNrKCkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhc2V0LmRhdGEgfHwgKGRhdGFzZXQuZGF0YSA9IFtdKTtcbiAgICAgICAgY29uc3QgX2RhdGEgPSB0aGlzLl9kYXRhO1xuICAgICAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGNvbnZlcnRPYmplY3REYXRhVG9BcnJheShkYXRhLCBtZXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChfZGF0YSAhPT0gZGF0YSkge1xuICAgICAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICAgICAgdW5saXN0ZW5BcnJheUV2ZW50cyhfZGF0YSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSk7XG4gICAgICAgICAgICAgICAgbWV0YS5fcGFyc2VkID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuQXJyYXlFdmVudHMoZGF0YSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICB0aGlzLl9kYXRhQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICBtZXRhLmRhdGFzZXQgPSBuZXcgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlRWxlbWVudHMocmVzZXROZXdFbGVtZW50cykge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldCgpO1xuICAgICAgICBsZXQgc3RhY2tDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RhdGFDaGVjaygpO1xuICAgICAgICBjb25zdCBvbGRTdGFja2VkID0gbWV0YS5fc3RhY2tlZDtcbiAgICAgICAgbWV0YS5fc3RhY2tlZCA9IGlzU3RhY2tlZChtZXRhLnZTY2FsZSwgbWV0YSk7XG4gICAgICAgIGlmIChtZXRhLnN0YWNrICE9PSBkYXRhc2V0LnN0YWNrKSB7XG4gICAgICAgICAgICBzdGFja0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSk7XG4gICAgICAgICAgICBtZXRhLnN0YWNrID0gZGF0YXNldC5zdGFjaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXN5bmNFbGVtZW50cyhyZXNldE5ld0VsZW1lbnRzKTtcbiAgICAgICAgaWYgKHN0YWNrQ2hhbmdlZCB8fCBvbGRTdGFja2VkICE9PSBtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgICAgICB1cGRhdGVTdGFja3ModGhpcywgbWV0YS5fcGFyc2VkKTtcbiAgICAgICAgfVxuICAgIH1cbiBjb25maWd1cmUoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBzY29wZUtleXMgPSBjb25maWcuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgdGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICB0aGlzLl9wYXJzaW5nID0gdGhpcy5vcHRpb25zLnBhcnNpbmc7XG4gICAgICAgIHRoaXMuX2NhY2hlZERhdGFPcHRzID0ge307XG4gICAgfVxuIHBhcnNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IF9jYWNoZWRNZXRhOiBtZXRhICwgX2RhdGE6IGRhdGEgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIF9zdGFja2VkICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgbGV0IHNvcnRlZCA9IHN0YXJ0ID09PSAwICYmIGNvdW50ID09PSBkYXRhLmxlbmd0aCA/IHRydWUgOiBtZXRhLl9zb3J0ZWQ7XG4gICAgICAgIGxldCBwcmV2ID0gc3RhcnQgPiAwICYmIG1ldGEuX3BhcnNlZFtzdGFydCAtIDFdO1xuICAgICAgICBsZXQgaSwgY3VyLCBwYXJzZWQ7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbWV0YS5fcGFyc2VkID0gZGF0YTtcbiAgICAgICAgICAgIG1ldGEuX3NvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBwYXJzZWQgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkoZGF0YVtzdGFydF0pKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZUFycmF5RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYgPSAoKT0+Y3VyW2lBeGlzXSA9PT0gbnVsbCB8fCBwcmV2ICYmIGN1cltpQXhpc10gPCBwcmV2W2lBeGlzXTtcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGNvdW50OyArK2kpe1xuICAgICAgICAgICAgICAgIG1ldGEuX3BhcnNlZFtpICsgc3RhcnRdID0gY3VyID0gcGFyc2VkW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS5fc29ydGVkID0gc29ydGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfc3RhY2tlZCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhY2tzKHRoaXMsIHBhcnNlZCk7XG4gICAgICAgIH1cbiAgICB9XG4gcGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGlBeGlzID0gaVNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IHZBeGlzID0gdlNjYWxlLmF4aXM7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlU2NhbGUgPSBpU2NhbGUgPT09IHZTY2FsZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICBbaUF4aXNdOiBzaW5nbGVTY2FsZSB8fCBpU2NhbGUucGFyc2UobGFiZWxzW2luZGV4XSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIFt2QXhpc106IHZTY2FsZS5wYXJzZShkYXRhW2luZGV4XSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgICAgIGxldCBpLCBpbGVuLCBpbmRleCwgaXRlbTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgaW5kZXggPSBpICsgc3RhcnQ7XG4gICAgICAgICAgICBpdGVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICBwYXJzZWRbaV0gPSB7XG4gICAgICAgICAgICAgICAgeDogeFNjYWxlLnBhcnNlKGl0ZW1bMF0sIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UoaXRlbVsxXSwgaW5kZXgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCB7IHhBeGlzS2V5ID0neCcgLCB5QXhpc0tleSA9J3knICB9ID0gdGhpcy5fcGFyc2luZztcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGluZGV4LCBpdGVtO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpbmRleCA9IGkgKyBzdGFydDtcbiAgICAgICAgICAgIGl0ZW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgIHBhcnNlZFtpXSA9IHtcbiAgICAgICAgICAgICAgICB4OiB4U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB4QXhpc0tleSksIGluZGV4KSxcbiAgICAgICAgICAgICAgICB5OiB5U2NhbGUucGFyc2UocmVzb2x2ZU9iamVjdEtleShpdGVtLCB5QXhpc0tleSksIGluZGV4KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBnZXRQYXJzZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtpbmRleF07XG4gICAgfVxuIGdldERhdGFFbGVtZW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgIH1cbiBhcHBseVN0YWNrKHNjYWxlLCBwYXJzZWQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZWRbc2NhbGUuYXhpc107XG4gICAgICAgIGNvbnN0IHN0YWNrID0ge1xuICAgICAgICAgICAga2V5czogZ2V0U29ydGVkRGF0YXNldEluZGljZXMoY2hhcnQsIHRydWUpLFxuICAgICAgICAgICAgdmFsdWVzOiBwYXJzZWQuX3N0YWNrc1tzY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhcHBseVN0YWNrKHN0YWNrLCB2YWx1ZSwgbWV0YS5pbmRleCwge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gdXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjaykge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlZFtzY2FsZS5heGlzXTtcbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VkVmFsdWUgPT09IG51bGwgPyBOYU4gOiBwYXJzZWRWYWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gc3RhY2sgJiYgcGFyc2VkLl9zdGFja3Nbc2NhbGUuYXhpc107XG4gICAgICAgIGlmIChzdGFjayAmJiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHN0YWNrLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgICAgIHZhbHVlID0gYXBwbHlTdGFjayhzdGFjaywgcGFyc2VkVmFsdWUsIHRoaXMuX2NhY2hlZE1ldGEuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgdmFsdWUpO1xuICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIHZhbHVlKTtcbiAgICB9XG4gZ2V0TWluTWF4KHNjYWxlLCBjYW5TdGFjaykge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgX3BhcnNlZCA9IG1ldGEuX3BhcnNlZDtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gbWV0YS5fc29ydGVkICYmIHNjYWxlID09PSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgaWxlbiA9IF9wYXJzZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBvdGhlclNjYWxlID0gdGhpcy5fZ2V0T3RoZXJTY2FsZShzY2FsZSk7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gY3JlYXRlU3RhY2soY2FuU3RhY2ssIG1ldGEsIHRoaXMuY2hhcnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBtaW46IG90aGVyTWluICwgbWF4OiBvdGhlck1heCAgfSA9IGdldFVzZXJCb3VuZHMob3RoZXJTY2FsZSk7XG4gICAgICAgIGxldCBpLCBwYXJzZWQ7XG4gICAgICAgIGZ1bmN0aW9uIF9za2lwKCkge1xuICAgICAgICAgICAgcGFyc2VkID0gX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyVmFsdWUgPSBwYXJzZWRbb3RoZXJTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXJGaW5pdGUocGFyc2VkW3NjYWxlLmF4aXNdKSB8fCBvdGhlck1pbiA+IG90aGVyVmFsdWUgfHwgb3RoZXJNYXggPCBvdGhlclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpZiAoX3NraXAoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKTtcbiAgICAgICAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgICAgICBmb3IoaSA9IGlsZW4gLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgaWYgKF9za2lwKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKHJhbmdlLCBzY2FsZSwgcGFyc2VkLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiAgICBnZXRBbGxQYXJzZWRWYWx1ZXMoc2NhbGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIHZhbHVlO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VkW2ldW3NjYWxlLmF4aXNdO1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBnZXRNYXhPdmVyZmxvdygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgdlNjYWxlID0gbWV0YS52U2NhbGU7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBpU2NhbGUgPyAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pIDogJycsXG4gICAgICAgICAgICB2YWx1ZTogdlNjYWxlID8gJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKSA6ICcnXG4gICAgICAgIH07XG4gICAgfVxuIF91cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGUobW9kZSB8fCAnZGVmYXVsdCcpO1xuICAgICAgICBtZXRhLl9jbGlwID0gdG9DbGlwKHZhbHVlT3JEZWZhdWx0KHRoaXMub3B0aW9ucy5jbGlwLCBkZWZhdWx0Q2xpcChtZXRhLnhTY2FsZSwgbWV0YS55U2NhbGUsIHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKTtcbiAgICB9XG4gdXBkYXRlKG1vZGUpIHt9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fY3R4O1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgY29uc3QgYXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5fZHJhd1N0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5fZHJhd0NvdW50IHx8IGVsZW1lbnRzLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgICBjb25zdCBkcmF3QWN0aXZlRWxlbWVudHNPblRvcCA9IHRoaXMub3B0aW9ucy5kcmF3QWN0aXZlRWxlbWVudHNPblRvcDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChtZXRhLmRhdGFzZXQpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YXNldC5kcmF3KGN0eCwgYXJlYSwgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuYWN0aXZlICYmIGRyYXdBY3RpdmVFbGVtZW50c09uVG9wKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGFjdGl2ZS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICBhY3RpdmVbaV0uZHJhdyhjdHgsIGFyZWEpO1xuICAgICAgICB9XG4gICAgfVxuIGdldFN0eWxlKGluZGV4LCBhY3RpdmUpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IGFjdGl2ZSA/ICdhY3RpdmUnIDogJ2RlZmF1bHQnO1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQgPyB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSkgOiB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXggfHwgMCwgbW9kZSk7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgbW9kZSkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KCk7XG4gICAgICAgIGxldCBjb250ZXh0O1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dCA9IGVsZW1lbnQuJGNvbnRleHQgfHwgKGVsZW1lbnQuJGNvbnRleHQgPSBjcmVhdGVEYXRhQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIGVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnRleHQucGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICAgICAgY29udGV4dC5yYXcgPSBkYXRhc2V0LmRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YUluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdGhpcy4kY29udGV4dCB8fCAodGhpcy4kY29udGV4dCA9IGNyZWF0ZURhdGFzZXRDb250ZXh0KHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLCB0aGlzLmluZGV4KSk7XG4gICAgICAgICAgICBjb250ZXh0LmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGNvbnRleHQuZGF0YXNldEluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmFjdGl2ZSA9ICEhYWN0aXZlO1xuICAgICAgICBjb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gcmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsIG1vZGUpO1xuICAgIH1cbiByZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGluZGV4LCBtb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsIG1vZGUsIGluZGV4KTtcbiAgICB9XG4gX3Jlc29sdmVFbGVtZW50T3B0aW9ucyhlbGVtZW50VHlwZSwgbW9kZSA9ICdkZWZhdWx0JywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gbW9kZSA9PT0gJ2FjdGl2ZSc7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gZWxlbWVudFR5cGUgKyAnLScgKyBtb2RlO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICAgIGNvbnN0IHNoYXJpbmcgPSB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgJiYgZGVmaW5lZChpbmRleCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUlmTm90U2hhcmVkKGNhY2hlZCwgc2hhcmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jaGFydC5jb25maWc7XG4gICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyh0aGlzLl90eXBlLCBlbGVtZW50VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVzID0gYWN0aXZlID8gW1xuICAgICAgICAgICAgYCR7ZWxlbWVudFR5cGV9SG92ZXJgLFxuICAgICAgICAgICAgJ2hvdmVyJyxcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXSA6IFtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgJydcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0cy5lbGVtZW50c1tlbGVtZW50VHlwZV0pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gKCk9PnRoaXMuZ2V0Q29udGV4dChpbmRleCwgYWN0aXZlLCBtb2RlKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY29uZmlnLnJlc29sdmVOYW1lZE9wdGlvbnMoc2NvcGVzLCBuYW1lcywgY29udGV4dCwgcHJlZml4ZXMpO1xuICAgICAgICBpZiAodmFsdWVzLiRzaGFyZWQpIHtcbiAgICAgICAgICAgIHZhbHVlcy4kc2hhcmVkID0gc2hhcmluZztcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoY2xvbmVJZk5vdFNoYXJlZCh2YWx1ZXMsIHNoYXJpbmcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiBfcmVzb2x2ZUFuaW1hdGlvbnMoaW5kZXgsIHRyYW5zaXRpb24sIGFjdGl2ZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkRGF0YU9wdHM7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYGFuaW1hdGlvbi0ke3RyYW5zaXRpb259YDtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbY2FjaGVLZXldO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvcHRpb25zO1xuICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5hbmltYXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNoYXJ0LmNvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlS2V5cyA9IGNvbmZpZy5kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKHRoaXMuX3R5cGUsIHRyYW5zaXRpb24pO1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSwgc2NvcGVLZXlzKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCB0aGlzLmdldENvbnRleHQoaW5kZXgsIGFjdGl2ZSwgdHJhbnNpdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyhjaGFydCwgb3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9jYWNoZWFibGUpIHtcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldFNoYXJlZE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuJHNoYXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zIHx8ICh0aGlzLl9zaGFyZWRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucykpO1xuICAgIH1cbiBpbmNsdWRlT3B0aW9ucyhtb2RlLCBzaGFyZWRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhc2hhcmVkT3B0aW9ucyB8fCBpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkgfHwgdGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkO1xuICAgIH1cbiBfZ2V0U2hhcmVkT3B0aW9ucyhzdGFydCwgbW9kZSkge1xuICAgICAgICBjb25zdCBmaXJzdE9wdHMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyA9IHRoaXMuX3NoYXJlZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpIHx8IHNoYXJlZE9wdGlvbnMgIT09IHByZXZpb3VzbHlTaGFyZWRPcHRpb25zO1xuICAgICAgICB0aGlzLnVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgZmlyc3RPcHRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNoYXJlZE9wdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlT3B0aW9uc1xuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4LCBwcm9wZXJ0aWVzLCBtb2RlKSB7XG4gICAgICAgIGlmIChpc0RpcmVjdFVwZGF0ZU1vZGUobW9kZSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudCwgcHJvcGVydGllcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyhpbmRleCwgbW9kZSkudXBkYXRlKGVsZW1lbnQsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgfVxuIHVwZGF0ZVNoYXJlZE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgbW9kZSwgbmV3T3B0aW9ucykge1xuICAgICAgICBpZiAoc2hhcmVkT3B0aW9ucyAmJiAhaXNEaXJlY3RVcGRhdGVNb2RlKG1vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh1bmRlZmluZWQsIG1vZGUpLnVwZGF0ZShzaGFyZWRPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiBfc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsIG1vZGUsIGFjdGl2ZSkge1xuICAgICAgICBlbGVtZW50LmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0U3R5bGUoaW5kZXgsIGFjdGl2ZSk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKGluZGV4LCBtb2RlLCBhY3RpdmUpLnVwZGF0ZShlbGVtZW50LCB7XG4gICAgICAgICAgICBvcHRpb25zOiAhYWN0aXZlICYmIHRoaXMuZ2V0U2hhcmVkT3B0aW9ucyhvcHRpb25zKSB8fCBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVIb3ZlclN0eWxlKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgaW5kZXgsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgfVxuICAgIHNldEhvdmVyU3R5bGUoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCBpbmRleCwgJ2FjdGl2ZScsIHRydWUpO1xuICAgIH1cbiBfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTdHlsZShlbGVtZW50LCB1bmRlZmluZWQsICdhY3RpdmUnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3NldERhdGFzZXRIb3ZlclN0eWxlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3R5bGUoZWxlbWVudCwgdW5kZWZpbmVkLCAnYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX3Jlc3luY0VsZW1lbnRzKHJlc2V0TmV3RWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fY2FjaGVkTWV0YS5kYXRhO1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRob2QsIGFyZzEsIGFyZzJdIG9mIHRoaXMuX3N5bmNMaXN0KXtcbiAgICAgICAgICAgIHRoaXNbbWV0aG9kXShhcmcxLCBhcmcyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zeW5jTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1EYXRhID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gTWF0aC5taW4obnVtRGF0YSwgbnVtTWV0YSk7XG4gICAgICAgIGlmIChjb3VudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZSgwLCBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bURhdGEgPiBudW1NZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50cyhudW1NZXRhLCBudW1EYXRhIC0gbnVtTWV0YSwgcmVzZXROZXdFbGVtZW50cyk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtRGF0YSA8IG51bU1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUVsZW1lbnRzKG51bURhdGEsIG51bU1ldGEgLSBudW1EYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiBfaW5zZXJ0RWxlbWVudHMoc3RhcnQsIGNvdW50LCByZXNldE5ld0VsZW1lbnRzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBjb3VudDtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGNvbnN0IG1vdmUgPSAoYXJyKT0+e1xuICAgICAgICAgICAgYXJyLmxlbmd0aCArPSBjb3VudDtcbiAgICAgICAgICAgIGZvcihpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gZW5kOyBpLS0pe1xuICAgICAgICAgICAgICAgIGFycltpXSA9IGFycltpIC0gY291bnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBtb3ZlKGRhdGEpO1xuICAgICAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpe1xuICAgICAgICAgICAgZGF0YVtpXSA9IG5ldyB0aGlzLmRhdGFFbGVtZW50VHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICBtb3ZlKG1ldGEuX3BhcnNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZShzdGFydCwgY291bnQpO1xuICAgICAgICBpZiAocmVzZXROZXdFbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhkYXRhLCBzdGFydCwgY291bnQsICdyZXNldCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKGVsZW1lbnQsIHN0YXJ0LCBjb3VudCwgbW9kZSkge31cbiBfcmVtb3ZlRWxlbWVudHMoc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IG1ldGEuX3BhcnNlZC5zcGxpY2Uoc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGlmIChtZXRhLl9zdGFja2VkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJTdGFja3MobWV0YSwgcmVtb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWV0YS5kYXRhLnNwbGljZShzdGFydCwgY291bnQpO1xuICAgIH1cbiBfc3luYyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jTGlzdC5wdXNoKGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW21ldGhvZCwgYXJnMSwgYXJnMl0gPSBhcmdzO1xuICAgICAgICAgICAgdGhpc1ttZXRob2RdKGFyZzEsIGFyZzIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhcnQuX2RhdGFDaGFuZ2VzLnB1c2goW1xuICAgICAgICAgICAgdGhpcy5pbmRleCxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQdXNoKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19pbnNlcnRFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLmdldERhdGFzZXQoKS5kYXRhLmxlbmd0aCAtIGNvdW50LFxuICAgICAgICAgICAgY291bnRcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFQb3AoKSB7XG4gICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgJ19yZW1vdmVFbGVtZW50cycsXG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIF9vbkRhdGFTaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX3JlbW92ZUVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfb25EYXRhU3BsaWNlKHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfcmVtb3ZlRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGNvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgICAgICBpZiAobmV3Q291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoW1xuICAgICAgICAgICAgICAgICdfaW5zZXJ0RWxlbWVudHMnLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIG5ld0NvdW50XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfb25EYXRhVW5zaGlmdCgpIHtcbiAgICAgICAgdGhpcy5fc3luYyhbXG4gICAgICAgICAgICAnX2luc2VydEVsZW1lbnRzJyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgIF0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIHR5cGUpIHtcbiAgICBpZiAoIXNjYWxlLl9jYWNoZS4kYmFyKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVNZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpO1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB2aXNpYmxlTWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQodmlzaWJsZU1ldGFzW2ldLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHNjYWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGUuX2NhY2hlLiRiYXIgPSBfYXJyYXlVbmlxdWUodmFsdWVzLnNvcnQoKGEsIGIpPT5hIC0gYikpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGUuX2NhY2hlLiRiYXI7XG59XG4gZnVuY3Rpb24gY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSkge1xuICAgIGNvbnN0IHNjYWxlID0gbWV0YS5pU2NhbGU7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0QWxsU2NhbGVWYWx1ZXMoc2NhbGUsIG1ldGEudHlwZSk7XG4gICAgbGV0IG1pbiA9IHNjYWxlLl9sZW5ndGg7XG4gICAgbGV0IGksIGlsZW4sIGN1cnIsIHByZXY7XG4gICAgY29uc3QgdXBkYXRlTWluQW5kUHJldiA9ICgpPT57XG4gICAgICAgIGlmIChjdXJyID09PSAzMjc2NyB8fCBjdXJyID09PSAtMzI3NjgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmaW5lZChwcmV2KSkge1xuICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBNYXRoLmFicyhjdXJyIC0gcHJldikgfHwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gY3VycjtcbiAgICB9O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBjdXJyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICB1cGRhdGVNaW5BbmRQcmV2KCk7XG4gICAgfVxuICAgIHByZXYgPSB1bmRlZmluZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gc2NhbGUudGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY3VyciA9IHNjYWxlLmdldFBpeGVsRm9yVGljayhpKTtcbiAgICAgICAgdXBkYXRlTWluQW5kUHJldigpO1xuICAgIH1cbiAgICByZXR1cm4gbWluO1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpIHtcbiAgICBjb25zdCB0aGlja25lc3MgPSBvcHRpb25zLmJhclRoaWNrbmVzcztcbiAgICBsZXQgc2l6ZSwgcmF0aW87XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYodGhpY2tuZXNzKSkge1xuICAgICAgICBzaXplID0gcnVsZXIubWluICogb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgICAgIHJhdGlvID0gb3B0aW9ucy5iYXJQZXJjZW50YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSB0aGlja25lc3MgKiBzdGFja0NvdW50O1xuICAgICAgICByYXRpbyA9IDE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNodW5rOiBzaXplIC8gc3RhY2tDb3VudCxcbiAgICAgICAgcmF0aW8sXG4gICAgICAgIHN0YXJ0OiBydWxlci5waXhlbHNbaW5kZXhdIC0gc2l6ZSAvIDJcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSB7XG4gICAgY29uc3QgcGl4ZWxzID0gcnVsZXIucGl4ZWxzO1xuICAgIGNvbnN0IGN1cnIgPSBwaXhlbHNbaW5kZXhdO1xuICAgIGxldCBwcmV2ID0gaW5kZXggPiAwID8gcGl4ZWxzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgIGxldCBuZXh0ID0gaW5kZXggPCBwaXhlbHMubGVuZ3RoIC0gMSA/IHBpeGVsc1tpbmRleCArIDFdIDogbnVsbDtcbiAgICBjb25zdCBwZXJjZW50ID0gb3B0aW9ucy5jYXRlZ29yeVBlcmNlbnRhZ2U7XG4gICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgcHJldiA9IGN1cnIgLSAobmV4dCA9PT0gbnVsbCA/IHJ1bGVyLmVuZCAtIHJ1bGVyLnN0YXJ0IDogbmV4dCAtIGN1cnIpO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgICBuZXh0ID0gY3VyciArIGN1cnIgLSBwcmV2O1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IGN1cnIgLSAoY3VyciAtIE1hdGgubWluKHByZXYsIG5leHQpKSAvIDIgKiBwZXJjZW50O1xuICAgIGNvbnN0IHNpemUgPSBNYXRoLmFicyhuZXh0IC0gcHJldikgLyAyICogcGVyY2VudDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjaHVuazogc2l6ZSAvIHN0YWNrQ291bnQsXG4gICAgICAgIHJhdGlvOiBvcHRpb25zLmJhclBlcmNlbnRhZ2UsXG4gICAgICAgIHN0YXJ0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlRmxvYXRCYXIoZW50cnksIGl0ZW0sIHZTY2FsZSwgaSkge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2U2NhbGUucGFyc2UoZW50cnlbMF0sIGkpO1xuICAgIGNvbnN0IGVuZFZhbHVlID0gdlNjYWxlLnBhcnNlKGVudHJ5WzFdLCBpKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICAgIGxldCBiYXJTdGFydCA9IG1pbjtcbiAgICBsZXQgYmFyRW5kID0gbWF4O1xuICAgIGlmIChNYXRoLmFicyhtaW4pID4gTWF0aC5hYnMobWF4KSkge1xuICAgICAgICBiYXJTdGFydCA9IG1heDtcbiAgICAgICAgYmFyRW5kID0gbWluO1xuICAgIH1cbiAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IGJhckVuZDtcbiAgICBpdGVtLl9jdXN0b20gPSB7XG4gICAgICAgIGJhclN0YXJ0LFxuICAgICAgICBiYXJFbmQsXG4gICAgICAgIHN0YXJ0OiBzdGFydFZhbHVlLFxuICAgICAgICBlbmQ6IGVuZFZhbHVlLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heFxuICAgIH07XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpIHtcbiAgICBpZiAoaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgcGFyc2VGbG9hdEJhcihlbnRyeSwgaXRlbSwgdlNjYWxlLCBpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtW3ZTY2FsZS5heGlzXSA9IHZTY2FsZS5wYXJzZShlbnRyeSwgaSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuZnVuY3Rpb24gcGFyc2VBcnJheU9yUHJpbWl0aXZlKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgIGNvbnN0IGlTY2FsZSA9IG1ldGEuaVNjYWxlO1xuICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgIGNvbnN0IGxhYmVscyA9IGlTY2FsZS5nZXRMYWJlbHMoKTtcbiAgICBjb25zdCBzaW5nbGVTY2FsZSA9IGlTY2FsZSA9PT0gdlNjYWxlO1xuICAgIGNvbnN0IHBhcnNlZCA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBpdGVtLCBlbnRyeTtcbiAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGVudHJ5ID0gZGF0YVtpXTtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgICAgICBpdGVtW2lTY2FsZS5heGlzXSA9IHNpbmdsZVNjYWxlIHx8IGlTY2FsZS5wYXJzZShsYWJlbHNbaV0sIGkpO1xuICAgICAgICBwYXJzZWQucHVzaChwYXJzZVZhbHVlKGVudHJ5LCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cbmZ1bmN0aW9uIGlzRmxvYXRCYXIoY3VzdG9tKSB7XG4gICAgcmV0dXJuIGN1c3RvbSAmJiBjdXN0b20uYmFyU3RhcnQgIT09IHVuZGVmaW5lZCAmJiBjdXN0b20uYmFyRW5kICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBiYXJTaWduKHNpemUsIHZTY2FsZSwgYWN0dWFsQmFzZSkge1xuICAgIGlmIChzaXplICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzaWduKHNpemUpO1xuICAgIH1cbiAgICByZXR1cm4gKHZTY2FsZS5pc0hvcml6b250YWwoKSA/IDEgOiAtMSkgKiAodlNjYWxlLm1pbiA+PSBhY3R1YWxCYXNlID8gMSA6IC0xKTtcbn1cbmZ1bmN0aW9uIGJvcmRlclByb3BzKHByb3BlcnRpZXMpIHtcbiAgICBsZXQgcmV2ZXJzZSwgc3RhcnQsIGVuZCwgdG9wLCBib3R0b207XG4gICAgaWYgKHByb3BlcnRpZXMuaG9yaXpvbnRhbCkge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlID4gcHJvcGVydGllcy54O1xuICAgICAgICBzdGFydCA9ICdsZWZ0JztcbiAgICAgICAgZW5kID0gJ3JpZ2h0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXZlcnNlID0gcHJvcGVydGllcy5iYXNlIDwgcHJvcGVydGllcy55O1xuICAgICAgICBzdGFydCA9ICdib3R0b20nO1xuICAgICAgICBlbmQgPSAndG9wJztcbiAgICB9XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgdG9wID0gJ2VuZCc7XG4gICAgICAgIGJvdHRvbSA9ICdzdGFydCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gJ3N0YXJ0JztcbiAgICAgICAgYm90dG9tID0gJ2VuZCc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIHJldmVyc2UsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KSB7XG4gICAgbGV0IGVkZ2UgPSBvcHRpb25zLmJvcmRlclNraXBwZWQ7XG4gICAgY29uc3QgcmVzID0ge307XG4gICAgaWYgKCFlZGdlKSB7XG4gICAgICAgIHByb3BlcnRpZXMuYm9yZGVyU2tpcHBlZCA9IHJlcztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSB7XG4gICAgICAgICAgICB0b3A6IHRydWUsXG4gICAgICAgICAgICByaWdodDogdHJ1ZSxcbiAgICAgICAgICAgIGJvdHRvbTogdHJ1ZSxcbiAgICAgICAgICAgIGxlZnQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHN0YXJ0ICwgZW5kICwgcmV2ZXJzZSAsIHRvcCAsIGJvdHRvbSAgfSA9IGJvcmRlclByb3BzKHByb3BlcnRpZXMpO1xuICAgIGlmIChlZGdlID09PSAnbWlkZGxlJyAmJiBzdGFjaykge1xuICAgICAgICBwcm9wZXJ0aWVzLmVuYWJsZUJvcmRlclJhZGl1cyA9IHRydWU7XG4gICAgICAgIGlmICgoc3RhY2suX3RvcCB8fCAwKSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGVkZ2UgPSB0b3A7XG4gICAgICAgIH0gZWxzZSBpZiAoKHN0YWNrLl9ib3R0b20gfHwgMCkgPT09IGluZGV4KSB7XG4gICAgICAgICAgICBlZGdlID0gYm90dG9tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzW3BhcnNlRWRnZShib3R0b20sIHN0YXJ0LCBlbmQsIHJldmVyc2UpXSA9IHRydWU7XG4gICAgICAgICAgICBlZGdlID0gdG9wO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc1twYXJzZUVkZ2UoZWRnZSwgc3RhcnQsIGVuZCwgcmV2ZXJzZSldID0gdHJ1ZTtcbiAgICBwcm9wZXJ0aWVzLmJvcmRlclNraXBwZWQgPSByZXM7XG59XG5mdW5jdGlvbiBwYXJzZUVkZ2UoZWRnZSwgYSwgYiwgcmV2ZXJzZSkge1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgIGVkZ2UgPSBzd2FwKGVkZ2UsIGEsIGIpO1xuICAgICAgICBlZGdlID0gc3RhcnRFbmQoZWRnZSwgYiwgYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWRnZSA9IHN0YXJ0RW5kKGVkZ2UsIGEsIGIpO1xuICAgIH1cbiAgICByZXR1cm4gZWRnZTtcbn1cbmZ1bmN0aW9uIHN3YXAob3JpZywgdjEsIHYyKSB7XG4gICAgcmV0dXJuIG9yaWcgPT09IHYxID8gdjIgOiBvcmlnID09PSB2MiA/IHYxIDogb3JpZztcbn1cbmZ1bmN0aW9uIHN0YXJ0RW5kKHYsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gdiA9PT0gJ3N0YXJ0JyA/IHN0YXJ0IDogdiA9PT0gJ2VuZCcgPyBlbmQgOiB2O1xufVxuZnVuY3Rpb24gc2V0SW5mbGF0ZUFtb3VudChwcm9wZXJ0aWVzLCB7IGluZmxhdGVBbW91bnQgIH0sIHJhdGlvKSB7XG4gICAgcHJvcGVydGllcy5pbmZsYXRlQW1vdW50ID0gaW5mbGF0ZUFtb3VudCA9PT0gJ2F1dG8nID8gcmF0aW8gPT09IDEgPyAwLjMzIDogMCA6IGluZmxhdGVBbW91bnQ7XG59XG5jbGFzcyBCYXJDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAnYmFyJyxcbiAgICAgICAgY2F0ZWdvcnlQZXJjZW50YWdlOiAwLjgsXG4gICAgICAgIGJhclBlcmNlbnRhZ2U6IDAuOSxcbiAgICAgICAgZ3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHNjYWxlczoge1xuICAgICAgICAgICAgX2luZGV4Xzoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJyxcbiAgICAgICAgICAgICAgICBiZWdpbkF0WmVybzogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBwYXJzZVByaW1pdGl2ZURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFycmF5T3JQcmltaXRpdmUobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHsgeEF4aXNLZXkgPSd4JyAsIHlBeGlzS2V5ID0neScgIH0gPSB0aGlzLl9wYXJzaW5nO1xuICAgICAgICBjb25zdCBpQXhpc0tleSA9IGlTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCB2QXhpc0tleSA9IHZTY2FsZS5heGlzID09PSAneCcgPyB4QXhpc0tleSA6IHlBeGlzS2V5O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW4sIGl0ZW0sIG9iajtcbiAgICAgICAgZm9yKGkgPSBzdGFydCwgaWxlbiA9IHN0YXJ0ICsgY291bnQ7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb2JqID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGl0ZW0gPSB7fTtcbiAgICAgICAgICAgIGl0ZW1baVNjYWxlLmF4aXNdID0gaVNjYWxlLnBhcnNlKHJlc29sdmVPYmplY3RLZXkob2JqLCBpQXhpc0tleSksIGkpO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2gocGFyc2VWYWx1ZShyZXNvbHZlT2JqZWN0S2V5KG9iaiwgdkF4aXNLZXkpLCBpdGVtLCB2U2NhbGUsIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiB1cGRhdGVSYW5nZUZyb21QYXJzZWQocmFuZ2UsIHNjYWxlLCBwYXJzZWQsIHN0YWNrKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChyYW5nZSwgc2NhbGUsIHBhcnNlZCwgc3RhY2spO1xuICAgICAgICBjb25zdCBjdXN0b20gPSBwYXJzZWQuX2N1c3RvbTtcbiAgICAgICAgaWYgKGN1c3RvbSAmJiBzY2FsZSA9PT0gdGhpcy5fY2FjaGVkTWV0YS52U2NhbGUpIHtcbiAgICAgICAgICAgIHJhbmdlLm1pbiA9IE1hdGgubWluKHJhbmdlLm1pbiwgY3VzdG9tLm1pbik7XG4gICAgICAgICAgICByYW5nZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIGN1c3RvbS5tYXgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBpU2NhbGUgLCB2U2NhbGUgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIGNvbnN0IGN1c3RvbSA9IHBhcnNlZC5fY3VzdG9tO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRmxvYXRCYXIoY3VzdG9tKSA/ICdbJyArIGN1c3RvbS5zdGFydCArICcsICcgKyBjdXN0b20uZW5kICsgJ10nIDogJycgKyB2U2NhbGUuZ2V0TGFiZWxGb3JWYWx1ZShwYXJzZWRbdlNjYWxlLmF4aXNdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiAnJyArIGlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFtpU2NhbGUuYXhpc10pLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbWV0YS5zdGFjayA9IHRoaXMuZ2V0RGF0YXNldCgpLnN0YWNrO1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhtZXRhLmRhdGEsIDAsIG1ldGEuZGF0YS5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhiYXJzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGluZGV4ICwgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYmFzZSA9IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHZTY2FsZS5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgcnVsZXIgPSB0aGlzLl9nZXRSdWxlcigpO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBmb3IobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHZwaXhlbHMgPSByZXNldCB8fCBpc051bGxPclVuZGVmKHBhcnNlZFt2U2NhbGUuYXhpc10pID8ge1xuICAgICAgICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgICAgICAgaGVhZDogYmFzZVxuICAgICAgICAgICAgfSA6IHRoaXMuX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGkpO1xuICAgICAgICAgICAgY29uc3QgaXBpeGVscyA9IHRoaXMuX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzKGksIHJ1bGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gKHBhcnNlZC5fc3RhY2tzIHx8IHt9KVt2U2NhbGUuYXhpc107XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIGhvcml6b250YWwsXG4gICAgICAgICAgICAgICAgYmFzZTogdnBpeGVscy5iYXNlLFxuICAgICAgICAgICAgICAgIGVuYWJsZUJvcmRlclJhZGl1czogIXN0YWNrIHx8IGlzRmxvYXRCYXIocGFyc2VkLl9jdXN0b20pIHx8IGluZGV4ID09PSBzdGFjay5fdG9wIHx8IGluZGV4ID09PSBzdGFjay5fYm90dG9tLFxuICAgICAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyB2cGl4ZWxzLmhlYWQgOiBpcGl4ZWxzLmNlbnRlcixcbiAgICAgICAgICAgICAgICB5OiBob3Jpem9udGFsID8gaXBpeGVscy5jZW50ZXIgOiB2cGl4ZWxzLmhlYWQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBob3Jpem9udGFsID8gaXBpeGVscy5zaXplIDogTWF0aC5hYnModnBpeGVscy5zaXplKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE1hdGguYWJzKHZwaXhlbHMuc2l6ZSkgOiBpcGl4ZWxzLnNpemVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBiYXJzW2ldLmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcHJvcGVydGllcy5vcHRpb25zIHx8IGJhcnNbaV0ub3B0aW9ucztcbiAgICAgICAgICAgIHNldEJvcmRlclNraXBwZWQocHJvcGVydGllcywgb3B0aW9ucywgc3RhY2ssIGluZGV4KTtcbiAgICAgICAgICAgIHNldEluZmxhdGVBbW91bnQocHJvcGVydGllcywgb3B0aW9ucywgcnVsZXIucmF0aW8pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGJhcnNbaV0sIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIF9nZXRTdGFja3MobGFzdCwgZGF0YUluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBpU2NhbGUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXModGhpcy5fdHlwZSkuZmlsdGVyKChtZXRhKT0+bWV0YS5jb250cm9sbGVyLm9wdGlvbnMuZ3JvdXBlZCk7XG4gICAgICAgIGNvbnN0IHN0YWNrZWQgPSBpU2NhbGUub3B0aW9ucy5zdGFja2VkO1xuICAgICAgICBjb25zdCBzdGFja3MgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFBhcnNlZCA9IHRoaXMuX2NhY2hlZE1ldGEuY29udHJvbGxlci5nZXRQYXJzZWQoZGF0YUluZGV4KTtcbiAgICAgICAgY29uc3QgaVNjYWxlVmFsdWUgPSBjdXJyZW50UGFyc2VkICYmIGN1cnJlbnRQYXJzZWRbaVNjYWxlLmF4aXNdO1xuICAgICAgICBjb25zdCBza2lwTnVsbCA9IChtZXRhKT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbWV0YS5fcGFyc2VkLmZpbmQoKGl0ZW0pPT5pdGVtW2lTY2FsZS5heGlzXSA9PT0gaVNjYWxlVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VkICYmIHBhcnNlZFttZXRhLnZTY2FsZS5heGlzXTtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbCkgfHwgaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGEgb2YgbWV0YXNldHMpe1xuICAgICAgICAgICAgaWYgKGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkICYmIHNraXBOdWxsKG1ldGEpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhY2tlZCA9PT0gZmFsc2UgfHwgc3RhY2tzLmluZGV4T2YobWV0YS5zdGFjaykgPT09IC0xIHx8IHN0YWNrZWQgPT09IHVuZGVmaW5lZCAmJiBtZXRhLnN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFja3MucHVzaChtZXRhLnN0YWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhLmluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGFja3MucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja3M7XG4gICAgfVxuIF9nZXRTdGFja0NvdW50KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdGFja3ModW5kZWZpbmVkLCBpbmRleCkubGVuZ3RoO1xuICAgIH1cbiBfZ2V0U3RhY2tJbmRleChkYXRhc2V0SW5kZXgsIG5hbWUsIGRhdGFJbmRleCkge1xuICAgICAgICBjb25zdCBzdGFja3MgPSB0aGlzLl9nZXRTdGFja3MoZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG5hbWUgIT09IHVuZGVmaW5lZCA/IHN0YWNrcy5pbmRleE9mKG5hbWUpIDogLTE7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gLTEgPyBzdGFja3MubGVuZ3RoIC0gMSA6IGluZGV4O1xuICAgIH1cbiBfZ2V0UnVsZXIoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBpU2NhbGUgPSBtZXRhLmlTY2FsZTtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBtZXRhLmRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0UGFyc2VkKGkpW2lTY2FsZS5heGlzXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhclRoaWNrbmVzcyA9IG9wdHMuYmFyVGhpY2tuZXNzO1xuICAgICAgICBjb25zdCBtaW4gPSBiYXJUaGlja25lc3MgfHwgY29tcHV0ZU1pblNhbXBsZVNpemUobWV0YSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBwaXhlbHMsXG4gICAgICAgICAgICBzdGFydDogaVNjYWxlLl9zdGFydFBpeGVsLFxuICAgICAgICAgICAgZW5kOiBpU2NhbGUuX2VuZFBpeGVsLFxuICAgICAgICAgICAgc3RhY2tDb3VudDogdGhpcy5fZ2V0U3RhY2tDb3VudCgpLFxuICAgICAgICAgICAgc2NhbGU6IGlTY2FsZSxcbiAgICAgICAgICAgIGdyb3VwZWQ6IG9wdHMuZ3JvdXBlZCxcbiAgICAgICAgICAgIHJhdGlvOiBiYXJUaGlja25lc3MgPyAxIDogb3B0cy5jYXRlZ29yeVBlcmNlbnRhZ2UgKiBvcHRzLmJhclBlcmNlbnRhZ2VcbiAgICAgICAgfTtcbiAgICB9XG4gX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgX2NhY2hlZE1ldGE6IHsgdlNjYWxlICwgX3N0YWNrZWQgLCBpbmRleDogZGF0YXNldEluZGV4ICB9ICwgb3B0aW9uczogeyBiYXNlOiBiYXNlVmFsdWUgLCBtaW5CYXJMZW5ndGggIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhY3R1YWxCYXNlID0gYmFzZVZhbHVlIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgY3VzdG9tID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIGNvbnN0IGZsb2F0aW5nID0gaXNGbG9hdEJhcihjdXN0b20pO1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZWRbdlNjYWxlLmF4aXNdO1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGVuZ3RoID0gX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGVhZCwgc2l6ZTtcbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgICAgICBsZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmxvYXRpbmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gY3VzdG9tLmJhclN0YXJ0O1xuICAgICAgICAgICAgbGVuZ3RoID0gY3VzdG9tLmJhckVuZCAtIGN1c3RvbS5iYXJTdGFydDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gMCAmJiBzaWduKHZhbHVlKSAhPT0gc2lnbihjdXN0b20uYmFyRW5kKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSAhaXNOdWxsT3JVbmRlZihiYXNlVmFsdWUpICYmICFmbG9hdGluZyA/IGJhc2VWYWx1ZSA6IHN0YXJ0O1xuICAgICAgICBsZXQgYmFzZSA9IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHN0YXJ0VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgIGhlYWQgPSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShzdGFydCArIGxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkID0gYmFzZTtcbiAgICAgICAgfVxuICAgICAgICBzaXplID0gaGVhZCAtIGJhc2U7XG4gICAgICAgIGlmIChNYXRoLmFicyhzaXplKSA8IG1pbkJhckxlbmd0aCkge1xuICAgICAgICAgICAgc2l6ZSA9IGJhclNpZ24oc2l6ZSwgdlNjYWxlLCBhY3R1YWxCYXNlKSAqIG1pbkJhckxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gYWN0dWFsQmFzZSkge1xuICAgICAgICAgICAgICAgIGJhc2UgLT0gc2l6ZSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBpeGVsID0gdlNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgxKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHN0YXJ0UGl4ZWwsIGVuZFBpeGVsKTtcbiAgICAgICAgICAgIGJhc2UgPSBNYXRoLm1heChNYXRoLm1pbihiYXNlLCBtYXgpLCBtaW4pO1xuICAgICAgICAgICAgaGVhZCA9IGJhc2UgKyBzaXplO1xuICAgICAgICAgICAgaWYgKF9zdGFja2VkICYmICFmbG9hdGluZykge1xuICAgICAgICAgICAgICAgIHBhcnNlZC5fc3RhY2tzW3ZTY2FsZS5heGlzXS5fdmlzdWFsVmFsdWVzW2RhdGFzZXRJbmRleF0gPSB2U2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChoZWFkKSAtIHZTY2FsZS5nZXRWYWx1ZUZvclBpeGVsKGJhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiYXNlID09PSB2U2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZShhY3R1YWxCYXNlKSkge1xuICAgICAgICAgICAgY29uc3QgaGFsZkdyaWQgPSBzaWduKHNpemUpICogdlNjYWxlLmdldExpbmVXaWR0aEZvclZhbHVlKGFjdHVhbEJhc2UpIC8gMjtcbiAgICAgICAgICAgIGJhc2UgKz0gaGFsZkdyaWQ7XG4gICAgICAgICAgICBzaXplIC09IGhhbGZHcmlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgYmFzZSxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICBjZW50ZXI6IGhlYWQgKyBzaXplIC8gMlxuICAgICAgICB9O1xuICAgIH1cbiBfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMoaW5kZXgsIHJ1bGVyKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gcnVsZXIuc2NhbGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNraXBOdWxsID0gb3B0aW9ucy5za2lwTnVsbDtcbiAgICAgICAgY29uc3QgbWF4QmFyVGhpY2tuZXNzID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy5tYXhCYXJUaGlja25lc3MsIEluZmluaXR5KTtcbiAgICAgICAgbGV0IGNlbnRlciwgc2l6ZTtcbiAgICAgICAgaWYgKHJ1bGVyLmdyb3VwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrQ291bnQgPSBza2lwTnVsbCA/IHRoaXMuX2dldFN0YWNrQ291bnQoaW5kZXgpIDogcnVsZXIuc3RhY2tDb3VudDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gb3B0aW9ucy5iYXJUaGlja25lc3MgPT09ICdmbGV4JyA/IGNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMoaW5kZXgsIHJ1bGVyLCBvcHRpb25zLCBzdGFja0NvdW50KSA6IGNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyhpbmRleCwgcnVsZXIsIG9wdGlvbnMsIHN0YWNrQ291bnQpO1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tJbmRleCA9IHRoaXMuX2dldFN0YWNrSW5kZXgodGhpcy5pbmRleCwgdGhpcy5fY2FjaGVkTWV0YS5zdGFjaywgc2tpcE51bGwgPyBpbmRleCA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjZW50ZXIgPSByYW5nZS5zdGFydCArIHJhbmdlLmNodW5rICogc3RhY2tJbmRleCArIHJhbmdlLmNodW5rIC8gMjtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJhbmdlLmNodW5rICogcmFuZ2UucmF0aW8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VudGVyID0gc2NhbGUuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpbmRleClbc2NhbGUuYXhpc10sIGluZGV4KTtcbiAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihtYXhCYXJUaGlja25lc3MsIHJ1bGVyLm1pbiAqIHJ1bGVyLnJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZTogY2VudGVyIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBoZWFkOiBjZW50ZXIgKyBzaXplIC8gMixcbiAgICAgICAgICAgIGNlbnRlcixcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IG1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCByZWN0cyA9IG1ldGEuZGF0YTtcbiAgICAgICAgY29uc3QgaWxlbiA9IHJlY3RzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBhcnNlZChpKVt2U2NhbGUuYXhpc10gIT09IG51bGwgJiYgIXJlY3RzW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJlY3RzW2ldLmRyYXcodGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQnViYmxlQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAnYnViYmxlJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZmFsc2UsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgYW5pbWF0aW9uczoge1xuICAgICAgICAgICAgbnVtYmVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdyYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgfVxuIHBhcnNlUHJpbWl0aXZlRGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc3VwZXIucGFyc2VQcmltaXRpdmVEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgcGFyc2VkW2ldLl9jdXN0b20gPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSArIHN0YXJ0KS5yYWRpdXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gcGFyc2VBcnJheURhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlQXJyYXlEYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbc3RhcnQgKyBpXTtcbiAgICAgICAgICAgIHBhcnNlZFtpXS5fY3VzdG9tID0gdmFsdWVPckRlZmF1bHQoaXRlbVsyXSwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkgKyBzdGFydCkucmFkaXVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiBwYXJzZU9iamVjdERhdGEobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHN1cGVyLnBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgcGFyc2VkLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3N0YXJ0ICsgaV07XG4gICAgICAgICAgICBwYXJzZWRbaV0uX2N1c3RvbSA9IHZhbHVlT3JEZWZhdWx0KGl0ZW0gJiYgaXRlbS5yICYmICtpdGVtLnIsIHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpICsgc3RhcnQpLnJhZGl1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gZ2V0TWF4T3ZlcmZsb3coKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9jYWNoZWRNZXRhLmRhdGE7XG4gICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgZGF0YVtpXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKSkgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ID4gMCAmJiBtYXg7XG4gICAgfVxuIGdldExhYmVsQW5kVmFsdWUoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY2hhcnQuZGF0YS5sYWJlbHMgfHwgW107XG4gICAgICAgIGNvbnN0IHsgeFNjYWxlICwgeVNjYWxlICB9ID0gbWV0YTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBjb25zdCB4ID0geFNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLngpO1xuICAgICAgICBjb25zdCB5ID0geVNjYWxlLmdldExhYmVsRm9yVmFsdWUocGFyc2VkLnkpO1xuICAgICAgICBjb25zdCByID0gcGFyc2VkLl9jdXN0b207XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlOiAnKCcgKyB4ICsgJywgJyArIHkgKyAociA/ICcsICcgKyByIDogJycpICsgJyknXG4gICAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhwb2ludHMsIDAsIHBvaW50cy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICB9ID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgY29uc3QgaUF4aXMgPSBpU2NhbGUuYXhpcztcbiAgICAgICAgY29uc3QgdkF4aXMgPSB2U2NhbGUuYXhpcztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSAhcmVzZXQgJiYgdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IHJlc2V0ID8gaVNjYWxlLmdldFBpeGVsRm9yRGVjaW1hbCgwLjUpIDogaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0ID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSBpc05hTihpUGl4ZWwpIHx8IGlzTmFOKHZQaXhlbCk7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBwb2ludC5hY3RpdmUgPyAnYWN0aXZlJyA6IG1vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMucmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQocG9pbnQsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuIHJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpO1xuICAgICAgICBsZXQgdmFsdWVzID0gc3VwZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSk7XG4gICAgICAgIGlmICh2YWx1ZXMuJHNoYXJlZCkge1xuICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsdWVzLCB7XG4gICAgICAgICAgICAgICAgJHNoYXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHZhbHVlcy5yYWRpdXM7XG4gICAgICAgIGlmIChtb2RlICE9PSAnYWN0aXZlJykge1xuICAgICAgICAgICAgdmFsdWVzLnJhZGl1cyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnJhZGl1cyArPSB2YWx1ZU9yRGVmYXVsdChwYXJzZWQgJiYgcGFyc2VkLl9jdXN0b20sIHJhZGl1cyk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYXRpb0FuZE9mZnNldChyb3RhdGlvbiwgY2lyY3VtZmVyZW5jZSwgY3V0b3V0KSB7XG4gICAgbGV0IHJhdGlvWCA9IDE7XG4gICAgbGV0IHJhdGlvWSA9IDE7XG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBpZiAoY2lyY3VtZmVyZW5jZSA8IFRBVSkge1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gcm90YXRpb247XG4gICAgICAgIGNvbnN0IGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIGNpcmN1bWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IE1hdGguY29zKHN0YXJ0QW5nbGUpO1xuICAgICAgICBjb25zdCBzdGFydFkgPSBNYXRoLnNpbihzdGFydEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWCA9IE1hdGguY29zKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgZW5kWSA9IE1hdGguc2luKGVuZEFuZ2xlKTtcbiAgICAgICAgY29uc3QgY2FsY01heCA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IDEgOiBNYXRoLm1heChhLCBhICogY3V0b3V0LCBiLCBiICogY3V0b3V0KTtcbiAgICAgICAgY29uc3QgY2FsY01pbiA9IChhbmdsZSwgYSwgYik9Pl9hbmdsZUJldHdlZW4oYW5nbGUsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCB0cnVlKSA/IC0xIDogTWF0aC5taW4oYSwgYSAqIGN1dG91dCwgYiwgYiAqIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFggPSBjYWxjTWF4KDAsIHN0YXJ0WCwgZW5kWCk7XG4gICAgICAgIGNvbnN0IG1heFkgPSBjYWxjTWF4KEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIGNvbnN0IG1pblggPSBjYWxjTWluKFBJLCBzdGFydFgsIGVuZFgpO1xuICAgICAgICBjb25zdCBtaW5ZID0gY2FsY01pbihQSSArIEhBTEZfUEksIHN0YXJ0WSwgZW5kWSk7XG4gICAgICAgIHJhdGlvWCA9IChtYXhYIC0gbWluWCkgLyAyO1xuICAgICAgICByYXRpb1kgPSAobWF4WSAtIG1pblkpIC8gMjtcbiAgICAgICAgb2Zmc2V0WCA9IC0obWF4WCArIG1pblgpIC8gMjtcbiAgICAgICAgb2Zmc2V0WSA9IC0obWF4WSArIG1pblkpIC8gMjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmF0aW9YLFxuICAgICAgICByYXRpb1ksXG4gICAgICAgIG9mZnNldFgsXG4gICAgICAgIG9mZnNldFlcbiAgICB9O1xufVxuY2xhc3MgRG91Z2hudXRDb250cm9sbGVyIGV4dGVuZHMgRGF0YXNldENvbnRyb2xsZXIge1xuICAgIHN0YXRpYyBpZCA9ICdkb3VnaG51dCc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBkYXRhc2V0RWxlbWVudFR5cGU6IGZhbHNlLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdhcmMnLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGFuaW1hdGVSb3RhdGU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRlU2NhbGU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2lubmVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXJXaWR0aCcsXG4gICAgICAgICAgICAgICAgICAgICdzcGFjaW5nJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3V0b3V0OiAnNTAlJyxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJScsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGluZGV4QXhpczogJ3InXG4gICAgfTtcbiAgICBzdGF0aWMgZGVzY3JpcHRvcnMgPSB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdzcGFjaW5nJyxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnc3BhY2luZycgJiYgIW5hbWUuc3RhcnRzV2l0aCgnYm9yZGVyRGFzaCcpICYmICFuYW1lLnN0YXJ0c1dpdGgoJ2hvdmVyQm9yZGVyRGFzaCcpXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBhc3BlY3RSYXRpbzogMSxcbiAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTGFiZWxzIChjaGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNoYXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sYWJlbHMubGVuZ3RoICYmIGRhdGEuZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsYWJlbHM6IHsgcG9pbnRTdHlsZSAsIGNvbG9yICB9ICB9ID0gY2hhcnQubGVnZW5kLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGFiZWxzLm1hcCgobGFiZWwsIGkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogc3R5bGUuYm9yZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBwb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrIChlLCBsZWdlbmRJdGVtLCBsZWdlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnRvZ2dsZURhdGFWaXNpYmlsaXR5KGxlZ2VuZEl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBsZWdlbmQuY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjaGFydCwgZGF0YXNldEluZGV4KXtcbiAgICAgICAgc3VwZXIoY2hhcnQsIGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsaW5rU2NhbGVzKCkge31cbiBwYXJzZShzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YXNldCgpLmRhdGE7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBpZiAodGhpcy5fcGFyc2luZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG1ldGEuX3BhcnNlZCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ2V0dGVyID0gKGkpPT4rZGF0YVtpXTtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChkYXRhW3N0YXJ0XSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSA9J3ZhbHVlJyAgfSA9IHRoaXMuX3BhcnNpbmc7XG4gICAgICAgICAgICAgICAgZ2V0dGVyID0gKGkpPT4rcmVzb2x2ZU9iamVjdEtleShkYXRhW2ldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgICAgICBmb3IoaSA9IHN0YXJ0LCBpbGVuID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICAgICAgbWV0YS5fcGFyc2VkW2ldID0gZ2V0dGVyKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF9nZXRSb3RhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRvUmFkaWFucyh0aGlzLm9wdGlvbnMucm90YXRpb24gLSA5MCk7XG4gICAgfVxuIF9nZXRDaXJjdW1mZXJlbmNlKCkge1xuICAgICAgICByZXR1cm4gdG9SYWRpYW5zKHRoaXMub3B0aW9ucy5jaXJjdW1mZXJlbmNlKTtcbiAgICB9XG4gX2dldFJvdGF0aW9uRXh0ZW50cygpIHtcbiAgICAgICAgbGV0IG1pbiA9IFRBVTtcbiAgICAgICAgbGV0IG1heCA9IC1UQVU7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpKSAmJiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGkpLnR5cGUgPT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShpKS5jb250cm9sbGVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0aW9uID0gY29udHJvbGxlci5fZ2V0Um90YXRpb24oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gY29udHJvbGxlci5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcm90YXRpb24pO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgcm90YXRpb24gKyBjaXJjdW1mZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm90YXRpb246IG1pbixcbiAgICAgICAgICAgIGNpcmN1bWZlcmVuY2U6IG1heCAtIG1pblxuICAgICAgICB9O1xuICAgIH1cbiB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IHsgY2hhcnRBcmVhICB9ID0gY2hhcnQ7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBhcmNzID0gbWV0YS5kYXRhO1xuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5nZXRNYXhCb3JkZXJXaWR0aCgpICsgdGhpcy5nZXRNYXhPZmZzZXQoYXJjcykgKyB0aGlzLm9wdGlvbnMuc3BhY2luZztcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KChNYXRoLm1pbihjaGFydEFyZWEud2lkdGgsIGNoYXJ0QXJlYS5oZWlnaHQpIC0gc3BhY2luZykgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgY3V0b3V0ID0gTWF0aC5taW4odG9QZXJjZW50YWdlKHRoaXMub3B0aW9ucy5jdXRvdXQsIG1heFNpemUpLCAxKTtcbiAgICAgICAgY29uc3QgY2hhcnRXZWlnaHQgPSB0aGlzLl9nZXRSaW5nV2VpZ2h0KHRoaXMuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNpcmN1bWZlcmVuY2UgLCByb3RhdGlvbiAgfSA9IHRoaXMuX2dldFJvdGF0aW9uRXh0ZW50cygpO1xuICAgICAgICBjb25zdCB7IHJhdGlvWCAsIHJhdGlvWSAsIG9mZnNldFggLCBvZmZzZXRZICB9ID0gZ2V0UmF0aW9BbmRPZmZzZXQocm90YXRpb24sIGNpcmN1bWZlcmVuY2UsIGN1dG91dCk7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gKGNoYXJ0QXJlYS53aWR0aCAtIHNwYWNpbmcpIC8gcmF0aW9YO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSAoY2hhcnRBcmVhLmhlaWdodCAtIHNwYWNpbmcpIC8gcmF0aW9ZO1xuICAgICAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChNYXRoLm1pbihtYXhXaWR0aCwgbWF4SGVpZ2h0KSAvIDIsIDApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IHRvRGltZW5zaW9uKHRoaXMub3B0aW9ucy5yYWRpdXMsIG1heFJhZGl1cyk7XG4gICAgICAgIGNvbnN0IGlubmVyUmFkaXVzID0gTWF0aC5tYXgob3V0ZXJSYWRpdXMgKiBjdXRvdXQsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyB0aGlzLl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCk7XG4gICAgICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFggKiBvdXRlclJhZGl1cztcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WSAqIG91dGVyUmFkaXVzO1xuICAgICAgICBtZXRhLnRvdGFsID0gdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSByYWRpdXNMZW5ndGggKiB0aGlzLl9nZXRSaW5nV2VpZ2h0T2Zmc2V0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gTWF0aC5tYXgodGhpcy5vdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIGNoYXJ0V2VpZ2h0LCAwKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50cyhhcmNzLCAwLCBhcmNzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuIF9jaXJjdW1mZXJlbmNlKGksIHJlc2V0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gdGhpcy5fZ2V0Q2lyY3VtZmVyZW5jZSgpO1xuICAgICAgICBpZiAocmVzZXQgJiYgb3B0cy5hbmltYXRpb24uYW5pbWF0ZVJvdGF0ZSB8fCAhdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpKSB8fCBtZXRhLl9wYXJzZWRbaV0gPT09IG51bGwgfHwgbWV0YS5kYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlQ2lyY3VtZmVyZW5jZShtZXRhLl9wYXJzZWRbaV0gKiBjaXJjdW1mZXJlbmNlIC8gVEFVKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMoYXJjcywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNoYXJ0O1xuICAgICAgICBjb25zdCBjaGFydEFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyO1xuICAgICAgICBjb25zdCBhbmltYXRlU2NhbGUgPSByZXNldCAmJiBhbmltYXRpb25PcHRzLmFuaW1hdGVTY2FsZTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5pbm5lclJhZGl1cztcbiAgICAgICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBhbmltYXRlU2NhbGUgPyAwIDogdGhpcy5vdXRlclJhZGl1cztcbiAgICAgICAgY29uc3QgeyBzaGFyZWRPcHRpb25zICwgaW5jbHVkZU9wdGlvbnMgIH0gPSB0aGlzLl9nZXRTaGFyZWRPcHRpb25zKHN0YXJ0LCBtb2RlKTtcbiAgICAgICAgbGV0IHN0YXJ0QW5nbGUgPSB0aGlzLl9nZXRSb3RhdGlvbigpO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgc3RhcnQ7ICsraSl7XG4gICAgICAgICAgICBzdGFydEFuZ2xlICs9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IHRoaXMuX2NpcmN1bWZlcmVuY2UoaSwgcmVzZXQpO1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgeDogY2VudGVyWCArIHRoaXMub2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiBjZW50ZXJZICsgdGhpcy5vZmZzZXRZLFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICAgICAgICAgICAgZW5kQW5nbGU6IHN0YXJ0QW5nbGUgKyBjaXJjdW1mZXJlbmNlLFxuICAgICAgICAgICAgICAgIGNpcmN1bWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXMsXG4gICAgICAgICAgICAgICAgaW5uZXJSYWRpdXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5jbHVkZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBzaGFyZWRPcHRpb25zIHx8IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QW5nbGUgKz0gY2lyY3VtZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLmRhdGE7XG4gICAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICAgIGxldCBpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBtZXRhRGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGEuX3BhcnNlZFtpXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhaXNOYU4odmFsdWUpICYmIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgJiYgIW1ldGFEYXRhW2ldLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHRvdGFsICs9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLl9jYWNoZWRNZXRhLnRvdGFsO1xuICAgICAgICBpZiAodG90YWwgPiAwICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBUQVUgKiAoTWF0aC5hYnModmFsdWUpIC8gdG90YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLCBjaGFydC5vcHRpb25zLmxvY2FsZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGFiZWxzW2luZGV4XSB8fCAnJyxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldE1heEJvcmRlcldpZHRoKGFyY3MpIHtcbiAgICAgICAgbGV0IG1heCA9IDA7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgbGV0IGksIGlsZW4sIG1ldGEsIGNvbnRyb2xsZXIsIG9wdGlvbnM7XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGlmIChjaGFydC5pc0RhdGFzZXRWaXNpYmxlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgICAgICAgICAgYXJjcyA9IG1ldGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciA9IG1ldGEuY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXJjcykge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gYXJjcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNvbnRyb2xsZXIucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvcmRlckFsaWduICE9PSAnaW5uZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDAsIG9wdGlvbnMuaG92ZXJCb3JkZXJXaWR0aCB8fCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbiAgICBnZXRNYXhPZmZzZXQoYXJjcykge1xuICAgICAgICBsZXQgbWF4ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGFyY3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIG9wdGlvbnMub2Zmc2V0IHx8IDAsIG9wdGlvbnMuaG92ZXJPZmZzZXQgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gX2dldFJpbmdXZWlnaHRPZmZzZXQoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGxldCByaW5nV2VpZ2h0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGRhdGFzZXRJbmRleDsgKytpKXtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSkpIHtcbiAgICAgICAgICAgICAgICByaW5nV2VpZ2h0T2Zmc2V0ICs9IHRoaXMuX2dldFJpbmdXZWlnaHQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJpbmdXZWlnaHRPZmZzZXQ7XG4gICAgfVxuIF9nZXRSaW5nV2VpZ2h0KGRhdGFzZXRJbmRleCkge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsdWVPckRlZmF1bHQodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0ud2VpZ2h0LCAxKSwgMCk7XG4gICAgfVxuIF9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UmluZ1dlaWdodE9mZnNldCh0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHMubGVuZ3RoKSB8fCAxO1xuICAgIH1cbn1cblxuY2xhc3MgTGluZUNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ2xpbmUnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiAnbGluZScsXG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ3BvaW50JyxcbiAgICAgICAgc2hvd0xpbmU6IHRydWUsXG4gICAgICAgIHNwYW5HYXBzOiBmYWxzZVxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICBfaW5kZXhfOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NhdGVnb3J5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92YWx1ZV86IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLmVuYWJsZU9wdGlvblNoYXJpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IHsgZGF0YXNldDogbGluZSAsIGRhdGE6IHBvaW50cyA9IFtdICwgX2RhdGFzZXQgIH0gPSBtZXRhO1xuICAgICAgICBjb25zdCBhbmltYXRpb25zRGlzYWJsZWQgPSB0aGlzLmNoYXJ0Ll9hbmltYXRpb25zRGlzYWJsZWQ7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgY291bnQgIH0gPSBfZ2V0U3RhcnRBbmRDb3VudE9mVmlzaWJsZVBvaW50cyhtZXRhLCBwb2ludHMsIGFuaW1hdGlvbnNEaXNhYmxlZCk7XG4gICAgICAgIHRoaXMuX2RyYXdTdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLl9kcmF3Q291bnQgPSBjb3VudDtcbiAgICAgICAgaWYgKF9zY2FsZVJhbmdlc0NoYW5nZWQobWV0YSkpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGNvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGxpbmUuX2RhdGFzZXRJbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGxpbmUuX2RlY2ltYXRlZCA9ICEhX2RhdGFzZXQuX2RlY2ltYXRlZDtcbiAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobW9kZSk7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dMaW5lKSB7XG4gICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnNlZ21lbnQgPSB0aGlzLm9wdGlvbnMuc2VnbWVudDtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KGxpbmUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sIG1vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKTtcbiAgICB9XG4gICAgdXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCB7IGlTY2FsZSAsIHZTY2FsZSAsIF9zdGFja2VkICwgX2RhdGFzZXQgIH0gPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCB7IHNoYXJlZE9wdGlvbnMgLCBpbmNsdWRlT3B0aW9ucyAgfSA9IHRoaXMuX2dldFNoYXJlZE9wdGlvbnMoc3RhcnQsIG1vZGUpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY291bnQ7XG4gICAgICAgIGNvbnN0IHBvaW50c0NvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgbGV0IHByZXZQYXJzZWQgPSBzdGFydCA+IDAgJiYgdGhpcy5nZXRQYXJzZWQoc3RhcnQgLSAxKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHBvaW50c0NvdW50OyArK2kpe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGlmIChpIDwgc3RhcnQgfHwgaSA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBudWxsRGF0YSA9IGlzTnVsbE9yVW5kZWYocGFyc2VkW3ZBeGlzXSk7XG4gICAgICAgICAgICBjb25zdCBpUGl4ZWwgPSBwcm9wZXJ0aWVzW2lBeGlzXSA9IGlTY2FsZS5nZXRQaXhlbEZvclZhbHVlKHBhcnNlZFtpQXhpc10sIGkpO1xuICAgICAgICAgICAgY29uc3QgdlBpeGVsID0gcHJvcGVydGllc1t2QXhpc10gPSByZXNldCB8fCBudWxsRGF0YSA/IHZTY2FsZS5nZXRCYXNlUGl4ZWwoKSA6IHZTY2FsZS5nZXRQaXhlbEZvclZhbHVlKF9zdGFja2VkID8gdGhpcy5hcHBseVN0YWNrKHZTY2FsZSwgcGFyc2VkLCBfc3RhY2tlZCkgOiBwYXJzZWRbdkF4aXNdLCBpKTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc2tpcCA9IGlzTmFOKGlQaXhlbCkgfHwgaXNOYU4odlBpeGVsKSB8fCBudWxsRGF0YTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuc3RvcCA9IGkgPiAwICYmIE1hdGguYWJzKHBhcnNlZFtpQXhpc10gLSBwcmV2UGFyc2VkW2lBeGlzXSkgPiBtYXhHYXBMZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucmF3ID0gX2RhdGFzZXQuZGF0YVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmNsdWRlT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMub3B0aW9ucyA9IHNoYXJlZE9wdGlvbnMgfHwgdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpcmVjdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChwb2ludCwgaSwgcHJvcGVydGllcywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2UGFyc2VkID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IG1ldGEuZGF0YXNldDtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gZGF0YXNldC5vcHRpb25zICYmIGRhdGFzZXQub3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAwO1xuICAgICAgICBjb25zdCBkYXRhID0gbWV0YS5kYXRhIHx8IFtdO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBkYXRhWzBdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKDApKTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGRhdGEubGVuZ3RoIC0gMSkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoYm9yZGVyLCBmaXJzdFBvaW50LCBsYXN0UG9pbnQpIC8gMjtcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIG1ldGEuZGF0YXNldC51cGRhdGVDb250cm9sUG9pbnRzKHRoaXMuY2hhcnQuY2hhcnRBcmVhLCBtZXRhLmlTY2FsZS5heGlzKTtcbiAgICAgICAgc3VwZXIuZHJhdygpO1xuICAgIH1cbn1cblxuY2xhc3MgUG9sYXJBcmVhQ29udHJvbGxlciBleHRlbmRzIERhdGFzZXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncG9sYXJBcmVhJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFFbGVtZW50VHlwZTogJ2FyYycsXG4gICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgYW5pbWF0ZVJvdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgIGFuaW1hdGVTY2FsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhbmltYXRpb25zOiB7XG4gICAgICAgICAgICBudW1iZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnZW5kQW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpbmRleEF4aXM6ICdyJyxcbiAgICAgICAgc3RhcnRBbmdsZTogMFxuICAgIH07XG4gc3RhdGljIG92ZXJyaWRlcyA9IHtcbiAgICAgICAgYXNwZWN0UmF0aW86IDEsXG4gICAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUxhYmVscyAoY2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubGFiZWxzLmxlbmd0aCAmJiBkYXRhLmRhdGFzZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHBvaW50U3R5bGUgLCBjb2xvciAgfSAgfSA9IGNoYXJ0LmxlZ2VuZC5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmxhYmVscy5tYXAoKGxhYmVsLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gbWV0YS5jb250cm9sbGVyLmdldFN0eWxlKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHN0eWxlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVN0eWxlOiBzdHlsZS5ib3JkZXJDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IHN0eWxlLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIWNoYXJ0LmdldERhdGFWaXNpYmlsaXR5KGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5jaGFydC50b2dnbGVEYXRhVmlzaWJpbGl0eShsZWdlbmRJdGVtLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICByOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3JhZGlhbExpbmVhcicsXG4gICAgICAgICAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICBjaXJjdWxhcjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2hhcnQsIGRhdGFzZXRJbmRleCl7XG4gICAgICAgIHN1cGVyKGNoYXJ0LCBkYXRhc2V0SW5kZXgpO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdE51bWJlcihtZXRhLl9wYXJzZWRbaW5kZXhdLnIsIGNoYXJ0Lm9wdGlvbnMubG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGFyc2VPYmplY3REYXRhKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gX3BhcnNlT2JqZWN0RGF0YVJhZGlhbFNjYWxlLmJpbmQodGhpcykobWV0YSwgZGF0YSwgc3RhcnQsIGNvdW50KTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgYXJjcyA9IHRoaXMuX2NhY2hlZE1ldGEuZGF0YTtcbiAgICAgICAgdGhpcy5fdXBkYXRlUmFkaXVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMoYXJjcywgMCwgYXJjcy5sZW5ndGgsIG1vZGUpO1xuICAgIH1cbiBnZXRNaW5NYXgoKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICAgICAgfTtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaW5kZXgpLnI7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkIDwgcmFuZ2UubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLm1pbiA9IHBhcnNlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCA+IHJhbmdlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5tYXggPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cbiBfdXBkYXRlUmFkaXVzKCkge1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IGNoYXJ0LmNoYXJ0QXJlYTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IGNoYXJ0Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1pblNpemUgPSBNYXRoLm1pbihjaGFydEFyZWEucmlnaHQgLSBjaGFydEFyZWEubGVmdCwgY2hhcnRBcmVhLmJvdHRvbSAtIGNoYXJ0QXJlYS50b3ApO1xuICAgICAgICBjb25zdCBvdXRlclJhZGl1cyA9IE1hdGgubWF4KG1pblNpemUgLyAyLCAwKTtcbiAgICAgICAgY29uc3QgaW5uZXJSYWRpdXMgPSBNYXRoLm1heChvcHRzLmN1dG91dFBlcmNlbnRhZ2UgPyBvdXRlclJhZGl1cyAvIDEwMCAqIG9wdHMuY3V0b3V0UGVyY2VudGFnZSA6IDEsIDApO1xuICAgICAgICBjb25zdCByYWRpdXNMZW5ndGggPSAob3V0ZXJSYWRpdXMgLSBpbm5lclJhZGl1cykgLyBjaGFydC5nZXRWaXNpYmxlRGF0YXNldENvdW50KCk7XG4gICAgICAgIHRoaXMub3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyAtIHJhZGl1c0xlbmd0aCAqIHRoaXMuaW5kZXg7XG4gICAgICAgIHRoaXMuaW5uZXJSYWRpdXMgPSB0aGlzLm91dGVyUmFkaXVzIC0gcmFkaXVzTGVuZ3RoO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhhcmNzLCBzdGFydCwgY291bnQsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSBtb2RlID09PSAncmVzZXQnO1xuICAgICAgICBjb25zdCBjaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBjaGFydC5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRzID0gb3B0cy5hbmltYXRpb247XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBzY2FsZS54Q2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gc2NhbGUueUNlbnRlcjtcbiAgICAgICAgY29uc3QgZGF0YXNldFN0YXJ0QW5nbGUgPSBzY2FsZS5nZXRJbmRleEFuZ2xlKDApIC0gMC41ICogUEk7XG4gICAgICAgIGxldCBhbmdsZSA9IGRhdGFzZXRTdGFydEFuZ2xlO1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFuZ2xlID0gMzYwIC8gdGhpcy5jb3VudFZpc2libGVFbGVtZW50cygpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdGFydDsgKytpKXtcbiAgICAgICAgICAgIGFuZ2xlICs9IHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgICAgIGxldCBzdGFydEFuZ2xlID0gYW5nbGU7XG4gICAgICAgICAgICBsZXQgZW5kQW5nbGUgPSBhbmdsZSArIHRoaXMuX2NvbXB1dGVBbmdsZShpLCBtb2RlLCBkZWZhdWx0QW5nbGUpO1xuICAgICAgICAgICAgbGV0IG91dGVyUmFkaXVzID0gY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkgPyBzY2FsZS5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLmdldFBhcnNlZChpKS5yKSA6IDA7XG4gICAgICAgICAgICBhbmdsZSA9IGVuZEFuZ2xlO1xuICAgICAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dGVyUmFkaXVzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbk9wdHMuYW5pbWF0ZVJvdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlID0gZW5kQW5nbGUgPSBkYXRhc2V0U3RhcnRBbmdsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHg6IGNlbnRlclgsXG4gICAgICAgICAgICAgICAgeTogY2VudGVyWSxcbiAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBvdXRlclJhZGl1cyxcbiAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLFxuICAgICAgICAgICAgICAgIGVuZEFuZ2xlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpLCBhcmMuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudChhcmMsIGksIHByb3BlcnRpZXMsIG1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvdW50VmlzaWJsZUVsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgbWV0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLmdldFBhcnNlZChpbmRleCkucikgJiYgdGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbiBfY29tcHV0ZUFuZ2xlKGluZGV4LCBtb2RlLCBkZWZhdWx0QW5nbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaW5kZXgpID8gdG9SYWRpYW5zKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhpbmRleCwgbW9kZSkuYW5nbGUgfHwgZGVmYXVsdEFuZ2xlKSA6IDA7XG4gICAgfVxufVxuXG5jbGFzcyBQaWVDb250cm9sbGVyIGV4dGVuZHMgRG91Z2hudXRDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgaWQgPSAncGllJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGN1dG91dDogMCxcbiAgICAgICAgcm90YXRpb246IDAsXG4gICAgICAgIGNpcmN1bWZlcmVuY2U6IDM2MCxcbiAgICAgICAgcmFkaXVzOiAnMTAwJSdcbiAgICB9O1xufVxuXG5jbGFzcyBSYWRhckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3JhZGFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogJ2xpbmUnLFxuICAgICAgICBkYXRhRWxlbWVudFR5cGU6ICdwb2ludCcsXG4gICAgICAgIGluZGV4QXhpczogJ3InLFxuICAgICAgICBzaG93TGluZTogdHJ1ZSxcbiAgICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnc3RhcnQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuIHN0YXRpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIGFzcGVjdFJhdGlvOiAxLFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmFkaWFsTGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZTY2FsZSA9IHRoaXMuX2NhY2hlZE1ldGEudlNjYWxlO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmdldFBhcnNlZChpbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogdlNjYWxlLmdldExhYmVscygpW2luZGV4XSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyArIHZTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZFt2U2NhbGUuYXhpc10pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhcnNlT2JqZWN0RGF0YShtZXRhLCBkYXRhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJzZU9iamVjdERhdGFSYWRpYWxTY2FsZS5iaW5kKHRoaXMpKG1ldGEsIGRhdGEsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxuICAgIHVwZGF0ZShtb2RlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICBjb25zdCBwb2ludHMgPSBtZXRhLmRhdGEgfHwgW107XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IG1ldGEuaVNjYWxlLmdldExhYmVscygpO1xuICAgICAgICBsaW5lLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgaWYgKG1vZGUgIT09ICdyZXNpemUnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgX2xvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgX2Z1bGxMb29wOiBsYWJlbHMubGVuZ3RoID09PSBwb2ludHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRzKHBvaW50cywgMCwgcG9pbnRzLmxlbmd0aCwgbW9kZSk7XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRzKHBvaW50cywgc3RhcnQsIGNvdW50LCBtb2RlKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5fY2FjaGVkTWV0YS5yU2NhbGU7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbW9kZSA9PT0gJ3Jlc2V0JztcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGNvdW50OyBpKyspe1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGksIHBvaW50LmFjdGl2ZSA/ICdhY3RpdmUnIDogbW9kZSk7XG4gICAgICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHRoaXMuZ2V0UGFyc2VkKGkpLnIpO1xuICAgICAgICAgICAgY29uc3QgeCA9IHJlc2V0ID8gc2NhbGUueENlbnRlciA6IHBvaW50UG9zaXRpb24ueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSByZXNldCA/IHNjYWxlLnlDZW50ZXIgOiBwb2ludFBvc2l0aW9uLnk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICBhbmdsZTogcG9pbnRQb3NpdGlvbi5hbmdsZSxcbiAgICAgICAgICAgICAgICBza2lwOiBpc05hTih4KSB8fCBpc05hTih5KSxcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2NhdHRlckNvbnRyb2xsZXIgZXh0ZW5kcyBEYXRhc2V0Q29udHJvbGxlciB7XG4gICAgc3RhdGljIGlkID0gJ3NjYXR0ZXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgZGF0YXNldEVsZW1lbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiAncG9pbnQnLFxuICAgICAgICBzaG93TGluZTogZmFsc2UsXG4gICAgICAgIGZpbGw6IGZhbHNlXG4gICAgfTtcbiBzdGF0aWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBpbnRlcmFjdGlvbjoge1xuICAgICAgICAgICAgbW9kZTogJ3BvaW50J1xuICAgICAgICB9LFxuICAgICAgICBzY2FsZXM6IHtcbiAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZWFyJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBnZXRMYWJlbEFuZFZhbHVlKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9jYWNoZWRNZXRhO1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmNoYXJ0LmRhdGEubGFiZWxzIHx8IFtdO1xuICAgICAgICBjb25zdCB7IHhTY2FsZSAsIHlTY2FsZSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuZ2V0UGFyc2VkKGluZGV4KTtcbiAgICAgICAgY29uc3QgeCA9IHhTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC54KTtcbiAgICAgICAgY29uc3QgeSA9IHlTY2FsZS5nZXRMYWJlbEZvclZhbHVlKHBhcnNlZC55KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbHNbaW5kZXhdIHx8ICcnLFxuICAgICAgICAgICAgdmFsdWU6ICcoJyArIHggKyAnLCAnICsgeSArICcpJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICB1cGRhdGUobW9kZSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgeyBkYXRhOiBwb2ludHMgPSBbXSAgfSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnNEaXNhYmxlZCA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZDtcbiAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IF9nZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzKG1ldGEsIHBvaW50cywgYW5pbWF0aW9uc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5fZHJhd1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuX2RyYXdDb3VudCA9IGNvdW50O1xuICAgICAgICBpZiAoX3NjYWxlUmFuZ2VzQ2hhbmdlZChtZXRhKSkge1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICAgICAgY291bnQgPSBwb2ludHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVsZW1lbnRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFzZXQ6IGxpbmUgLCBfZGF0YXNldCAgfSA9IG1ldGE7XG4gICAgICAgICAgICBsaW5lLl9jaGFydCA9IHRoaXMuY2hhcnQ7XG4gICAgICAgICAgICBsaW5lLl9kYXRhc2V0SW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgbGluZS5fZGVjaW1hdGVkID0gISFfZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICAgICAgbGluZS5wb2ludHMgPSBwb2ludHM7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG1vZGUpO1xuICAgICAgICAgICAgb3B0aW9ucy5zZWdtZW50ID0gdGhpcy5vcHRpb25zLnNlZ21lbnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQobGluZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ6ICFhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgfSwgbW9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudHMocG9pbnRzLCBzdGFydCwgY291bnQsIG1vZGUpO1xuICAgIH1cbiAgICBhZGRFbGVtZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBzaG93TGluZSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSAmJiBzaG93TGluZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUgPSB0aGlzLmNoYXJ0LnJlZ2lzdHJ5LmdldEVsZW1lbnQoJ2xpbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5hZGRFbGVtZW50cygpO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50cyhwb2ludHMsIHN0YXJ0LCBjb3VudCwgbW9kZSkge1xuICAgICAgICBjb25zdCByZXNldCA9IG1vZGUgPT09ICdyZXNldCc7XG4gICAgICAgIGNvbnN0IHsgaVNjYWxlICwgdlNjYWxlICwgX3N0YWNrZWQgLCBfZGF0YXNldCAgfSA9IHRoaXMuX2NhY2hlZE1ldGE7XG4gICAgICAgIGNvbnN0IGZpcnN0T3B0cyA9IHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhzdGFydCwgbW9kZSk7XG4gICAgICAgIGNvbnN0IHNoYXJlZE9wdGlvbnMgPSB0aGlzLmdldFNoYXJlZE9wdGlvbnMoZmlyc3RPcHRzKTtcbiAgICAgICAgY29uc3QgaW5jbHVkZU9wdGlvbnMgPSB0aGlzLmluY2x1ZGVPcHRpb25zKG1vZGUsIHNoYXJlZE9wdGlvbnMpO1xuICAgICAgICBjb25zdCBpQXhpcyA9IGlTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB2QXhpcyA9IHZTY2FsZS5heGlzO1xuICAgICAgICBjb25zdCB7IHNwYW5HYXBzICwgc2VnbWVudCAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWF4R2FwTGVuZ3RoID0gaXNOdW1iZXIoc3BhbkdhcHMpID8gc3BhbkdhcHMgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGNvbnN0IGRpcmVjdFVwZGF0ZSA9IHRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCB8fCByZXNldCB8fCBtb2RlID09PSAnbm9uZSc7XG4gICAgICAgIGxldCBwcmV2UGFyc2VkID0gc3RhcnQgPiAwICYmIHRoaXMuZ2V0UGFyc2VkKHN0YXJ0IC0gMSk7XG4gICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5nZXRQYXJzZWQoaSk7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGlyZWN0VXBkYXRlID8gcG9pbnQgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IG51bGxEYXRhID0gaXNOdWxsT3JVbmRlZihwYXJzZWRbdkF4aXNdKTtcbiAgICAgICAgICAgIGNvbnN0IGlQaXhlbCA9IHByb3BlcnRpZXNbaUF4aXNdID0gaVNjYWxlLmdldFBpeGVsRm9yVmFsdWUocGFyc2VkW2lBeGlzXSwgaSk7XG4gICAgICAgICAgICBjb25zdCB2UGl4ZWwgPSBwcm9wZXJ0aWVzW3ZBeGlzXSA9IHJlc2V0IHx8IG51bGxEYXRhID8gdlNjYWxlLmdldEJhc2VQaXhlbCgpIDogdlNjYWxlLmdldFBpeGVsRm9yVmFsdWUoX3N0YWNrZWQgPyB0aGlzLmFwcGx5U3RhY2sodlNjYWxlLCBwYXJzZWQsIF9zdGFja2VkKSA6IHBhcnNlZFt2QXhpc10sIGkpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5za2lwID0gaXNOYU4oaVBpeGVsKSB8fCBpc05hTih2UGl4ZWwpIHx8IG51bGxEYXRhO1xuICAgICAgICAgICAgcHJvcGVydGllcy5zdG9wID0gaSA+IDAgJiYgTWF0aC5hYnMocGFyc2VkW2lBeGlzXSAtIHByZXZQYXJzZWRbaUF4aXNdKSA+IG1heEdhcExlbmd0aDtcbiAgICAgICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5yYXcgPSBfZGF0YXNldC5kYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluY2x1ZGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5vcHRpb25zID0gc2hhcmVkT3B0aW9ucyB8fCB0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoaSwgcG9pbnQuYWN0aXZlID8gJ2FjdGl2ZScgOiBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlyZWN0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50KHBvaW50LCBpLCBwcm9wZXJ0aWVzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZQYXJzZWQgPSBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKHNoYXJlZE9wdGlvbnMsIG1vZGUsIGZpcnN0T3B0cyk7XG4gICAgfVxuIGdldE1heE92ZXJmbG93KCkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fY2FjaGVkTWV0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1ldGEuZGF0YSB8fCBbXTtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgICAgIGxldCBtYXggPSAwO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBkYXRhW2ldLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGkpKSAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heCA+IDAgJiYgbWF4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSBtZXRhLmRhdGFzZXQ7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IGRhdGFzZXQub3B0aW9ucyAmJiBkYXRhc2V0Lm9wdGlvbnMuYm9yZGVyV2lkdGggfHwgMDtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gZGF0YVswXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucygwKSk7XG4gICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhkYXRhLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJvcmRlciwgZmlyc3RQb2ludCwgbGFzdFBvaW50KSAvIDI7XG4gICAgfVxufVxuXG52YXIgY29udHJvbGxlcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5CYXJDb250cm9sbGVyOiBCYXJDb250cm9sbGVyLFxuQnViYmxlQ29udHJvbGxlcjogQnViYmxlQ29udHJvbGxlcixcbkRvdWdobnV0Q29udHJvbGxlcjogRG91Z2hudXRDb250cm9sbGVyLFxuTGluZUNvbnRyb2xsZXI6IExpbmVDb250cm9sbGVyLFxuUGllQ29udHJvbGxlcjogUGllQ29udHJvbGxlcixcblBvbGFyQXJlYUNvbnRyb2xsZXI6IFBvbGFyQXJlYUNvbnRyb2xsZXIsXG5SYWRhckNvbnRyb2xsZXI6IFJhZGFyQ29udHJvbGxlcixcblNjYXR0ZXJDb250cm9sbGVyOiBTY2F0dGVyQ29udHJvbGxlclxufSk7XG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGFydC5fYWRhcHRlcnNcbiAqIEBzaW5jZSAyLjguMFxuICogQHByaXZhdGVcbiAqLyBmdW5jdGlvbiBhYnN0cmFjdCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC4nKTtcbn1cbi8qKlxuICogRGF0ZSBhZGFwdGVyIChjdXJyZW50IHVzZWQgYnkgdGhlIHRpbWUgc2NhbGUpXG4gKiBAbmFtZXNwYWNlIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZVxuICogQG1lbWJlcm9mIENoYXJ0Ll9hZGFwdGVyc1xuICogQHByaXZhdGVcbiAqLyBjbGFzcyBEYXRlQWRhcHRlckJhc2Uge1xuICAgIC8qKlxuICAgKiBPdmVycmlkZSBkZWZhdWx0IGRhdGUgYWRhcHRlciBtZXRob2RzLlxuICAgKiBBY2NlcHRzIHR5cGUgcGFyYW1ldGVyIHRvIGRlZmluZSBvcHRpb25zIHR5cGUuXG4gICAqIEBleGFtcGxlXG4gICAqIENoYXJ0Ll9hZGFwdGVycy5fZGF0ZS5vdmVycmlkZTx7bXlBZGFwdGVyT3B0aW9uOiBzdHJpbmd9Pih7XG4gICAqICAgaW5pdCgpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucy5teUFkYXB0ZXJPcHRpb24pO1xuICAgKiAgIH1cbiAgICogfSlcbiAgICovIHN0YXRpYyBvdmVycmlkZShtZW1iZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oRGF0ZUFkYXB0ZXJCYXNlLnByb3RvdHlwZSwgbWVtYmVycyk7XG4gICAgfVxuICAgIG9wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBpbml0KCkge31cbiAgICBmb3JtYXRzKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgcGFyc2UoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBhZGQoKSB7XG4gICAgICAgIHJldHVybiBhYnN0cmFjdCgpO1xuICAgIH1cbiAgICBkaWZmKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG4gICAgc3RhcnRPZigpIHtcbiAgICAgICAgcmV0dXJuIGFic3RyYWN0KCk7XG4gICAgfVxuICAgIGVuZE9mKCkge1xuICAgICAgICByZXR1cm4gYWJzdHJhY3QoKTtcbiAgICB9XG59XG52YXIgYWRhcHRlcnMgPSB7XG4gICAgX2RhdGU6IERhdGVBZGFwdGVyQmFzZVxufTtcblxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKG1ldGFzZXQsIGF4aXMsIHZhbHVlLCBpbnRlcnNlY3QpIHtcbiAgICBjb25zdCB7IGNvbnRyb2xsZXIgLCBkYXRhICwgX3NvcnRlZCAgfSA9IG1ldGFzZXQ7XG4gICAgY29uc3QgaVNjYWxlID0gY29udHJvbGxlci5fY2FjaGVkTWV0YS5pU2NhbGU7XG4gICAgaWYgKGlTY2FsZSAmJiBheGlzID09PSBpU2NhbGUuYXhpcyAmJiBheGlzICE9PSAncicgJiYgX3NvcnRlZCAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsb29rdXBNZXRob2QgPSBpU2NhbGUuX3JldmVyc2VQaXhlbHMgPyBfcmxvb2t1cEJ5S2V5IDogX2xvb2t1cEJ5S2V5O1xuICAgICAgICBpZiAoIWludGVyc2VjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlci5fc2hhcmVkT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBkYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0eXBlb2YgZWwuZ2V0UmFuZ2UgPT09ICdmdW5jdGlvbicgJiYgZWwuZ2V0UmFuZ2UoYXhpcyk7XG4gICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGxvb2t1cE1ldGhvZChkYXRhLCBheGlzLCB2YWx1ZSAtIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsb29rdXBNZXRob2QoZGF0YSwgYXhpcywgdmFsdWUgKyByYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbG86IHN0YXJ0LmxvLFxuICAgICAgICAgICAgICAgICAgICBoaTogZW5kLmhpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsbzogMCxcbiAgICAgICAgaGk6IGRhdGEubGVuZ3RoIC0gMVxuICAgIH07XG59XG4gZnVuY3Rpb24gZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgaGFuZGxlciwgaW50ZXJzZWN0KSB7XG4gICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltheGlzXTtcbiAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgY29uc3QgeyBpbmRleCAsIGRhdGEgIH0gPSBtZXRhc2V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gYmluYXJ5U2VhcmNoKG1ldGFzZXRzW2ldLCBheGlzLCB2YWx1ZSwgaW50ZXJzZWN0KTtcbiAgICAgICAgZm9yKGxldCBqID0gbG87IGogPD0gaGk7ICsrail7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtqXTtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihlbGVtZW50LCBpbmRleCwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzKGF4aXMpIHtcbiAgICBjb25zdCB1c2VYID0gYXhpcy5pbmRleE9mKCd4JykgIT09IC0xO1xuICAgIGNvbnN0IHVzZVkgPSBheGlzLmluZGV4T2YoJ3knKSAhPT0gLTE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHB0MSwgcHQyKSB7XG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IHVzZVggPyBNYXRoLmFicyhwdDEueCAtIHB0Mi54KSA6IDA7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IHVzZVkgPyBNYXRoLmFicyhwdDEueSAtIHB0Mi55KSA6IDA7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZGVsdGFYLCAyKSArIE1hdGgucG93KGRlbHRhWSwgMikpO1xuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWluY2x1ZGVJbnZpc2libGUgJiYgIWNoYXJ0LmlzUG9pbnRJbkFyZWEocG9zaXRpb24pKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgY29uc3QgZXZhbHVhdGlvbkZ1bmMgPSBmdW5jdGlvbihlbGVtZW50LCBkYXRhc2V0SW5kZXgsIGluZGV4KSB7XG4gICAgICAgIGlmICghaW5jbHVkZUludmlzaWJsZSAmJiAhX2lzUG9pbnRJbkFyZWEoZWxlbWVudCwgY2hhcnQuY2hhcnRBcmVhLCAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmluUmFuZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMsIHRydWUpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0UmFkaWFsSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgbGV0IGl0ZW1zID0gW107XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0QW5nbGUgLCBlbmRBbmdsZSAgfSA9IGVsZW1lbnQuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgeyBhbmdsZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIHg6IHBvc2l0aW9uLngsXG4gICAgICAgICAgICB5OiBwb3NpdGlvbi55XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgZXZhbHVhdGlvbkZ1bmMpO1xuICAgIHJldHVybiBpdGVtcztcbn1cbiBmdW5jdGlvbiBnZXROZWFyZXN0Q2FydGVzaWFuSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBjb25zdCBkaXN0YW5jZU1ldHJpYyA9IGdldERpc3RhbmNlTWV0cmljRm9yQXhpcyhheGlzKTtcbiAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgZnVuY3Rpb24gZXZhbHVhdGlvbkZ1bmMoZWxlbWVudCwgZGF0YXNldEluZGV4LCBpbmRleCkge1xuICAgICAgICBjb25zdCBpblJhbmdlID0gZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBpZiAoaW50ZXJzZWN0ICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VudGVyID0gZWxlbWVudC5nZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgcG9pbnRJbkFyZWEgPSAhIWluY2x1ZGVJbnZpc2libGUgfHwgY2hhcnQuaXNQb2ludEluQXJlYShjZW50ZXIpO1xuICAgICAgICBpZiAoIXBvaW50SW5BcmVhICYmICFpblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZU1ldHJpYyhwb3NpdGlvbiwgY2VudGVyKTtcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGl0ZW1zID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyhjaGFydCwgYXhpcywgcG9zaXRpb24sIGV2YWx1YXRpb25GdW5jKTtcbiAgICByZXR1cm4gaXRlbXM7XG59XG4gZnVuY3Rpb24gZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSB7XG4gICAgaWYgKCFpbmNsdWRlSW52aXNpYmxlICYmICFjaGFydC5pc1BvaW50SW5BcmVhKHBvc2l0aW9uKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBheGlzID09PSAncicgJiYgIWludGVyc2VjdCA/IGdldE5lYXJlc3RSYWRpYWxJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24pIDogZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbn1cbiBmdW5jdGlvbiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCBpbnRlcnNlY3QsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmdlTWV0aG9kID0gYXhpcyA9PT0gJ3gnID8gJ2luWFJhbmdlJyA6ICdpbllSYW5nZSc7XG4gICAgbGV0IGludGVyc2VjdHNJdGVtID0gZmFsc2U7XG4gICAgZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zKGNoYXJ0LCBheGlzLCBwb3NpdGlvbiwgKGVsZW1lbnQsIGRhdGFzZXRJbmRleCwgaW5kZXgpPT57XG4gICAgICAgIGlmIChlbGVtZW50W3JhbmdlTWV0aG9kXSAmJiBlbGVtZW50W3JhbmdlTWV0aG9kXShwb3NpdGlvbltheGlzXSwgdXNlRmluYWxQb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZGF0YXNldEluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGludGVyc2VjdHNJdGVtID0gaW50ZXJzZWN0c0l0ZW0gfHwgZWxlbWVudC5pblJhbmdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGludGVyc2VjdCAmJiAhaW50ZXJzZWN0c0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG59XG4gdmFyIEludGVyYWN0aW9uID0ge1xuICAgIGV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyxcbiAgICBtb2Rlczoge1xuIGluZGV4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBvcHRpb25zLmF4aXMgfHwgJ3gnO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gb3B0aW9ucy5pbnRlcnNlY3QgPyBnZXRJbnRlcnNlY3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpIDogZ2V0TmVhcmVzdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgZmFsc2UsIHVzZUZpbmFsUG9zaXRpb24sIGluY2x1ZGVJbnZpc2libGUpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goKG1ldGEpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtc1swXS5pbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbWV0YS5kYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICB9LFxuIGRhdGFzZXQgKGNoYXJ0LCBlLCBvcHRpb25zLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFJlbGF0aXZlUG9zaXRpb24oZSwgY2hhcnQpO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IG9wdGlvbnMuYXhpcyB8fCAneHknO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZSA9IG9wdGlvbnMuaW5jbHVkZUludmlzaWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IG9wdGlvbnMuaW50ZXJzZWN0ID8gZ2V0SW50ZXJzZWN0SXRlbXMoY2hhcnQsIHBvc2l0aW9uLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKSA6IGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIGZhbHNlLCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldEluZGV4ID0gaXRlbXNbMF0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmRhdGE7XG4gICAgICAgICAgICAgICAgaXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSl7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZGF0YVtpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSxcbiBwb2ludCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldEludGVyc2VjdEl0ZW1zKGNoYXJ0LCBwb3NpdGlvbiwgYXhpcywgdXNlRmluYWxQb3NpdGlvbiwgaW5jbHVkZUludmlzaWJsZSk7XG4gICAgICAgIH0sXG4gbmVhcmVzdCAoY2hhcnQsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihlLCBjaGFydCk7XG4gICAgICAgICAgICBjb25zdCBheGlzID0gb3B0aW9ucy5heGlzIHx8ICd4eSc7XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlSW52aXNpYmxlID0gb3B0aW9ucy5pbmNsdWRlSW52aXNpYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RJdGVtcyhjaGFydCwgcG9zaXRpb24sIGF4aXMsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uLCBpbmNsdWRlSW52aXNpYmxlKTtcbiAgICAgICAgfSxcbiB4IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneCcsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfSxcbiB5IChjaGFydCwgZSwgb3B0aW9ucywgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRSZWxhdGl2ZVBvc2l0aW9uKGUsIGNoYXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBeGlzSXRlbXMoY2hhcnQsIHBvc2l0aW9uLCAneScsIG9wdGlvbnMuaW50ZXJzZWN0LCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IFNUQVRJQ19QT1NJVElPTlMgPSBbXG4gICAgJ2xlZnQnLFxuICAgICd0b3AnLFxuICAgICdyaWdodCcsXG4gICAgJ2JvdHRvbSdcbl07XG5mdW5jdGlvbiBmaWx0ZXJCeVBvc2l0aW9uKGFycmF5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoKHYpPT52LnBvcyA9PT0gcG9zaXRpb24pO1xufVxuZnVuY3Rpb24gZmlsdGVyRHluYW1pY1Bvc2l0aW9uQnlBeGlzKGFycmF5LCBheGlzKSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcigodik9PlNUQVRJQ19QT1NJVElPTlMuaW5kZXhPZih2LnBvcykgPT09IC0xICYmIHYuYm94LmF4aXMgPT09IGF4aXMpO1xufVxuZnVuY3Rpb24gc29ydEJ5V2VpZ2h0KGFycmF5LCByZXZlcnNlKSB7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKGEsIGIpPT57XG4gICAgICAgIGNvbnN0IHYwID0gcmV2ZXJzZSA/IGIgOiBhO1xuICAgICAgICBjb25zdCB2MSA9IHJldmVyc2UgPyBhIDogYjtcbiAgICAgICAgcmV0dXJuIHYwLndlaWdodCA9PT0gdjEud2VpZ2h0ID8gdjAuaW5kZXggLSB2MS5pbmRleCA6IHYwLndlaWdodCAtIHYxLndlaWdodDtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHdyYXBCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gW107XG4gICAgbGV0IGksIGlsZW4sIGJveCwgcG9zLCBzdGFjaywgc3RhY2tXZWlnaHQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gKGJveGVzIHx8IFtdKS5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBib3ggPSBib3hlc1tpXTtcbiAgICAgICAgKHsgcG9zaXRpb246IHBvcyAsIG9wdGlvbnM6IHsgc3RhY2sgLCBzdGFja1dlaWdodCA9MSAgfSAgfSA9IGJveCk7XG4gICAgICAgIGxheW91dEJveGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICBib3gsXG4gICAgICAgICAgICBwb3MsXG4gICAgICAgICAgICBob3Jpem9udGFsOiBib3guaXNIb3Jpem9udGFsKCksXG4gICAgICAgICAgICB3ZWlnaHQ6IGJveC53ZWlnaHQsXG4gICAgICAgICAgICBzdGFjazogc3RhY2sgJiYgcG9zICsgc3RhY2ssXG4gICAgICAgICAgICBzdGFja1dlaWdodFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dEJveGVzO1xufVxuZnVuY3Rpb24gYnVpbGRTdGFja3MobGF5b3V0cykge1xuICAgIGNvbnN0IHN0YWNrcyA9IHt9O1xuICAgIGZvciAoY29uc3Qgd3JhcCBvZiBsYXlvdXRzKXtcbiAgICAgICAgY29uc3QgeyBzdGFjayAsIHBvcyAsIHN0YWNrV2VpZ2h0ICB9ID0gd3JhcDtcbiAgICAgICAgaWYgKCFzdGFjayB8fCAhU1RBVElDX1BPU0lUSU9OUy5pbmNsdWRlcyhwb3MpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfc3RhY2sgPSBzdGFja3Nbc3RhY2tdIHx8IChzdGFja3Nbc3RhY2tdID0ge1xuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICBwbGFjZWQ6IDAsXG4gICAgICAgICAgICB3ZWlnaHQ6IDAsXG4gICAgICAgICAgICBzaXplOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBfc3RhY2suY291bnQrKztcbiAgICAgICAgX3N0YWNrLndlaWdodCArPSBzdGFja1dlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrcztcbn1cbiBmdW5jdGlvbiBzZXRMYXlvdXREaW1zKGxheW91dHMsIHBhcmFtcykge1xuICAgIGNvbnN0IHN0YWNrcyA9IGJ1aWxkU3RhY2tzKGxheW91dHMpO1xuICAgIGNvbnN0IHsgdkJveE1heFdpZHRoICwgaEJveE1heEhlaWdodCAgfSA9IHBhcmFtcztcbiAgICBsZXQgaSwgaWxlbiwgbGF5b3V0O1xuICAgIGZvcihpID0gMCwgaWxlbiA9IGxheW91dHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgbGF5b3V0ID0gbGF5b3V0c1tpXTtcbiAgICAgICAgY29uc3QgeyBmdWxsU2l6ZSAgfSA9IGxheW91dC5ib3g7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzW2xheW91dC5zdGFja107XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IHN0YWNrICYmIGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodDtcbiAgICAgICAgaWYgKGxheW91dC5ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBsYXlvdXQud2lkdGggPSBmYWN0b3IgPyBmYWN0b3IgKiB2Qm94TWF4V2lkdGggOiBmdWxsU2l6ZSAmJiBwYXJhbXMuYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgICAgICBsYXlvdXQuaGVpZ2h0ID0gaEJveE1heEhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dC53aWR0aCA9IHZCb3hNYXhXaWR0aDtcbiAgICAgICAgICAgIGxheW91dC5oZWlnaHQgPSBmYWN0b3IgPyBmYWN0b3IgKiBoQm94TWF4SGVpZ2h0IDogZnVsbFNpemUgJiYgcGFyYW1zLmF2YWlsYWJsZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tzO1xufVxuZnVuY3Rpb24gYnVpbGRMYXlvdXRCb3hlcyhib3hlcykge1xuICAgIGNvbnN0IGxheW91dEJveGVzID0gd3JhcEJveGVzKGJveGVzKTtcbiAgICBjb25zdCBmdWxsU2l6ZSA9IHNvcnRCeVdlaWdodChsYXlvdXRCb3hlcy5maWx0ZXIoKHdyYXApPT53cmFwLmJveC5mdWxsU2l6ZSksIHRydWUpO1xuICAgIGNvbnN0IGxlZnQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ2xlZnQnKSwgdHJ1ZSk7XG4gICAgY29uc3QgcmlnaHQgPSBzb3J0QnlXZWlnaHQoZmlsdGVyQnlQb3NpdGlvbihsYXlvdXRCb3hlcywgJ3JpZ2h0JykpO1xuICAgIGNvbnN0IHRvcCA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAndG9wJyksIHRydWUpO1xuICAgIGNvbnN0IGJvdHRvbSA9IHNvcnRCeVdlaWdodChmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnYm90dG9tJykpO1xuICAgIGNvbnN0IGNlbnRlckhvcml6b250YWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd4Jyk7XG4gICAgY29uc3QgY2VudGVyVmVydGljYWwgPSBmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMobGF5b3V0Qm94ZXMsICd5Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsbFNpemUsXG4gICAgICAgIGxlZnRBbmRUb3A6IGxlZnQuY29uY2F0KHRvcCksXG4gICAgICAgIHJpZ2h0QW5kQm90dG9tOiByaWdodC5jb25jYXQoY2VudGVyVmVydGljYWwpLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKSxcbiAgICAgICAgY2hhcnRBcmVhOiBmaWx0ZXJCeVBvc2l0aW9uKGxheW91dEJveGVzLCAnY2hhcnRBcmVhJyksXG4gICAgICAgIHZlcnRpY2FsOiBsZWZ0LmNvbmNhdChyaWdodCkuY29uY2F0KGNlbnRlclZlcnRpY2FsKSxcbiAgICAgICAgaG9yaXpvbnRhbDogdG9wLmNvbmNhdChib3R0b20pLmNvbmNhdChjZW50ZXJIb3Jpem9udGFsKVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRDb21iaW5lZE1heChtYXhQYWRkaW5nLCBjaGFydEFyZWEsIGEsIGIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4UGFkZGluZ1thXSwgY2hhcnRBcmVhW2FdKSArIE1hdGgubWF4KG1heFBhZGRpbmdbYl0sIGNoYXJ0QXJlYVtiXSk7XG59XG5mdW5jdGlvbiB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIGJveFBhZGRpbmcpIHtcbiAgICBtYXhQYWRkaW5nLnRvcCA9IE1hdGgubWF4KG1heFBhZGRpbmcudG9wLCBib3hQYWRkaW5nLnRvcCk7XG4gICAgbWF4UGFkZGluZy5sZWZ0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5sZWZ0LCBib3hQYWRkaW5nLmxlZnQpO1xuICAgIG1heFBhZGRpbmcuYm90dG9tID0gTWF0aC5tYXgobWF4UGFkZGluZy5ib3R0b20sIGJveFBhZGRpbmcuYm90dG9tKTtcbiAgICBtYXhQYWRkaW5nLnJpZ2h0ID0gTWF0aC5tYXgobWF4UGFkZGluZy5yaWdodCwgYm94UGFkZGluZy5yaWdodCk7XG59XG5mdW5jdGlvbiB1cGRhdGVEaW1zKGNoYXJ0QXJlYSwgcGFyYW1zLCBsYXlvdXQsIHN0YWNrcykge1xuICAgIGNvbnN0IHsgcG9zICwgYm94ICB9ID0gbGF5b3V0O1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBpZiAoIWlzT2JqZWN0KHBvcykpIHtcbiAgICAgICAgaWYgKGxheW91dC5zaXplKSB7XG4gICAgICAgICAgICBjaGFydEFyZWFbcG9zXSAtPSBsYXlvdXQuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIHNpemU6IDAsXG4gICAgICAgICAgICBjb3VudDogMVxuICAgICAgICB9O1xuICAgICAgICBzdGFjay5zaXplID0gTWF0aC5tYXgoc3RhY2suc2l6ZSwgbGF5b3V0Lmhvcml6b250YWwgPyBib3guaGVpZ2h0IDogYm94LndpZHRoKTtcbiAgICAgICAgbGF5b3V0LnNpemUgPSBzdGFjay5zaXplIC8gc3RhY2suY291bnQ7XG4gICAgICAgIGNoYXJ0QXJlYVtwb3NdICs9IGxheW91dC5zaXplO1xuICAgIH1cbiAgICBpZiAoYm94LmdldFBhZGRpbmcpIHtcbiAgICAgICAgdXBkYXRlTWF4UGFkZGluZyhtYXhQYWRkaW5nLCBib3guZ2V0UGFkZGluZygpKTtcbiAgICB9XG4gICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heCgwLCBwYXJhbXMub3V0ZXJXaWR0aCAtIGdldENvbWJpbmVkTWF4KG1heFBhZGRpbmcsIGNoYXJ0QXJlYSwgJ2xlZnQnLCAncmlnaHQnKSk7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoMCwgcGFyYW1zLm91dGVySGVpZ2h0IC0gZ2V0Q29tYmluZWRNYXgobWF4UGFkZGluZywgY2hhcnRBcmVhLCAndG9wJywgJ2JvdHRvbScpKTtcbiAgICBjb25zdCB3aWR0aENoYW5nZWQgPSBuZXdXaWR0aCAhPT0gY2hhcnRBcmVhLnc7XG4gICAgY29uc3QgaGVpZ2h0Q2hhbmdlZCA9IG5ld0hlaWdodCAhPT0gY2hhcnRBcmVhLmg7XG4gICAgY2hhcnRBcmVhLncgPSBuZXdXaWR0aDtcbiAgICBjaGFydEFyZWEuaCA9IG5ld0hlaWdodDtcbiAgICByZXR1cm4gbGF5b3V0Lmhvcml6b250YWwgPyB7XG4gICAgICAgIHNhbWU6IHdpZHRoQ2hhbmdlZCxcbiAgICAgICAgb3RoZXI6IGhlaWdodENoYW5nZWRcbiAgICB9IDoge1xuICAgICAgICBzYW1lOiBoZWlnaHRDaGFuZ2VkLFxuICAgICAgICBvdGhlcjogd2lkdGhDaGFuZ2VkXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgbWF4UGFkZGluZyA9IGNoYXJ0QXJlYS5tYXhQYWRkaW5nO1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvcyhwb3MpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gTWF0aC5tYXgobWF4UGFkZGluZ1twb3NdIC0gY2hhcnRBcmVhW3Bvc10sIDApO1xuICAgICAgICBjaGFydEFyZWFbcG9zXSArPSBjaGFuZ2U7XG4gICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGNoYXJ0QXJlYS55ICs9IHVwZGF0ZVBvcygndG9wJyk7XG4gICAgY2hhcnRBcmVhLnggKz0gdXBkYXRlUG9zKCdsZWZ0Jyk7XG4gICAgdXBkYXRlUG9zKCdyaWdodCcpO1xuICAgIHVwZGF0ZVBvcygnYm90dG9tJyk7XG59XG5mdW5jdGlvbiBnZXRNYXJnaW5zKGhvcml6b250YWwsIGNoYXJ0QXJlYSkge1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBjaGFydEFyZWEubWF4UGFkZGluZztcbiAgICBmdW5jdGlvbiBtYXJnaW5Gb3JQb3NpdGlvbnMocG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9O1xuICAgICAgICBwb3NpdGlvbnMuZm9yRWFjaCgocG9zKT0+e1xuICAgICAgICAgICAgbWFyZ2luW3Bvc10gPSBNYXRoLm1heChjaGFydEFyZWFbcG9zXSwgbWF4UGFkZGluZ1twb3NdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtYXJnaW47XG4gICAgfVxuICAgIHJldHVybiBob3Jpem9udGFsID8gbWFyZ2luRm9yUG9zaXRpb25zKFtcbiAgICAgICAgJ2xlZnQnLFxuICAgICAgICAncmlnaHQnXG4gICAgXSkgOiBtYXJnaW5Gb3JQb3NpdGlvbnMoW1xuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdHRvbSdcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGZpdEJveGVzKGJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKSB7XG4gICAgY29uc3QgcmVmaXRCb3hlcyA9IFtdO1xuICAgIGxldCBpLCBpbGVuLCBsYXlvdXQsIGJveCwgcmVmaXQsIGNoYW5nZWQ7XG4gICAgZm9yKGkgPSAwLCBpbGVuID0gYm94ZXMubGVuZ3RoLCByZWZpdCA9IDA7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICBsYXlvdXQgPSBib3hlc1tpXTtcbiAgICAgICAgYm94ID0gbGF5b3V0LmJveDtcbiAgICAgICAgYm94LnVwZGF0ZShsYXlvdXQud2lkdGggfHwgY2hhcnRBcmVhLncsIGxheW91dC5oZWlnaHQgfHwgY2hhcnRBcmVhLmgsIGdldE1hcmdpbnMobGF5b3V0Lmhvcml6b250YWwsIGNoYXJ0QXJlYSkpO1xuICAgICAgICBjb25zdCB7IHNhbWUgLCBvdGhlciAgfSA9IHVwZGF0ZURpbXMoY2hhcnRBcmVhLCBwYXJhbXMsIGxheW91dCwgc3RhY2tzKTtcbiAgICAgICAgcmVmaXQgfD0gc2FtZSAmJiByZWZpdEJveGVzLmxlbmd0aDtcbiAgICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgb3RoZXI7XG4gICAgICAgIGlmICghYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICByZWZpdEJveGVzLnB1c2gobGF5b3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVmaXQgJiYgZml0Qm94ZXMocmVmaXRCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykgfHwgY2hhbmdlZDtcbn1cbmZ1bmN0aW9uIHNldEJveERpbXMoYm94LCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBib3gudG9wID0gdG9wO1xuICAgIGJveC5sZWZ0ID0gbGVmdDtcbiAgICBib3gucmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gICAgYm94LmJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgICBib3gud2lkdGggPSB3aWR0aDtcbiAgICBib3guaGVpZ2h0ID0gaGVpZ2h0O1xufVxuZnVuY3Rpb24gcGxhY2VCb3hlcyhib3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykge1xuICAgIGNvbnN0IHVzZXJQYWRkaW5nID0gcGFyYW1zLnBhZGRpbmc7XG4gICAgbGV0IHsgeCAsIHkgIH0gPSBjaGFydEFyZWE7XG4gICAgZm9yIChjb25zdCBsYXlvdXQgb2YgYm94ZXMpe1xuICAgICAgICBjb25zdCBib3ggPSBsYXlvdXQuYm94O1xuICAgICAgICBjb25zdCBzdGFjayA9IHN0YWNrc1tsYXlvdXQuc3RhY2tdIHx8IHtcbiAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgcGxhY2VkOiAwLFxuICAgICAgICAgICAgd2VpZ2h0OiAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdlaWdodCA9IGxheW91dC5zdGFja1dlaWdodCAvIHN0YWNrLndlaWdodCB8fCAxO1xuICAgICAgICBpZiAobGF5b3V0Lmhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gY2hhcnRBcmVhLncgKiB3ZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBzdGFjay5zaXplIHx8IGJveC5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB5ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHVzZXJQYWRkaW5nLmxlZnQsIHksIHBhcmFtcy5vdXRlcldpZHRoIC0gdXNlclBhZGRpbmcucmlnaHQgLSB1c2VyUGFkZGluZy5sZWZ0LCBoZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRCb3hEaW1zKGJveCwgY2hhcnRBcmVhLmxlZnQgKyBzdGFjay5wbGFjZWQsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2suc3RhcnQgPSB5O1xuICAgICAgICAgICAgc3RhY2sucGxhY2VkICs9IHdpZHRoO1xuICAgICAgICAgICAgeSA9IGJveC5ib3R0b207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBjaGFydEFyZWEuaCAqIHdlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gc3RhY2suc2l6ZSB8fCBib3gud2lkdGg7XG4gICAgICAgICAgICBpZiAoZGVmaW5lZChzdGFjay5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB4ID0gc3RhY2suc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmZ1bGxTaXplKSB7XG4gICAgICAgICAgICAgICAgc2V0Qm94RGltcyhib3gsIHgsIHVzZXJQYWRkaW5nLnRvcCwgd2lkdGgsIHBhcmFtcy5vdXRlckhlaWdodCAtIHVzZXJQYWRkaW5nLmJvdHRvbSAtIHVzZXJQYWRkaW5nLnRvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldEJveERpbXMoYm94LCB4LCBjaGFydEFyZWEudG9wICsgc3RhY2sucGxhY2VkLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnN0YXJ0ID0geDtcbiAgICAgICAgICAgIHN0YWNrLnBsYWNlZCArPSBoZWlnaHQ7XG4gICAgICAgICAgICB4ID0gYm94LnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYXJ0QXJlYS54ID0geDtcbiAgICBjaGFydEFyZWEueSA9IHk7XG59XG52YXIgbGF5b3V0cyA9IHtcbiBhZGRCb3ggKGNoYXJ0LCBpdGVtKSB7XG4gICAgICAgIGlmICghY2hhcnQuYm94ZXMpIHtcbiAgICAgICAgICAgIGNoYXJ0LmJveGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5mdWxsU2l6ZSA9IGl0ZW0uZnVsbFNpemUgfHwgZmFsc2U7XG4gICAgICAgIGl0ZW0ucG9zaXRpb24gPSBpdGVtLnBvc2l0aW9uIHx8ICd0b3AnO1xuICAgICAgICBpdGVtLndlaWdodCA9IGl0ZW0ud2VpZ2h0IHx8IDA7XG4gICAgICAgIGl0ZW0uX2xheWVycyA9IGl0ZW0uX2xheWVycyB8fCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiAwLFxuICAgICAgICAgICAgICAgICAgICBkcmF3IChjaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfTtcbiAgICAgICAgY2hhcnQuYm94ZXMucHVzaChpdGVtKTtcbiAgICB9LFxuIHJlbW92ZUJveCAoY2hhcnQsIGxheW91dEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGFydC5ib3hlcyA/IGNoYXJ0LmJveGVzLmluZGV4T2YobGF5b3V0SXRlbSkgOiAtMTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY2hhcnQuYm94ZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG4gY29uZmlndXJlIChjaGFydCwgaXRlbSwgb3B0aW9ucykge1xuICAgICAgICBpdGVtLmZ1bGxTaXplID0gb3B0aW9ucy5mdWxsU2l6ZTtcbiAgICAgICAgaXRlbS5wb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGl0ZW0ud2VpZ2h0ID0gb3B0aW9ucy53ZWlnaHQ7XG4gICAgfSxcbiB1cGRhdGUgKGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICghY2hhcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKGNoYXJ0Lm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KHdpZHRoIC0gcGFkZGluZy53aWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0LCAwKTtcbiAgICAgICAgY29uc3QgYm94ZXMgPSBidWlsZExheW91dEJveGVzKGNoYXJ0LmJveGVzKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxCb3hlcyA9IGJveGVzLnZlcnRpY2FsO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQm94ZXMgPSBib3hlcy5ob3Jpem9udGFsO1xuICAgICAgICBlYWNoKGNoYXJ0LmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBib3guYmVmb3JlTGF5b3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYm94LmJlZm9yZUxheW91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVZlcnRpY2FsQm94Q291bnQgPSB2ZXJ0aWNhbEJveGVzLnJlZHVjZSgodG90YWwsIHdyYXApPT53cmFwLmJveC5vcHRpb25zICYmIHdyYXAuYm94Lm9wdGlvbnMuZGlzcGxheSA9PT0gZmFsc2UgPyB0b3RhbCA6IHRvdGFsICsgMSwgMCkgfHwgMTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgICBvdXRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIG91dGVySGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBhdmFpbGFibGVIZWlnaHQsXG4gICAgICAgICAgICB2Qm94TWF4V2lkdGg6IGF2YWlsYWJsZVdpZHRoIC8gMiAvIHZpc2libGVWZXJ0aWNhbEJveENvdW50LFxuICAgICAgICAgICAgaEJveE1heEhlaWdodDogYXZhaWxhYmxlSGVpZ2h0IC8gMlxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWF4UGFkZGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHBhZGRpbmcpO1xuICAgICAgICB1cGRhdGVNYXhQYWRkaW5nKG1heFBhZGRpbmcsIHRvUGFkZGluZyhtaW5QYWRkaW5nKSk7XG4gICAgICAgIGNvbnN0IGNoYXJ0QXJlYSA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgbWF4UGFkZGluZyxcbiAgICAgICAgICAgIHc6IGF2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgaDogYXZhaWxhYmxlSGVpZ2h0LFxuICAgICAgICAgICAgeDogcGFkZGluZy5sZWZ0LFxuICAgICAgICAgICAgeTogcGFkZGluZy50b3BcbiAgICAgICAgfSwgcGFkZGluZyk7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IHNldExheW91dERpbXModmVydGljYWxCb3hlcy5jb25jYXQoaG9yaXpvbnRhbEJveGVzKSwgcGFyYW1zKTtcbiAgICAgICAgZml0Qm94ZXMoYm94ZXMuZnVsbFNpemUsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICBmaXRCb3hlcyh2ZXJ0aWNhbEJveGVzLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgaWYgKGZpdEJveGVzKGhvcml6b250YWxCb3hlcywgY2hhcnRBcmVhLCBwYXJhbXMsIHN0YWNrcykpIHtcbiAgICAgICAgICAgIGZpdEJveGVzKHZlcnRpY2FsQm94ZXMsIGNoYXJ0QXJlYSwgcGFyYW1zLCBzdGFja3MpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZU1heFBhZGRpbmcoY2hhcnRBcmVhKTtcbiAgICAgICAgcGxhY2VCb3hlcyhib3hlcy5sZWZ0QW5kVG9wLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnRBcmVhLnggKz0gY2hhcnRBcmVhLnc7XG4gICAgICAgIGNoYXJ0QXJlYS55ICs9IGNoYXJ0QXJlYS5oO1xuICAgICAgICBwbGFjZUJveGVzKGJveGVzLnJpZ2h0QW5kQm90dG9tLCBjaGFydEFyZWEsIHBhcmFtcywgc3RhY2tzKTtcbiAgICAgICAgY2hhcnQuY2hhcnRBcmVhID0ge1xuICAgICAgICAgICAgbGVmdDogY2hhcnRBcmVhLmxlZnQsXG4gICAgICAgICAgICB0b3A6IGNoYXJ0QXJlYS50b3AsXG4gICAgICAgICAgICByaWdodDogY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEudyxcbiAgICAgICAgICAgIGJvdHRvbTogY2hhcnRBcmVhLnRvcCArIGNoYXJ0QXJlYS5oLFxuICAgICAgICAgICAgaGVpZ2h0OiBjaGFydEFyZWEuaCxcbiAgICAgICAgICAgIHdpZHRoOiBjaGFydEFyZWEud1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKGJveGVzLmNoYXJ0QXJlYSwgKGxheW91dCk9PntcbiAgICAgICAgICAgIGNvbnN0IGJveCA9IGxheW91dC5ib3g7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJveCwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIGJveC51cGRhdGUoY2hhcnRBcmVhLncsIGNoYXJ0QXJlYS5oLCB7XG4gICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuY2xhc3MgQmFzZVBsYXRmb3JtIHtcbiBhY3F1aXJlQ29udGV4dChjYW52YXMsIGFzcGVjdFJhdGlvKSB7fVxuIHJlbGVhc2VDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiBhZGRFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge31cbiBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gZ2V0TWF4aW11bVNpemUoZWxlbWVudCwgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCB8fCBlbGVtZW50LndpZHRoKTtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIGFzcGVjdFJhdGlvID8gTWF0aC5mbG9vcih3aWR0aCAvIGFzcGVjdFJhdGlvKSA6IGhlaWdodClcbiAgICAgICAgfTtcbiAgICB9XG4gaXNBdHRhY2hlZChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcbiAgICB9XG59XG5cbmNsYXNzIEJhc2ljUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuICAgIGFjcXVpcmVDb250ZXh0KGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5nZXRDb250ZXh0ICYmIGl0ZW0uZ2V0Q29udGV4dCgnMmQnKSB8fCBudWxsO1xuICAgIH1cbiAgICB1cGRhdGVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5vcHRpb25zLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbn1cblxuY29uc3QgRVhQQU5ET19LRVkgPSAnJGNoYXJ0anMnO1xuIGNvbnN0IEVWRU5UX1RZUEVTID0ge1xuICAgIHRvdWNoc3RhcnQ6ICdtb3VzZWRvd24nLFxuICAgIHRvdWNobW92ZTogJ21vdXNlbW92ZScsXG4gICAgdG91Y2hlbmQ6ICdtb3VzZXVwJyxcbiAgICBwb2ludGVyZW50ZXI6ICdtb3VzZWVudGVyJyxcbiAgICBwb2ludGVyZG93bjogJ21vdXNlZG93bicsXG4gICAgcG9pbnRlcm1vdmU6ICdtb3VzZW1vdmUnLFxuICAgIHBvaW50ZXJ1cDogJ21vdXNldXAnLFxuICAgIHBvaW50ZXJsZWF2ZTogJ21vdXNlb3V0JyxcbiAgICBwb2ludGVyb3V0OiAnbW91c2VvdXQnXG59O1xuY29uc3QgaXNOdWxsT3JFbXB0eSA9ICh2YWx1ZSk9PnZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJztcbiBmdW5jdGlvbiBpbml0Q2FudmFzKGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICBjb25zdCBzdHlsZSA9IGNhbnZhcy5zdHlsZTtcbiAgICBjb25zdCByZW5kZXJIZWlnaHQgPSBjYW52YXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTtcbiAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNhbnZhcy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyk7XG4gICAgY2FudmFzW0VYUEFORE9fS0VZXSA9IHtcbiAgICAgICAgaW5pdGlhbDoge1xuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyV2lkdGgsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHN0eWxlLmRpc3BsYXksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzdHlsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHN0eWxlLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0eWxlLmRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5IHx8ICdibG9jayc7XG4gICAgc3R5bGUuYm94U2l6aW5nID0gc3R5bGUuYm94U2l6aW5nIHx8ICdib3JkZXItYm94JztcbiAgICBpZiAoaXNOdWxsT3JFbXB0eShyZW5kZXJXaWR0aCkpIHtcbiAgICAgICAgY29uc3QgZGlzcGxheVdpZHRoID0gcmVhZFVzZWRTaXplKGNhbnZhcywgJ3dpZHRoJyk7XG4gICAgICAgIGlmIChkaXNwbGF5V2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gZGlzcGxheVdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc051bGxPckVtcHR5KHJlbmRlckhlaWdodCkpIHtcbiAgICAgICAgaWYgKGNhbnZhcy5zdHlsZS5oZWlnaHQgPT09ICcnKSB7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzLndpZHRoIC8gKGFzcGVjdFJhdGlvIHx8IDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheUhlaWdodCA9IHJlYWRVc2VkU2l6ZShjYW52YXMsICdoZWlnaHQnKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gZGlzcGxheUhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FudmFzO1xufVxuY29uc3QgZXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zID8ge1xuICAgIHBhc3NpdmU6IHRydWVcbn0gOiBmYWxzZTtcbmZ1bmN0aW9uIGFkZExpc3RlbmVyKG5vZGUsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBldmVudExpc3RlbmVyT3B0aW9ucyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGNoYXJ0ICYmIGNoYXJ0LmNhbnZhcykge1xuICAgICAgICBjaGFydC5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZXZlbnRMaXN0ZW5lck9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gRVZFTlRfVFlQRVNbZXZlbnQudHlwZV0gfHwgZXZlbnQudHlwZTtcbiAgICBjb25zdCB7IHggLCB5ICB9ID0gZ2V0UmVsYXRpdmVQb3NpdGlvbihldmVudCwgY2hhcnQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNoYXJ0LFxuICAgICAgICBuYXRpdmU6IGV2ZW50LFxuICAgICAgICB4OiB4ICE9PSB1bmRlZmluZWQgPyB4IDogbnVsbCxcbiAgICAgICAgeTogeSAhPT0gdW5kZWZpbmVkID8geSA6IG51bGxcbiAgICB9O1xufVxuZnVuY3Rpb24gbm9kZUxpc3RDb250YWlucyhub2RlTGlzdCwgY2FudmFzKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVMaXN0KXtcbiAgICAgICAgaWYgKG5vZGUgPT09IGNhbnZhcyB8fCBub2RlLmNvbnRhaW5zKGNhbnZhcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQXR0YWNoT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgY2FudmFzID0gY2hhcnQuY2FudmFzO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGxldCB0cmlnZ2VyID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcyl7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciB8fCBub2RlTGlzdENvbnRhaW5zKGVudHJ5LmFkZGVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGFjaE9ic2VydmVyKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlbnRyaWVzKT0+e1xuICAgICAgICBsZXQgdHJpZ2dlciA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpe1xuICAgICAgICAgICAgdHJpZ2dlciA9IHRyaWdnZXIgfHwgbm9kZUxpc3RDb250YWlucyhlbnRyeS5yZW1vdmVkTm9kZXMsIGNhbnZhcyk7XG4gICAgICAgICAgICB0cmlnZ2VyID0gdHJpZ2dlciAmJiAhbm9kZUxpc3RDb250YWlucyhlbnRyeS5hZGRlZE5vZGVzLCBjYW52YXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5jb25zdCBkcnBMaXN0ZW5pbmdDaGFydHMgPSBuZXcgTWFwKCk7XG5sZXQgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IDA7XG5mdW5jdGlvbiBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICBpZiAoZHByID09PSBvbGREZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb2xkRGV2aWNlUGl4ZWxSYXRpbyA9IGRwcjtcbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuZm9yRWFjaCgocmVzaXplLCBjaGFydCk9PntcbiAgICAgICAgaWYgKGNoYXJ0LmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvICE9PSBkcHIpIHtcbiAgICAgICAgICAgIHJlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5mdW5jdGlvbiBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKSB7XG4gICAgaWYgKCFkcnBMaXN0ZW5pbmdDaGFydHMuc2l6ZSkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIH1cbiAgICBkcnBMaXN0ZW5pbmdDaGFydHMuc2V0KGNoYXJ0LCByZXNpemUpO1xufVxuZnVuY3Rpb24gdW5saXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCkge1xuICAgIGRycExpc3RlbmluZ0NoYXJ0cy5kZWxldGUoY2hhcnQpO1xuICAgIGlmICghZHJwTGlzdGVuaW5nQ2hhcnRzLnNpemUpIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVSZXNpemVPYnNlcnZlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jYW52YXM7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2FudmFzICYmIF9nZXRQYXJlbnROb2RlKGNhbnZhcyk7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNpemUgPSB0aHJvdHRsZWQoKHdpZHRoLCBoZWlnaHQpPT57XG4gICAgICAgIGNvbnN0IHcgPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIGxpc3RlbmVyKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBpZiAodyA8IGNvbnRhaW5lci5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH0sIHdpbmRvdyk7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpPT57XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgICBpZiAod2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTtcbiAgICBsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyhjaGFydCwgcmVzaXplKTtcbiAgICByZXR1cm4gb2JzZXJ2ZXI7XG59XG5mdW5jdGlvbiByZWxlYXNlT2JzZXJ2ZXIoY2hhcnQsIHR5cGUsIG9ic2VydmVyKSB7XG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdyZXNpemUnKSB7XG4gICAgICAgIHVubGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMoY2hhcnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVByb3h5QW5kTGlzdGVuKGNoYXJ0LCB0eXBlLCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNhbnZhcztcbiAgICBjb25zdCBwcm94eSA9IHRocm90dGxlZCgoZXZlbnQpPT57XG4gICAgICAgIGlmIChjaGFydC5jdHggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGZyb21OYXRpdmVFdmVudChldmVudCwgY2hhcnQpKTtcbiAgICAgICAgfVxuICAgIH0sIGNoYXJ0KTtcbiAgICBhZGRMaXN0ZW5lcihjYW52YXMsIHR5cGUsIHByb3h5KTtcbiAgICByZXR1cm4gcHJveHk7XG59XG4gY2xhc3MgRG9tUGxhdGZvcm0gZXh0ZW5kcyBCYXNlUGxhdGZvcm0ge1xuIGFjcXVpcmVDb250ZXh0KGNhbnZhcywgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcyAmJiBjYW52YXMuZ2V0Q29udGV4dCAmJiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5jYW52YXMgPT09IGNhbnZhcykge1xuICAgICAgICAgICAgaW5pdENhbnZhcyhjYW52YXMsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiByZWxlYXNlQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuICAgICAgICBpZiAoIWNhbnZhc1tFWFBBTkRPX0tFWV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0aWFsID0gY2FudmFzW0VYUEFORE9fS0VZXS5pbml0aWFsO1xuICAgICAgICBbXG4gICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICd3aWR0aCdcbiAgICAgICAgXS5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbml0aWFsW3Byb3BdO1xuICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLnNldEF0dHJpYnV0ZShwcm9wLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGluaXRpYWwuc3R5bGUgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKHN0eWxlKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBjYW52YXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICAgIGRlbGV0ZSBjYW52YXNbRVhQQU5ET19LRVldO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gYWRkRXZlbnRMaXN0ZW5lcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKTtcbiAgICAgICAgY29uc3QgcHJveGllcyA9IGNoYXJ0LiRwcm94aWVzIHx8IChjaGFydC4kcHJveGllcyA9IHt9KTtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgICBhdHRhY2g6IGNyZWF0ZUF0dGFjaE9ic2VydmVyLFxuICAgICAgICAgICAgZGV0YWNoOiBjcmVhdGVEZXRhY2hPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogY3JlYXRlUmVzaXplT2JzZXJ2ZXJcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW3R5cGVdIHx8IGNyZWF0ZVByb3h5QW5kTGlzdGVuO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gaGFuZGxlcihjaGFydCwgdHlwZSwgbGlzdGVuZXIpO1xuICAgIH1cbiByZW1vdmVFdmVudExpc3RlbmVyKGNoYXJ0LCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHByb3hpZXMgPSBjaGFydC4kcHJveGllcyB8fCAoY2hhcnQuJHByb3hpZXMgPSB7fSk7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gcHJveGllc1t0eXBlXTtcbiAgICAgICAgaWYgKCFwcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0ge1xuICAgICAgICAgICAgYXR0YWNoOiByZWxlYXNlT2JzZXJ2ZXIsXG4gICAgICAgICAgICBkZXRhY2g6IHJlbGVhc2VPYnNlcnZlcixcbiAgICAgICAgICAgIHJlc2l6ZTogcmVsZWFzZU9ic2VydmVyXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyc1t0eXBlXSB8fCByZW1vdmVMaXN0ZW5lcjtcbiAgICAgICAgaGFuZGxlcihjaGFydCwgdHlwZSwgcHJveHkpO1xuICAgICAgICBwcm94aWVzW3R5cGVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXREZXZpY2VQaXhlbFJhdGlvKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgfVxuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1TaXplKGNhbnZhcywgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8pO1xuICAgIH1cbiBpc0F0dGFjaGVkKGNhbnZhcykge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjYW52YXMgJiYgX2dldFBhcmVudE5vZGUoY2FudmFzKTtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRhaW5lciAmJiBjb250YWluZXIuaXNDb25uZWN0ZWQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2RldGVjdFBsYXRmb3JtKGNhbnZhcykge1xuICAgIGlmICghX2lzRG9tU3VwcG9ydGVkKCkgfHwgdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiYgY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICAgIHJldHVybiBCYXNpY1BsYXRmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gRG9tUGxhdGZvcm07XG59XG5cbmNsYXNzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBkZWZhdWx0cyA9IHt9O1xuICAgIHN0YXRpYyBkZWZhdWx0Um91dGVzID0gdW5kZWZpbmVkO1xuICAgIHg7XG4gICAgeTtcbiAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICBvcHRpb25zO1xuICAgICRhbmltYXRpb25zO1xuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhc1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gaXNOdW1iZXIodGhpcy54KSAmJiBpc051bWJlcih0aGlzLnkpO1xuICAgIH1cbiAgICBnZXRQcm9wcyhwcm9wcywgZmluYWwpIHtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBpZiAoIWZpbmFsIHx8ICFhbmltcykge1xuICAgICAgICAgICAgLy8gbGV0J3Mgbm90IGNyZWF0ZSBhbiBvYmplY3QsIGlmIG5vdCBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHt9O1xuICAgICAgICBwcm9wcy5mb3JFYWNoKChwcm9wKT0+e1xuICAgICAgICAgICAgcmV0W3Byb3BdID0gYW5pbXNbcHJvcF0gJiYgYW5pbXNbcHJvcF0uYWN0aXZlKCkgPyBhbmltc1twcm9wXS5fdG8gOiB0aGlzW3Byb3BdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9Ta2lwKHNjYWxlLCB0aWNrcykge1xuICAgIGNvbnN0IHRpY2tPcHRzID0gc2NhbGUub3B0aW9ucy50aWNrcztcbiAgICBjb25zdCBkZXRlcm1pbmVkTWF4VGlja3MgPSBkZXRlcm1pbmVNYXhUaWNrcyhzY2FsZSk7XG4gICAgY29uc3QgdGlja3NMaW1pdCA9IE1hdGgubWluKHRpY2tPcHRzLm1heFRpY2tzTGltaXQgfHwgZGV0ZXJtaW5lZE1heFRpY2tzLCBkZXRlcm1pbmVkTWF4VGlja3MpO1xuICAgIGNvbnN0IG1ham9ySW5kaWNlcyA9IHRpY2tPcHRzLm1ham9yLmVuYWJsZWQgPyBnZXRNYWpvckluZGljZXModGlja3MpIDogW107XG4gICAgY29uc3QgbnVtTWFqb3JJbmRpY2VzID0gbWFqb3JJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBmaXJzdCA9IG1ham9ySW5kaWNlc1swXTtcbiAgICBjb25zdCBsYXN0ID0gbWFqb3JJbmRpY2VzW251bU1ham9ySW5kaWNlcyAtIDFdO1xuICAgIGNvbnN0IG5ld1RpY2tzID0gW107XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IHRpY2tzTGltaXQpIHtcbiAgICAgICAgc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgbnVtTWFqb3JJbmRpY2VzIC8gdGlja3NMaW1pdCk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgY29uc3Qgc3BhY2luZyA9IGNhbGN1bGF0ZVNwYWNpbmcobWFqb3JJbmRpY2VzLCB0aWNrcywgdGlja3NMaW1pdCk7XG4gICAgaWYgKG51bU1ham9ySW5kaWNlcyA+IDApIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGNvbnN0IGF2Z01ham9yU3BhY2luZyA9IG51bU1ham9ySW5kaWNlcyA+IDEgPyBNYXRoLnJvdW5kKChsYXN0IC0gZmlyc3QpIC8gKG51bU1ham9ySW5kaWNlcyAtIDEpKSA6IG51bGw7XG4gICAgICAgIHNraXAodGlja3MsIG5ld1RpY2tzLCBzcGFjaW5nLCBpc051bGxPclVuZGVmKGF2Z01ham9yU3BhY2luZykgPyAwIDogZmlyc3QgLSBhdmdNYWpvclNwYWNpbmcsIGZpcnN0KTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbnVtTWFqb3JJbmRpY2VzIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbWFqb3JJbmRpY2VzW2ldLCBtYWpvckluZGljZXNbaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgICBza2lwKHRpY2tzLCBuZXdUaWNrcywgc3BhY2luZywgbGFzdCwgaXNOdWxsT3JVbmRlZihhdmdNYWpvclNwYWNpbmcpID8gdGlja3MubGVuZ3RoIDogbGFzdCArIGF2Z01ham9yU3BhY2luZyk7XG4gICAgICAgIHJldHVybiBuZXdUaWNrcztcbiAgICB9XG4gICAgc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcpO1xuICAgIHJldHVybiBuZXdUaWNrcztcbn1cbmZ1bmN0aW9uIGRldGVybWluZU1heFRpY2tzKHNjYWxlKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc2NhbGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgY29uc3QgdGlja0xlbmd0aCA9IHNjYWxlLl90aWNrU2l6ZSgpO1xuICAgIGNvbnN0IG1heFNjYWxlID0gc2NhbGUuX2xlbmd0aCAvIHRpY2tMZW5ndGggKyAob2Zmc2V0ID8gMCA6IDEpO1xuICAgIGNvbnN0IG1heENoYXJ0ID0gc2NhbGUuX21heExlbmd0aCAvIHRpY2tMZW5ndGg7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5taW4obWF4U2NhbGUsIG1heENoYXJ0KSk7XG59XG4gZnVuY3Rpb24gY2FsY3VsYXRlU3BhY2luZyhtYWpvckluZGljZXMsIHRpY2tzLCB0aWNrc0xpbWl0KSB7XG4gICAgY29uc3QgZXZlbk1ham9yU3BhY2luZyA9IGdldEV2ZW5TcGFjaW5nKG1ham9ySW5kaWNlcyk7XG4gICAgY29uc3Qgc3BhY2luZyA9IHRpY2tzLmxlbmd0aCAvIHRpY2tzTGltaXQ7XG4gICAgaWYgKCFldmVuTWFqb3JTcGFjaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbiAgICB9XG4gICAgY29uc3QgZmFjdG9ycyA9IF9mYWN0b3JpemUoZXZlbk1ham9yU3BhY2luZyk7XG4gICAgZm9yKGxldCBpID0gMCwgaWxlbiA9IGZhY3RvcnMubGVuZ3RoIC0gMTsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGZhY3RvcnNbaV07XG4gICAgICAgIGlmIChmYWN0b3IgPiBzcGFjaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChzcGFjaW5nLCAxKTtcbn1cbiBmdW5jdGlvbiBnZXRNYWpvckluZGljZXModGlja3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgaSwgaWxlbjtcbiAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyBpKyspe1xuICAgICAgICBpZiAodGlja3NbaV0ubWFqb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4gZnVuY3Rpb24gc2tpcE1ham9ycyh0aWNrcywgbmV3VGlja3MsIG1ham9ySW5kaWNlcywgc3BhY2luZykge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IG5leHQgPSBtYWpvckluZGljZXNbMF07XG4gICAgbGV0IGk7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBmb3IoaSA9IDA7IGkgPCB0aWNrcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGlmIChpID09PSBuZXh0KSB7XG4gICAgICAgICAgICBuZXdUaWNrcy5wdXNoKHRpY2tzW2ldKTtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICBuZXh0ID0gbWFqb3JJbmRpY2VzW2NvdW50ICogc3BhY2luZ107XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gc2tpcCh0aWNrcywgbmV3VGlja3MsIHNwYWNpbmcsIG1ham9yU3RhcnQsIG1ham9yRW5kKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB2YWx1ZU9yRGVmYXVsdChtYWpvclN0YXJ0LCAwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih2YWx1ZU9yRGVmYXVsdChtYWpvckVuZCwgdGlja3MubGVuZ3RoKSwgdGlja3MubGVuZ3RoKTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBsZW5ndGgsIGksIG5leHQ7XG4gICAgc3BhY2luZyA9IE1hdGguY2VpbChzcGFjaW5nKTtcbiAgICBpZiAobWFqb3JFbmQpIHtcbiAgICAgICAgbGVuZ3RoID0gbWFqb3JFbmQgLSBtYWpvclN0YXJ0O1xuICAgICAgICBzcGFjaW5nID0gbGVuZ3RoIC8gTWF0aC5mbG9vcihsZW5ndGggLyBzcGFjaW5nKTtcbiAgICB9XG4gICAgbmV4dCA9IHN0YXJ0O1xuICAgIHdoaWxlKG5leHQgPCAwKXtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgbmV4dCA9IE1hdGgucm91bmQoc3RhcnQgKyBjb3VudCAqIHNwYWNpbmcpO1xuICAgIH1cbiAgICBmb3IoaSA9IE1hdGgubWF4KHN0YXJ0LCAwKTsgaSA8IGVuZDsgaSsrKXtcbiAgICAgICAgaWYgKGkgPT09IG5leHQpIHtcbiAgICAgICAgICAgIG5ld1RpY2tzLnB1c2godGlja3NbaV0pO1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIG5leHQgPSBNYXRoLnJvdW5kKHN0YXJ0ICsgY291bnQgKiBzcGFjaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiBmdW5jdGlvbiBnZXRFdmVuU3BhY2luZyhhcnIpIHtcbiAgICBjb25zdCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGxldCBpLCBkaWZmO1xuICAgIGlmIChsZW4gPCAyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yKGRpZmYgPSBhcnJbMF0sIGkgPSAxOyBpIDwgbGVuOyArK2kpe1xuICAgICAgICBpZiAoYXJyW2ldIC0gYXJyW2kgLSAxXSAhPT0gZGlmZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmO1xufVxuXG5jb25zdCByZXZlcnNlQWxpZ24gPSAoYWxpZ24pPT5hbGlnbiA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6IGFsaWduID09PSAncmlnaHQnID8gJ2xlZnQnIDogYWxpZ247XG5jb25zdCBvZmZzZXRGcm9tRWRnZSA9IChzY2FsZSwgZWRnZSwgb2Zmc2V0KT0+ZWRnZSA9PT0gJ3RvcCcgfHwgZWRnZSA9PT0gJ2xlZnQnID8gc2NhbGVbZWRnZV0gKyBvZmZzZXQgOiBzY2FsZVtlZGdlXSAtIG9mZnNldDtcbmNvbnN0IGdldFRpY2tzTGltaXQgPSAodGlja3NMZW5ndGgsIG1heFRpY2tzTGltaXQpPT5NYXRoLm1pbihtYXhUaWNrc0xpbWl0IHx8IHRpY2tzTGVuZ3RoLCB0aWNrc0xlbmd0aCk7XG4gZnVuY3Rpb24gc2FtcGxlKGFyciwgbnVtSXRlbXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBhcnIubGVuZ3RoIC8gbnVtSXRlbXM7XG4gICAgY29uc3QgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKDsgaSA8IGxlbjsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICByZXN1bHQucHVzaChhcnJbTWF0aC5mbG9vcihpKV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIGZ1bmN0aW9uIGdldFBpeGVsRm9yR3JpZExpbmUoc2NhbGUsIGluZGV4LCBvZmZzZXRHcmlkTGluZXMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS50aWNrcy5sZW5ndGg7XG4gICAgY29uc3QgdmFsaWRJbmRleCA9IE1hdGgubWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICBjb25zdCBzdGFydCA9IHNjYWxlLl9zdGFydFBpeGVsO1xuICAgIGNvbnN0IGVuZCA9IHNjYWxlLl9lbmRQaXhlbDtcbiAgICBjb25zdCBlcHNpbG9uID0gMWUtNjtcbiAgICBsZXQgbGluZVZhbHVlID0gc2NhbGUuZ2V0UGl4ZWxGb3JUaWNrKHZhbGlkSW5kZXgpO1xuICAgIGxldCBvZmZzZXQ7XG4gICAgaWYgKG9mZnNldEdyaWRMaW5lcykge1xuICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLm1heChsaW5lVmFsdWUgLSBzdGFydCwgZW5kIC0gbGluZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKHNjYWxlLmdldFBpeGVsRm9yVGljaygxKSAtIGxpbmVWYWx1ZSkgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ID0gKGxpbmVWYWx1ZSAtIHNjYWxlLmdldFBpeGVsRm9yVGljayh2YWxpZEluZGV4IC0gMSkpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lVmFsdWUgKz0gdmFsaWRJbmRleCA8IGluZGV4ID8gb2Zmc2V0IDogLW9mZnNldDtcbiAgICAgICAgaWYgKGxpbmVWYWx1ZSA8IHN0YXJ0IC0gZXBzaWxvbiB8fCBsaW5lVmFsdWUgPiBlbmQgKyBlcHNpbG9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWYWx1ZTtcbn1cbiBmdW5jdGlvbiBnYXJiYWdlQ29sbGVjdChjYWNoZXMsIGxlbmd0aCkge1xuICAgIGVhY2goY2FjaGVzLCAoY2FjaGUpPT57XG4gICAgICAgIGNvbnN0IGdjID0gY2FjaGUuZ2M7XG4gICAgICAgIGNvbnN0IGdjTGVuID0gZ2MubGVuZ3RoIC8gMjtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmIChnY0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgZ2NMZW47ICsraSl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlLmRhdGFbZ2NbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2Muc3BsaWNlKDAsIGdjTGVuKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldFRpY2tNYXJrTGVuZ3RoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5kcmF3VGlja3MgPyBvcHRpb25zLnRpY2tMZW5ndGggOiAwO1xufVxuIGZ1bmN0aW9uIGdldFRpdGxlSGVpZ2h0KG9wdGlvbnMsIGZhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb250LCBmYWxsYmFjayk7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGNvbnN0IGxpbmVzID0gaXNBcnJheShvcHRpb25zLnRleHQpID8gb3B0aW9ucy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgcmV0dXJuIGxpbmVzICogZm9udC5saW5lSGVpZ2h0ICsgcGFkZGluZy5oZWlnaHQ7XG59XG5mdW5jdGlvbiBjcmVhdGVTY2FsZUNvbnRleHQocGFyZW50LCBzY2FsZSkge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICBzY2FsZSxcbiAgICAgICAgdHlwZTogJ3NjYWxlJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlVGlja0NvbnRleHQocGFyZW50LCBpbmRleCwgdGljaykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0aWNrLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgdHlwZTogJ3RpY2snXG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSkge1xuICAgICBsZXQgcmV0ID0gX3RvTGVmdFJpZ2h0Q2VudGVyKGFsaWduKTtcbiAgICBpZiAocmV2ZXJzZSAmJiBwb3NpdGlvbiAhPT0gJ3JpZ2h0JyB8fCAhcmV2ZXJzZSAmJiBwb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByZXQgPSByZXZlcnNlQWxpZ24ocmV0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIHRpdGxlQXJncyhzY2FsZSwgb2Zmc2V0LCBwb3NpdGlvbiwgYWxpZ24pIHtcbiAgICBjb25zdCB7IHRvcCAsIGxlZnQgLCBib3R0b20gLCByaWdodCAsIGNoYXJ0ICB9ID0gc2NhbGU7XG4gICAgY29uc3QgeyBjaGFydEFyZWEgLCBzY2FsZXMgIH0gPSBjaGFydDtcbiAgICBsZXQgcm90YXRpb24gPSAwO1xuICAgIGxldCBtYXhXaWR0aCwgdGl0bGVYLCB0aXRsZVk7XG4gICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIGlmIChzY2FsZS5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0aXRsZVggPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgbGVmdCwgcmlnaHQpO1xuICAgICAgICBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgdGl0bGVZID0gc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKSArIGhlaWdodCAtIG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIHRpdGxlWSA9IChjaGFydEFyZWEuYm90dG9tICsgY2hhcnRBcmVhLnRvcCkgLyAyICsgaGVpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVZID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIG1heFdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICB0aXRsZVggPSBzY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpIC0gd2lkdGggKyBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICB0aXRsZVggPSAoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMiAtIHdpZHRoICsgb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVYID0gb2Zmc2V0RnJvbUVkZ2Uoc2NhbGUsIHBvc2l0aW9uLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgIHJvdGF0aW9uID0gcG9zaXRpb24gPT09ICdsZWZ0JyA/IC1IQUxGX1BJIDogSEFMRl9QSTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGVYLFxuICAgICAgICB0aXRsZVksXG4gICAgICAgIG1heFdpZHRoLFxuICAgICAgICByb3RhdGlvblxuICAgIH07XG59XG5jbGFzcyBTY2FsZSBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgICB0aGlzLmlkID0gY2ZnLmlkO1xuICAgICAgICAgdGhpcy50eXBlID0gY2ZnLnR5cGU7XG4gICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmN0eCA9IGNmZy5jdHg7XG4gICAgICAgICB0aGlzLmNoYXJ0ID0gY2ZnLmNoYXJ0O1xuICAgICAgICAgdGhpcy50b3AgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucmlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB7XG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgfTtcbiAgICAgICAgIHRoaXMubWF4V2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLm1heEhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0JvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuYXhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubGFiZWxSb3RhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMudGlja3MgPSBbXTtcbiAgICAgICAgIHRoaXMuX2dyaWRMaW5lSXRlbXMgPSBudWxsO1xuICAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbG9uZ2VzdFRleHRDYWNoZSA9IHt9O1xuICAgICAgICAgdGhpcy5fc3RhcnRQaXhlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX2VuZFBpeGVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3VzZXJNaW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2JvcmRlclZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fZGF0YUxpbWl0c0NhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgdGhpcy5heGlzID0gb3B0aW9ucy5heGlzO1xuICAgICAgICB0aGlzLl91c2VyTWluID0gdGhpcy5wYXJzZShvcHRpb25zLm1pbik7XG4gICAgICAgIHRoaXMuX3VzZXJNYXggPSB0aGlzLnBhcnNlKG9wdGlvbnMubWF4KTtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGVkTWluID0gdGhpcy5wYXJzZShvcHRpb25zLnN1Z2dlc3RlZE1pbik7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3RlZE1heCA9IHRoaXMucGFyc2Uob3B0aW9ucy5zdWdnZXN0ZWRNYXgpO1xuICAgIH1cbiBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgfVxuIGdldFVzZXJCb3VuZHMoKSB7XG4gICAgICAgIGxldCB7IF91c2VyTWluICwgX3VzZXJNYXggLCBfc3VnZ2VzdGVkTWluICwgX3N1Z2dlc3RlZE1heCAgfSA9IHRoaXM7XG4gICAgICAgIF91c2VyTWluID0gZmluaXRlT3JEZWZhdWx0KF91c2VyTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfdXNlck1heCA9IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgX3N1Z2dlc3RlZE1pbiA9IGZpbml0ZU9yRGVmYXVsdChfc3VnZ2VzdGVkTWluLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBfc3VnZ2VzdGVkTWF4ID0gZmluaXRlT3JEZWZhdWx0KF9zdWdnZXN0ZWRNYXgsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtaW46IGZpbml0ZU9yRGVmYXVsdChfdXNlck1pbiwgX3N1Z2dlc3RlZE1pbiksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChfdXNlck1heCwgX3N1Z2dlc3RlZE1heCksXG4gICAgICAgICAgICBtaW5EZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1pbiksXG4gICAgICAgICAgICBtYXhEZWZpbmVkOiBpc051bWJlckZpbml0ZShfdXNlck1heClcbiAgICAgICAgfTtcbiAgICB9XG4gZ2V0TWluTWF4KGNhblN0YWNrKSB7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCByYW5nZTtcbiAgICAgICAgaWYgKG1pbkRlZmluZWQgJiYgbWF4RGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzID0gdGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHJhbmdlID0gbWV0YXNbaV0uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcywgY2FuU3RhY2spO1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCByYW5nZS5taW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXhEZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCByYW5nZS5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1pbiA9IG1heERlZmluZWQgJiYgbWluID4gbWF4ID8gbWF4IDogbWluO1xuICAgICAgICBtYXggPSBtaW5EZWZpbmVkICYmIG1pbiA+IG1heCA/IG1pbiA6IG1heDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbjogZmluaXRlT3JEZWZhdWx0KG1pbiwgZmluaXRlT3JEZWZhdWx0KG1heCwgbWluKSksXG4gICAgICAgICAgICBtYXg6IGZpbml0ZU9yRGVmYXVsdChtYXgsIGZpbml0ZU9yRGVmYXVsdChtaW4sIG1heCkpXG4gICAgICAgIH07XG4gICAgfVxuIGdldFBhZGRpbmcoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiB0aGlzLnBhZGRpbmdMZWZ0IHx8IDAsXG4gICAgICAgICAgICB0b3A6IHRoaXMucGFkZGluZ1RvcCB8fCAwLFxuICAgICAgICAgICAgcmlnaHQ6IHRoaXMucGFkZGluZ1JpZ2h0IHx8IDAsXG4gICAgICAgICAgICBib3R0b206IHRoaXMucGFkZGluZ0JvdHRvbSB8fCAwXG4gICAgICAgIH07XG4gICAgfVxuIGdldFRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVscyB8fCAodGhpcy5pc0hvcml6b250YWwoKSA/IGRhdGEueExhYmVscyA6IGRhdGEueUxhYmVscykgfHwgZGF0YS5sYWJlbHMgfHwgW107XG4gICAgfVxuIGdldExhYmVsSXRlbXMoY2hhcnRBcmVhID0gdGhpcy5jaGFydC5jaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sYWJlbEl0ZW1zIHx8ICh0aGlzLl9sYWJlbEl0ZW1zID0gdGhpcy5fY29tcHV0ZUxhYmVsSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9kYXRhTGltaXRzQ2FjaGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gdXBkYXRlKG1heFdpZHRoLCBtYXhIZWlnaHQsIG1hcmdpbnMpIHtcbiAgICAgICAgY29uc3QgeyBiZWdpbkF0WmVybyAsIGdyYWNlICwgdGlja3M6IHRpY2tPcHRzICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGlja09wdHMuc2FtcGxlU2l6ZTtcbiAgICAgICAgdGhpcy5iZWZvcmVVcGRhdGUoKTtcbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLm1heEhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgdGhpcy5fbWFyZ2lucyA9IG1hcmdpbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICB9LCBtYXJnaW5zKTtcbiAgICAgICAgdGhpcy50aWNrcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhYmVsU2l6ZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9ncmlkTGluZUl0ZW1zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbGFiZWxJdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlU2V0RGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5hZnRlclNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gdGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggKyBtYXJnaW5zLmxlZnQgKyBtYXJnaW5zLnJpZ2h0IDogdGhpcy5oZWlnaHQgKyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tO1xuICAgICAgICBpZiAoIXRoaXMuX2RhdGFMaW1pdHNDYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVEYXRhTGltaXRzKCk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyRGF0YUxpbWl0cygpO1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2UgPSBfYWRkR3JhY2UodGhpcywgZ3JhY2UsIGJlZ2luQXRaZXJvKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFMaW1pdHNDYWNoZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmVmb3JlQnVpbGRUaWNrcygpO1xuICAgICAgICB0aGlzLnRpY2tzID0gdGhpcy5idWlsZFRpY2tzKCkgfHwgW107XG4gICAgICAgIHRoaXMuYWZ0ZXJCdWlsZFRpY2tzKCk7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nRW5hYmxlZCA9IHNhbXBsZVNpemUgPCB0aGlzLnRpY2tzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHMoc2FtcGxpbmdFbmFibGVkID8gc2FtcGxlKHRoaXMudGlja3MsIHNhbXBsZVNpemUpIDogdGhpcy50aWNrcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgdGhpcy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKTtcbiAgICAgICAgaWYgKHRpY2tPcHRzLmRpc3BsYXkgJiYgKHRpY2tPcHRzLmF1dG9Ta2lwIHx8IHRpY2tPcHRzLnNvdXJjZSA9PT0gJ2F1dG8nKSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcyA9IGF1dG9Ta2lwKHRoaXMsIHRoaXMudGlja3MpO1xuICAgICAgICAgICAgdGhpcy5fbGFiZWxTaXplcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFmdGVyQXV0b1NraXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtcGxpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyh0aGlzLnRpY2tzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZm9yZUZpdCgpO1xuICAgICAgICB0aGlzLmZpdCgpO1xuICAgICAgICB0aGlzLmFmdGVyRml0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJVcGRhdGUoKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBsZXQgcmV2ZXJzZVBpeGVscyA9IHRoaXMub3B0aW9ucy5yZXZlcnNlO1xuICAgICAgICBsZXQgc3RhcnRQaXhlbCwgZW5kUGl4ZWw7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICBzdGFydFBpeGVsID0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRQaXhlbCA9IHRoaXMudG9wO1xuICAgICAgICAgICAgZW5kUGl4ZWwgPSB0aGlzLmJvdHRvbTtcbiAgICAgICAgICAgIHJldmVyc2VQaXhlbHMgPSAhcmV2ZXJzZVBpeGVscztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFydFBpeGVsID0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fZW5kUGl4ZWwgPSBlbmRQaXhlbDtcbiAgICAgICAgdGhpcy5fcmV2ZXJzZVBpeGVscyA9IHJldmVyc2VQaXhlbHM7XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGVuZFBpeGVsIC0gc3RhcnRQaXhlbDtcbiAgICAgICAgdGhpcy5fYWxpZ25Ub1BpeGVscyA9IHRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzO1xuICAgIH1cbiAgICBhZnRlclVwZGF0ZSgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyVXBkYXRlLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucywgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gMDtcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IDA7XG4gICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5wYWRkaW5nQm90dG9tID0gMDtcbiAgICB9XG4gICAgYWZ0ZXJTZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBfY2FsbEhvb2tzKG5hbWUpIHtcbiAgICAgICAgdGhpcy5jaGFydC5ub3RpZnlQbHVnaW5zKG5hbWUsIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zW25hbWVdLCBbXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBiZWZvcmVEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZURhdGFMaW1pdHMnKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHt9XG4gICAgYWZ0ZXJEYXRhTGltaXRzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2FmdGVyRGF0YUxpbWl0cycpO1xuICAgIH1cbiAgICBiZWZvcmVCdWlsZFRpY2tzKCkge1xuICAgICAgICB0aGlzLl9jYWxsSG9va3MoJ2JlZm9yZUJ1aWxkVGlja3MnKTtcbiAgICB9XG4gYnVpbGRUaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBhZnRlckJ1aWxkVGlja3MoKSB7XG4gICAgICAgIHRoaXMuX2NhbGxIb29rcygnYWZ0ZXJCdWlsZFRpY2tzJyk7XG4gICAgfVxuICAgIGJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaztcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIHRpY2subGFiZWwgPSBjYWxsYmFjayh0aWNrT3B0cy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHRpY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRpY2tPcHRzID0gb3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3QgbnVtVGlja3MgPSBnZXRUaWNrc0xpbWl0KHRoaXMudGlja3MubGVuZ3RoLCBvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQpO1xuICAgICAgICBjb25zdCBtaW5Sb3RhdGlvbiA9IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDA7XG4gICAgICAgIGNvbnN0IG1heFJvdGF0aW9uID0gdGlja09wdHMubWF4Um90YXRpb247XG4gICAgICAgIGxldCBsYWJlbFJvdGF0aW9uID0gbWluUm90YXRpb247XG4gICAgICAgIGxldCB0aWNrV2lkdGgsIG1heEhlaWdodCwgbWF4TGFiZWxEaWFnb25hbDtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1Zpc2libGUoKSB8fCAhdGlja09wdHMuZGlzcGxheSB8fCBtaW5Sb3RhdGlvbiA+PSBtYXhSb3RhdGlvbiB8fCBudW1UaWNrcyA8PSAxIHx8ICF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBtaW5Sb3RhdGlvbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbFNpemVzID0gdGhpcy5fZ2V0TGFiZWxTaXplcygpO1xuICAgICAgICBjb25zdCBtYXhMYWJlbFdpZHRoID0gbGFiZWxTaXplcy53aWRlc3Qud2lkdGg7XG4gICAgICAgIGNvbnN0IG1heExhYmVsSGVpZ2h0ID0gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBfbGltaXRWYWx1ZSh0aGlzLmNoYXJ0LndpZHRoIC0gbWF4TGFiZWxXaWR0aCwgMCwgdGhpcy5tYXhXaWR0aCk7XG4gICAgICAgIHRpY2tXaWR0aCA9IG9wdGlvbnMub2Zmc2V0ID8gdGhpcy5tYXhXaWR0aCAvIG51bVRpY2tzIDogbWF4V2lkdGggLyAobnVtVGlja3MgLSAxKTtcbiAgICAgICAgaWYgKG1heExhYmVsV2lkdGggKyA2ID4gdGlja1dpZHRoKSB7XG4gICAgICAgICAgICB0aWNrV2lkdGggPSBtYXhXaWR0aCAvIChudW1UaWNrcyAtIChvcHRpb25zLm9mZnNldCA/IDAuNSA6IDEpKTtcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMubWF4SGVpZ2h0IC0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKSAtIHRpY2tPcHRzLnBhZGRpbmcgLSBnZXRUaXRsZUhlaWdodChvcHRpb25zLnRpdGxlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBtYXhMYWJlbERpYWdvbmFsID0gTWF0aC5zcXJ0KG1heExhYmVsV2lkdGggKiBtYXhMYWJlbFdpZHRoICsgbWF4TGFiZWxIZWlnaHQgKiBtYXhMYWJlbEhlaWdodCk7XG4gICAgICAgICAgICBsYWJlbFJvdGF0aW9uID0gdG9EZWdyZWVzKE1hdGgubWluKE1hdGguYXNpbihfbGltaXRWYWx1ZSgobGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIDYpIC8gdGlja1dpZHRoLCAtMSwgMSkpLCBNYXRoLmFzaW4oX2xpbWl0VmFsdWUobWF4SGVpZ2h0IC8gbWF4TGFiZWxEaWFnb25hbCwgLTEsIDEpKSAtIE1hdGguYXNpbihfbGltaXRWYWx1ZShtYXhMYWJlbEhlaWdodCAvIG1heExhYmVsRGlhZ29uYWwsIC0xLCAxKSkpKTtcbiAgICAgICAgICAgIGxhYmVsUm90YXRpb24gPSBNYXRoLm1heChtaW5Sb3RhdGlvbiwgTWF0aC5taW4obWF4Um90YXRpb24sIGxhYmVsUm90YXRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhYmVsUm90YXRpb24gPSBsYWJlbFJvdGF0aW9uO1xuICAgIH1cbiAgICBhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24sIFtcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGFmdGVyQXV0b1NraXAoKSB7fVxuICAgIGJlZm9yZUZpdCgpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCBtaW5TaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjaGFydCAsIG9wdGlvbnM6IHsgdGlja3M6IHRpY2tPcHRzICwgdGl0bGU6IHRpdGxlT3B0cyAsIGdyaWQ6IGdyaWRPcHRzICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZGlzcGxheSA9IHRoaXMuX2lzVmlzaWJsZSgpO1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBpZiAoZGlzcGxheSkge1xuICAgICAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSBnZXRUaXRsZUhlaWdodCh0aXRsZU9wdHMsIGNoYXJ0Lm9wdGlvbnMuZm9udCk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS53aWR0aCA9IHRoaXMubWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSBnZXRUaWNrTWFya0xlbmd0aChncmlkT3B0cykgKyB0aXRsZUhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPSB0aGlzLm1heEhlaWdodDtcbiAgICAgICAgICAgICAgICBtaW5TaXplLndpZHRoID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZE9wdHMpICsgdGl0bGVIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlja09wdHMuZGlzcGxheSAmJiB0aGlzLnRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgd2lkZXN0ICwgaGlnaGVzdCAgfSA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrUGFkZGluZyA9IHRpY2tPcHRzLnBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlUmFkaWFucyA9IHRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsSGVpZ2h0ID0gdGlja09wdHMubWlycm9yID8gMCA6IHNpbiAqIHdpZGVzdC53aWR0aCArIGNvcyAqIGhpZ2hlc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBtaW5TaXplLmhlaWdodCArIGxhYmVsSGVpZ2h0ICsgdGlja1BhZGRpbmcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSB0aWNrT3B0cy5taXJyb3IgPyAwIDogY29zICogd2lkZXN0LndpZHRoICsgc2luICogaGlnaGVzdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIG1pblNpemUud2lkdGggPSBNYXRoLm1pbih0aGlzLm1heFdpZHRoLCBtaW5TaXplLndpZHRoICsgbGFiZWxXaWR0aCArIHRpY2tQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhbmRsZU1hcmdpbnMoKTtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuX2xlbmd0aCA9IGNoYXJ0LndpZHRoIC0gdGhpcy5fbWFyZ2lucy5sZWZ0IC0gdGhpcy5fbWFyZ2lucy5yaWdodDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gbWluU2l6ZS5oZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndpZHRoID0gbWluU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5fbGVuZ3RoID0gY2hhcnQuaGVpZ2h0IC0gdGhpcy5fbWFyZ2lucy50b3AgLSB0aGlzLl9tYXJnaW5zLmJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfY2FsY3VsYXRlUGFkZGluZyhmaXJzdCwgbGFzdCwgc2luLCBjb3MpIHtcbiAgICAgICAgY29uc3QgeyB0aWNrczogeyBhbGlnbiAsIHBhZGRpbmcgIH0gLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgaXNSb3RhdGVkID0gdGhpcy5sYWJlbFJvdGF0aW9uICE9PSAwO1xuICAgICAgICBjb25zdCBsYWJlbHNCZWxvd1RpY2tzID0gcG9zaXRpb24gIT09ICd0b3AnICYmIHRoaXMuYXhpcyA9PT0gJ3gnO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IHRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApIC0gdGhpcy5sZWZ0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0UmlnaHQgPSB0aGlzLnJpZ2h0IC0gdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nTGVmdCA9IDA7XG4gICAgICAgICAgICBsZXQgcGFkZGluZ1JpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmIChpc1JvdGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzQmVsb3dUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGNvcyAqIGZpcnN0LndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBzaW4gKiBsYXN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IHNpbiAqIGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gY29zICogbGFzdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGFzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQgPSBmaXJzdC53aWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gIT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdCA9IGZpcnN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSBNYXRoLm1heCgocGFkZGluZ0xlZnQgLSBvZmZzZXRMZWZ0ICsgcGFkZGluZykgKiB0aGlzLndpZHRoIC8gKHRoaXMud2lkdGggLSBvZmZzZXRMZWZ0KSwgMCk7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdSaWdodCA9IE1hdGgubWF4KChwYWRkaW5nUmlnaHQgLSBvZmZzZXRSaWdodCArIHBhZGRpbmcpICogdGhpcy53aWR0aCAvICh0aGlzLndpZHRoIC0gb2Zmc2V0UmlnaHQpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwYWRkaW5nVG9wID0gbGFzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgbGV0IHBhZGRpbmdCb3R0b20gPSBmaXJzdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKGFsaWduID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IGZpcnN0LmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IGxhc3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWRkaW5nVG9wID0gcGFkZGluZ1RvcCArIHBhZGRpbmc7XG4gICAgICAgICAgICB0aGlzLnBhZGRpbmdCb3R0b20gPSBwYWRkaW5nQm90dG9tICsgcGFkZGluZztcbiAgICAgICAgfVxuICAgIH1cbiBfaGFuZGxlTWFyZ2lucygpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcmdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMubGVmdCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsIHRoaXMuX21hcmdpbnMubGVmdCk7XG4gICAgICAgICAgICB0aGlzLl9tYXJnaW5zLnRvcCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCwgdGhpcy5fbWFyZ2lucy50b3ApO1xuICAgICAgICAgICAgdGhpcy5fbWFyZ2lucy5yaWdodCA9IE1hdGgubWF4KHRoaXMucGFkZGluZ1JpZ2h0LCB0aGlzLl9tYXJnaW5zLnJpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuX21hcmdpbnMuYm90dG9tID0gTWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLCB0aGlzLl9tYXJnaW5zLmJvdHRvbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWZ0ZXJGaXQoKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckZpdCwgW1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICBdKTtcbiAgICB9XG4gaXNIb3Jpem9udGFsKCkge1xuICAgICAgICBjb25zdCB7IGF4aXMgLCBwb3NpdGlvbiAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgYXhpcyA9PT0gJ3gnO1xuICAgIH1cbiBpc0Z1bGxTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplO1xuICAgIH1cbiBfY29udmVydFRpY2tzVG9MYWJlbHModGlja3MpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tMYWJlbHModGlja3MpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKHRpY2tzW2ldLmxhYmVsKSkge1xuICAgICAgICAgICAgICAgIHRpY2tzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBpbGVuLS07XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKTtcbiAgICB9XG4gX2dldExhYmVsU2l6ZXMoKSB7XG4gICAgICAgIGxldCBsYWJlbFNpemVzID0gdGhpcy5fbGFiZWxTaXplcztcbiAgICAgICAgaWYgKCFsYWJlbFNpemVzKSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gdGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemU7XG4gICAgICAgICAgICBsZXQgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICAgICAgaWYgKHNhbXBsZVNpemUgPCB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aWNrcyA9IHNhbXBsZSh0aWNrcywgc2FtcGxlU2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYWJlbFNpemVzID0gbGFiZWxTaXplcyA9IHRoaXMuX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCB0aWNrcy5sZW5ndGgsIHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWxTaXplcztcbiAgICB9XG4gX2NvbXB1dGVMYWJlbFNpemVzKHRpY2tzLCBsZW5ndGgsIG1heFRpY2tzTGltaXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggLCBfbG9uZ2VzdFRleHRDYWNoZTogY2FjaGVzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodHMgPSBbXTtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gTWF0aC5mbG9vcihsZW5ndGggLyBnZXRUaWNrc0xpbWl0KGxlbmd0aCwgbWF4VGlja3NMaW1pdCkpO1xuICAgICAgICBsZXQgd2lkZXN0TGFiZWxTaXplID0gMDtcbiAgICAgICAgbGV0IGhpZ2hlc3RMYWJlbFNpemUgPSAwO1xuICAgICAgICBsZXQgaSwgaiwgamxlbiwgbGFiZWwsIHRpY2tGb250LCBmb250U3RyaW5nLCBjYWNoZSwgbGluZUhlaWdodCwgd2lkdGgsIGhlaWdodCwgbmVzdGVkTGFiZWw7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBpbmNyZW1lbnQpe1xuICAgICAgICAgICAgbGFiZWwgPSB0aWNrc1tpXS5sYWJlbDtcbiAgICAgICAgICAgIHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpKTtcbiAgICAgICAgICAgIGN0eC5mb250ID0gZm9udFN0cmluZyA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgIGNhY2hlID0gY2FjaGVzW2ZvbnRTdHJpbmddID0gY2FjaGVzW2ZvbnRTdHJpbmddIHx8IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBnYzogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gdGlja0ZvbnQubGluZUhlaWdodDtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihsYWJlbCkgJiYgIWlzQXJyYXkobGFiZWwpKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIGxhYmVsKTtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGxhYmVsKSkge1xuICAgICAgICAgICAgICAgIGZvcihqID0gMCwgamxlbiA9IGxhYmVsLmxlbmd0aDsgaiA8IGpsZW47ICsrail7XG4gICAgICAgICAgICAgICAgICAgIG5lc3RlZExhYmVsID0gIGxhYmVsW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobmVzdGVkTGFiZWwpICYmICFpc0FycmF5KG5lc3RlZExhYmVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBfbWVhc3VyZVRleHQoY3R4LCBjYWNoZS5kYXRhLCBjYWNoZS5nYywgd2lkdGgsIG5lc3RlZExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2lkdGhzLnB1c2god2lkdGgpO1xuICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKGhlaWdodCk7XG4gICAgICAgICAgICB3aWRlc3RMYWJlbFNpemUgPSBNYXRoLm1heCh3aWR0aCwgd2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgICAgIGhpZ2hlc3RMYWJlbFNpemUgPSBNYXRoLm1heChoZWlnaHQsIGhpZ2hlc3RMYWJlbFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGdhcmJhZ2VDb2xsZWN0KGNhY2hlcywgbGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgd2lkZXN0ID0gd2lkdGhzLmluZGV4T2Yod2lkZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgaGlnaGVzdCA9IGhlaWdodHMuaW5kZXhPZihoaWdoZXN0TGFiZWxTaXplKTtcbiAgICAgICAgY29uc3QgdmFsdWVBdCA9IChpZHgpPT4oe1xuICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aHNbaWR4XSB8fCAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0c1tpZHhdIHx8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IHZhbHVlQXQoMCksXG4gICAgICAgICAgICBsYXN0OiB2YWx1ZUF0KGxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgd2lkZXN0OiB2YWx1ZUF0KHdpZGVzdCksXG4gICAgICAgICAgICBoaWdoZXN0OiB2YWx1ZUF0KGhpZ2hlc3QpLFxuICAgICAgICAgICAgd2lkdGhzLFxuICAgICAgICAgICAgaGVpZ2h0c1xuICAgICAgICB9O1xuICAgIH1cbiBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge31cbiBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiBnZXRQaXhlbEZvckRlY2ltYWwoZGVjaW1hbCkge1xuICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZVBpeGVscykge1xuICAgICAgICAgICAgZGVjaW1hbCA9IDEgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpeGVsID0gdGhpcy5fc3RhcnRQaXhlbCArIGRlY2ltYWwgKiB0aGlzLl9sZW5ndGg7XG4gICAgICAgIHJldHVybiBfaW50MTZSYW5nZSh0aGlzLl9hbGlnblRvUGl4ZWxzID8gX2FsaWduUGl4ZWwodGhpcy5jaGFydCwgcGl4ZWwsIDApIDogcGl4ZWwpO1xuICAgIH1cbiBnZXREZWNpbWFsRm9yUGl4ZWwocGl4ZWwpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IChwaXhlbCAtIHRoaXMuX3N0YXJ0UGl4ZWwpIC8gdGhpcy5fbGVuZ3RoO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZVBpeGVscyA/IDEgLSBkZWNpbWFsIDogZGVjaW1hbDtcbiAgICB9XG4gZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0QmFzZVZhbHVlKCkpO1xuICAgIH1cbiBnZXRCYXNlVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG1pbiA8IDAgJiYgbWF4IDwgMCA/IG1heCA6IG1pbiA+IDAgJiYgbWF4ID4gMCA/IG1pbiA6IDA7XG4gICAgfVxuIGdldENvbnRleHQoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiB0aWNrLiRjb250ZXh0IHx8ICh0aWNrLiRjb250ZXh0ID0gY3JlYXRlVGlja0NvbnRleHQodGhpcy5nZXRDb250ZXh0KCksIGluZGV4LCB0aWNrKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRleHQgfHwgKHRoaXMuJGNvbnRleHQgPSBjcmVhdGVTY2FsZUNvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMpKTtcbiAgICB9XG4gX3RpY2tTaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25UaWNrcyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgY29uc3Qgcm90ID0gdG9SYWRpYW5zKHRoaXMubGFiZWxSb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguYWJzKE1hdGguY29zKHJvdCkpO1xuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLmFicyhNYXRoLnNpbihyb3QpKTtcbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvblRpY2tzLmF1dG9Ta2lwUGFkZGluZyB8fCAwO1xuICAgICAgICBjb25zdCB3ID0gbGFiZWxTaXplcyA/IGxhYmVsU2l6ZXMud2lkZXN0LndpZHRoICsgcGFkZGluZyA6IDA7XG4gICAgICAgIGNvbnN0IGggPSBsYWJlbFNpemVzID8gbGFiZWxTaXplcy5oaWdoZXN0LmhlaWdodCArIHBhZGRpbmcgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKSA/IGggKiBjb3MgPiB3ICogc2luID8gdyAvIGNvcyA6IGggLyBzaW4gOiBoICogc2luIDwgdyAqIGNvcyA/IGggLyBjb3MgOiB3IC8gc2luO1xuICAgIH1cbiBfaXNWaXNpYmxlKCkge1xuICAgICAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7XG4gICAgICAgIGlmIChkaXNwbGF5ICE9PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWRpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGggPiAwO1xuICAgIH1cbiBfY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSB0aGlzLmF4aXM7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBncmlkICwgcG9zaXRpb24gLCBib3JkZXIgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBncmlkLm9mZnNldDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrc0xlbmd0aCA9IHRpY2tzLmxlbmd0aCArIChvZmZzZXQgPyAxIDogMCk7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgoZ3JpZCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGJvcmRlck9wdHMgPSBib3JkZXIuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGNvbnN0IGF4aXNXaWR0aCA9IGJvcmRlck9wdHMuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBjb25zdCBheGlzSGFsZldpZHRoID0gYXhpc1dpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgYWxpZ25Cb3JkZXJWYWx1ZSA9IGZ1bmN0aW9uKHBpeGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX2FsaWduUGl4ZWwoY2hhcnQsIHBpeGVsLCBheGlzV2lkdGgpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgYm9yZGVyVmFsdWUsIGksIGxpbmVWYWx1ZSwgYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgbGV0IHR4MSwgdHkxLCB0eDIsIHR5MiwgeDEsIHkxLCB4MiwgeTI7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmJvdHRvbSk7XG4gICAgICAgICAgICB0eTEgPSB0aGlzLmJvdHRvbSAtIHRsO1xuICAgICAgICAgICAgdHkyID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgeTEgPSBhbGlnbkJvcmRlclZhbHVlKGNoYXJ0QXJlYS50b3ApICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLnRvcCk7XG4gICAgICAgICAgICB5MSA9IGNoYXJ0QXJlYS50b3A7XG4gICAgICAgICAgICB5MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmJvdHRvbSkgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkxID0gYm9yZGVyVmFsdWUgKyBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHkyID0gdGhpcy50b3AgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5yaWdodCk7XG4gICAgICAgICAgICB0eDEgPSB0aGlzLnJpZ2h0IC0gdGw7XG4gICAgICAgICAgICB0eDIgPSBib3JkZXJWYWx1ZSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB4MSA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLmxlZnQpICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHgyID0gY2hhcnRBcmVhLnJpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5sZWZ0KTtcbiAgICAgICAgICAgIHgxID0gY2hhcnRBcmVhLmxlZnQ7XG4gICAgICAgICAgICB4MiA9IGFsaWduQm9yZGVyVmFsdWUoY2hhcnRBcmVhLnJpZ2h0KSAtIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDEgPSBib3JkZXJWYWx1ZSArIGF4aXNIYWxmV2lkdGg7XG4gICAgICAgICAgICB0eDIgPSB0aGlzLmxlZnQgKyB0bDtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUoKGNoYXJ0QXJlYS50b3AgKyBjaGFydEFyZWEuYm90dG9tKSAvIDIgKyAwLjUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbkF4aXNJRCA9IE9iamVjdC5rZXlzKHBvc2l0aW9uKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBvc2l0aW9uW3Bvc2l0aW9uQXhpc0lEXTtcbiAgICAgICAgICAgICAgICBib3JkZXJWYWx1ZSA9IGFsaWduQm9yZGVyVmFsdWUodGhpcy5jaGFydC5zY2FsZXNbcG9zaXRpb25BeGlzSURdLmdldFBpeGVsRm9yVmFsdWUodmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkxID0gY2hhcnRBcmVhLnRvcDtcbiAgICAgICAgICAgIHkyID0gY2hhcnRBcmVhLmJvdHRvbTtcbiAgICAgICAgICAgIHR5MSA9IGJvcmRlclZhbHVlICsgYXhpc0hhbGZXaWR0aDtcbiAgICAgICAgICAgIHR5MiA9IHR5MSArIHRsO1xuICAgICAgICB9IGVsc2UgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSgoY2hhcnRBcmVhLmxlZnQgKyBjaGFydEFyZWEucmlnaHQpIC8gMik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIGJvcmRlclZhbHVlID0gYWxpZ25Cb3JkZXJWYWx1ZSh0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHgxID0gYm9yZGVyVmFsdWUgLSBheGlzSGFsZldpZHRoO1xuICAgICAgICAgICAgdHgyID0gdHgxIC0gdGw7XG4gICAgICAgICAgICB4MSA9IGNoYXJ0QXJlYS5sZWZ0O1xuICAgICAgICAgICAgeDIgPSBjaGFydEFyZWEucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGltaXQgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnRpY2tzLm1heFRpY2tzTGltaXQsIHRpY2tzTGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aWNrc0xlbmd0aCAvIGxpbWl0KSk7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IHRpY2tzTGVuZ3RoOyBpICs9IHN0ZXApe1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChpKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gZ3JpZC5zZXRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IG9wdHNBdEluZGV4LmxpbmVXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVDb2xvciA9IG9wdHNBdEluZGV4LmNvbG9yO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHNBdEluZGV4Qm9yZGVyLmRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCBib3JkZXJEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXhCb3JkZXIuZGFzaE9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tXaWR0aCA9IG9wdHNBdEluZGV4LnRpY2tXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tDb2xvciA9IG9wdHNBdEluZGV4LnRpY2tDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tCb3JkZXJEYXNoID0gb3B0c0F0SW5kZXgudGlja0JvcmRlckRhc2ggfHwgW107XG4gICAgICAgICAgICBjb25zdCB0aWNrQm9yZGVyRGFzaE9mZnNldCA9IG9wdHNBdEluZGV4LnRpY2tCb3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgbGluZVZhbHVlID0gZ2V0UGl4ZWxGb3JHcmlkTGluZSh0aGlzLCBpLCBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKGxpbmVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlnbmVkTGluZVZhbHVlID0gX2FsaWduUGl4ZWwoY2hhcnQsIGxpbmVWYWx1ZSwgbGluZVdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICB0eDEgPSB0eDIgPSB4MSA9IHgyID0gYWxpZ25lZExpbmVWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHkxID0gdHkyID0geTEgPSB5MiA9IGFsaWduZWRMaW5lVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eDEsXG4gICAgICAgICAgICAgICAgdHkxLFxuICAgICAgICAgICAgICAgIHR4MixcbiAgICAgICAgICAgICAgICB0eTIsXG4gICAgICAgICAgICAgICAgeDEsXG4gICAgICAgICAgICAgICAgeTEsXG4gICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICBjb2xvcjogbGluZUNvbG9yLFxuICAgICAgICAgICAgICAgIGJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICB0aWNrV2lkdGgsXG4gICAgICAgICAgICAgICAgdGlja0NvbG9yLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoLFxuICAgICAgICAgICAgICAgIHRpY2tCb3JkZXJEYXNoT2Zmc2V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aWNrc0xlbmd0aCA9IHRpY2tzTGVuZ3RoO1xuICAgICAgICB0aGlzLl9ib3JkZXJWYWx1ZSA9IGJvcmRlclZhbHVlO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuIF9jb21wdXRlTGFiZWxJdGVtcyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgYXhpcyA9IHRoaXMuYXhpcztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBwb3NpdGlvbiAsIHRpY2tzOiBvcHRpb25UaWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMuaXNIb3Jpem9udGFsKCk7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgeyBhbGlnbiAsIGNyb3NzQWxpZ24gLCBwYWRkaW5nICwgbWlycm9yICB9ID0gb3B0aW9uVGlja3M7XG4gICAgICAgIGNvbnN0IHRsID0gZ2V0VGlja01hcmtMZW5ndGgob3B0aW9ucy5ncmlkKTtcbiAgICAgICAgY29uc3QgdGlja0FuZFBhZGRpbmcgPSB0bCArIHBhZGRpbmc7XG4gICAgICAgIGNvbnN0IGhUaWNrQW5kUGFkZGluZyA9IG1pcnJvciA/IC1wYWRkaW5nIDogdGlja0FuZFBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbiwgdGljaywgbGFiZWwsIHgsIHksIHRleHRBbGlnbiwgcGl4ZWwsIGZvbnQsIGxpbmVIZWlnaHQsIGxpbmVDb3VudCwgdGV4dE9mZnNldDtcbiAgICAgICAgbGV0IHRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy5ib3R0b20gLSBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy50b3AgKyBoVGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSB0aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCk7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSByZXQudGV4dEFsaWduO1xuICAgICAgICAgICAgeCA9IHJldC54O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KHRsKTtcbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHJldC50ZXh0QWxpZ247XG4gICAgICAgICAgICB4ID0gcmV0Lng7XG4gICAgICAgIH0gZWxzZSBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgeSA9IChjaGFydEFyZWEudG9wICsgY2hhcnRBcmVhLmJvdHRvbSkgLyAyICsgdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQXhpc0lEID0gT2JqZWN0LmtleXMocG9zaXRpb24pWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcG9zaXRpb25bcG9zaXRpb25BeGlzSURdO1xuICAgICAgICAgICAgICAgIHkgPSB0aGlzLmNoYXJ0LnNjYWxlc1twb3NpdGlvbkF4aXNJRF0uZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkgKyB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChheGlzID09PSAneScpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICB4ID0gKGNoYXJ0QXJlYS5sZWZ0ICsgY2hhcnRBcmVhLnJpZ2h0KSAvIDIgLSB0aWNrQW5kUGFkZGluZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BeGlzSUQgPSBPYmplY3Qua2V5cyhwb3NpdGlvbilbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwb3NpdGlvbltwb3NpdGlvbkF4aXNJRF07XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMuY2hhcnQuc2NhbGVzW3Bvc2l0aW9uQXhpc0lEXS5nZXRQaXhlbEZvclZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHRBbGlnbiA9IHRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQodGwpLnRleHRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgICAgICBpZiAoYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxTaXplcyA9IHRoaXMuX2dldExhYmVsU2l6ZXMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gdGlja3MubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRpY2sgPSB0aWNrc1tpXTtcbiAgICAgICAgICAgIGxhYmVsID0gdGljay5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gb3B0aW9uVGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaSkpO1xuICAgICAgICAgICAgcGl4ZWwgPSB0aGlzLmdldFBpeGVsRm9yVGljayhpKSArIG9wdGlvblRpY2tzLmxhYmVsT2Zmc2V0O1xuICAgICAgICAgICAgZm9udCA9IHRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoaSk7XG4gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gZm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgbGluZUNvdW50ID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbC5sZW5ndGggOiAxO1xuICAgICAgICAgICAgY29uc3QgaGFsZkNvdW50ID0gbGluZUNvdW50IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gb3B0c0F0SW5kZXguY29sb3I7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcjtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgbGV0IHRpY2tUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgeCA9IHBpeGVsO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24gPT09ICdpbm5lcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aWNrVGV4dEFsaWduID0gIXRoaXMub3B0aW9ucy5yZXZlcnNlID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tUZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSAtbGluZUNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNyb3NzQWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodCArIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gLWxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgKyBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicgfHwgcm90YXRpb24gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjcm9zc0FsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IGxhYmVsU2l6ZXMuaGlnaGVzdC5oZWlnaHQgLyAyIC0gaGFsZkNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBsYWJlbFNpemVzLmhpZ2hlc3QuaGVpZ2h0IC0gbGluZUNvdW50ICogbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgKj0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3RhdGlvbiAhPT0gMCAmJiAhb3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgeCArPSBsaW5lSGVpZ2h0IC8gMiAqIE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHkgPSBwaXhlbDtcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gKDEgLSBsaW5lQ291bnQpICogbGluZUhlaWdodCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYmFja2Ryb3A7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSB0b1BhZGRpbmcob3B0c0F0SW5kZXguYmFja2Ryb3BQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBsYWJlbFNpemVzLmhlaWdodHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBsYWJlbFNpemVzLndpZHRoc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgdG9wID0gdGV4dE9mZnNldCAtIGxhYmVsUGFkZGluZy50b3A7XG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSAwIC0gbGFiZWxQYWRkaW5nLmxlZnQ7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHRleHRCYXNlbGluZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AgLT0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wIC09IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2godGV4dEFsaWduKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5uZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGlsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IHdpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYWNrZHJvcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggKyBsYWJlbFBhZGRpbmcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgbGFiZWxQYWRkaW5nLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IG9wdHNBdEluZGV4LmJhY2tkcm9wQ29sb3JcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgZm9udCxcbiAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogdGlja1RleHRBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJhc2VsaW5lLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIF9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3MgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gLXRvUmFkaWFucyh0aGlzLmxhYmVsUm90YXRpb24pO1xuICAgICAgICBpZiAocm90YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA9PT0gJ3RvcCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICBpZiAodGlja3MuYWxpZ24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgIGFsaWduID0gJ2xlZnQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnZW5kJykge1xuICAgICAgICAgICAgYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRpY2tzLmFsaWduID09PSAnaW5uZXInKSB7XG4gICAgICAgICAgICBhbGlnbiA9ICdpbm5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH1cbiAgICBfZ2V0WUF4aXNMYWJlbEFsaWdubWVudCh0bCkge1xuICAgICAgICBjb25zdCB7IHBvc2l0aW9uICwgdGlja3M6IHsgY3Jvc3NBbGlnbiAsIG1pcnJvciAsIHBhZGRpbmcgIH0gIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxhYmVsU2l6ZXMgPSB0aGlzLl9nZXRMYWJlbFNpemVzKCk7XG4gICAgICAgIGNvbnN0IHRpY2tBbmRQYWRkaW5nID0gdGwgKyBwYWRkaW5nO1xuICAgICAgICBjb25zdCB3aWRlc3QgPSBsYWJlbFNpemVzLndpZGVzdC53aWR0aDtcbiAgICAgICAgbGV0IHRleHRBbGlnbjtcbiAgICAgICAgbGV0IHg7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMucmlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ICs9IHdpZGVzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHggPSB0aGlzLnJpZ2h0IC0gdGlja0FuZFBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggPSB0aGlzLmxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBpZiAobWlycm9yKSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaWYgKGNyb3NzQWxpZ24gPT09ICduZWFyJykge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIHggLT0gd2lkZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeCA9IHRoaXMubGVmdCArIHRpY2tBbmRQYWRkaW5nO1xuICAgICAgICAgICAgICAgIGlmIChjcm9zc0FsaWduID09PSAnbmVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2xlZnQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHggKz0gd2lkZXN0IC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICB4ID0gdGhpcy5yaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICB4XG4gICAgICAgIH07XG4gICAgfVxuIF9jb21wdXRlTGFiZWxBcmVhKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRpY2tzLm1pcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gJ2xlZnQnIHx8IHBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnQsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjaGFydC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMucmlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogdGhpcy5ib3R0b20sXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNoYXJ0LndpZHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdCYWNrZ3JvdW5kKCkge1xuICAgICAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgYmFja2dyb3VuZENvbG9yICB9ICwgbGVmdCAsIHRvcCAsIHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TGluZVdpZHRoRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8ICFncmlkLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpY2tzID0gdGhpcy50aWNrcztcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aWNrcy5maW5kSW5kZXgoKHQpPT50LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gZ3JpZC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChpbmRleCkpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdHMubGluZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiBkcmF3R3JpZChjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMub3B0aW9ucy5ncmlkO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9ncmlkTGluZUl0ZW1zIHx8ICh0aGlzLl9ncmlkTGluZUl0ZW1zID0gdGhpcy5fY29tcHV0ZUdyaWRMaW5lSXRlbXMoY2hhcnRBcmVhKSk7XG4gICAgICAgIGxldCBpLCBpbGVuO1xuICAgICAgICBjb25zdCBkcmF3TGluZSA9IChwMSwgcDIsIHN0eWxlKT0+e1xuICAgICAgICAgICAgaWYgKCFzdHlsZS53aWR0aCB8fCAhc3R5bGUuY29sb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHN0eWxlLndpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3R5bGUuY29sb3I7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2goc3R5bGUuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBzdHlsZS5ib3JkZXJEYXNoT2Zmc2V0O1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyhwMS54LCBwMS55KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8ocDIueCwgcDIueSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZ3JpZC5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5kcmF3T25DaGFydEFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHJhd0xpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS54MixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0ueTJcbiAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChncmlkLmRyYXdUaWNrcykge1xuICAgICAgICAgICAgICAgICAgICBkcmF3TGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnR4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGl0ZW0udHkxXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0udHgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogaXRlbS50eTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGl0ZW0udGlja0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0udGlja1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGFzaDogaXRlbS50aWNrQm9yZGVyRGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IGl0ZW0udGlja0JvcmRlckRhc2hPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIGRyYXdCb3JkZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hhcnQgLCBjdHggLCBvcHRpb25zOiB7IGJvcmRlciAsIGdyaWQgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBib3JkZXJPcHRzID0gYm9yZGVyLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBheGlzV2lkdGggPSBib3JkZXIuZGlzcGxheSA/IGJvcmRlck9wdHMud2lkdGggOiAwO1xuICAgICAgICBpZiAoIWF4aXNXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lV2lkdGggPSBncmlkLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGg7XG4gICAgICAgIGNvbnN0IGJvcmRlclZhbHVlID0gdGhpcy5fYm9yZGVyVmFsdWU7XG4gICAgICAgIGxldCB4MSwgeDIsIHkxLCB5MjtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHgxID0gX2FsaWduUGl4ZWwoY2hhcnQsIHRoaXMubGVmdCwgYXhpc1dpZHRoKSAtIGF4aXNXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MiA9IF9hbGlnblBpeGVsKGNoYXJ0LCB0aGlzLnJpZ2h0LCBsYXN0TGluZVdpZHRoKSArIGxhc3RMaW5lV2lkdGggLyAyO1xuICAgICAgICAgICAgeTEgPSB5MiA9IGJvcmRlclZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeTEgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy50b3AsIGF4aXNXaWR0aCkgLSBheGlzV2lkdGggLyAyO1xuICAgICAgICAgICAgeTIgPSBfYWxpZ25QaXhlbChjaGFydCwgdGhpcy5ib3R0b20sIGxhc3RMaW5lV2lkdGgpICsgbGFzdExpbmVXaWR0aCAvIDI7XG4gICAgICAgICAgICB4MSA9IHgyID0gYm9yZGVyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlck9wdHMud2lkdGg7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGJvcmRlck9wdHMuY29sb3I7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4Lm1vdmVUbyh4MSwgeTEpO1xuICAgICAgICBjdHgubGluZVRvKHgyLCB5Mik7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gZHJhd0xhYmVscyhjaGFydEFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uVGlja3MgPSB0aGlzLm9wdGlvbnMudGlja3M7XG4gICAgICAgIGlmICghb3B0aW9uVGlja3MuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5fY29tcHV0ZUxhYmVsQXJlYSgpO1xuICAgICAgICBpZiAoYXJlYSkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCBhcmVhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TGFiZWxJdGVtcyhjaGFydEFyZWEpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpe1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGV4dE9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCB0aWNrRm9udCA9IGl0ZW0uZm9udDtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBpdGVtLnRleHRPZmZzZXQ7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGFiZWwsIDAsIHksIHRpY2tGb250LCByZW5kZXJUZXh0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZWEpIHtcbiAgICAgICAgICAgIHVuY2xpcEFyZWEoY3R4KTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3VGl0bGUoKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgb3B0aW9uczogeyBwb3NpdGlvbiAsIHRpdGxlICwgcmV2ZXJzZSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghdGl0bGUuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnQgPSB0b0ZvbnQodGl0bGUuZm9udCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcodGl0bGUucGFkZGluZyk7XG4gICAgICAgIGNvbnN0IGFsaWduID0gdGl0bGUuYWxpZ247XG4gICAgICAgIGxldCBvZmZzZXQgPSBmb250LmxpbmVIZWlnaHQgLyAyO1xuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdib3R0b20nIHx8IHBvc2l0aW9uID09PSAnY2VudGVyJyB8fCBpc09iamVjdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSBwYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHRpdGxlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGZvbnQubGluZUhlaWdodCAqICh0aXRsZS50ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHBhZGRpbmcudG9wO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGl0bGVYICwgdGl0bGVZICwgbWF4V2lkdGggLCByb3RhdGlvbiAgfSA9IHRpdGxlQXJncyh0aGlzLCBvZmZzZXQsIHBvc2l0aW9uLCBhbGlnbik7XG4gICAgICAgIHJlbmRlclRleHQoY3R4LCB0aXRsZS50ZXh0LCAwLCAwLCBmb250LCB7XG4gICAgICAgICAgICBjb2xvcjogdGl0bGUuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiB0aXRsZUFsaWduKGFsaWduLCBwb3NpdGlvbiwgcmV2ZXJzZSksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkcmF3KGNoYXJ0QXJlYSkge1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcmF3QmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLmRyYXdHcmlkKGNoYXJ0QXJlYSk7XG4gICAgICAgIHRoaXMuZHJhd0JvcmRlcigpO1xuICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICB9XG4gX2xheWVycygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdHogPSBvcHRzLnRpY2tzICYmIG9wdHMudGlja3MueiB8fCAwO1xuICAgICAgICBjb25zdCBneiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuZ3JpZCAmJiBvcHRzLmdyaWQueiwgLTEpO1xuICAgICAgICBjb25zdCBieiA9IHZhbHVlT3JEZWZhdWx0KG9wdHMuYm9yZGVyICYmIG9wdHMuYm9yZGVyLnosIDApO1xuICAgICAgICBpZiAoIXRoaXMuX2lzVmlzaWJsZSgpIHx8IHRoaXMuZHJhdyAhPT0gU2NhbGUucHJvdG90eXBlLmRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICAgICAgZHJhdzogKGNoYXJ0QXJlYSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhdyhjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHo6IGd6LFxuICAgICAgICAgICAgICAgIGRyYXc6IChjaGFydEFyZWEpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3R3JpZChjaGFydEFyZWEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdUaXRsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgejogYnosXG4gICAgICAgICAgICAgICAgZHJhdzogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Qm9yZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB6OiB0eixcbiAgICAgICAgICAgICAgICBkcmF3OiAoY2hhcnRBcmVhKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdMYWJlbHMoY2hhcnRBcmVhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuIGdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHR5cGUpIHtcbiAgICAgICAgY29uc3QgbWV0YXMgPSB0aGlzLmNoYXJ0LmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtcbiAgICAgICAgY29uc3QgYXhpc0lEID0gdGhpcy5heGlzICsgJ0F4aXNJRCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbWV0YXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBtZXRhc1tpXTtcbiAgICAgICAgICAgIGlmIChtZXRhW2F4aXNJRF0gPT09IHRoaXMuaWQgJiYgKCF0eXBlIHx8IG1ldGEudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtZXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiBfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhpbmRleCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGluZGV4KSk7XG4gICAgICAgIHJldHVybiB0b0ZvbnQob3B0cy5mb250KTtcbiAgICB9XG4gX21heERpZ2l0cygpIHtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodCkgLyBmb250U2l6ZTtcbiAgICB9XG59XG5cbmNsYXNzIFR5cGVkUmVnaXN0cnkge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHNjb3BlLCBvdmVycmlkZSl7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICAgICAgICB0aGlzLml0ZW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgaXNGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsIHR5cGUucHJvdG90eXBlKTtcbiAgICB9XG4gcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpdGVtKTtcbiAgICAgICAgbGV0IHBhcmVudFNjb3BlO1xuICAgICAgICBpZiAoaXNJQ2hhcnRDb21wb25lbnQocHJvdG8pKSB7XG4gICAgICAgICAgICBwYXJlbnRTY29wZSA9IHRoaXMucmVnaXN0ZXIocHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUgKyAnLicgKyBpZDtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGFzcyBkb2VzIG5vdCBoYXZlIGlkOiAnICsgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkIGluIGl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGU7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaWRdID0gaXRlbTtcbiAgICAgICAgcmVnaXN0ZXJEZWZhdWx0cyhpdGVtLCBzY29wZSwgcGFyZW50U2NvcGUpO1xuICAgICAgICBpZiAodGhpcy5vdmVycmlkZSkge1xuICAgICAgICAgICAgZGVmYXVsdHMub3ZlcnJpZGUoaXRlbS5pZCwgaXRlbS5vdmVycmlkZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZTtcbiAgICB9XG4gZ2V0KGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2lkXTtcbiAgICB9XG4gdW5yZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIGlmIChpZCBpbiBpdGVtcykge1xuICAgICAgICAgICAgZGVsZXRlIGl0ZW1zW2lkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NvcGUgJiYgaWQgaW4gZGVmYXVsdHNbc2NvcGVdKSB7XG4gICAgICAgICAgICBkZWxldGUgZGVmYXVsdHNbc2NvcGVdW2lkXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG92ZXJyaWRlc1tpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRzKGl0ZW0sIHNjb3BlLCBwYXJlbnRTY29wZSkge1xuICAgIGNvbnN0IGl0ZW1EZWZhdWx0cyA9IG1lcmdlKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgcGFyZW50U2NvcGUgPyBkZWZhdWx0cy5nZXQocGFyZW50U2NvcGUpIDoge30sXG4gICAgICAgIGRlZmF1bHRzLmdldChzY29wZSksXG4gICAgICAgIGl0ZW0uZGVmYXVsdHNcbiAgICBdKTtcbiAgICBkZWZhdWx0cy5zZXQoc2NvcGUsIGl0ZW1EZWZhdWx0cyk7XG4gICAgaWYgKGl0ZW0uZGVmYXVsdFJvdXRlcykge1xuICAgICAgICByb3V0ZURlZmF1bHRzKHNjb3BlLCBpdGVtLmRlZmF1bHRSb3V0ZXMpO1xuICAgIH1cbiAgICBpZiAoaXRlbS5kZXNjcmlwdG9ycykge1xuICAgICAgICBkZWZhdWx0cy5kZXNjcmliZShzY29wZSwgaXRlbS5kZXNjcmlwdG9ycyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcm91dGVEZWZhdWx0cyhzY29wZSwgcm91dGVzKSB7XG4gICAgT2JqZWN0LmtleXMocm91dGVzKS5mb3JFYWNoKChwcm9wZXJ0eSk9PntcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYXJ0cyA9IHByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBwcm9wZXJ0eVBhcnRzLnBvcCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VTY29wZSA9IFtcbiAgICAgICAgICAgIHNjb3BlXG4gICAgICAgIF0uY29uY2F0KHByb3BlcnR5UGFydHMpLmpvaW4oJy4nKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSByb3V0ZXNbcHJvcGVydHldLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NvcGUgPSBwYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgIGRlZmF1bHRzLnJvdXRlKHNvdXJjZVNjb3BlLCBzb3VyY2VOYW1lLCB0YXJnZXRTY29wZSwgdGFyZ2V0TmFtZSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc0lDaGFydENvbXBvbmVudChwcm90bykge1xuICAgIHJldHVybiAnaWQnIGluIHByb3RvICYmICdkZWZhdWx0cycgaW4gcHJvdG87XG59XG5cbmNsYXNzIFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzID0gbmV3IFR5cGVkUmVnaXN0cnkoRGF0YXNldENvbnRyb2xsZXIsICdkYXRhc2V0cycsIHRydWUpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IFR5cGVkUmVnaXN0cnkoRWxlbWVudCwgJ2VsZW1lbnRzJyk7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG5ldyBUeXBlZFJlZ2lzdHJ5KE9iamVjdCwgJ3BsdWdpbnMnKTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSBuZXcgVHlwZWRSZWdpc3RyeShTY2FsZSwgJ3NjYWxlcycpO1xuICAgICAgICB0aGlzLl90eXBlZFJlZ2lzdHJpZXMgPSBbXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgdGhpcy5zY2FsZXMsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzXG4gICAgICAgIF07XG4gICAgfVxuIGFkZCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncyk7XG4gICAgfVxuICAgIHJlbW92ZSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzKTtcbiAgICB9XG4gYWRkQ29udHJvbGxlcnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiBhZGRFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5lbGVtZW50cyk7XG4gICAgfVxuIGFkZFBsdWdpbnMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCdyZWdpc3RlcicsIGFyZ3MsIHRoaXMucGx1Z2lucyk7XG4gICAgfVxuIGFkZFNjYWxlcyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3JlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBnZXRDb250cm9sbGVyKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMuY29udHJvbGxlcnMsICdjb250cm9sbGVyJyk7XG4gICAgfVxuIGdldEVsZW1lbnQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldChpZCwgdGhpcy5lbGVtZW50cywgJ2VsZW1lbnQnKTtcbiAgICB9XG4gZ2V0UGx1Z2luKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXQoaWQsIHRoaXMucGx1Z2lucywgJ3BsdWdpbicpO1xuICAgIH1cbiBnZXRTY2FsZShpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCB0aGlzLnNjYWxlcywgJ3NjYWxlJyk7XG4gICAgfVxuIHJlbW92ZUNvbnRyb2xsZXJzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5fZWFjaCgndW5yZWdpc3RlcicsIGFyZ3MsIHRoaXMuY29udHJvbGxlcnMpO1xuICAgIH1cbiByZW1vdmVFbGVtZW50cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLmVsZW1lbnRzKTtcbiAgICB9XG4gcmVtb3ZlUGx1Z2lucyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2VhY2goJ3VucmVnaXN0ZXInLCBhcmdzLCB0aGlzLnBsdWdpbnMpO1xuICAgIH1cbiByZW1vdmVTY2FsZXMoLi4uYXJncykge1xuICAgICAgICB0aGlzLl9lYWNoKCd1bnJlZ2lzdGVyJywgYXJncywgdGhpcy5zY2FsZXMpO1xuICAgIH1cbiBfZWFjaChtZXRob2QsIGFyZ3MsIHR5cGVkUmVnaXN0cnkpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICBdLmZvckVhY2goKGFyZyk9PntcbiAgICAgICAgICAgIGNvbnN0IHJlZyA9IHR5cGVkUmVnaXN0cnkgfHwgdGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZWRSZWdpc3RyeSB8fCByZWcuaXNGb3JUeXBlKGFyZykgfHwgcmVnID09PSB0aGlzLnBsdWdpbnMgJiYgYXJnLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXhlYyhtZXRob2QsIHJlZywgYXJnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWFjaChhcmcsIChpdGVtKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUmVnID0gdHlwZWRSZWdpc3RyeSB8fCB0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4ZWMobWV0aG9kLCBpdGVtUmVnLCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuIF9leGVjKG1ldGhvZCwgcmVnaXN0cnksIGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjYW1lbE1ldGhvZCA9IF9jYXBpdGFsaXplKG1ldGhvZCk7XG4gICAgICAgIGNhbGxiYWNrKGNvbXBvbmVudFsnYmVmb3JlJyArIGNhbWVsTWV0aG9kXSwgW10sIGNvbXBvbmVudCk7XG4gICAgICAgIHJlZ2lzdHJ5W21ldGhvZF0oY29tcG9uZW50KTtcbiAgICAgICAgY2FsbGJhY2soY29tcG9uZW50WydhZnRlcicgKyBjYW1lbE1ldGhvZF0sIFtdLCBjb21wb25lbnQpO1xuICAgIH1cbiBfZ2V0UmVnaXN0cnlGb3JUeXBlKHR5cGUpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCByZWcgPSB0aGlzLl90eXBlZFJlZ2lzdHJpZXNbaV07XG4gICAgICAgICAgICBpZiAocmVnLmlzRm9yVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2lucztcbiAgICB9XG4gX2dldChpZCwgdHlwZWRSZWdpc3RyeSwgdHlwZSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdHlwZWRSZWdpc3RyeS5nZXQoaWQpO1xuICAgICAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGlkICsgJ1wiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgJyArIHR5cGUgKyAnLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbn1cbnZhciByZWdpc3RyeSA9IC8qICNfX1BVUkVfXyAqLyBuZXcgUmVnaXN0cnkoKTtcblxuY2xhc3MgUGx1Z2luU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5faW5pdCA9IFtdO1xuICAgIH1cbiBub3RpZnkoY2hhcnQsIGhvb2ssIGFyZ3MsIGZpbHRlcikge1xuICAgICAgICBpZiAoaG9vayA9PT0gJ2JlZm9yZUluaXQnKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0ID0gdGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAnaW5zdGFsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gZmlsdGVyID8gdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpLmZpbHRlcihmaWx0ZXIpIDogdGhpcy5fZGVzY3JpcHRvcnMoY2hhcnQpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCBob29rLCBhcmdzKTtcbiAgICAgICAgaWYgKGhvb2sgPT09ICdhZnRlckRlc3Ryb3knKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoZGVzY3JpcHRvcnMsIGNoYXJ0LCAnc3RvcCcpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsIGNoYXJ0LCAndW5pbnN0YWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gX25vdGlmeShkZXNjcmlwdG9ycywgY2hhcnQsIGhvb2ssIGFyZ3MpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9ycyl7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSBkZXNjcmlwdG9yLnBsdWdpbjtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHBsdWdpbltob29rXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAgICAgICBjaGFydCxcbiAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iub3B0aW9uc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhtZXRob2QsIHBhcmFtcywgcGx1Z2luKSA9PT0gZmFsc2UgJiYgYXJncy5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYodGhpcy5fY2FjaGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9vbGRDYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gX2Rlc2NyaXB0b3JzKGNoYXJ0KSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gdGhpcy5fY2FjaGUgPSB0aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhjaGFydCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhjaGFydCk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgICB9XG4gICAgX2NyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCBhbGwpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2hhcnQgJiYgY2hhcnQuY29uZmlnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVPckRlZmF1bHQoY29uZmlnLm9wdGlvbnMgJiYgY29uZmlnLm9wdGlvbnMucGx1Z2lucywge30pO1xuICAgICAgICBjb25zdCBwbHVnaW5zID0gYWxsUGx1Z2lucyhjb25maWcpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gZmFsc2UgJiYgIWFsbCA/IFtdIDogY3JlYXRlRGVzY3JpcHRvcnMoY2hhcnQsIHBsdWdpbnMsIG9wdGlvbnMsIGFsbCk7XG4gICAgfVxuIF9ub3RpZnlTdGF0ZUNoYW5nZXMoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNEZXNjcmlwdG9ycyA9IHRoaXMuX29sZENhY2hlIHx8IFtdO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuX2NhY2hlO1xuICAgICAgICBjb25zdCBkaWZmID0gKGEsIGIpPT5hLmZpbHRlcigoeCk9PiFiLnNvbWUoKHkpPT54LnBsdWdpbi5pZCA9PT0geS5wbHVnaW4uaWQpKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYocHJldmlvdXNEZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0b3AnKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5KGRpZmYoZGVzY3JpcHRvcnMsIHByZXZpb3VzRGVzY3JpcHRvcnMpLCBjaGFydCwgJ3N0YXJ0Jyk7XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFsbFBsdWdpbnMoY29uZmlnKSB7XG4gICAgY29uc3QgbG9jYWxJZHMgPSB7fTtcbiAgICBjb25zdCBwbHVnaW5zID0gW107XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlZ2lzdHJ5LnBsdWdpbnMuaXRlbXMpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgcGx1Z2lucy5wdXNoKHJlZ2lzdHJ5LmdldFBsdWdpbihrZXlzW2ldKSk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsID0gY29uZmlnLnBsdWdpbnMgfHwgW107XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxvY2FsLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gbG9jYWxbaV07XG4gICAgICAgIGlmIChwbHVnaW5zLmluZGV4T2YocGx1Z2luKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBsdWdpbnMucHVzaChwbHVnaW4pO1xuICAgICAgICAgICAgbG9jYWxJZHNbcGx1Z2luLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGx1Z2lucyxcbiAgICAgICAgbG9jYWxJZHNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0T3B0cyhvcHRpb25zLCBhbGwpIHtcbiAgICBpZiAoIWFsbCAmJiBvcHRpb25zID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0b3JzKGNoYXJ0LCB7IHBsdWdpbnMgLCBsb2NhbElkcyAgfSwgb3B0aW9ucywgYWxsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgY29udGV4dCA9IGNoYXJ0LmdldENvbnRleHQoKTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKXtcbiAgICAgICAgY29uc3QgaWQgPSBwbHVnaW4uaWQ7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBnZXRPcHRzKG9wdGlvbnNbaWRdLCBhbGwpO1xuICAgICAgICBpZiAob3B0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgcGx1Z2luLFxuICAgICAgICAgICAgb3B0aW9uczogcGx1Z2luT3B0cyhjaGFydC5jb25maWcsIHtcbiAgICAgICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICAgICAgbG9jYWw6IGxvY2FsSWRzW2lkXVxuICAgICAgICAgICAgfSwgb3B0cywgY29udGV4dClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwbHVnaW5PcHRzKGNvbmZpZywgeyBwbHVnaW4gLCBsb2NhbCAgfSwgb3B0cywgY29udGV4dCkge1xuICAgIGNvbnN0IGtleXMgPSBjb25maWcucGx1Z2luU2NvcGVLZXlzKHBsdWdpbik7XG4gICAgY29uc3Qgc2NvcGVzID0gY29uZmlnLmdldE9wdGlvblNjb3BlcyhvcHRzLCBrZXlzKTtcbiAgICBpZiAobG9jYWwgJiYgcGx1Z2luLmRlZmF1bHRzKSB7XG4gICAgICAgIHNjb3Blcy5wdXNoKHBsdWdpbi5kZWZhdWx0cyk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBbXG4gICAgICAgICcnXG4gICAgXSwge1xuICAgICAgICBzY3JpcHRhYmxlOiBmYWxzZSxcbiAgICAgICAgaW5kZXhhYmxlOiBmYWxzZSxcbiAgICAgICAgYWxsS2V5czogdHJ1ZVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IGRlZmF1bHRzLmRhdGFzZXRzW3R5cGVdIHx8IHt9O1xuICAgIGNvbnN0IGRhdGFzZXRPcHRpb25zID0gKG9wdGlvbnMuZGF0YXNldHMgfHwge30pW3R5cGVdIHx8IHt9O1xuICAgIHJldHVybiBkYXRhc2V0T3B0aW9ucy5pbmRleEF4aXMgfHwgb3B0aW9ucy5pbmRleEF4aXMgfHwgZGF0YXNldERlZmF1bHRzLmluZGV4QXhpcyB8fCAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGlkLCBpbmRleEF4aXMpIHtcbiAgICBsZXQgYXhpcyA9IGlkO1xuICAgIGlmIChpZCA9PT0gJ19pbmRleF8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXM7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gJ192YWx1ZV8nKSB7XG4gICAgICAgIGF4aXMgPSBpbmRleEF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICB9XG4gICAgcmV0dXJuIGF4aXM7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzKGF4aXMsIGluZGV4QXhpcykge1xuICAgIHJldHVybiBheGlzID09PSBpbmRleEF4aXMgPyAnX2luZGV4XycgOiAnX3ZhbHVlXyc7XG59XG5mdW5jdGlvbiBpZE1hdGNoZXNBeGlzKGlkKSB7XG4gICAgaWYgKGlkID09PSAneCcgfHwgaWQgPT09ICd5JyB8fCBpZCA9PT0gJ3InKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG59XG5mdW5jdGlvbiBheGlzRnJvbVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgcmV0dXJuICd4JztcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcgfHwgcG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmV0dXJuICd5JztcbiAgICB9XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVBeGlzKGlkLCAuLi5zY2FsZU9wdGlvbnMpIHtcbiAgICBpZiAoaWRNYXRjaGVzQXhpcyhpZCkpIHtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdHMgb2Ygc2NhbGVPcHRpb25zKXtcbiAgICAgICAgY29uc3QgYXhpcyA9IG9wdHMuYXhpcyB8fCBheGlzRnJvbVBvc2l0aW9uKG9wdHMucG9zaXRpb24pIHx8IGlkLmxlbmd0aCA+IDEgJiYgaWRNYXRjaGVzQXhpcyhpZFswXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGF4aXMpIHtcbiAgICAgICAgICAgIHJldHVybiBheGlzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0eXBlIG9mICcke2lkfScgYXhpcy4gUGxlYXNlIHByb3ZpZGUgJ2F4aXMnIG9yICdwb3NpdGlvbicgb3B0aW9uLmApO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCBheGlzLCBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRbYXhpcyArICdBeGlzSUQnXSA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF4aXNcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMoaWQsIGNvbmZpZykge1xuICAgIGlmIChjb25maWcuZGF0YSAmJiBjb25maWcuZGF0YS5kYXRhc2V0cykge1xuICAgICAgICBjb25zdCBib3VuZERzID0gY29uZmlnLmRhdGEuZGF0YXNldHMuZmlsdGVyKChkKT0+ZC54QXhpc0lEID09PSBpZCB8fCBkLnlBeGlzSUQgPT09IGlkKTtcbiAgICAgICAgaWYgKGJvdW5kRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXhpc0Zyb21EYXRhc2V0KGlkLCAneCcsIGJvdW5kRHNbMF0pIHx8IGdldEF4aXNGcm9tRGF0YXNldChpZCwgJ3knLCBib3VuZERzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG59XG5mdW5jdGlvbiBtZXJnZVNjYWxlQ29uZmlnKGNvbmZpZywgb3B0aW9ucykge1xuICAgIGNvbnN0IGNoYXJ0RGVmYXVsdHMgPSBvdmVycmlkZXNbY29uZmlnLnR5cGVdIHx8IHtcbiAgICAgICAgc2NhbGVzOiB7fVxuICAgIH07XG4gICAgY29uc3QgY29uZmlnU2NhbGVzID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgY29uc3QgY2hhcnRJbmRleEF4aXMgPSBnZXRJbmRleEF4aXMoY29uZmlnLnR5cGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHNjYWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnU2NhbGVzKS5mb3JFYWNoKChpZCk9PntcbiAgICAgICAgY29uc3Qgc2NhbGVDb25mID0gY29uZmlnU2NhbGVzW2lkXTtcbiAgICAgICAgaWYgKCFpc09iamVjdChzY2FsZUNvbmYpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBzY2FsZSBjb25maWd1cmF0aW9uIGZvciBzY2FsZTogJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NhbGVDb25mLl9wcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke2lkfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF4aXMgPSBkZXRlcm1pbmVBeGlzKGlkLCBzY2FsZUNvbmYsIHJldHJpZXZlQXhpc0Zyb21EYXRhc2V0cyhpZCwgY29uZmlnKSwgZGVmYXVsdHMuc2NhbGVzW3NjYWxlQ29uZi50eXBlXSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJZCA9IGdldERlZmF1bHRTY2FsZUlERnJvbUF4aXMoYXhpcywgY2hhcnRJbmRleEF4aXMpO1xuICAgICAgICBjb25zdCBkZWZhdWx0U2NhbGVPcHRpb25zID0gY2hhcnREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIHNjYWxlc1tpZF0gPSBtZXJnZUlmKE9iamVjdC5jcmVhdGUobnVsbCksIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2NhbGVDb25mLFxuICAgICAgICAgICAgZGVmYXVsdFNjYWxlT3B0aW9uc1theGlzXSxcbiAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElkXVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICBjb25maWcuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YXNldC50eXBlIHx8IGNvbmZpZy50eXBlO1xuICAgICAgICBjb25zdCBpbmRleEF4aXMgPSBkYXRhc2V0LmluZGV4QXhpcyB8fCBnZXRJbmRleEF4aXModHlwZSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXREZWZhdWx0cyA9IG92ZXJyaWRlc1t0eXBlXSB8fCB7fTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFNjYWxlT3B0aW9ucyA9IGRhdGFzZXREZWZhdWx0cy5zY2FsZXMgfHwge307XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTY2FsZU9wdGlvbnMpLmZvckVhY2goKGRlZmF1bHRJRCk9PntcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEKGRlZmF1bHRJRCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZGF0YXNldFtheGlzICsgJ0F4aXNJRCddIHx8IGF4aXM7XG4gICAgICAgICAgICBzY2FsZXNbaWRdID0gc2NhbGVzW2lkXSB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgbWVyZ2VJZihzY2FsZXNbaWRdLCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBheGlzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25maWdTY2FsZXNbaWRdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRTY2FsZU9wdGlvbnNbZGVmYXVsdElEXVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIE9iamVjdC5rZXlzKHNjYWxlcykuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBzY2FsZSA9IHNjYWxlc1trZXldO1xuICAgICAgICBtZXJnZUlmKHNjYWxlLCBbXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZXNbc2NhbGUudHlwZV0sXG4gICAgICAgICAgICBkZWZhdWx0cy5zY2FsZVxuICAgICAgICBdKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2NhbGVzO1xufVxuZnVuY3Rpb24gaW5pdE9wdGlvbnMoY29uZmlnKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zIHx8IChjb25maWcub3B0aW9ucyA9IHt9KTtcbiAgICBvcHRpb25zLnBsdWdpbnMgPSB2YWx1ZU9yRGVmYXVsdChvcHRpb25zLnBsdWdpbnMsIHt9KTtcbiAgICBvcHRpb25zLnNjYWxlcyA9IG1lcmdlU2NhbGVDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGluaXREYXRhKGRhdGEpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLmRhdGFzZXRzID0gZGF0YS5kYXRhc2V0cyB8fCBbXTtcbiAgICBkYXRhLmxhYmVscyA9IGRhdGEubGFiZWxzIHx8IFtdO1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gaW5pdENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgY29uZmlnLmRhdGEgPSBpbml0RGF0YShjb25maWcuZGF0YSk7XG4gICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuY29uc3Qga2V5Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBrZXlzQ2FjaGVkID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gY2FjaGVkS2V5cyhjYWNoZUtleSwgZ2VuZXJhdGUpIHtcbiAgICBsZXQga2V5cyA9IGtleUNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKCFrZXlzKSB7XG4gICAgICAgIGtleXMgPSBnZW5lcmF0ZSgpO1xuICAgICAgICBrZXlDYWNoZS5zZXQoY2FjaGVLZXksIGtleXMpO1xuICAgICAgICBrZXlzQ2FjaGVkLmFkZChrZXlzKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG5jb25zdCBhZGRJZkZvdW5kID0gKHNldCwgb2JqLCBrZXkpPT57XG4gICAgY29uc3Qgb3B0cyA9IHJlc29sdmVPYmplY3RLZXkob2JqLCBrZXkpO1xuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0LmFkZChvcHRzKTtcbiAgICB9XG59O1xuY2xhc3MgQ29uZmlnIHtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICB0aGlzLl9jb25maWcgPSBpbml0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3Njb3BlQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmVyQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldCBwbGF0Zm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5wbGF0Zm9ybTtcbiAgICB9XG4gICAgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcudHlwZTtcbiAgICB9XG4gICAgc2V0IHR5cGUodHlwZSkge1xuICAgICAgICB0aGlzLl9jb25maWcudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGE7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLmRhdGEgPSBpbml0RGF0YShkYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcub3B0aW9ucztcbiAgICB9XG4gICAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBwbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnBsdWdpbnM7XG4gICAgfVxuICAgIHVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29uZmlnO1xuICAgICAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgICAgICAgaW5pdE9wdGlvbnMoY29uZmlnKTtcbiAgICB9XG4gICAgY2xlYXJDYWNoZSgpIHtcbiAgICAgICAgdGhpcy5fc2NvcGVDYWNoZS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCk7XG4gICAgfVxuIGRhdGFzZXRTY29wZUtleXMoZGF0YXNldFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZEtleXMoZGF0YXNldFR5cGUsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKGRhdGFzZXRUeXBlLCB0cmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS50cmFuc2l0aW9uLiR7dHJhbnNpdGlvbn1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9LnRyYW5zaXRpb25zLiR7dHJhbnNpdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBgdHJhbnNpdGlvbnMuJHt0cmFuc2l0aW9ufWBcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYGRhdGFzZXRzLiR7ZGF0YXNldFR5cGV9YCxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdKTtcbiAgICB9XG4gZGF0YXNldEVsZW1lbnRTY29wZUtleXMoZGF0YXNldFR5cGUsIGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRLZXlzKGAke2RhdGFzZXRUeXBlfS0ke2VsZW1lbnRUeXBlfWAsICgpPT5bXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX0uZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZGF0YXNldHMuJHtkYXRhc2V0VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICBgZWxlbWVudHMuJHtlbGVtZW50VHlwZX1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBwbHVnaW5TY29wZUtleXMocGx1Z2luKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGx1Z2luLmlkO1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICByZXR1cm4gY2FjaGVkS2V5cyhgJHt0eXBlfS1wbHVnaW4tJHtpZH1gLCAoKT0+W1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYHBsdWdpbnMuJHtpZH1gLFxuICAgICAgICAgICAgICAgICAgICAuLi5wbHVnaW4uYWRkaXRpb25hbE9wdGlvblNjb3BlcyB8fCBbXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pO1xuICAgIH1cbiBfY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSkge1xuICAgICAgICBjb25zdCBfc2NvcGVDYWNoZSA9IHRoaXMuX3Njb3BlQ2FjaGU7XG4gICAgICAgIGxldCBjYWNoZSA9IF9zY29wZUNhY2hlLmdldChtYWluU2NvcGUpO1xuICAgICAgICBpZiAoIWNhY2hlIHx8IHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgX3Njb3BlQ2FjaGUuc2V0KG1haW5TY29wZSwgY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gZ2V0T3B0aW9uU2NvcGVzKG1haW5TY29wZSwga2V5TGlzdHMsIHJlc2V0Q2FjaGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fY2FjaGVkU2NvcGVzKG1haW5TY29wZSwgcmVzZXRDYWNoZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChrZXlMaXN0cyk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NvcGVzID0gbmV3IFNldCgpO1xuICAgICAgICBrZXlMaXN0cy5mb3JFYWNoKChrZXlzKT0+e1xuICAgICAgICAgICAgaWYgKG1haW5TY29wZSkge1xuICAgICAgICAgICAgICAgIHNjb3Blcy5hZGQobWFpblNjb3BlKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBtYWluU2NvcGUsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3Blcywgb3B0aW9ucywga2V5KSk7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PmFkZElmRm91bmQoc2NvcGVzLCBvdmVycmlkZXNbdHlwZV0gfHwge30sIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVmYXVsdHMsIGtleSkpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT5hZGRJZkZvdW5kKHNjb3BlcywgZGVzY3JpcHRvcnMsIGtleSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBBcnJheS5mcm9tKHNjb3Blcyk7XG4gICAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXNDYWNoZWQuaGFzKGtleUxpc3RzKSkge1xuICAgICAgICAgICAgY2FjaGUuc2V0KGtleUxpc3RzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbiBjaGFydE9wdGlvblNjb3BlcygpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zICwgdHlwZSAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3ZlcnJpZGVzW3R5cGVdIHx8IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMuZGF0YXNldHNbdHlwZV0gfHwge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgZGVzY3JpcHRvcnNcbiAgICAgICAgXTtcbiAgICB9XG4gcmVzb2x2ZU5hbWVkT3B0aW9ucyhzY29wZXMsIG5hbWVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICRzaGFyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAsIHN1YlByZWZpeGVzICB9ID0gZ2V0UmVzb2x2ZXIodGhpcy5fcmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcyk7XG4gICAgICAgIGxldCBvcHRpb25zID0gcmVzb2x2ZXI7XG4gICAgICAgIGlmIChuZWVkQ29udGV4dChyZXNvbHZlciwgbmFtZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuJHNoYXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udGV4dCA9IGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiBjb250ZXh0O1xuICAgICAgICAgICAgY29uc3Qgc3ViUmVzb2x2ZXIgPSB0aGlzLmNyZWF0ZVJlc29sdmVyKHNjb3BlcywgY29udGV4dCwgc3ViUHJlZml4ZXMpO1xuICAgICAgICAgICAgb3B0aW9ucyA9IF9hdHRhY2hDb250ZXh0KHJlc29sdmVyLCBjb250ZXh0LCBzdWJSZXNvbHZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIG5hbWVzKXtcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gY3JlYXRlUmVzb2x2ZXIoc2NvcGVzLCBjb250ZXh0LCBwcmVmaXhlcyA9IFtcbiAgICAgICAgJydcbiAgICBdLCBkZXNjcmlwdG9yRGVmYXVsdHMpIHtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlciAgfSA9IGdldFJlc29sdmVyKHRoaXMuX3Jlc29sdmVyQ2FjaGUsIHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoY29udGV4dCkgPyBfYXR0YWNoQ29udGV4dChyZXNvbHZlciwgY29udGV4dCwgdW5kZWZpbmVkLCBkZXNjcmlwdG9yRGVmYXVsdHMpIDogcmVzb2x2ZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVzb2x2ZXIocmVzb2x2ZXJDYWNoZSwgc2NvcGVzLCBwcmVmaXhlcykge1xuICAgIGxldCBjYWNoZSA9IHJlc29sdmVyQ2FjaGUuZ2V0KHNjb3Blcyk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmVzb2x2ZXJDYWNoZS5zZXQoc2NvcGVzLCBjYWNoZSk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJlZml4ZXMuam9pbigpO1xuICAgIGxldCBjYWNoZWQgPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gX2NyZWF0ZVJlc29sdmVyKHNjb3BlcywgcHJlZml4ZXMpO1xuICAgICAgICBjYWNoZWQgPSB7XG4gICAgICAgICAgICByZXNvbHZlcixcbiAgICAgICAgICAgIHN1YlByZWZpeGVzOiBwcmVmaXhlcy5maWx0ZXIoKHApPT4hcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdob3ZlcicpKVxuICAgICAgICB9O1xuICAgICAgICBjYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQ7XG59XG5jb25zdCBoYXNGdW5jdGlvbiA9ICh2YWx1ZSk9PmlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSkuc29tZSgoa2V5KT0+aXNGdW5jdGlvbih2YWx1ZVtrZXldKSk7XG5mdW5jdGlvbiBuZWVkQ29udGV4dChwcm94eSwgbmFtZXMpIHtcbiAgICBjb25zdCB7IGlzU2NyaXB0YWJsZSAsIGlzSW5kZXhhYmxlICB9ID0gX2Rlc2NyaXB0b3JzKHByb3h5KTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgbmFtZXMpe1xuICAgICAgICBjb25zdCBzY3JpcHRhYmxlID0gaXNTY3JpcHRhYmxlKHByb3ApO1xuICAgICAgICBjb25zdCBpbmRleGFibGUgPSBpc0luZGV4YWJsZShwcm9wKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoaW5kZXhhYmxlIHx8IHNjcmlwdGFibGUpICYmIHByb3h5W3Byb3BdO1xuICAgICAgICBpZiAoc2NyaXB0YWJsZSAmJiAoaXNGdW5jdGlvbih2YWx1ZSkgfHwgaGFzRnVuY3Rpb24odmFsdWUpKSB8fCBpbmRleGFibGUgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjQuNC40XCI7XG5cbmNvbnN0IEtOT1dOX1BPU0lUSU9OUyA9IFtcbiAgICAndG9wJyxcbiAgICAnYm90dG9tJyxcbiAgICAnbGVmdCcsXG4gICAgJ3JpZ2h0JyxcbiAgICAnY2hhcnRBcmVhJ1xuXTtcbmZ1bmN0aW9uIHBvc2l0aW9uSXNIb3Jpem9udGFsKHBvc2l0aW9uLCBheGlzKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uID09PSAndG9wJyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbScgfHwgS05PV05fUE9TSVRJT05TLmluZGV4T2YocG9zaXRpb24pID09PSAtMSAmJiBheGlzID09PSAneCc7XG59XG5mdW5jdGlvbiBjb21wYXJlMkxldmVsKGwxLCBsMikge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2wxXSA9PT0gYltsMV0gPyBhW2wyXSAtIGJbbDJdIDogYVtsMV0gLSBiW2wxXTtcbiAgICB9O1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25zQ29tcGxldGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNoYXJ0ID0gY29udGV4dC5jaGFydDtcbiAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gY2hhcnQub3B0aW9ucy5hbmltYXRpb247XG4gICAgY2hhcnQubm90aWZ5UGx1Z2lucygnYWZ0ZXJSZW5kZXInKTtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Db21wbGV0ZSwgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuZnVuY3Rpb24gb25BbmltYXRpb25Qcm9ncmVzcyhjb250ZXh0KSB7XG4gICAgY29uc3QgY2hhcnQgPSBjb250ZXh0LmNoYXJ0O1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSBjaGFydC5vcHRpb25zLmFuaW1hdGlvbjtcbiAgICBjYWxsYmFjayhhbmltYXRpb25PcHRpb25zICYmIGFuaW1hdGlvbk9wdGlvbnMub25Qcm9ncmVzcywgW1xuICAgICAgICBjb250ZXh0XG4gICAgXSwgY2hhcnQpO1xufVxuIGZ1bmN0aW9uIGdldENhbnZhcyhpdGVtKSB7XG4gICAgaWYgKF9pc0RvbVN1cHBvcnRlZCgpICYmIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbSk7XG4gICAgfSBlbHNlIGlmIChpdGVtICYmIGl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgIGl0ZW0gPSBpdGVtWzBdO1xuICAgIH1cbiAgICBpZiAoaXRlbSAmJiBpdGVtLmNhbnZhcykge1xuICAgICAgICBpdGVtID0gaXRlbS5jYW52YXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xufVxuY29uc3QgaW5zdGFuY2VzID0ge307XG5jb25zdCBnZXRDaGFydCA9IChrZXkpPT57XG4gICAgY29uc3QgY2FudmFzID0gZ2V0Q2FudmFzKGtleSk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaW5zdGFuY2VzKS5maWx0ZXIoKGMpPT5jLmNhbnZhcyA9PT0gY2FudmFzKS5wb3AoKTtcbn07XG5mdW5jdGlvbiBtb3ZlTnVtZXJpY0tleXMob2JqLCBzdGFydCwgbW92ZSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpe1xuICAgICAgICBjb25zdCBpbnRLZXkgPSAra2V5O1xuICAgICAgICBpZiAoaW50S2V5ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKG1vdmUgPiAwIHx8IGludEtleSA+IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgb2JqW2ludEtleSArIG1vdmVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTGFzdEV2ZW50KGUsIGxhc3RFdmVudCwgaW5DaGFydEFyZWEsIGlzQ2xpY2spIHtcbiAgICBpZiAoIWluQ2hhcnRBcmVhIHx8IGUudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGlzQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuIGxhc3RFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBnZXRTaXplRm9yQXJlYShzY2FsZSwgY2hhcnRBcmVhLCBmaWVsZCkge1xuICAgIHJldHVybiBzY2FsZS5vcHRpb25zLmNsaXAgPyBzY2FsZVtmaWVsZF0gOiBjaGFydEFyZWFbZmllbGRdO1xufVxuZnVuY3Rpb24gZ2V0RGF0YXNldEFyZWEobWV0YSwgY2hhcnRBcmVhKSB7XG4gICAgY29uc3QgeyB4U2NhbGUgLCB5U2NhbGUgIH0gPSBtZXRhO1xuICAgIGlmICh4U2NhbGUgJiYgeVNjYWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ2xlZnQnKSxcbiAgICAgICAgICAgIHJpZ2h0OiBnZXRTaXplRm9yQXJlYSh4U2NhbGUsIGNoYXJ0QXJlYSwgJ3JpZ2h0JyksXG4gICAgICAgICAgICB0b3A6IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAndG9wJyksXG4gICAgICAgICAgICBib3R0b206IGdldFNpemVGb3JBcmVhKHlTY2FsZSwgY2hhcnRBcmVhLCAnYm90dG9tJylcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJ0QXJlYTtcbn1cbmNsYXNzIENoYXJ0IHtcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBzdGF0aWMgaW5zdGFuY2VzID0gaW5zdGFuY2VzO1xuICAgIHN0YXRpYyBvdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgc3RhdGljIHJlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gICAgc3RhdGljIHZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHN0YXRpYyBnZXRDaGFydCA9IGdldENoYXJ0O1xuICAgIHN0YXRpYyByZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5hZGQoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBzdGF0aWMgdW5yZWdpc3RlciguLi5pdGVtcykge1xuICAgICAgICByZWdpc3RyeS5yZW1vdmUoLi4uaXRlbXMpO1xuICAgICAgICBpbnZhbGlkYXRlUGx1Z2lucygpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihpdGVtLCB1c2VyQ29uZmlnKXtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcgPSBuZXcgQ29uZmlnKHVzZXJDb25maWcpO1xuICAgICAgICBjb25zdCBpbml0aWFsQ2FudmFzID0gZ2V0Q2FudmFzKGl0ZW0pO1xuICAgICAgICBjb25zdCBleGlzdGluZ0NoYXJ0ID0gZ2V0Q2hhcnQoaW5pdGlhbENhbnZhcyk7XG4gICAgICAgIGlmIChleGlzdGluZ0NoYXJ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbnZhcyBpcyBhbHJlYWR5IGluIHVzZS4gQ2hhcnQgd2l0aCBJRCBcXCcnICsgZXhpc3RpbmdDaGFydC5pZCArICdcXCcnICsgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEIFxcJycgKyBleGlzdGluZ0NoYXJ0LmNhbnZhcy5pZCArICdcXCcgY2FuIGJlIHJldXNlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gY29uZmlnLmNyZWF0ZVJlc29sdmVyKGNvbmZpZy5jaGFydE9wdGlvblNjb3BlcygpLCB0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBuZXcgKGNvbmZpZy5wbGF0Zm9ybSB8fCBfZGV0ZWN0UGxhdGZvcm0oaW5pdGlhbENhbnZhcykpKCk7XG4gICAgICAgIHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KGluaXRpYWxDYW52YXMsIG9wdGlvbnMuYXNwZWN0UmF0aW8pO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjb250ZXh0ICYmIGNvbnRleHQuY2FudmFzO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXMgJiYgY2FudmFzLmhlaWdodDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMgJiYgY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgIHRoaXMuY3R4ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLl9hc3BlY3RSYXRpbyA9IHRoaXMuYXNwZWN0UmF0aW87XG4gICAgICAgIHRoaXMuX2xheWVycyA9IFtdO1xuICAgICAgICB0aGlzLl9tZXRhc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLl9zdGFja3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm94ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jaGFydEFyZWEgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IFtdO1xuICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5zY2FsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGx1Z2lucyA9IG5ldyBQbHVnaW5TZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuJHByb3hpZXMgPSB7fTtcbiAgICAgICAgdGhpcy5faGlkZGVuSW5kaWNlcyA9IHt9O1xuICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZG9SZXNpemUgPSBkZWJvdW5jZSgobW9kZSk9PnRoaXMudXBkYXRlKG1vZGUpLCBvcHRpb25zLnJlc2l6ZURlbGF5IHx8IDApO1xuICAgICAgICB0aGlzLl9kYXRhQ2hhbmdlcyA9IFtdO1xuICAgICAgICBpbnN0YW5jZXNbdGhpcy5pZF0gPSB0aGlzO1xuICAgICAgICBpZiAoIWNvbnRleHQgfHwgIWNhbnZhcykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAnY29tcGxldGUnLCBvbkFuaW1hdGlvbnNDb21wbGV0ZSk7XG4gICAgICAgIGFuaW1hdG9yLmxpc3Rlbih0aGlzLCAncHJvZ3Jlc3MnLCBvbkFuaW1hdGlvblByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYXNwZWN0UmF0aW8oKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogeyBhc3BlY3RSYXRpbyAsIG1haW50YWluQXNwZWN0UmF0aW8gIH0gLCB3aWR0aCAsIGhlaWdodCAsIF9hc3BlY3RSYXRpbyAgfSA9IHRoaXM7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihhc3BlY3RSYXRpbykpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3BlY3RSYXRpbztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiBfYXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIHJldHVybiBfYXNwZWN0UmF0aW87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlaWdodCA/IHdpZHRoIC8gaGVpZ2h0IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhO1xuICAgIH1cbiAgICBzZXQgZGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb25maWcub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCByZWdpc3RyeSgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH1cbiBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVJbml0Jyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldGluYVNjYWxlKHRoaXMsIHRoaXMub3B0aW9ucy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckluaXQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICBjbGVhckNhbnZhcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgYW5pbWF0b3Iuc3RvcCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIHJlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGlmICghYW5pbWF0b3IucnVubmluZyh0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQmVmb3JlRHJhdyA9IHtcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAmJiB0aGlzLmFzcGVjdFJhdGlvO1xuICAgICAgICBjb25zdCBuZXdTaXplID0gdGhpcy5wbGF0Zm9ybS5nZXRNYXhpbXVtU2l6ZShjYW52YXMsIHdpZHRoLCBoZWlnaHQsIGFzcGVjdFJhdGlvKTtcbiAgICAgICAgY29uc3QgbmV3UmF0aW8gPSBvcHRpb25zLmRldmljZVBpeGVsUmF0aW8gfHwgdGhpcy5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLndpZHRoID8gJ3Jlc2l6ZScgOiAnYXR0YWNoJztcbiAgICAgICAgdGhpcy53aWR0aCA9IG5ld1NpemUud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbmV3U2l6ZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX2FzcGVjdFJhdGlvID0gdGhpcy5hc3BlY3RSYXRpbztcbiAgICAgICAgaWYgKCFyZXRpbmFTY2FsZSh0aGlzLCBuZXdSYXRpbywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeVBsdWdpbnMoJ3Jlc2l6ZScsIHtcbiAgICAgICAgICAgIHNpemU6IG5ld1NpemVcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25SZXNpemUsIFtcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXdTaXplXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvUmVzaXplKG1vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbnN1cmVTY2FsZXNIYXZlSURzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBzY2FsZXNPcHRpb25zID0gb3B0aW9ucy5zY2FsZXMgfHwge307XG4gICAgICAgIGVhY2goc2NhbGVzT3B0aW9ucywgKGF4aXNPcHRpb25zLCBheGlzSUQpPT57XG4gICAgICAgICAgICBheGlzT3B0aW9ucy5pZCA9IGF4aXNJRDtcbiAgICAgICAgfSk7XG4gICAgfVxuIGJ1aWxkT3JVcGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHNjYWxlT3B0cyA9IG9wdGlvbnMuc2NhbGVzO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSB0aGlzLnNjYWxlcztcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IE9iamVjdC5rZXlzKHNjYWxlcykucmVkdWNlKChvYmosIGlkKT0+e1xuICAgICAgICAgICAgb2JqW2lkXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHNjYWxlT3B0cykge1xuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoT2JqZWN0LmtleXMoc2NhbGVPcHRzKS5tYXAoKGlkKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IHNjYWxlT3B0c1tpZF07XG4gICAgICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYWRpYWwgPSBheGlzID09PSAncic7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gYXhpcyA9PT0gJ3gnO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHNjYWxlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZHBvc2l0aW9uOiBpc1JhZGlhbCA/ICdjaGFydEFyZWEnIDogaXNIb3Jpem9udGFsID8gJ2JvdHRvbScgOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgIGR0eXBlOiBpc1JhZGlhbCA/ICdyYWRpYWxMaW5lYXInIDogaXNIb3Jpem9udGFsID8gJ2NhdGVnb3J5JyA6ICdsaW5lYXInXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKGl0ZW1zLCAoaXRlbSk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGl0ZW0ub3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGlkID0gc2NhbGVPcHRpb25zLmlkO1xuICAgICAgICAgICAgY29uc3QgYXhpcyA9IGRldGVybWluZUF4aXMoaWQsIHNjYWxlT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVR5cGUgPSB2YWx1ZU9yRGVmYXVsdChzY2FsZU9wdGlvbnMudHlwZSwgaXRlbS5kdHlwZSk7XG4gICAgICAgICAgICBpZiAoc2NhbGVPcHRpb25zLnBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb25Jc0hvcml6b250YWwoc2NhbGVPcHRpb25zLnBvc2l0aW9uLCBheGlzKSAhPT0gcG9zaXRpb25Jc0hvcml6b250YWwoaXRlbS5kcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgc2NhbGVPcHRpb25zLnBvc2l0aW9uID0gaXRlbS5kcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVkW2lkXSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlkIGluIHNjYWxlcyAmJiBzY2FsZXNbaWRdLnR5cGUgPT09IHNjYWxlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVDbGFzcyA9IHJlZ2lzdHJ5LmdldFNjYWxlKHNjYWxlVHlwZSk7XG4gICAgICAgICAgICAgICAgc2NhbGUgPSBuZXcgc2NhbGVDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzY2FsZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0OiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2NhbGVzW3NjYWxlLmlkXSA9IHNjYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NhbGUuaW5pdChzY2FsZU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWFjaCh1cGRhdGVkLCAoaGFzVXBkYXRlZCwgaWQpPT57XG4gICAgICAgICAgICBpZiAoIWhhc1VwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NhbGVzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVhY2goc2NhbGVzLCAoc2NhbGUpPT57XG4gICAgICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZSh0aGlzLCBzY2FsZSwgc2NhbGUub3B0aW9ucyk7XG4gICAgICAgICAgICBsYXlvdXRzLmFkZEJveCh0aGlzLCBzY2FsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiBfdXBkYXRlTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gdGhpcy5fbWV0YXNldHM7XG4gICAgICAgIGNvbnN0IG51bURhdGEgPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1NZXRhID0gbWV0YXNldHMubGVuZ3RoO1xuICAgICAgICBtZXRhc2V0cy5zb3J0KChhLCBiKT0+YS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICBpZiAobnVtTWV0YSA+IG51bURhdGEpIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IG51bURhdGE7IGkgPCBudW1NZXRhOyArK2kpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGFzZXRzLnNwbGljZShudW1EYXRhLCBudW1NZXRhIC0gbnVtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydGVkTWV0YXNldHMgPSBtZXRhc2V0cy5zbGljZSgwKS5zb3J0KGNvbXBhcmUyTGV2ZWwoJ29yZGVyJywgJ2luZGV4JykpO1xuICAgIH1cbiBfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKSB7XG4gICAgICAgIGNvbnN0IHsgX21ldGFzZXRzOiBtZXRhc2V0cyAsIGRhdGE6IHsgZGF0YXNldHMgIH0gIH0gPSB0aGlzO1xuICAgICAgICBpZiAobWV0YXNldHMubGVuZ3RoID4gZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fc3RhY2tzO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFzZXRzLmZvckVhY2goKG1ldGEsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGRhdGFzZXRzLmZpbHRlcigoeCk9PnggPT09IG1ldGEuX2RhdGFzZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRyb2xsZXJzID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFzZXRzID0gdGhpcy5kYXRhLmRhdGFzZXRzO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tpXTtcbiAgICAgICAgICAgIGxldCBtZXRhID0gdGhpcy5nZXREYXRhc2V0TWV0YShpKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhc2V0LnR5cGUgfHwgdGhpcy5jb25maWcudHlwZTtcbiAgICAgICAgICAgIGlmIChtZXRhLnR5cGUgJiYgbWV0YS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgICAgIG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWV0YS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIG1ldGEuaW5kZXhBeGlzID0gZGF0YXNldC5pbmRleEF4aXMgfHwgZ2V0SW5kZXhBeGlzKHR5cGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICBtZXRhLm9yZGVyID0gZGF0YXNldC5vcmRlciB8fCAwO1xuICAgICAgICAgICAgbWV0YS5pbmRleCA9IGk7XG4gICAgICAgICAgICBtZXRhLmxhYmVsID0gJycgKyBkYXRhc2V0LmxhYmVsO1xuICAgICAgICAgICAgbWV0YS52aXNpYmxlID0gdGhpcy5pc0RhdGFzZXRWaXNpYmxlKGkpO1xuICAgICAgICAgICAgaWYgKG1ldGEuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci51cGRhdGVJbmRleChpKTtcbiAgICAgICAgICAgICAgICBtZXRhLmNvbnRyb2xsZXIubGlua1NjYWxlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSByZWdpc3RyeS5nZXRDb250cm9sbGVyKHR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YXNldEVsZW1lbnRUeXBlICwgZGF0YUVsZW1lbnRUeXBlICB9ID0gZGVmYXVsdHMuZGF0YXNldHNbdHlwZV07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihDb250cm9sbGVyQ2xhc3MsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUVsZW1lbnRUeXBlOiByZWdpc3RyeS5nZXRFbGVtZW50KGRhdGFFbGVtZW50VHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRFbGVtZW50VHlwZTogZGF0YXNldEVsZW1lbnRUeXBlICYmIHJlZ2lzdHJ5LmdldEVsZW1lbnQoZGF0YXNldEVsZW1lbnRUeXBlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG1ldGEuY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyQ2xhc3ModGhpcywgaSk7XG4gICAgICAgICAgICAgICAgbmV3Q29udHJvbGxlcnMucHVzaChtZXRhLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1ldGFzZXRzKCk7XG4gICAgICAgIHJldHVybiBuZXdDb250cm9sbGVycztcbiAgICB9XG4gX3Jlc2V0RWxlbWVudHMoKSB7XG4gICAgICAgIGVhY2godGhpcy5kYXRhLmRhdGFzZXRzLCAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIucmVzZXQoKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfVxuIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9yZXNldEVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygncmVzZXQnKTtcbiAgICB9XG4gICAgdXBkYXRlKG1vZGUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICAgIGNvbmZpZy51cGRhdGUoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMgPSBjb25maWcuY3JlYXRlUmVzb2x2ZXIoY29uZmlnLmNoYXJ0T3B0aW9uU2NvcGVzKCksIHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3QgYW5pbXNEaXNhYmxlZCA9IHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCA9ICFvcHRpb25zLmFuaW1hdGlvbjtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2NhbGVzKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpO1xuICAgICAgICB0aGlzLl91cGRhdGVIaWRkZW5JbmRpY2VzKCk7XG4gICAgICAgIHRoaXMuX3BsdWdpbnMuaW52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVVcGRhdGUnLCB7XG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdDb250cm9sbGVycyA9IHRoaXMuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRWxlbWVudHNVcGRhdGUnKTtcbiAgICAgICAgbGV0IG1pblBhZGRpbmcgPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47IGkrKyl7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRyb2xsZXIgIH0gPSB0aGlzLmdldERhdGFzZXRNZXRhKGkpO1xuICAgICAgICAgICAgY29uc3QgcmVzZXQgPSAhYW5pbXNEaXNhYmxlZCAmJiBuZXdDb250cm9sbGVycy5pbmRleE9mKGNvbnRyb2xsZXIpID09PSAtMTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYnVpbGRPclVwZGF0ZUVsZW1lbnRzKHJlc2V0KTtcbiAgICAgICAgICAgIG1pblBhZGRpbmcgPSBNYXRoLm1heCgrY29udHJvbGxlci5nZXRNYXhPdmVyZmxvdygpLCBtaW5QYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBtaW5QYWRkaW5nID0gdGhpcy5fbWluUGFkZGluZyA9IG9wdGlvbnMubGF5b3V0LmF1dG9QYWRkaW5nID8gbWluUGFkZGluZyA6IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKTtcbiAgICAgICAgaWYgKCFhbmltc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBlYWNoKG5ld0NvbnRyb2xsZXJzLCAoY29udHJvbGxlcik9PntcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJlc2V0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0cyhtb2RlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlclVwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xheWVycy5zb3J0KGNvbXBhcmUyTGV2ZWwoJ3onLCAnX2lkeCcpKTtcbiAgICAgICAgY29uc3QgeyBfYWN0aXZlICwgX2xhc3RFdmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGlmIChfbGFzdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXIoX2xhc3RFdmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoX2FjdGl2ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKF9hY3RpdmUsIF9hY3RpdmUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuIF91cGRhdGVTY2FsZXMoKSB7XG4gICAgICAgIGVhY2godGhpcy5zY2FsZXMsIChzY2FsZSk9PntcbiAgICAgICAgICAgIGxheW91dHMucmVtb3ZlQm94KHRoaXMsIHNjYWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW5zdXJlU2NhbGVzSGF2ZUlEcygpO1xuICAgICAgICB0aGlzLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKTtcbiAgICB9XG4gX2NoZWNrRXZlbnRCaW5kaW5ncygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFdmVudHMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycykpO1xuICAgICAgICBjb25zdCBuZXdFdmVudHMgPSBuZXcgU2V0KG9wdGlvbnMuZXZlbnRzKTtcbiAgICAgICAgaWYgKCFzZXRzRXF1YWwoZXhpc3RpbmdFdmVudHMsIG5ld0V2ZW50cykgfHwgISF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzICE9PSBvcHRpb25zLnJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiBfdXBkYXRlSGlkZGVuSW5kaWNlcygpIHtcbiAgICAgICAgY29uc3QgeyBfaGlkZGVuSW5kaWNlcyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKSB8fCBbXTtcbiAgICAgICAgZm9yIChjb25zdCB7IG1ldGhvZCAsIHN0YXJ0ICwgY291bnQgIH0gb2YgY2hhbmdlcyl7XG4gICAgICAgICAgICBjb25zdCBtb3ZlID0gbWV0aG9kID09PSAnX3JlbW92ZUVsZW1lbnRzJyA/IC1jb3VudCA6IGNvdW50O1xuICAgICAgICAgICAgbW92ZU51bWVyaWNLZXlzKF9oaWRkZW5JbmRpY2VzLCBzdGFydCwgbW92ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpIHtcbiAgICAgICAgY29uc3QgX2RhdGFDaGFuZ2VzID0gdGhpcy5fZGF0YUNoYW5nZXM7XG4gICAgICAgIGlmICghX2RhdGFDaGFuZ2VzIHx8ICFfZGF0YUNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YXNldENvdW50ID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWFrZVNldCA9IChpZHgpPT5uZXcgU2V0KF9kYXRhQ2hhbmdlcy5maWx0ZXIoKGMpPT5jWzBdID09PSBpZHgpLm1hcCgoYywgaSk9PmkgKyAnLCcgKyBjLnNwbGljZSgxKS5qb2luKCcsJykpKTtcbiAgICAgICAgY29uc3QgY2hhbmdlU2V0ID0gbWFrZVNldCgwKTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGRhdGFzZXRDb3VudDsgaSsrKXtcbiAgICAgICAgICAgIGlmICghc2V0c0VxdWFsKGNoYW5nZVNldCwgbWFrZVNldChpKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY2hhbmdlU2V0KS5tYXAoKGMpPT5jLnNwbGl0KCcsJykpLm1hcCgoYSk9Pih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBhWzFdLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiArYVsyXSxcbiAgICAgICAgICAgICAgICBjb3VudDogK2FbM11cbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gX3VwZGF0ZUxheW91dChtaW5QYWRkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUxheW91dCcsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0cy51cGRhdGUodGhpcywgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIG1pblBhZGRpbmcpO1xuICAgICAgICBjb25zdCBhcmVhID0gdGhpcy5jaGFydEFyZWE7XG4gICAgICAgIGNvbnN0IG5vQXJlYSA9IGFyZWEud2lkdGggPD0gMCB8fCBhcmVhLmhlaWdodCA8PSAwO1xuICAgICAgICB0aGlzLl9sYXllcnMgPSBbXTtcbiAgICAgICAgZWFjaCh0aGlzLmJveGVzLCAoYm94KT0+e1xuICAgICAgICAgICAgaWYgKG5vQXJlYSAmJiBib3gucG9zaXRpb24gPT09ICdjaGFydEFyZWEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJveC5jb25maWd1cmUpIHtcbiAgICAgICAgICAgICAgICBib3guY29uZmlndXJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9sYXllcnMucHVzaCguLi5ib3guX2xheWVycygpKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKChpdGVtLCBpbmRleCk9PntcbiAgICAgICAgICAgIGl0ZW0uX2lkeCA9IGluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckxheW91dCcpO1xuICAgIH1cbiBfdXBkYXRlRGF0YXNldHMobW9kZSkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVEYXRhc2V0c1VwZGF0ZScsIHtcbiAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlsZW4gPSB0aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YXNldE1ldGEoaSkuY29udHJvbGxlci5jb25maWd1cmUoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSAwLCBpbGVuID0gdGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVEYXRhc2V0KGksIGlzRnVuY3Rpb24obW9kZSkgPyBtb2RlKHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0SW5kZXg6IGlcbiAgICAgICAgICAgIH0pIDogbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzVXBkYXRlJywge1xuICAgICAgICAgICAgbW9kZVxuICAgICAgICB9KTtcbiAgICB9XG4gX3VwZGF0ZURhdGFzZXQoaW5kZXgsIG1vZGUpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldFVwZGF0ZScsIGFyZ3MpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5fdXBkYXRlKG1vZGUpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRVcGRhdGUnLCBhcmdzKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5ub3RpZnlQbHVnaW5zKCdiZWZvcmVSZW5kZXInLCB7XG4gICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmltYXRvci5oYXModGhpcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkICYmICFhbmltYXRvci5ydW5uaW5nKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0b3Iuc3RhcnQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIG9uQW5pbWF0aW9uc0NvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemVCZWZvcmVEcmF3KSB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gdGhpcy5fcmVzaXplQmVmb3JlRHJhdztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUJlZm9yZURyYXcgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMud2lkdGggPD0gMCB8fCB0aGlzLmhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRHJhdycsIHtcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gdGhpcy5fbGF5ZXJzO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoICYmIGxheWVyc1tpXS56IDw9IDA7ICsraSl7XG4gICAgICAgICAgICBsYXllcnNbaV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZHJhd0RhdGFzZXRzKCk7XG4gICAgICAgIGZvcig7IGkgPCBsYXllcnMubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgbGF5ZXJzW2ldLmRyYXcodGhpcy5jaGFydEFyZWEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEcmF3Jyk7XG4gICAgfVxuIF9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZmlsdGVyVmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuX3NvcnRlZE1ldGFzZXRzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzZXRzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gbWV0YXNldHNbaV07XG4gICAgICAgICAgICBpZiAoIWZpbHRlclZpc2libGUgfHwgbWV0YS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvcnRlZERhdGFzZXRNZXRhcyh0cnVlKTtcbiAgICB9XG4gX2RyYXdEYXRhc2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldHNEcmF3Jywge1xuICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhc2V0cyA9IHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICB0aGlzLl9kcmF3RGF0YXNldChtZXRhc2V0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckRhdGFzZXRzRHJhdycpO1xuICAgIH1cbiBfZHJhd0RhdGFzZXQobWV0YSkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3QgY2xpcCA9IG1ldGEuX2NsaXA7XG4gICAgICAgIGNvbnN0IHVzZUNsaXAgPSAhY2xpcC5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgYXJlYSA9IGdldERhdGFzZXRBcmVhKG1ldGEsIHRoaXMuY2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICBpbmRleDogbWV0YS5pbmRleCxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGF0YXNldERyYXcnLCBhcmdzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlQ2xpcCkge1xuICAgICAgICAgICAgY2xpcEFyZWEoY3R4LCB7XG4gICAgICAgICAgICAgICAgbGVmdDogY2xpcC5sZWZ0ID09PSBmYWxzZSA/IDAgOiBhcmVhLmxlZnQgLSBjbGlwLmxlZnQsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNsaXAucmlnaHQgPT09IGZhbHNlID8gdGhpcy53aWR0aCA6IGFyZWEucmlnaHQgKyBjbGlwLnJpZ2h0LFxuICAgICAgICAgICAgICAgIHRvcDogY2xpcC50b3AgPT09IGZhbHNlID8gMCA6IGFyZWEudG9wIC0gY2xpcC50b3AsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjbGlwLmJvdHRvbSA9PT0gZmFsc2UgPyB0aGlzLmhlaWdodCA6IGFyZWEuYm90dG9tICsgY2xpcC5ib3R0b21cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1ldGEuY29udHJvbGxlci5kcmF3KCk7XG4gICAgICAgIGlmICh1c2VDbGlwKSB7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJncy5jYW5jZWxhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEYXRhc2V0RHJhdycsIGFyZ3MpO1xuICAgIH1cbiBpc1BvaW50SW5BcmVhKHBvaW50KSB7XG4gICAgICAgIHJldHVybiBfaXNQb2ludEluQXJlYShwb2ludCwgdGhpcy5jaGFydEFyZWEsIHRoaXMuX21pblBhZGRpbmcpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIG1vZGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gSW50ZXJhY3Rpb24ubW9kZXNbbW9kZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kKHRoaXMsIGUsIG9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XTtcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSB0aGlzLl9tZXRhc2V0cztcbiAgICAgICAgbGV0IG1ldGEgPSBtZXRhc2V0cy5maWx0ZXIoKHgpPT54ICYmIHguX2RhdGFzZXQgPT09IGRhdGFzZXQpLnBvcCgpO1xuICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgIG1ldGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBudWxsLFxuICAgICAgICAgICAgICAgIHhBeGlzSUQ6IG51bGwsXG4gICAgICAgICAgICAgICAgeUF4aXNJRDogbnVsbCxcbiAgICAgICAgICAgICAgICBvcmRlcjogZGF0YXNldCAmJiBkYXRhc2V0Lm9yZGVyIHx8IDAsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBfZGF0YXNldDogZGF0YXNldCxcbiAgICAgICAgICAgICAgICBfcGFyc2VkOiBbXSxcbiAgICAgICAgICAgICAgICBfc29ydGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1ldGFzZXRzLnB1c2gobWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfVxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlQ29udGV4dChudWxsLCB7XG4gICAgICAgICAgICBjaGFydDogdGhpcyxcbiAgICAgICAgICAgIHR5cGU6ICdjaGFydCdcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXRWaXNpYmxlRGF0YXNldENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkubGVuZ3RoO1xuICAgIH1cbiAgICBpc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleCkge1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWV0YS5oaWRkZW4gPT09ICdib29sZWFuJyA/ICFtZXRhLmhpZGRlbiA6ICFkYXRhc2V0LmhpZGRlbjtcbiAgICB9XG4gICAgc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgIG1ldGEuaGlkZGVuID0gIXZpc2libGU7XG4gICAgfVxuICAgIHRvZ2dsZURhdGFWaXNpYmlsaXR5KGluZGV4KSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdID0gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiAgICBnZXREYXRhVmlzaWJpbGl0eShpbmRleCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2hpZGRlbkluZGljZXNbaW5kZXhdO1xuICAgIH1cbiBfdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdmlzaWJsZSkge1xuICAgICAgICBjb25zdCBtb2RlID0gdmlzaWJsZSA/ICdzaG93JyA6ICdoaWRlJztcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3QgYW5pbXMgPSBtZXRhLmNvbnRyb2xsZXIuX3Jlc29sdmVBbmltYXRpb25zKHVuZGVmaW5lZCwgbW9kZSk7XG4gICAgICAgIGlmIChkZWZpbmVkKGRhdGFJbmRleCkpIHtcbiAgICAgICAgICAgIG1ldGEuZGF0YVtkYXRhSW5kZXhdLmhpZGRlbiA9ICF2aXNpYmxlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4LCB2aXNpYmxlKTtcbiAgICAgICAgICAgIGFuaW1zLnVwZGF0ZShtZXRhLCB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgoY3R4KT0+Y3R4LmRhdGFzZXRJbmRleCA9PT0gZGF0YXNldEluZGV4ID8gbW9kZSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCkge1xuICAgICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGRhdGFzZXRJbmRleCwgZGF0YUluZGV4LCBmYWxzZSk7XG4gICAgfVxuICAgIHNob3coZGF0YXNldEluZGV4LCBkYXRhSW5kZXgpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eShkYXRhc2V0SW5kZXgsIGRhdGFJbmRleCwgdHJ1ZSk7XG4gICAgfVxuIF9kZXN0cm95RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgICAgICBpZiAobWV0YSAmJiBtZXRhLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlci5fZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIH1cbiAgICBfc3RvcCgpIHtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICBhbmltYXRvci5yZW1vdmUodGhpcyk7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IHRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYmVmb3JlRGVzdHJveScpO1xuICAgICAgICBjb25zdCB7IGNhbnZhcyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpO1xuICAgICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgY2xlYXJDYW52YXMoY2FudmFzLCBjdHgpO1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZWxlYXNlQ29udGV4dChjdHgpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jdHggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBpbnN0YW5jZXNbdGhpcy5pZF07XG4gICAgICAgIHRoaXMubm90aWZ5UGx1Z2lucygnYWZ0ZXJEZXN0cm95Jyk7XG4gICAgfVxuICAgIHRvQmFzZTY0SW1hZ2UoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKC4uLmFyZ3MpO1xuICAgIH1cbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRVc2VyRXZlbnRzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5iaW5kUmVzcG9uc2l2ZUV2ZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gYmluZFVzZXJFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZSwgeCwgeSk9PntcbiAgICAgICAgICAgIGUub2Zmc2V0WCA9IHg7XG4gICAgICAgICAgICBlLm9mZnNldFkgPSB5O1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyKGUpO1xuICAgICAgICB9O1xuICAgICAgICBlYWNoKHRoaXMub3B0aW9ucy5ldmVudHMsICh0eXBlKT0+X2FkZCh0eXBlLCBsaXN0ZW5lcikpO1xuICAgIH1cbiBiaW5kUmVzcG9uc2l2ZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycztcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgICAgICBjb25zdCBfYWRkID0gKHR5cGUsIGxpc3RlbmVyKT0+e1xuICAgICAgICAgICAgcGxhdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgX3JlbW92ZSA9ICh0eXBlLCBsaXN0ZW5lcik9PntcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICBwbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGlzdGVuZXJzW3R5cGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICh3aWR0aCwgaGVpZ2h0KT0+e1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZXRhY2hlZDtcbiAgICAgICAgY29uc3QgYXR0YWNoZWQgPSAoKT0+e1xuICAgICAgICAgICAgX3JlbW92ZSgnYXR0YWNoJywgYXR0YWNoZWQpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgX2FkZCgncmVzaXplJywgbGlzdGVuZXIpO1xuICAgICAgICAgICAgX2FkZCgnZGV0YWNoJywgZGV0YWNoZWQpO1xuICAgICAgICB9O1xuICAgICAgICBkZXRhY2hlZCA9ICgpPT57XG4gICAgICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfcmVtb3ZlKCdyZXNpemUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLl9zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUoMCwgMCk7XG4gICAgICAgICAgICBfYWRkKCdhdHRhY2gnLCBhdHRhY2hlZCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pc0F0dGFjaGVkKHRoaXMuY2FudmFzKSkge1xuICAgICAgICAgICAgYXR0YWNoZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRldGFjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gdW5iaW5kRXZlbnRzKCkge1xuICAgICAgICBlYWNoKHRoaXMuX2xpc3RlbmVycywgKGxpc3RlbmVyLCB0eXBlKT0+e1xuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICAgICAgICBlYWNoKHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsIChsaXN0ZW5lciwgdHlwZSk9PntcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGVIb3ZlclN0eWxlKGl0ZW1zLCBtb2RlLCBlbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGVuYWJsZWQgPyAnc2V0JyA6ICdyZW1vdmUnO1xuICAgICAgICBsZXQgbWV0YSwgaXRlbSwgaSwgaWxlbjtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbWV0YSA9IHRoaXMuZ2V0RGF0YXNldE1ldGEoaXRlbXNbMF0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIG1ldGEuY29udHJvbGxlclsnXycgKyBwcmVmaXggKyAnRGF0YXNldEhvdmVyU3R5bGUnXSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gaXRlbSAmJiB0aGlzLmdldERhdGFzZXRNZXRhKGl0ZW0uZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyW3ByZWZpeCArICdIb3ZlclN0eWxlJ10oaXRlbS5lbGVtZW50LCBpdGVtLmRhdGFzZXRJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0QWN0aXZlRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgfVxuIHNldEFjdGl2ZUVsZW1lbnRzKGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RBY3RpdmUgPSB0aGlzLl9hY3RpdmUgfHwgW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRzLm1hcCgoeyBkYXRhc2V0SW5kZXggLCBpbmRleCAgfSk9PntcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICBpZiAoIW1ldGEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGFzZXQgZm91bmQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChhY3RpdmUsIGxhc3RBY3RpdmUpO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEV2ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhvdmVyU3R5bGVzKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gbm90aWZ5UGx1Z2lucyhob29rLCBhcmdzLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsdWdpbnMubm90aWZ5KHRoaXMsIGhvb2ssIGFyZ3MsIGZpbHRlcik7XG4gICAgfVxuIGlzUGx1Z2luRW5hYmxlZChwbHVnaW5JZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGx1Z2lucy5fY2FjaGUuZmlsdGVyKChwKT0+cC5wbHVnaW4uaWQgPT09IHBsdWdpbklkKS5sZW5ndGggPT09IDE7XG4gICAgfVxuIF91cGRhdGVIb3ZlclN0eWxlcyhhY3RpdmUsIGxhc3RBY3RpdmUsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBob3Zlck9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuaG92ZXI7XG4gICAgICAgIGNvbnN0IGRpZmYgPSAoYSwgYik9PmEuZmlsdGVyKCh4KT0+IWIuc29tZSgoeSk9PnguZGF0YXNldEluZGV4ID09PSB5LmRhdGFzZXRJbmRleCAmJiB4LmluZGV4ID09PSB5LmluZGV4KSk7XG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkID0gZGlmZihsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBhY3RpdmF0ZWQgPSByZXBsYXkgPyBhY3RpdmUgOiBkaWZmKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChkZWFjdGl2YXRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSG92ZXJTdHlsZShkZWFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aXZhdGVkLmxlbmd0aCAmJiBob3Zlck9wdGlvbnMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3ZlclN0eWxlKGFjdGl2YXRlZCwgaG92ZXJPcHRpb25zLm1vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuIF9ldmVudEhhbmRsZXIoZSwgcmVwbGF5KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHJlcGxheSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgICBpbkNoYXJ0QXJlYTogdGhpcy5pc1BvaW50SW5BcmVhKGUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gKHBsdWdpbik9PihwbHVnaW4ub3B0aW9ucy5ldmVudHMgfHwgdGhpcy5vcHRpb25zLmV2ZW50cykuaW5jbHVkZXMoZS5uYXRpdmUudHlwZSk7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeVBsdWdpbnMoJ2JlZm9yZUV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9oYW5kbGVFdmVudChlLCByZXBsYXksIGFyZ3MuaW5DaGFydEFyZWEpO1xuICAgICAgICBhcmdzLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlQbHVnaW5zKCdhZnRlckV2ZW50JywgYXJncywgZXZlbnRGaWx0ZXIpO1xuICAgICAgICBpZiAoY2hhbmdlZCB8fCBhcmdzLmNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuIF9oYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IHsgX2FjdGl2ZTogbGFzdEFjdGl2ZSA9IFtdICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHVzZUZpbmFsUG9zaXRpb24gPSByZXBsYXk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW1lbnRzKGUsIGxhc3RBY3RpdmUsIGluQ2hhcnRBcmVhLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgaXNDbGljayA9IF9pc0NsaWNrRXZlbnQoZSk7XG4gICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IGRldGVybWluZUxhc3RFdmVudChlLCB0aGlzLl9sYXN0RXZlbnQsIGluQ2hhcnRBcmVhLCBpc0NsaWNrKTtcbiAgICAgICAgaWYgKGluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNDbGljaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMub25DbGljaywgW1xuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSk7XG4gICAgICAgIGlmIChjaGFuZ2VkIHx8IHJlcGxheSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMoYWN0aXZlLCBsYXN0QWN0aXZlLCByZXBsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RFdmVudCA9IGxhc3RFdmVudDtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCBpbkNoYXJ0QXJlYSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbkNoYXJ0QXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJPcHRpb25zID0gdGhpcy5vcHRpb25zLmhvdmVyO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsIGhvdmVyT3B0aW9ucy5tb2RlLCBob3Zlck9wdGlvbnMsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGludmFsaWRhdGVQbHVnaW5zKCkge1xuICAgIHJldHVybiBlYWNoKENoYXJ0Lmluc3RhbmNlcywgKGNoYXJ0KT0+Y2hhcnQuX3BsdWdpbnMuaW52YWxpZGF0ZSgpKTtcbn1cblxuZnVuY3Rpb24gY2xpcEFyYyhjdHgsIGVsZW1lbnQsIGVuZEFuZ2xlKSB7XG4gICAgY29uc3QgeyBzdGFydEFuZ2xlICwgcGl4ZWxNYXJnaW4gLCB4ICwgeSAsIG91dGVyUmFkaXVzICwgaW5uZXJSYWRpdXMgIH0gPSBlbGVtZW50O1xuICAgIGxldCBhbmdsZU1hcmdpbiA9IHBpeGVsTWFyZ2luIC8gb3V0ZXJSYWRpdXM7XG4gICAgLy8gRHJhdyBhbiBpbm5lciBib3JkZXIgYnkgY2xpcHBpbmcgdGhlIGFyYyBhbmQgZHJhd2luZyBhIGRvdWJsZS13aWR0aCBib3JkZXJcbiAgICAvLyBFbmxhcmdlIHRoZSBjbGlwcGluZyBhcmMgYnkgMC4zMyBwaXhlbHMgdG8gZWxpbWluYXRlIGdsaXRjaGVzIGJldHdlZW4gYm9yZGVyc1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBzdGFydEFuZ2xlIC0gYW5nbGVNYXJnaW4sIGVuZEFuZ2xlICsgYW5nbGVNYXJnaW4pO1xuICAgIGlmIChpbm5lclJhZGl1cyA+IHBpeGVsTWFyZ2luKSB7XG4gICAgICAgIGFuZ2xlTWFyZ2luID0gcGl4ZWxNYXJnaW4gLyBpbm5lclJhZGl1cztcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgZW5kQW5nbGUgKyBhbmdsZU1hcmdpbiwgc3RhcnRBbmdsZSAtIGFuZ2xlTWFyZ2luLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjdHguYXJjKHgsIHksIHBpeGVsTWFyZ2luLCBlbmRBbmdsZSArIEhBTEZfUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5jbGlwKCk7XG59XG5mdW5jdGlvbiB0b1JhZGl1c0Nvcm5lcnModmFsdWUpIHtcbiAgICByZXR1cm4gX3JlYWRWYWx1ZVRvUHJvcHModmFsdWUsIFtcbiAgICAgICAgJ291dGVyU3RhcnQnLFxuICAgICAgICAnb3V0ZXJFbmQnLFxuICAgICAgICAnaW5uZXJTdGFydCcsXG4gICAgICAgICdpbm5lckVuZCdcbiAgICBdKTtcbn1cbi8qKlxuICogUGFyc2UgYm9yZGVyIHJhZGl1cyBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zXG4gKi8gZnVuY3Rpb24gcGFyc2VCb3JkZXJSYWRpdXMkMShhcmMsIGlubmVyUmFkaXVzLCBvdXRlclJhZGl1cywgYW5nbGVEZWx0YSkge1xuICAgIGNvbnN0IG8gPSB0b1JhZGl1c0Nvcm5lcnMoYXJjLm9wdGlvbnMuYm9yZGVyUmFkaXVzKTtcbiAgICBjb25zdCBoYWxmVGhpY2tuZXNzID0gKG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMpIC8gMjtcbiAgICBjb25zdCBpbm5lckxpbWl0ID0gTWF0aC5taW4oaGFsZlRoaWNrbmVzcywgYW5nbGVEZWx0YSAqIGlubmVyUmFkaXVzIC8gMik7XG4gICAgLy8gT3V0ZXIgbGltaXRzIGFyZSBjb21wbGljYXRlZC4gV2Ugd2FudCB0byBjb21wdXRlIHRoZSBhdmFpbGFibGUgYW5ndWxhciBkaXN0YW5jZSBhdFxuICAgIC8vIGEgcmFkaXVzIG9mIG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgZm9yIHNtYWxsIGFuZ3VsYXIgZGlzdGFuY2VzLCB0aGlzIHRlcm0gbGltaXRzLlxuICAgIC8vIFdlIGNvbXB1dGUgYXQgciA9IG91dGVyUmFkaXVzIC0gYm9yZGVyUmFkaXVzIGJlY2F1c2UgdGhpcyBjaXJjbGUgZGVmaW5lcyB0aGUgY2VudGVyIG9mIHRoZSBib3JkZXIgY29ybmVycy5cbiAgICAvL1xuICAgIC8vIElmIHRoZSBib3JkZXJSYWRpdXMgaXMgbGFyZ2UsIHRoYXQgdmFsdWUgY2FuIGJlY29tZSBuZWdhdGl2ZS5cbiAgICAvLyBUaGlzIGNhdXNlcyB0aGUgb3V0ZXIgYm9yZGVycyB0byBsb3NlIHRoZWlyIHJhZGl1cyBlbnRpcmVseSwgd2hpY2ggaXMgcmF0aGVyIHVuZXhwZWN0ZWQuIFRvIHNvbHZlIHRoYXQsIGlmIGJvcmRlclJhZGl1cyA+IG91dGVyUmFkaXVzXG4gICAgLy8gd2Uga25vdyB0aGF0IHRoZSB0aGlja25lc3MgdGVybSB3aWxsIGRvbWluYXRlIGFuZCBjb21wdXRlIHRoZSBsaW1pdHMgYXQgdGhhdCBwb2ludFxuICAgIGNvbnN0IGNvbXB1dGVPdXRlckxpbWl0ID0gKHZhbCk9PntcbiAgICAgICAgY29uc3Qgb3V0ZXJBcmNMaW1pdCA9IChvdXRlclJhZGl1cyAtIE1hdGgubWluKGhhbGZUaGlja25lc3MsIHZhbCkpICogYW5nbGVEZWx0YSAvIDI7XG4gICAgICAgIHJldHVybiBfbGltaXRWYWx1ZSh2YWwsIDAsIE1hdGgubWluKGhhbGZUaGlja25lc3MsIG91dGVyQXJjTGltaXQpKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG91dGVyU3RhcnQ6IGNvbXB1dGVPdXRlckxpbWl0KG8ub3V0ZXJTdGFydCksXG4gICAgICAgIG91dGVyRW5kOiBjb21wdXRlT3V0ZXJMaW1pdChvLm91dGVyRW5kKSxcbiAgICAgICAgaW5uZXJTdGFydDogX2xpbWl0VmFsdWUoby5pbm5lclN0YXJ0LCAwLCBpbm5lckxpbWl0KSxcbiAgICAgICAgaW5uZXJFbmQ6IF9saW1pdFZhbHVlKG8uaW5uZXJFbmQsIDAsIGlubmVyTGltaXQpXG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydCAociwg8J2cgykgdG8gKHgsIHkpXG4gKi8gZnVuY3Rpb24gclRoZXRhVG9YWShyLCB0aGV0YSwgeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyByICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICB5OiB5ICsgciAqIE1hdGguc2luKHRoZXRhKVxuICAgIH07XG59XG4vKipcbiAqIFBhdGggdGhlIGFyYywgcmVzcGVjdGluZyBib3JkZXIgcmFkaXVzIGJ5IHNlcGFyYXRpbmcgaW50byBsZWZ0IGFuZCByaWdodCBoYWx2ZXMuXG4gKlxuICogICBTdGFydCAgICAgIEVuZFxuICpcbiAqICAgIDEtLS0+YS0tLT4yICAgIE91dGVyXG4gKiAgIC8gICAgICAgICAgIFxcXG4gKiAgIDggICAgICAgICAgIDNcbiAqICAgfCAgICAgICAgICAgfFxuICogICB8ICAgICAgICAgICB8XG4gKiAgIDcgICAgICAgICAgIDRcbiAqICAgXFwgICAgICAgICAgIC9cbiAqICAgIDY8LS0tYjwtLS01ICAgIElubmVyXG4gKi8gZnVuY3Rpb24gcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBzdGFydEFuZ2xlOiBzdGFydCAsIHBpeGVsTWFyZ2luICwgaW5uZXJSYWRpdXM6IGlubmVyUiAgfSA9IGVsZW1lbnQ7XG4gICAgY29uc3Qgb3V0ZXJSYWRpdXMgPSBNYXRoLm1heChlbGVtZW50Lm91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCAtIHBpeGVsTWFyZ2luLCAwKTtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgKyBzcGFjaW5nICsgb2Zmc2V0ICsgcGl4ZWxNYXJnaW4gOiAwO1xuICAgIGxldCBzcGFjaW5nT2Zmc2V0ID0gMDtcbiAgICBjb25zdCBhbHBoYSA9IGVuZCAtIHN0YXJ0O1xuICAgIGlmIChzcGFjaW5nKSB7XG4gICAgICAgIC8vIFdoZW4gc3BhY2luZyBpcyBwcmVzZW50LCBpdCBpcyB0aGUgc2FtZSBmb3IgYWxsIGl0ZW1zXG4gICAgICAgIC8vIFNvIHdlIGFkanVzdCB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZSBvZiB0aGUgYXJjIHN1Y2ggdGhhdFxuICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMgdGhlIHNhbWUgYXMgaXQgd291bGQgYmUgd2l0aG91dCB0aGUgc3BhY2luZ1xuICAgICAgICBjb25zdCBub1NwYWNpbmdJbm5lclJhZGl1cyA9IGlubmVyUiA+IDAgPyBpbm5lclIgLSBzcGFjaW5nIDogMDtcbiAgICAgICAgY29uc3Qgbm9TcGFjaW5nT3V0ZXJSYWRpdXMgPSBvdXRlclJhZGl1cyA+IDAgPyBvdXRlclJhZGl1cyAtIHNwYWNpbmcgOiAwO1xuICAgICAgICBjb25zdCBhdk5vZ1NwYWNpbmdSYWRpdXMgPSAobm9TcGFjaW5nSW5uZXJSYWRpdXMgKyBub1NwYWNpbmdPdXRlclJhZGl1cykgLyAyO1xuICAgICAgICBjb25zdCBhZGp1c3RlZEFuZ2xlID0gYXZOb2dTcGFjaW5nUmFkaXVzICE9PSAwID8gYWxwaGEgKiBhdk5vZ1NwYWNpbmdSYWRpdXMgLyAoYXZOb2dTcGFjaW5nUmFkaXVzICsgc3BhY2luZykgOiBhbHBoYTtcbiAgICAgICAgc3BhY2luZ09mZnNldCA9IChhbHBoYSAtIGFkanVzdGVkQW5nbGUpIC8gMjtcbiAgICB9XG4gICAgY29uc3QgYmV0YSA9IE1hdGgubWF4KDAuMDAxLCBhbHBoYSAqIG91dGVyUmFkaXVzIC0gb2Zmc2V0IC8gUEkpIC8gb3V0ZXJSYWRpdXM7XG4gICAgY29uc3QgYW5nbGVPZmZzZXQgPSAoYWxwaGEgLSBiZXRhKSAvIDI7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IHN0YXJ0ICsgYW5nbGVPZmZzZXQgKyBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gZW5kIC0gYW5nbGVPZmZzZXQgLSBzcGFjaW5nT2Zmc2V0O1xuICAgIGNvbnN0IHsgb3V0ZXJTdGFydCAsIG91dGVyRW5kICwgaW5uZXJTdGFydCAsIGlubmVyRW5kICB9ID0gcGFyc2VCb3JkZXJSYWRpdXMkMShlbGVtZW50LCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgY29uc3Qgb3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzID0gb3V0ZXJSYWRpdXMgLSBvdXRlclN0YXJ0O1xuICAgIGNvbnN0IG91dGVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBvdXRlclJhZGl1cyAtIG91dGVyRW5kO1xuICAgIGNvbnN0IG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIG91dGVyU3RhcnQgLyBvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3Qgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBvdXRlckVuZCAvIG91dGVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzID0gaW5uZXJSYWRpdXMgKyBpbm5lclN0YXJ0O1xuICAgIGNvbnN0IGlubmVyRW5kQWRqdXN0ZWRSYWRpdXMgPSBpbm5lclJhZGl1cyArIGlubmVyRW5kO1xuICAgIGNvbnN0IGlubmVyU3RhcnRBZGp1c3RlZEFuZ2xlID0gc3RhcnRBbmdsZSArIGlubmVyU3RhcnQgLyBpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXM7XG4gICAgY29uc3QgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlID0gZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyRW5kQWRqdXN0ZWRSYWRpdXM7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGlmIChjaXJjdWxhcikge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXJjIHNlZ21lbnRzIGZyb20gcG9pbnQgMSB0byBwb2ludCBhIHRvIHBvaW50IDJcbiAgICAgICAgY29uc3Qgb3V0ZXJNaWRBZGp1c3RlZEFuZ2xlID0gKG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlICsgb3V0ZXJFbmRBZGp1c3RlZEFuZ2xlKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgb3V0ZXJSYWRpdXMsIG91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlLCBvdXRlck1pZEFkanVzdGVkQW5nbGUpO1xuICAgICAgICBjdHguYXJjKHgsIHksIG91dGVyUmFkaXVzLCBvdXRlck1pZEFkanVzdGVkQW5nbGUsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSk7XG4gICAgICAgIC8vIFRoZSBjb3JuZXIgc2VnbWVudCBmcm9tIHBvaW50IDIgdG8gcG9pbnQgM1xuICAgICAgICBpZiAob3V0ZXJFbmQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwQ2VudGVyID0gclRoZXRhVG9YWShvdXRlckVuZEFkanVzdGVkUmFkaXVzLCBvdXRlckVuZEFkanVzdGVkQW5nbGUsIHgsIHkpO1xuICAgICAgICAgICAgY3R4LmFyYyhwQ2VudGVyLngsIHBDZW50ZXIueSwgb3V0ZXJFbmQsIG91dGVyRW5kQWRqdXN0ZWRBbmdsZSwgZW5kQW5nbGUgKyBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDMgdG8gcG9pbnQgNFxuICAgICAgICBjb25zdCBwNCA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgZW5kQW5nbGUsIHgsIHkpO1xuICAgICAgICBjdHgubGluZVRvKHA0LngsIHA0LnkpO1xuICAgICAgICAvLyBUaGUgY29ybmVyIHNlZ21lbnQgZnJvbSBwb2ludCA0IHRvIHBvaW50IDVcbiAgICAgICAgaWYgKGlubmVyRW5kID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJFbmRBZGp1c3RlZFJhZGl1cywgaW5uZXJFbmRBZGp1c3RlZEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgICAgIGN0eC5hcmMocENlbnRlci54LCBwQ2VudGVyLnksIGlubmVyRW5kLCBlbmRBbmdsZSArIEhBTEZfUEksIGlubmVyRW5kQWRqdXN0ZWRBbmdsZSArIE1hdGguUEkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBpbm5lciBhcmMgZnJvbSBwb2ludCA1IHRvIHBvaW50IGIgdG8gcG9pbnQgNlxuICAgICAgICBjb25zdCBpbm5lck1pZEFkanVzdGVkQW5nbGUgPSAoZW5kQW5nbGUgLSBpbm5lckVuZCAvIGlubmVyUmFkaXVzICsgKHN0YXJ0QW5nbGUgKyBpbm5lclN0YXJ0IC8gaW5uZXJSYWRpdXMpKSAvIDI7XG4gICAgICAgIGN0eC5hcmMoeCwgeSwgaW5uZXJSYWRpdXMsIGVuZEFuZ2xlIC0gaW5uZXJFbmQgLyBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCB0cnVlKTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCBpbm5lclJhZGl1cywgaW5uZXJNaWRBZGp1c3RlZEFuZ2xlLCBzdGFydEFuZ2xlICsgaW5uZXJTdGFydCAvIGlubmVyUmFkaXVzLCB0cnVlKTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgNiB0byBwb2ludCA3XG4gICAgICAgIGlmIChpbm5lclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkoaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzLCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBpbm5lclN0YXJ0LCBpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSArIE1hdGguUEksIHN0YXJ0QW5nbGUgLSBIQUxGX1BJKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGluZSBmcm9tIHBvaW50IDcgdG8gcG9pbnQgOFxuICAgICAgICBjb25zdCBwOCA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBzdGFydEFuZ2xlLCB4LCB5KTtcbiAgICAgICAgY3R4LmxpbmVUbyhwOC54LCBwOC55KTtcbiAgICAgICAgLy8gVGhlIGNvcm5lciBzZWdtZW50IGZyb20gcG9pbnQgOCB0byBwb2ludCAxXG4gICAgICAgIGlmIChvdXRlclN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcENlbnRlciA9IHJUaGV0YVRvWFkob3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzLCBvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSwgeCwgeSk7XG4gICAgICAgICAgICBjdHguYXJjKHBDZW50ZXIueCwgcENlbnRlci55LCBvdXRlclN0YXJ0LCBzdGFydEFuZ2xlIC0gSEFMRl9QSSwgb3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgY29uc3Qgb3V0ZXJTdGFydFggPSBNYXRoLmNvcyhvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyU3RhcnRZID0gTWF0aC5zaW4ob3V0ZXJTdGFydEFkanVzdGVkQW5nbGUpICogb3V0ZXJSYWRpdXMgKyB5O1xuICAgICAgICBjdHgubGluZVRvKG91dGVyU3RhcnRYLCBvdXRlclN0YXJ0WSk7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWCA9IE1hdGguY29zKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHg7XG4gICAgICAgIGNvbnN0IG91dGVyRW5kWSA9IE1hdGguc2luKG91dGVyRW5kQWRqdXN0ZWRBbmdsZSkgKiBvdXRlclJhZGl1cyArIHk7XG4gICAgICAgIGN0eC5saW5lVG8ob3V0ZXJFbmRYLCBvdXRlckVuZFkpO1xuICAgIH1cbiAgICBjdHguY2xvc2VQYXRoKCk7XG59XG5mdW5jdGlvbiBkcmF3QXJjKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAgfSA9IGVsZW1lbnQ7XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTmFOKGNpcmN1bWZlcmVuY2UpKSB7XG4gICAgICAgICAgICBlbmRBbmdsZSA9IHN0YXJ0QW5nbGUgKyAoY2lyY3VtZmVyZW5jZSAlIFRBVSB8fCBUQVUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhdGhBcmMoY3R4LCBlbGVtZW50LCBvZmZzZXQsIHNwYWNpbmcsIGVuZEFuZ2xlLCBjaXJjdWxhcik7XG4gICAgY3R4LmZpbGwoKTtcbiAgICByZXR1cm4gZW5kQW5nbGU7XG59XG5mdW5jdGlvbiBkcmF3Qm9yZGVyKGN0eCwgZWxlbWVudCwgb2Zmc2V0LCBzcGFjaW5nLCBjaXJjdWxhcikge1xuICAgIGNvbnN0IHsgZnVsbENpcmNsZXMgLCBzdGFydEFuZ2xlICwgY2lyY3VtZmVyZW5jZSAsIG9wdGlvbnMgIH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgYm9yZGVyV2lkdGggLCBib3JkZXJKb2luU3R5bGUgLCBib3JkZXJEYXNoICwgYm9yZGVyRGFzaE9mZnNldCAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgaW5uZXIgPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInO1xuICAgIGlmICghYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2V0TGluZURhc2goYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyRGFzaE9mZnNldDtcbiAgICBpZiAoaW5uZXIpIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoICogMjtcbiAgICAgICAgY3R4LmxpbmVKb2luID0gYm9yZGVySm9pblN0eWxlIHx8ICdyb3VuZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJvcmRlcldpZHRoO1xuICAgICAgICBjdHgubGluZUpvaW4gPSBib3JkZXJKb2luU3R5bGUgfHwgJ2JldmVsJztcbiAgICB9XG4gICAgbGV0IGVuZEFuZ2xlID0gZWxlbWVudC5lbmRBbmdsZTtcbiAgICBpZiAoZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZ1bGxDaXJjbGVzOyArK2kpe1xuICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4oY2lyY3VtZmVyZW5jZSkpIHtcbiAgICAgICAgICAgIGVuZEFuZ2xlID0gc3RhcnRBbmdsZSArIChjaXJjdW1mZXJlbmNlICUgVEFVIHx8IFRBVSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlubmVyKSB7XG4gICAgICAgIGNsaXBBcmMoY3R4LCBlbGVtZW50LCBlbmRBbmdsZSk7XG4gICAgfVxuICAgIGlmICghZnVsbENpcmNsZXMpIHtcbiAgICAgICAgcGF0aEFyYyhjdHgsIGVsZW1lbnQsIG9mZnNldCwgc3BhY2luZywgZW5kQW5nbGUsIGNpcmN1bGFyKTtcbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNsYXNzIEFyY0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnYXJjJztcbiAgICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlckFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9yZGVyRGFzaDogW10sXG4gICAgICAgIGJvcmRlckRhc2hPZmZzZXQ6IDAsXG4gICAgICAgIGJvcmRlckpvaW5TdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNwYWNpbmc6IDAsXG4gICAgICAgIGFuZ2xlOiB1bmRlZmluZWQsXG4gICAgICAgIGNpcmN1bGFyOiB0cnVlXG4gICAgfTtcbiAgICBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBfc2NyaXB0YWJsZTogdHJ1ZSxcbiAgICAgICAgX2luZGV4YWJsZTogKG5hbWUpPT5uYW1lICE9PSAnYm9yZGVyRGFzaCdcbiAgICB9O1xuICAgIGNpcmN1bWZlcmVuY2U7XG4gICAgZW5kQW5nbGU7XG4gICAgZnVsbENpcmNsZXM7XG4gICAgaW5uZXJSYWRpdXM7XG4gICAgb3V0ZXJSYWRpdXM7XG4gICAgcGl4ZWxNYXJnaW47XG4gICAgc3RhcnRBbmdsZTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2lyY3VtZmVyZW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdGFydEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmVuZEFuZ2xlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlubmVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm91dGVyUmFkaXVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBpeGVsTWFyZ2luID0gMDtcbiAgICAgICAgdGhpcy5mdWxsQ2lyY2xlcyA9IDA7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpblJhbmdlKGNoYXJ0WCwgY2hhcnRZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHsgYW5nbGUgLCBkaXN0YW5jZSAgfSA9IGdldEFuZ2xlRnJvbVBvaW50KHBvaW50LCB7XG4gICAgICAgICAgICB4OiBjaGFydFgsXG4gICAgICAgICAgICB5OiBjaGFydFlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAsIGNpcmN1bWZlcmVuY2UgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICdzdGFydEFuZ2xlJyxcbiAgICAgICAgICAgICdlbmRBbmdsZScsXG4gICAgICAgICAgICAnaW5uZXJSYWRpdXMnLFxuICAgICAgICAgICAgJ291dGVyUmFkaXVzJyxcbiAgICAgICAgICAgICdjaXJjdW1mZXJlbmNlJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgckFkanVzdCA9ICh0aGlzLm9wdGlvbnMuc3BhY2luZyArIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aCkgLyAyO1xuICAgICAgICBjb25zdCBfY2lyY3VtZmVyZW5jZSA9IHZhbHVlT3JEZWZhdWx0KGNpcmN1bWZlcmVuY2UsIGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSk7XG4gICAgICAgIGNvbnN0IG5vblplcm9CZXR3ZWVuID0gX2FuZ2xlQmV0d2VlbihhbmdsZSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUpICYmIHN0YXJ0QW5nbGUgIT09IGVuZEFuZ2xlO1xuICAgICAgICBjb25zdCBiZXR3ZWVuQW5nbGVzID0gX2NpcmN1bWZlcmVuY2UgPj0gVEFVIHx8IG5vblplcm9CZXR3ZWVuO1xuICAgICAgICBjb25zdCB3aXRoaW5SYWRpdXMgPSBfaXNCZXR3ZWVuKGRpc3RhbmNlLCBpbm5lclJhZGl1cyArIHJBZGp1c3QsIG91dGVyUmFkaXVzICsgckFkanVzdCk7XG4gICAgICAgIHJldHVybiBiZXR3ZWVuQW5nbGVzICYmIHdpdGhpblJhZGl1cztcbiAgICB9XG4gICAgZ2V0Q2VudGVyUG9pbnQodXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgc3RhcnRBbmdsZSAsIGVuZEFuZ2xlICwgaW5uZXJSYWRpdXMgLCBvdXRlclJhZGl1cyAgfSA9IHRoaXMuZ2V0UHJvcHMoW1xuICAgICAgICAgICAgJ3gnLFxuICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgJ3N0YXJ0QW5nbGUnLFxuICAgICAgICAgICAgJ2VuZEFuZ2xlJyxcbiAgICAgICAgICAgICdpbm5lclJhZGl1cycsXG4gICAgICAgICAgICAnb3V0ZXJSYWRpdXMnXG4gICAgICAgIF0sIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IG9mZnNldCAsIHNwYWNpbmcgIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGhhbGZBbmdsZSA9IChzdGFydEFuZ2xlICsgZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZlJhZGl1cyA9IChpbm5lclJhZGl1cyArIG91dGVyUmFkaXVzICsgc3BhY2luZyArIG9mZnNldCkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzLFxuICAgICAgICAgICAgeTogeSArIE1hdGguc2luKGhhbGZBbmdsZSkgKiBoYWxmUmFkaXVzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvb2x0aXBQb3NpdGlvbih1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbnRlclBvaW50KHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBkcmF3KGN0eCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjaXJjdW1mZXJlbmNlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKG9wdGlvbnMub2Zmc2V0IHx8IDApIC8gNDtcbiAgICAgICAgY29uc3Qgc3BhY2luZyA9IChvcHRpb25zLnNwYWNpbmcgfHwgMCkgLyAyO1xuICAgICAgICBjb25zdCBjaXJjdWxhciA9IG9wdGlvbnMuY2lyY3VsYXI7XG4gICAgICAgIHRoaXMucGl4ZWxNYXJnaW4gPSBvcHRpb25zLmJvcmRlckFsaWduID09PSAnaW5uZXInID8gMC4zMyA6IDA7XG4gICAgICAgIHRoaXMuZnVsbENpcmNsZXMgPSBjaXJjdW1mZXJlbmNlID4gVEFVID8gTWF0aC5mbG9vcihjaXJjdW1mZXJlbmNlIC8gVEFVKSA6IDA7XG4gICAgICAgIGlmIChjaXJjdW1mZXJlbmNlID09PSAwIHx8IHRoaXMuaW5uZXJSYWRpdXMgPCAwIHx8IHRoaXMub3V0ZXJSYWRpdXMgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY29uc3QgaGFsZkFuZ2xlID0gKHRoaXMuc3RhcnRBbmdsZSArIHRoaXMuZW5kQW5nbGUpIC8gMjtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShNYXRoLmNvcyhoYWxmQW5nbGUpICogb2Zmc2V0LCBNYXRoLnNpbihoYWxmQW5nbGUpICogb2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZml4ID0gMSAtIE1hdGguc2luKE1hdGgubWluKFBJLCBjaXJjdW1mZXJlbmNlIHx8IDApKTtcbiAgICAgICAgY29uc3QgcmFkaXVzT2Zmc2V0ID0gb2Zmc2V0ICogZml4O1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuYm9yZGVyQ29sb3I7XG4gICAgICAgIGRyYXdBcmMoY3R4LCB0aGlzLCByYWRpdXNPZmZzZXQsIHNwYWNpbmcsIGNpcmN1bGFyKTtcbiAgICAgICAgZHJhd0JvcmRlcihjdHgsIHRoaXMsIHJhZGl1c09mZnNldCwgc3BhY2luZywgY2lyY3VsYXIpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0U3R5bGUoY3R4LCBvcHRpb25zLCBzdHlsZSA9IG9wdGlvbnMpIHtcbiAgICBjdHgubGluZUNhcCA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNhcFN0eWxlLCBvcHRpb25zLmJvcmRlckNhcFN0eWxlKTtcbiAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaCwgb3B0aW9ucy5ib3JkZXJEYXNoKSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyRGFzaE9mZnNldCwgb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0KTtcbiAgICBjdHgubGluZUpvaW4gPSB2YWx1ZU9yRGVmYXVsdChzdHlsZS5ib3JkZXJKb2luU3R5bGUsIG9wdGlvbnMuYm9yZGVySm9pblN0eWxlKTtcbiAgICBjdHgubGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQoc3R5bGUuYm9yZGVyV2lkdGgsIG9wdGlvbnMuYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KHN0eWxlLmJvcmRlckNvbG9yLCBvcHRpb25zLmJvcmRlckNvbG9yKTtcbn1cbmZ1bmN0aW9uIGxpbmVUbyhjdHgsIHByZXZpb3VzLCB0YXJnZXQpIHtcbiAgICBjdHgubGluZVRvKHRhcmdldC54LCB0YXJnZXQueSk7XG59XG4gZnVuY3Rpb24gZ2V0TGluZU1ldGhvZChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RlcHBlZCkge1xuICAgICAgICByZXR1cm4gX3N0ZXBwZWRMaW5lVG87XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVyQ3VydmVUbztcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVUbztcbn1cbmZ1bmN0aW9uIHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCBjb3VudCA9IHBvaW50cy5sZW5ndGg7XG4gICAgY29uc3QgeyBzdGFydDogcGFyYW1zU3RhcnQgPSAwICwgZW5kOiBwYXJhbXNFbmQgPSBjb3VudCAtIDEgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgeyBzdGFydDogc2VnbWVudFN0YXJ0ICwgZW5kOiBzZWdtZW50RW5kICB9ID0gc2VnbWVudDtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KHBhcmFtc1N0YXJ0LCBzZWdtZW50U3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHBhcmFtc0VuZCwgc2VnbWVudEVuZCk7XG4gICAgY29uc3Qgb3V0c2lkZSA9IHBhcmFtc1N0YXJ0IDwgc2VnbWVudFN0YXJ0ICYmIHBhcmFtc0VuZCA8IHNlZ21lbnRTdGFydCB8fCBwYXJhbXNTdGFydCA+IHNlZ21lbnRFbmQgJiYgcGFyYW1zRW5kID4gc2VnbWVudEVuZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb3VudCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGxvb3A6IHNlZ21lbnQubG9vcCxcbiAgICAgICAgaWxlbjogZW5kIDwgc3RhcnQgJiYgIW91dHNpZGUgPyBjb3VudCArIGVuZCAtIHN0YXJ0IDogZW5kIC0gc3RhcnRcbiAgICB9O1xufVxuIGZ1bmN0aW9uIHBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgeyBwb2ludHMgLCBvcHRpb25zICB9ID0gbGluZTtcbiAgICBjb25zdCB7IGNvdW50ICwgc3RhcnQgLCBsb29wICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCBsaW5lTWV0aG9kID0gZ2V0TGluZU1ldGhvZChvcHRpb25zKTtcbiAgICBsZXQgeyBtb3ZlID10cnVlICwgcmV2ZXJzZSAgfSA9IHBhcmFtcyB8fCB7fTtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXY7XG4gICAgZm9yKGkgPSAwOyBpIDw9IGlsZW47ICsraSl7XG4gICAgICAgIHBvaW50ID0gcG9pbnRzWyhzdGFydCArIChyZXZlcnNlID8gaWxlbiAtIGkgOiBpKSkgJSBjb3VudF07XG4gICAgICAgIGlmIChwb2ludC5za2lwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3ZlKSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgICAgICAgbW92ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZU1ldGhvZChjdHgsIHByZXYsIHBvaW50LCByZXZlcnNlLCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICB9XG4gICAgICAgIHByZXYgPSBwb2ludDtcbiAgICB9XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbKHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIDogMCkpICUgY291bnRdO1xuICAgICAgICBsaW5lTWV0aG9kKGN0eCwgcHJldiwgcG9pbnQsIHJldmVyc2UsIG9wdGlvbnMuc3RlcHBlZCk7XG4gICAgfVxuICAgIHJldHVybiAhIWxvb3A7XG59XG4gZnVuY3Rpb24gZmFzdFBhdGhTZWdtZW50KGN0eCwgbGluZSwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgY29uc3QgcG9pbnRzID0gbGluZS5wb2ludHM7XG4gICAgY29uc3QgeyBjb3VudCAsIHN0YXJ0ICwgaWxlbiAgfSA9IHBhdGhWYXJzKHBvaW50cywgc2VnbWVudCwgcGFyYW1zKTtcbiAgICBjb25zdCB7IG1vdmUgPXRydWUgLCByZXZlcnNlICB9ID0gcGFyYW1zIHx8IHt9O1xuICAgIGxldCBhdmdYID0gMDtcbiAgICBsZXQgY291bnRYID0gMDtcbiAgICBsZXQgaSwgcG9pbnQsIHByZXZYLCBtaW5ZLCBtYXhZLCBsYXN0WTtcbiAgICBjb25zdCBwb2ludEluZGV4ID0gKGluZGV4KT0+KHN0YXJ0ICsgKHJldmVyc2UgPyBpbGVuIC0gaW5kZXggOiBpbmRleCkpICUgY291bnQ7XG4gICAgY29uc3QgZHJhd1ggPSAoKT0+e1xuICAgICAgICBpZiAobWluWSAhPT0gbWF4WSkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhhdmdYLCBtYXhZKTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oYXZnWCwgbWluWSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKGF2Z1gsIGxhc3RZKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKG1vdmUpIHtcbiAgICAgICAgcG9pbnQgPSBwb2ludHNbcG9pbnRJbmRleCgwKV07XG4gICAgICAgIGN0eC5tb3ZlVG8ocG9pbnQueCwgcG9pbnQueSk7XG4gICAgfVxuICAgIGZvcihpID0gMDsgaSA8PSBpbGVuOyArK2kpe1xuICAgICAgICBwb2ludCA9IHBvaW50c1twb2ludEluZGV4KGkpXTtcbiAgICAgICAgaWYgKHBvaW50LnNraXApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBwb2ludC54O1xuICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcbiAgICAgICAgY29uc3QgdHJ1bmNYID0geCB8IDA7XG4gICAgICAgIGlmICh0cnVuY1ggPT09IHByZXZYKSB7XG4gICAgICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICAgICAgICBtaW5ZID0geTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF2Z1ggPSAoY291bnRYICogYXZnWCArIHgpIC8gKytjb3VudFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkcmF3WCgpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0WSA9IHk7XG4gICAgfVxuICAgIGRyYXdYKCk7XG59XG4gZnVuY3Rpb24gX2dldFNlZ21lbnRNZXRob2QobGluZSkge1xuICAgIGNvbnN0IG9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgYm9yZGVyRGFzaCA9IG9wdHMuYm9yZGVyRGFzaCAmJiBvcHRzLmJvcmRlckRhc2gubGVuZ3RoO1xuICAgIGNvbnN0IHVzZUZhc3RQYXRoID0gIWxpbmUuX2RlY2ltYXRlZCAmJiAhbGluZS5fbG9vcCAmJiAhb3B0cy50ZW5zaW9uICYmIG9wdHMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSAhPT0gJ21vbm90b25lJyAmJiAhb3B0cy5zdGVwcGVkICYmICFib3JkZXJEYXNoO1xuICAgIHJldHVybiB1c2VGYXN0UGF0aCA/IGZhc3RQYXRoU2VnbWVudCA6IHBhdGhTZWdtZW50O1xufVxuIGZ1bmN0aW9uIF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5zdGVwcGVkKSB7XG4gICAgICAgIHJldHVybiBfc3RlcHBlZEludGVycG9sYXRpb247XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbnNpb24gfHwgb3B0aW9ucy5jdWJpY0ludGVycG9sYXRpb25Nb2RlID09PSAnbW9ub3RvbmUnKSB7XG4gICAgICAgIHJldHVybiBfYmV6aWVySW50ZXJwb2xhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIF9wb2ludEluTGluZTtcbn1cbmZ1bmN0aW9uIHN0cm9rZVBhdGhXaXRoQ2FjaGUoY3R4LCBsaW5lLCBzdGFydCwgY291bnQpIHtcbiAgICBsZXQgcGF0aCA9IGxpbmUuX3BhdGg7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIHBhdGggPSBsaW5lLl9wYXRoID0gbmV3IFBhdGgyRCgpO1xuICAgICAgICBpZiAobGluZS5wYXRoKHBhdGgsIHN0YXJ0LCBjb3VudCkpIHtcbiAgICAgICAgICAgIHBhdGguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0U3R5bGUoY3R4LCBsaW5lLm9wdGlvbnMpO1xuICAgIGN0eC5zdHJva2UocGF0aCk7XG59XG5mdW5jdGlvbiBzdHJva2VQYXRoRGlyZWN0KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgY29uc3QgeyBzZWdtZW50cyAsIG9wdGlvbnMgIH0gPSBsaW5lO1xuICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZChsaW5lKTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe1xuICAgICAgICBzZXRTdHlsZShjdHgsIG9wdGlvbnMsIHNlZ21lbnQuc3R5bGUpO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChzZWdtZW50TWV0aG9kKGN0eCwgbGluZSwgc2VnbWVudCwge1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH1cbn1cbmNvbnN0IHVzZVBhdGgyRCA9IHR5cGVvZiBQYXRoMkQgPT09ICdmdW5jdGlvbic7XG5mdW5jdGlvbiBkcmF3KGN0eCwgbGluZSwgc3RhcnQsIGNvdW50KSB7XG4gICAgaWYgKHVzZVBhdGgyRCAmJiAhbGluZS5vcHRpb25zLnNlZ21lbnQpIHtcbiAgICAgICAgc3Ryb2tlUGF0aFdpdGhDYWNoZShjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3Ryb2tlUGF0aERpcmVjdChjdHgsIGxpbmUsIHN0YXJ0LCBjb3VudCk7XG4gICAgfVxufVxuY2xhc3MgTGluZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICBib3JkZXJDYXBTdHlsZTogJ2J1dHQnLFxuICAgICAgICBib3JkZXJEYXNoOiBbXSxcbiAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMCxcbiAgICAgICAgYm9yZGVySm9pblN0eWxlOiAnbWl0ZXInLFxuICAgICAgICBib3JkZXJXaWR0aDogMyxcbiAgICAgICAgY2FwQmV6aWVyUG9pbnRzOiB0cnVlLFxuICAgICAgICBjdWJpY0ludGVycG9sYXRpb25Nb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICBzcGFuR2FwczogZmFsc2UsXG4gICAgICAgIHN0ZXBwZWQ6IGZhbHNlLFxuICAgICAgICB0ZW5zaW9uOiAwXG4gICAgfTtcbiBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIHN0YXRpYyBkZXNjcmlwdG9ycyA9IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IChuYW1lKT0+bmFtZSAhPT0gJ2JvcmRlckRhc2gnICYmIG5hbWUgIT09ICdmaWxsJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbmltYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2Z1bGxMb29wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9wb2ludHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NlZ21lbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9kZWNpbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRhc2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2ZnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDb250cm9sUG9pbnRzKGNoYXJ0QXJlYSwgaW5kZXhBeGlzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICgob3B0aW9ucy50ZW5zaW9uIHx8IG9wdGlvbnMuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSA9PT0gJ21vbm90b25lJykgJiYgIW9wdGlvbnMuc3RlcHBlZCAmJiAhdGhpcy5fcG9pbnRzVXBkYXRlZCkge1xuICAgICAgICAgICAgY29uc3QgbG9vcCA9IG9wdGlvbnMuc3BhbkdhcHMgPyB0aGlzLl9sb29wIDogdGhpcy5fZnVsbExvb3A7XG4gICAgICAgICAgICBfdXBkYXRlQmV6aWVyQ29udHJvbFBvaW50cyh0aGlzLl9wb2ludHMsIG9wdGlvbnMsIGNoYXJ0QXJlYSwgbG9vcCwgaW5kZXhBeGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBwb2ludHMocG9pbnRzKSB7XG4gICAgICAgIHRoaXMuX3BvaW50cyA9IHBvaW50cztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3NlZ21lbnRzO1xuICAgICAgICBkZWxldGUgdGhpcy5fcGF0aDtcbiAgICAgICAgdGhpcy5fcG9pbnRzVXBkYXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgcG9pbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9pbnRzO1xuICAgIH1cbiAgICBnZXQgc2VnbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWdtZW50cyB8fCAodGhpcy5fc2VnbWVudHMgPSBfY29tcHV0ZVNlZ21lbnRzKHRoaXMsIHRoaXMub3B0aW9ucy5zZWdtZW50KSk7XG4gICAgfVxuIGZpcnN0KCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICAgICAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoICYmIHBvaW50c1tzZWdtZW50c1swXS5zdGFydF07XG4gICAgfVxuIGxhc3QoKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHM7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gc2VnbWVudHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gY291bnQgJiYgcG9pbnRzW3NlZ21lbnRzW2NvdW50IC0gMV0uZW5kXTtcbiAgICB9XG4gaW50ZXJwb2xhdGUocG9pbnQsIHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcG9pbnRbcHJvcGVydHldO1xuICAgICAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0aGlzLCB7XG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgIGVuZDogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IF9pbnRlcnBvbGF0ZSA9IF9nZXRJbnRlcnBvbGF0aW9uTWV0aG9kKG9wdGlvbnMpO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2VuZF07XG4gICAgICAgICAgICBpZiAocDEgPT09IHAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocDEpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguYWJzKCh2YWx1ZSAtIHAxW3Byb3BlcnR5XSkgLyAocDJbcHJvcGVydHldIC0gcDFbcHJvcGVydHldKSk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWQgPSBfaW50ZXJwb2xhdGUocDEsIHAyLCB0LCBvcHRpb25zLnN0ZXBwZWQpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdGVkW3Byb3BlcnR5XSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGludGVycG9sYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDEgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgfVxuIHBhdGhTZWdtZW50KGN0eCwgc2VnbWVudCwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRNZXRob2QgPSBfZ2V0U2VnbWVudE1ldGhvZCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRNZXRob2QoY3R4LCB0aGlzLCBzZWdtZW50LCBwYXJhbXMpO1xuICAgIH1cbiBwYXRoKGN0eCwgc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cztcbiAgICAgICAgY29uc3Qgc2VnbWVudE1ldGhvZCA9IF9nZXRTZWdtZW50TWV0aG9kKHRoaXMpO1xuICAgICAgICBsZXQgbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICAgICAgY291bnQgPSBjb3VudCB8fCB0aGlzLnBvaW50cy5sZW5ndGggLSBzdGFydDtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtcbiAgICAgICAgICAgIGxvb3AgJj0gc2VnbWVudE1ldGhvZChjdHgsIHRoaXMsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0ICsgY291bnQgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFsb29wO1xuICAgIH1cbiBkcmF3KGN0eCwgY2hhcnRBcmVhLCBzdGFydCwgY291bnQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHMgfHwgW107XG4gICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIG9wdGlvbnMuYm9yZGVyV2lkdGgpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBkcmF3KGN0eCwgdGhpcywgc3RhcnQsIGNvdW50KTtcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvaW50c1VwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3BhdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluUmFuZ2UkMShlbCwgcG9zLCBheGlzLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGVsLm9wdGlvbnM7XG4gICAgY29uc3QgeyBbYXhpc106IHZhbHVlICB9ID0gZWwuZ2V0UHJvcHMoW1xuICAgICAgICBheGlzXG4gICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgcmV0dXJuIE1hdGguYWJzKHBvcyAtIHZhbHVlKSA8IG9wdGlvbnMucmFkaXVzICsgb3B0aW9ucy5oaXRSYWRpdXM7XG59XG5jbGFzcyBQb2ludEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBzdGF0aWMgaWQgPSAncG9pbnQnO1xuICAgIHBhcnNlZDtcbiAgICBza2lwO1xuICAgIHN0b3A7XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICBoaXRSYWRpdXM6IDEsXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGhvdmVyUmFkaXVzOiA0LFxuICAgICAgICBwb2ludFN0eWxlOiAnY2lyY2xlJyxcbiAgICAgICAgcmFkaXVzOiAzLFxuICAgICAgICByb3RhdGlvbjogMFxuICAgIH07XG4gICAgLyoqXG4gICAqIEB0eXBlIHthbnl9XG4gICAqLyBzdGF0aWMgZGVmYXVsdFJvdXRlcyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6ICdib3JkZXJDb2xvcidcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2tpcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdG9wID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNmZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5SYW5nZShtb3VzZVgsIG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5nZXRQcm9wcyhbXG4gICAgICAgICAgICAneCcsXG4gICAgICAgICAgICAneSdcbiAgICAgICAgXSwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhtb3VzZVggLSB4LCAyKSArIE1hdGgucG93KG1vdXNlWSAtIHksIDIpIDwgTWF0aC5wb3cob3B0aW9ucy5oaXRSYWRpdXMgKyBvcHRpb25zLnJhZGl1cywgMik7XG4gICAgfVxuICAgIGluWFJhbmdlKG1vdXNlWCwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSQxKHRoaXMsIG1vdXNlWCwgJ3gnLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5ZUmFuZ2UobW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlJDEodGhpcywgbW91c2VZLCAneScsIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5J1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIHNpemUob3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMgfHwge307XG4gICAgICAgIGxldCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAwO1xuICAgICAgICByYWRpdXMgPSBNYXRoLm1heChyYWRpdXMsIHJhZGl1cyAmJiBvcHRpb25zLmhvdmVyUmFkaXVzIHx8IDApO1xuICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHJhZGl1cyAmJiBvcHRpb25zLmJvcmRlcldpZHRoIHx8IDA7XG4gICAgICAgIHJldHVybiAocmFkaXVzICsgYm9yZGVyV2lkdGgpICogMjtcbiAgICB9XG4gICAgZHJhdyhjdHgsIGFyZWEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuc2tpcCB8fCBvcHRpb25zLnJhZGl1cyA8IDAuMSB8fCAhX2lzUG9pbnRJbkFyZWEodGhpcywgYXJlYSwgdGhpcy5zaXplKG9wdGlvbnMpIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBkcmF3UG9pbnQoY3R4LCBvcHRpb25zLCB0aGlzLngsIHRoaXMueSk7XG4gICAgfVxuICAgIGdldFJhbmdlKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IHt9O1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZhbGxiYWNrcyBzaG91bGQgbmV2ZXIgYmUgaGl0IGluIHByYWN0aWNlXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJhZGl1cyArIG9wdGlvbnMuaGl0UmFkaXVzO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFyQm91bmRzKGJhciwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgd2lkdGggLCBoZWlnaHQgIH0gPSAgYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ3gnLFxuICAgICAgICAneScsXG4gICAgICAgICdiYXNlJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCdcbiAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICBsZXQgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBoYWxmO1xuICAgIGlmIChiYXIuaG9yaXpvbnRhbCkge1xuICAgICAgICBoYWxmID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgbGVmdCA9IE1hdGgubWluKHgsIGJhc2UpO1xuICAgICAgICByaWdodCA9IE1hdGgubWF4KHgsIGJhc2UpO1xuICAgICAgICB0b3AgPSB5IC0gaGFsZjtcbiAgICAgICAgYm90dG9tID0geSArIGhhbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGFsZiA9IHdpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IHggLSBoYWxmO1xuICAgICAgICByaWdodCA9IHggKyBoYWxmO1xuICAgICAgICB0b3AgPSBNYXRoLm1pbih5LCBiYXNlKTtcbiAgICAgICAgYm90dG9tID0gTWF0aC5tYXgoeSwgYmFzZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5mdW5jdGlvbiBza2lwT3JMaW1pdChza2lwLCB2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gc2tpcCA/IDAgOiBfbGltaXRWYWx1ZSh2YWx1ZSwgbWluLCBtYXgpO1xufVxuZnVuY3Rpb24gcGFyc2VCb3JkZXJXaWR0aChiYXIsIG1heFcsIG1heEgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlcldpZHRoO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBvID0gdG9UUkJMKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0OiBza2lwT3JMaW1pdChza2lwLnRvcCwgby50b3AsIDAsIG1heEgpLFxuICAgICAgICByOiBza2lwT3JMaW1pdChza2lwLnJpZ2h0LCBvLnJpZ2h0LCAwLCBtYXhXKSxcbiAgICAgICAgYjogc2tpcE9yTGltaXQoc2tpcC5ib3R0b20sIG8uYm90dG9tLCAwLCBtYXhIKSxcbiAgICAgICAgbDogc2tpcE9yTGltaXQoc2tpcC5sZWZ0LCBvLmxlZnQsIDAsIG1heFcpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlQm9yZGVyUmFkaXVzKGJhciwgbWF4VywgbWF4SCkge1xuICAgIGNvbnN0IHsgZW5hYmxlQm9yZGVyUmFkaXVzICB9ID0gYmFyLmdldFByb3BzKFtcbiAgICAgICAgJ2VuYWJsZUJvcmRlclJhZGl1cydcbiAgICBdKTtcbiAgICBjb25zdCB2YWx1ZSA9IGJhci5vcHRpb25zLmJvcmRlclJhZGl1cztcbiAgICBjb25zdCBvID0gdG9UUkJMQ29ybmVycyh2YWx1ZSk7XG4gICAgY29uc3QgbWF4UiA9IE1hdGgubWluKG1heFcsIG1heEgpO1xuICAgIGNvbnN0IHNraXAgPSBiYXIuYm9yZGVyU2tpcHBlZDtcbiAgICBjb25zdCBlbmFibGVCb3JkZXIgPSBlbmFibGVCb3JkZXJSYWRpdXMgfHwgaXNPYmplY3QodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcExlZnQ6IHNraXBPckxpbWl0KCFlbmFibGVCb3JkZXIgfHwgc2tpcC50b3AgfHwgc2tpcC5sZWZ0LCBvLnRvcExlZnQsIDAsIG1heFIpLFxuICAgICAgICB0b3BSaWdodDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLnRvcCB8fCBza2lwLnJpZ2h0LCBvLnRvcFJpZ2h0LCAwLCBtYXhSKSxcbiAgICAgICAgYm90dG9tTGVmdDogc2tpcE9yTGltaXQoIWVuYWJsZUJvcmRlciB8fCBza2lwLmJvdHRvbSB8fCBza2lwLmxlZnQsIG8uYm90dG9tTGVmdCwgMCwgbWF4UiksXG4gICAgICAgIGJvdHRvbVJpZ2h0OiBza2lwT3JMaW1pdCghZW5hYmxlQm9yZGVyIHx8IHNraXAuYm90dG9tIHx8IHNraXAucmlnaHQsIG8uYm90dG9tUmlnaHQsIDAsIG1heFIpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJvdW5kaW5nUmVjdHMoYmFyKSB7XG4gICAgY29uc3QgYm91bmRzID0gZ2V0QmFyQm91bmRzKGJhcik7XG4gICAgY29uc3Qgd2lkdGggPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdDtcbiAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDtcbiAgICBjb25zdCBib3JkZXIgPSBwYXJzZUJvcmRlcldpZHRoKGJhciwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICBjb25zdCByYWRpdXMgPSBwYXJzZUJvcmRlclJhZGl1cyhiYXIsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3V0ZXI6IHtcbiAgICAgICAgICAgIHg6IGJvdW5kcy5sZWZ0LFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCxcbiAgICAgICAgICAgIHc6IHdpZHRoLFxuICAgICAgICAgICAgaDogaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzXG4gICAgICAgIH0sXG4gICAgICAgIGlubmVyOiB7XG4gICAgICAgICAgICB4OiBib3VuZHMubGVmdCArIGJvcmRlci5sLFxuICAgICAgICAgICAgeTogYm91bmRzLnRvcCArIGJvcmRlci50LFxuICAgICAgICAgICAgdzogd2lkdGggLSBib3JkZXIubCAtIGJvcmRlci5yLFxuICAgICAgICAgICAgaDogaGVpZ2h0IC0gYm9yZGVyLnQgLSBib3JkZXIuYixcbiAgICAgICAgICAgIHJhZGl1czoge1xuICAgICAgICAgICAgICAgIHRvcExlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BMZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLnQsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgdG9wUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy50b3BSaWdodCAtIE1hdGgubWF4KGJvcmRlci50LCBib3JkZXIucikpLFxuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21MZWZ0IC0gTWF0aC5tYXgoYm9yZGVyLmIsIGJvcmRlci5sKSksXG4gICAgICAgICAgICAgICAgYm90dG9tUmlnaHQ6IE1hdGgubWF4KDAsIHJhZGl1cy5ib3R0b21SaWdodCAtIE1hdGgubWF4KGJvcmRlci5iLCBib3JkZXIucikpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gaW5SYW5nZShiYXIsIHgsIHksIHVzZUZpbmFsUG9zaXRpb24pIHtcbiAgICBjb25zdCBza2lwWCA9IHggPT09IG51bGw7XG4gICAgY29uc3Qgc2tpcFkgPSB5ID09PSBudWxsO1xuICAgIGNvbnN0IHNraXBCb3RoID0gc2tpcFggJiYgc2tpcFk7XG4gICAgY29uc3QgYm91bmRzID0gYmFyICYmICFza2lwQm90aCAmJiBnZXRCYXJCb3VuZHMoYmFyLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICByZXR1cm4gYm91bmRzICYmIChza2lwWCB8fCBfaXNCZXR3ZWVuKHgsIGJvdW5kcy5sZWZ0LCBib3VuZHMucmlnaHQpKSAmJiAoc2tpcFkgfHwgX2lzQmV0d2Vlbih5LCBib3VuZHMudG9wLCBib3VuZHMuYm90dG9tKSk7XG59XG5mdW5jdGlvbiBoYXNSYWRpdXMocmFkaXVzKSB7XG4gICAgcmV0dXJuIHJhZGl1cy50b3BMZWZ0IHx8IHJhZGl1cy50b3BSaWdodCB8fCByYWRpdXMuYm90dG9tTGVmdCB8fCByYWRpdXMuYm90dG9tUmlnaHQ7XG59XG4gZnVuY3Rpb24gYWRkTm9ybWFsUmVjdFBhdGgoY3R4LCByZWN0KSB7XG4gICAgY3R4LnJlY3QocmVjdC54LCByZWN0LnksIHJlY3QudywgcmVjdC5oKTtcbn1cbmZ1bmN0aW9uIGluZmxhdGVSZWN0KHJlY3QsIGFtb3VudCwgcmVmUmVjdCA9IHt9KSB7XG4gICAgY29uc3QgeCA9IHJlY3QueCAhPT0gcmVmUmVjdC54ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgeSA9IHJlY3QueSAhPT0gcmVmUmVjdC55ID8gLWFtb3VudCA6IDA7XG4gICAgY29uc3QgdyA9IChyZWN0LnggKyByZWN0LncgIT09IHJlZlJlY3QueCArIHJlZlJlY3QudyA/IGFtb3VudCA6IDApIC0geDtcbiAgICBjb25zdCBoID0gKHJlY3QueSArIHJlY3QuaCAhPT0gcmVmUmVjdC55ICsgcmVmUmVjdC5oID8gYW1vdW50IDogMCkgLSB5O1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJlY3QueCArIHgsXG4gICAgICAgIHk6IHJlY3QueSArIHksXG4gICAgICAgIHc6IHJlY3QudyArIHcsXG4gICAgICAgIGg6IHJlY3QuaCArIGgsXG4gICAgICAgIHJhZGl1czogcmVjdC5yYWRpdXNcbiAgICB9O1xufVxuY2xhc3MgQmFyRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIHN0YXRpYyBpZCA9ICdiYXInO1xuIHN0YXRpYyBkZWZhdWx0cyA9IHtcbiAgICAgICAgYm9yZGVyU2tpcHBlZDogJ3N0YXJ0JyxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgaW5mbGF0ZUFtb3VudDogJ2F1dG8nLFxuICAgICAgICBwb2ludFN0eWxlOiB1bmRlZmluZWRcbiAgICB9O1xuIHN0YXRpYyBkZWZhdWx0Um91dGVzID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgICAgICBib3JkZXJDb2xvcjogJ2JvcmRlckNvbG9yJ1xuICAgIH07XG4gICAgY29uc3RydWN0b3IoY2ZnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhvcml6b250YWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYmFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUFtb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjZmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgaW5mbGF0ZUFtb3VudCAsIG9wdGlvbnM6IHsgYm9yZGVyQ29sb3IgLCBiYWNrZ3JvdW5kQ29sb3IgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGlubmVyICwgb3V0ZXIgIH0gPSBib3VuZGluZ1JlY3RzKHRoaXMpO1xuICAgICAgICBjb25zdCBhZGRSZWN0UGF0aCA9IGhhc1JhZGl1cyhvdXRlci5yYWRpdXMpID8gYWRkUm91bmRlZFJlY3RQYXRoIDogYWRkTm9ybWFsUmVjdFBhdGg7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGlmIChvdXRlci53ICE9PSBpbm5lci53IHx8IG91dGVyLmggIT09IGlubmVyLmgpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGFkZFJlY3RQYXRoKGN0eCwgaW5mbGF0ZVJlY3Qob3V0ZXIsIGluZmxhdGVBbW91bnQsIGlubmVyKSk7XG4gICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgLWluZmxhdGVBbW91bnQsIG91dGVyKSk7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYm9yZGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbCgnZXZlbm9kZCcpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgYWRkUmVjdFBhdGgoY3R4LCBpbmZsYXRlUmVjdChpbm5lciwgaW5mbGF0ZUFtb3VudCkpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBpblJhbmdlKG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbW91c2VZLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgaW5YUmFuZ2UobW91c2VYLCB1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBpblJhbmdlKHRoaXMsIG1vdXNlWCwgbnVsbCwgdXNlRmluYWxQb3NpdGlvbik7XG4gICAgfVxuICAgIGluWVJhbmdlKG1vdXNlWSwgdXNlRmluYWxQb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZSh0aGlzLCBudWxsLCBtb3VzZVksIHVzZUZpbmFsUG9zaXRpb24pO1xuICAgIH1cbiAgICBnZXRDZW50ZXJQb2ludCh1c2VGaW5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCBiYXNlICwgaG9yaXpvbnRhbCAgfSA9ICB0aGlzLmdldFByb3BzKFtcbiAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICdiYXNlJyxcbiAgICAgICAgICAgICdob3Jpem9udGFsJ1xuICAgICAgICBdLCB1c2VGaW5hbFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGhvcml6b250YWwgPyAoeCArIGJhc2UpIC8gMiA6IHgsXG4gICAgICAgICAgICB5OiBob3Jpem9udGFsID8geSA6ICh5ICsgYmFzZSkgLyAyXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFJhbmdlKGF4aXMpIHtcbiAgICAgICAgcmV0dXJuIGF4aXMgPT09ICd4JyA/IHRoaXMud2lkdGggLyAyIDogdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cbn1cblxudmFyIGVsZW1lbnRzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuX19wcm90b19fOiBudWxsLFxuQXJjRWxlbWVudDogQXJjRWxlbWVudCxcbkJhckVsZW1lbnQ6IEJhckVsZW1lbnQsXG5MaW5lRWxlbWVudDogTGluZUVsZW1lbnQsXG5Qb2ludEVsZW1lbnQ6IFBvaW50RWxlbWVudFxufSk7XG5cbmNvbnN0IEJPUkRFUl9DT0xPUlMgPSBbXG4gICAgJ3JnYig1NCwgMTYyLCAyMzUpJyxcbiAgICAncmdiKDI1NSwgOTksIDEzMiknLFxuICAgICdyZ2IoMjU1LCAxNTksIDY0KScsXG4gICAgJ3JnYigyNTUsIDIwNSwgODYpJyxcbiAgICAncmdiKDc1LCAxOTIsIDE5MiknLFxuICAgICdyZ2IoMTUzLCAxMDIsIDI1NSknLFxuICAgICdyZ2IoMjAxLCAyMDMsIDIwNyknIC8vIGdyZXlcbl07XG4vLyBCb3JkZXIgY29sb3JzIHdpdGggNTAlIHRyYW5zcGFyZW5jeVxuY29uc3QgQkFDS0dST1VORF9DT0xPUlMgPSAvKiAjX19QVVJFX18gKi8gQk9SREVSX0NPTE9SUy5tYXAoKGNvbG9yKT0+Y29sb3IucmVwbGFjZSgncmdiKCcsICdyZ2JhKCcpLnJlcGxhY2UoJyknLCAnLCAwLjUpJykpO1xuZnVuY3Rpb24gZ2V0Qm9yZGVyQ29sb3IoaSkge1xuICAgIHJldHVybiBCT1JERVJfQ09MT1JTW2kgJSBCT1JERVJfQ09MT1JTLmxlbmd0aF07XG59XG5mdW5jdGlvbiBnZXRCYWNrZ3JvdW5kQ29sb3IoaSkge1xuICAgIHJldHVybiBCQUNLR1JPVU5EX0NPTE9SU1tpICUgQkFDS0dST1VORF9DT0xPUlMubGVuZ3RoXTtcbn1cbmZ1bmN0aW9uIGNvbG9yaXplRGVmYXVsdERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYm9yZGVyQ29sb3IgPSBnZXRCb3JkZXJDb2xvcihpKTtcbiAgICBkYXRhc2V0LmJhY2tncm91bmRDb2xvciA9IGdldEJhY2tncm91bmRDb2xvcihpKTtcbiAgICByZXR1cm4gKytpO1xufVxuZnVuY3Rpb24gY29sb3JpemVEb3VnaG51dERhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0Qm9yZGVyQ29sb3IoaSsrKSk7XG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBjb2xvcml6ZVBvbGFyQXJlYURhdGFzZXQoZGF0YXNldCwgaSkge1xuICAgIGRhdGFzZXQuYmFja2dyb3VuZENvbG9yID0gZGF0YXNldC5kYXRhLm1hcCgoKT0+Z2V0QmFja2dyb3VuZENvbG9yKGkrKykpO1xuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gZ2V0Q29sb3JpemVyKGNoYXJ0KSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHJldHVybiAoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgICAgICBpZiAoY29udHJvbGxlciBpbnN0YW5jZW9mIERvdWdobnV0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgaSA9IGNvbG9yaXplRG91Z2hudXREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBQb2xhckFyZWFDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpID0gY29sb3JpemVQb2xhckFyZWFEYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGkgPSBjb2xvcml6ZURlZmF1bHREYXRhc2V0KGRhdGFzZXQsIGkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZGVzY3JpcHRvcnMpIHtcbiAgICBsZXQgaztcbiAgICBmb3IoayBpbiBkZXNjcmlwdG9ycyl7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yc1trXS5ib3JkZXJDb2xvciB8fCBkZXNjcmlwdG9yc1trXS5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbihkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgKGRlc2NyaXB0b3IuYm9yZGVyQ29sb3IgfHwgZGVzY3JpcHRvci5iYWNrZ3JvdW5kQ29sb3IpO1xufVxudmFyIHBsdWdpbl9jb2xvcnMgPSB7XG4gICAgaWQ6ICdjb2xvcnMnLFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGZvcmNlT3ZlcnJpZGU6IGZhbHNlXG4gICAgfSxcbiAgICBiZWZvcmVMYXlvdXQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YTogeyBkYXRhc2V0cyAgfSAsIG9wdGlvbnM6IGNoYXJ0T3B0aW9ucyAgfSA9IGNoYXJ0LmNvbmZpZztcbiAgICAgICAgY29uc3QgeyBlbGVtZW50cyAgfSA9IGNoYXJ0T3B0aW9ucztcbiAgICAgICAgaWYgKCFvcHRpb25zLmZvcmNlT3ZlcnJpZGUgJiYgKGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZGF0YXNldHMpIHx8IGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbihjaGFydE9wdGlvbnMpIHx8IGVsZW1lbnRzICYmIGNvbnRhaW5zQ29sb3JzRGVmaW5pdGlvbnMoZWxlbWVudHMpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbG9yaXplciA9IGdldENvbG9yaXplcihjaGFydCk7XG4gICAgICAgIGRhdGFzZXRzLmZvckVhY2goY29sb3JpemVyKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBsdHRiRGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoLCBvcHRpb25zKSB7XG4gY29uc3Qgc2FtcGxlcyA9IG9wdGlvbnMuc2FtcGxlcyB8fCBhdmFpbGFibGVXaWR0aDtcbiAgICBpZiAoc2FtcGxlcyA+PSBjb3VudCkge1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZShzdGFydCwgc3RhcnQgKyBjb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGJ1Y2tldFdpZHRoID0gKGNvdW50IC0gMikgLyAoc2FtcGxlcyAtIDIpO1xuICAgIGxldCBzYW1wbGVkSW5kZXggPSAwO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgbGV0IGEgPSBzdGFydDtcbiAgICBsZXQgaSwgbWF4QXJlYVBvaW50LCBtYXhBcmVhLCBhcmVhLCBuZXh0QTtcbiAgICBkZWNpbWF0ZWRbc2FtcGxlZEluZGV4KytdID0gZGF0YVthXTtcbiAgICBmb3IoaSA9IDA7IGkgPCBzYW1wbGVzIC0gMjsgaSsrKXtcbiAgICAgICAgbGV0IGF2Z1ggPSAwO1xuICAgICAgICBsZXQgYXZnWSA9IDA7XG4gICAgICAgIGxldCBqO1xuICAgICAgICBjb25zdCBhdmdSYW5nZVN0YXJ0ID0gTWF0aC5mbG9vcigoaSArIDEpICogYnVja2V0V2lkdGgpICsgMSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUVuZCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAyKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCBhdmdSYW5nZUxlbmd0aCA9IGF2Z1JhbmdlRW5kIC0gYXZnUmFuZ2VTdGFydDtcbiAgICAgICAgZm9yKGogPSBhdmdSYW5nZVN0YXJ0OyBqIDwgYXZnUmFuZ2VFbmQ7IGorKyl7XG4gICAgICAgICAgICBhdmdYICs9IGRhdGFbal0ueDtcbiAgICAgICAgICAgIGF2Z1kgKz0gZGF0YVtqXS55O1xuICAgICAgICB9XG4gICAgICAgIGF2Z1ggLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGF2Z1kgLz0gYXZnUmFuZ2VMZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlT2ZmcyA9IE1hdGguZmxvb3IoaSAqIGJ1Y2tldFdpZHRoKSArIDEgKyBzdGFydDtcbiAgICAgICAgY29uc3QgcmFuZ2VUbyA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgKyAxKSAqIGJ1Y2tldFdpZHRoKSArIDEsIGNvdW50KSArIHN0YXJ0O1xuICAgICAgICBjb25zdCB7IHg6IHBvaW50QXggLCB5OiBwb2ludEF5ICB9ID0gZGF0YVthXTtcbiAgICAgICAgbWF4QXJlYSA9IGFyZWEgPSAtMTtcbiAgICAgICAgZm9yKGogPSByYW5nZU9mZnM7IGogPCByYW5nZVRvOyBqKyspe1xuICAgICAgICAgICAgYXJlYSA9IDAuNSAqIE1hdGguYWJzKChwb2ludEF4IC0gYXZnWCkgKiAoZGF0YVtqXS55IC0gcG9pbnRBeSkgLSAocG9pbnRBeCAtIGRhdGFbal0ueCkgKiAoYXZnWSAtIHBvaW50QXkpKTtcbiAgICAgICAgICAgIGlmIChhcmVhID4gbWF4QXJlYSkge1xuICAgICAgICAgICAgICAgIG1heEFyZWEgPSBhcmVhO1xuICAgICAgICAgICAgICAgIG1heEFyZWFQb2ludCA9IGRhdGFbal07XG4gICAgICAgICAgICAgICAgbmV4dEEgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlY2ltYXRlZFtzYW1wbGVkSW5kZXgrK10gPSBtYXhBcmVhUG9pbnQ7XG4gICAgICAgIGEgPSBuZXh0QTtcbiAgICB9XG4gICAgZGVjaW1hdGVkW3NhbXBsZWRJbmRleCsrXSA9IGRhdGFbZW5kSW5kZXhdO1xuICAgIHJldHVybiBkZWNpbWF0ZWQ7XG59XG5mdW5jdGlvbiBtaW5NYXhEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgpIHtcbiAgICBsZXQgYXZnWCA9IDA7XG4gICAgbGV0IGNvdW50WCA9IDA7XG4gICAgbGV0IGksIHBvaW50LCB4LCB5LCBwcmV2WCwgbWluSW5kZXgsIG1heEluZGV4LCBzdGFydEluZGV4LCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGRlY2ltYXRlZCA9IFtdO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnQgKyBjb3VudCAtIDE7XG4gICAgY29uc3QgeE1pbiA9IGRhdGFbc3RhcnRdLng7XG4gICAgY29uc3QgeE1heCA9IGRhdGFbZW5kSW5kZXhdLng7XG4gICAgY29uc3QgZHggPSB4TWF4IC0geE1pbjtcbiAgICBmb3IoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgKytpKXtcbiAgICAgICAgcG9pbnQgPSBkYXRhW2ldO1xuICAgICAgICB4ID0gKHBvaW50LnggLSB4TWluKSAvIGR4ICogYXZhaWxhYmxlV2lkdGg7XG4gICAgICAgIHkgPSBwb2ludC55O1xuICAgICAgICBjb25zdCB0cnVuY1ggPSB4IHwgMDtcbiAgICAgICAgaWYgKHRydW5jWCA9PT0gcHJldlgpIHtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IG1heFkpIHtcbiAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdmdYID0gKGNvdW50WCAqIGF2Z1ggKyBwb2ludC54KSAvICsrY291bnRYO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobWluSW5kZXgpICYmICFpc051bGxPclVuZGVmKG1heEluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUluZGV4MSA9IE1hdGgubWluKG1pbkluZGV4LCBtYXhJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlSW5kZXgyID0gTWF0aC5tYXgobWluSW5kZXgsIG1heEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlSW5kZXgxICE9PSBzdGFydEluZGV4ICYmIGludGVybWVkaWF0ZUluZGV4MSAhPT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGFbaW50ZXJtZWRpYXRlSW5kZXgxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGF2Z1hcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVJbmRleDIgIT09IHN0YXJ0SW5kZXggJiYgaW50ZXJtZWRpYXRlSW5kZXgyICE9PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YVtpbnRlcm1lZGlhdGVJbmRleDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYXZnWFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgbGFzdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hdGVkLnB1c2goZGF0YVtsYXN0SW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlY2ltYXRlZC5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIHByZXZYID0gdHJ1bmNYO1xuICAgICAgICAgICAgY291bnRYID0gMDtcbiAgICAgICAgICAgIG1pblkgPSBtYXhZID0geTtcbiAgICAgICAgICAgIG1pbkluZGV4ID0gbWF4SW5kZXggPSBzdGFydEluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVjaW1hdGVkO1xufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhc2V0KGRhdGFzZXQpIHtcbiAgICBpZiAoZGF0YXNldC5fZGVjaW1hdGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhc2V0Ll9kYXRhO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGVjaW1hdGVkO1xuICAgICAgICBkZWxldGUgZGF0YXNldC5fZGF0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGFzZXQsICdkYXRhJywge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KSB7XG4gICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0KT0+e1xuICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGFzZXQoZGF0YXNldCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRTdGFydEFuZENvdW50T2ZWaXNpYmxlUG9pbnRzU2ltcGxpZmllZChtZXRhLCBwb2ludHMpIHtcbiAgICBjb25zdCBwb2ludENvdW50ID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBjb3VudDtcbiAgICBjb25zdCB7IGlTY2FsZSAgfSA9IG1ldGE7XG4gICAgY29uc3QgeyBtaW4gLCBtYXggLCBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IGlTY2FsZS5nZXRVc2VyQm91bmRzKCk7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShfbG9va3VwQnlLZXkocG9pbnRzLCBpU2NhbGUuYXhpcywgbWluKS5sbywgMCwgcG9pbnRDb3VudCAtIDEpO1xuICAgIH1cbiAgICBpZiAobWF4RGVmaW5lZCkge1xuICAgICAgICBjb3VudCA9IF9saW1pdFZhbHVlKF9sb29rdXBCeUtleShwb2ludHMsIGlTY2FsZS5heGlzLCBtYXgpLmhpICsgMSwgc3RhcnQsIHBvaW50Q291bnQpIC0gc3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQgPSBwb2ludENvdW50IC0gc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBjb3VudFxuICAgIH07XG59XG52YXIgcGx1Z2luX2RlY2ltYXRpb24gPSB7XG4gICAgaWQ6ICdkZWNpbWF0aW9uJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGdvcml0aG06ICdtaW4tbWF4JyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGJlZm9yZUVsZW1lbnRzVXBkYXRlOiAoY2hhcnQsIGFyZ3MsIG9wdGlvbnMpPT57XG4gICAgICAgIGlmICghb3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICBjbGVhbkRlY2ltYXRlZERhdGEoY2hhcnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY2hhcnQud2lkdGg7XG4gICAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgZGF0YXNldEluZGV4KT0+e1xuICAgICAgICAgICAgY29uc3QgeyBfZGF0YSAsIGluZGV4QXhpcyAgfSA9IGRhdGFzZXQ7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBfZGF0YSB8fCBkYXRhc2V0LmRhdGE7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZShbXG4gICAgICAgICAgICAgICAgaW5kZXhBeGlzLFxuICAgICAgICAgICAgICAgIGNoYXJ0Lm9wdGlvbnMuaW5kZXhBeGlzXG4gICAgICAgICAgICBdKSA9PT0gJ3knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtZXRhLmNvbnRyb2xsZXIuc3VwcG9ydHNEZWNpbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeEF4aXMgPSBjaGFydC5zY2FsZXNbbWV0YS54QXhpc0lEXTtcbiAgICAgICAgICAgIGlmICh4QXhpcy50eXBlICE9PSAnbGluZWFyJyAmJiB4QXhpcy50eXBlICE9PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhcnQub3B0aW9ucy5wYXJzaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHsgc3RhcnQgLCBjb3VudCAgfSA9IGdldFN0YXJ0QW5kQ291bnRPZlZpc2libGVQb2ludHNTaW1wbGlmaWVkKG1ldGEsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgdGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQgfHwgNCAqIGF2YWlsYWJsZVdpZHRoO1xuICAgICAgICAgICAgaWYgKGNvdW50IDw9IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIGNsZWFuRGVjaW1hdGVkRGF0YXNldChkYXRhc2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZihfZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0Ll9kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YXNldC5kYXRhO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhc2V0LCAnZGF0YScsIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlY2ltYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRlY2ltYXRlZDtcbiAgICAgICAgICAgIHN3aXRjaChvcHRpb25zLmFsZ29yaXRobSl7XG4gICAgICAgICAgICAgICAgY2FzZSAnbHR0Yic6XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYXRlZCA9IGx0dGJEZWNpbWF0aW9uKGRhdGEsIHN0YXJ0LCBjb3VudCwgYXZhaWxhYmxlV2lkdGgsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtaW4tbWF4JzpcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVkID0gbWluTWF4RGVjaW1hdGlvbihkYXRhLCBzdGFydCwgY291bnQsIGF2YWlsYWJsZVdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkZWNpbWF0aW9uIGFsZ29yaXRobSAnJHtvcHRpb25zLmFsZ29yaXRobX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhc2V0Ll9kZWNpbWF0ZWQgPSBkZWNpbWF0ZWQ7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveSAoY2hhcnQpIHtcbiAgICAgICAgY2xlYW5EZWNpbWF0ZWREYXRhKGNoYXJ0KTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBwb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCB0cG9pbnRzID0gdGFyZ2V0LnBvaW50cztcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGxldCB7IHN0YXJ0ICwgZW5kICB9ID0gc2VnbWVudDtcbiAgICAgICAgZW5kID0gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cyk7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHBvaW50c1tzdGFydF0sIHBvaW50c1tlbmRdLCBzZWdtZW50Lmxvb3ApO1xuICAgICAgICBpZiAoIXRhcmdldC5zZWdtZW50cykge1xuICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlOiBzZWdtZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldDogYm91bmRzLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBwb2ludHNbc3RhcnRdLFxuICAgICAgICAgICAgICAgIGVuZDogcG9pbnRzW2VuZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0U2VnbWVudHMgPSBfYm91bmRTZWdtZW50cyh0YXJnZXQsIGJvdW5kcyk7XG4gICAgICAgIGZvciAoY29uc3QgdGd0IG9mIHRhcmdldFNlZ21lbnRzKXtcbiAgICAgICAgICAgIGNvbnN0IHN1YkJvdW5kcyA9IF9nZXRCb3VuZHMocHJvcGVydHksIHRwb2ludHNbdGd0LnN0YXJ0XSwgdHBvaW50c1t0Z3QuZW5kXSwgdGd0Lmxvb3ApO1xuICAgICAgICAgICAgY29uc3QgZmlsbFNvdXJjZXMgPSBfYm91bmRTZWdtZW50KHNlZ21lbnQsIHBvaW50cywgc3ViQm91bmRzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsbFNvdXJjZSBvZiBmaWxsU291cmNlcyl7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZmlsbFNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0Z3QsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydHldOiBfZ2V0RWRnZShib3VuZHMsIHN1YkJvdW5kcywgJ3N0YXJ0JywgTWF0aC5tYXgpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnR5XTogX2dldEVkZ2UoYm91bmRzLCBzdWJCb3VuZHMsICdlbmQnLCBNYXRoLm1pbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cztcbn1cbmZ1bmN0aW9uIF9nZXRCb3VuZHMocHJvcGVydHksIGZpcnN0LCBsYXN0LCBsb29wKSB7XG4gICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBmaXJzdFtwcm9wZXJ0eV07XG4gICAgbGV0IGVuZCA9IGxhc3RbcHJvcGVydHldO1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2FuZ2xlJykge1xuICAgICAgICBzdGFydCA9IF9ub3JtYWxpemVBbmdsZShzdGFydCk7XG4gICAgICAgIGVuZCA9IF9ub3JtYWxpemVBbmdsZShlbmQpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9pbnRzRnJvbVNlZ21lbnRzKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgY29uc3QgeyB4ID1udWxsICwgeSA9bnVsbCAgfSA9IGJvdW5kYXJ5IHx8IHt9O1xuICAgIGNvbnN0IGxpbmVQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICBsaW5lLnNlZ21lbnRzLmZvckVhY2goKHsgc3RhcnQgLCBlbmQgIH0pPT57XG4gICAgICAgIGVuZCA9IF9maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBsaW5lUG9pbnRzKTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBsaW5lUG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdCA9IGxpbmVQb2ludHNbZW5kXTtcbiAgICAgICAgaWYgKHkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4OiBmaXJzdC54LFxuICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHg6IGxhc3QueCxcbiAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5OiBmaXJzdC55XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHk6IGxhc3QueVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcG9pbnRzO1xufVxuZnVuY3Rpb24gX2ZpbmRTZWdtZW50RW5kKHN0YXJ0LCBlbmQsIHBvaW50cykge1xuICAgIGZvcig7IGVuZCA+IHN0YXJ0OyBlbmQtLSl7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2VuZF07XG4gICAgICAgIGlmICghaXNOYU4ocG9pbnQueCkgJiYgIWlzTmFOKHBvaW50LnkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5kO1xufVxuZnVuY3Rpb24gX2dldEVkZ2UoYSwgYiwgcHJvcCwgZm4pIHtcbiAgICBpZiAoYSAmJiBiKSB7XG4gICAgICAgIHJldHVybiBmbihhW3Byb3BdLCBiW3Byb3BdKTtcbiAgICB9XG4gICAgcmV0dXJuIGEgPyBhW3Byb3BdIDogYiA/IGJbcHJvcF0gOiAwO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlQm91bmRhcnlMaW5lKGJvdW5kYXJ5LCBsaW5lKSB7XG4gICAgbGV0IHBvaW50cyA9IFtdO1xuICAgIGxldCBfbG9vcCA9IGZhbHNlO1xuICAgIGlmIChpc0FycmF5KGJvdW5kYXJ5KSkge1xuICAgICAgICBfbG9vcCA9IHRydWU7XG4gICAgICAgIHBvaW50cyA9IGJvdW5kYXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBvaW50cyA9IF9wb2ludHNGcm9tU2VnbWVudHMoYm91bmRhcnksIGxpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzLmxlbmd0aCA/IG5ldyBMaW5lRWxlbWVudCh7XG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgdGVuc2lvbjogMFxuICAgICAgICB9LFxuICAgICAgICBfbG9vcCxcbiAgICAgICAgX2Z1bGxMb29wOiBfbG9vcFxuICAgIH0pIDogbnVsbDtcbn1cbmZ1bmN0aW9uIF9zaG91bGRBcHBseUZpbGwoc291cmNlKSB7XG4gICAgcmV0dXJuIHNvdXJjZSAmJiBzb3VyY2UuZmlsbCAhPT0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9yZXNvbHZlVGFyZ2V0KHNvdXJjZXMsIGluZGV4LCBwcm9wYWdhdGUpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICBsZXQgZmlsbCA9IHNvdXJjZS5maWxsO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBbXG4gICAgICAgIGluZGV4XG4gICAgXTtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIGlmICghcHJvcGFnYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWxsO1xuICAgIH1cbiAgICB3aGlsZShmaWxsICE9PSBmYWxzZSAmJiB2aXNpdGVkLmluZGV4T2YoZmlsbCkgPT09IC0xKXtcbiAgICAgICAgaWYgKCFpc051bWJlckZpbml0ZShmaWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGw7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gc291cmNlc1tmaWxsXTtcbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0LnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxsO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWQucHVzaChmaWxsKTtcbiAgICAgICAgZmlsbCA9IHRhcmdldC5maWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4gZnVuY3Rpb24gX2RlY29kZUZpbGwobGluZSwgaW5kZXgsIGNvdW50KSB7XG4gICAgIGNvbnN0IGZpbGwgPSBwYXJzZUZpbGxPcHRpb24obGluZSk7XG4gICAgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBpc05hTihmaWxsLnZhbHVlKSA/IGZhbHNlIDogZmlsbDtcbiAgICB9XG4gICAgbGV0IHRhcmdldCA9IHBhcnNlRmxvYXQoZmlsbCk7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKHRhcmdldCkgJiYgTWF0aC5mbG9vcih0YXJnZXQpID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVRhcmdldEluZGV4KGZpbGxbMF0sIGluZGV4LCB0YXJnZXQsIGNvdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgJ29yaWdpbicsXG4gICAgICAgICdzdGFydCcsXG4gICAgICAgICdlbmQnLFxuICAgICAgICAnc3RhY2snLFxuICAgICAgICAnc2hhcGUnXG4gICAgXS5pbmRleE9mKGZpbGwpID49IDAgJiYgZmlsbDtcbn1cbmZ1bmN0aW9uIGRlY29kZVRhcmdldEluZGV4KGZpcnN0Q2gsIGluZGV4LCB0YXJnZXQsIGNvdW50KSB7XG4gICAgaWYgKGZpcnN0Q2ggPT09ICctJyB8fCBmaXJzdENoID09PSAnKycpIHtcbiAgICAgICAgdGFyZ2V0ID0gaW5kZXggKyB0YXJnZXQ7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPT09IGluZGV4IHx8IHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IGNvdW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbiBmdW5jdGlvbiBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpIHtcbiAgICBsZXQgcGl4ZWwgPSBudWxsO1xuICAgIGlmIChmaWxsID09PSAnc3RhcnQnKSB7XG4gICAgICAgIHBpeGVsID0gc2NhbGUuYm90dG9tO1xuICAgIH0gZWxzZSBpZiAoZmlsbCA9PT0gJ2VuZCcpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS50b3A7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChmaWxsKSkge1xuICAgICAgICBwaXhlbCA9IHNjYWxlLmdldFBpeGVsRm9yVmFsdWUoZmlsbC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzY2FsZS5nZXRCYXNlUGl4ZWwpIHtcbiAgICAgICAgcGl4ZWwgPSBzY2FsZS5nZXRCYXNlUGl4ZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpeGVsO1xufVxuIGZ1bmN0aW9uIF9nZXRUYXJnZXRWYWx1ZShmaWxsLCBzY2FsZSwgc3RhcnRWYWx1ZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoZmlsbCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICB2YWx1ZSA9IHN0YXJ0VmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWxsID09PSAnZW5kJykge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLm9wdGlvbnMucmV2ZXJzZSA/IHNjYWxlLm1pbiA6IHNjYWxlLm1heDtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGZpbGwpKSB7XG4gICAgICAgIHZhbHVlID0gZmlsbC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHNjYWxlLmdldEJhc2VWYWx1ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG4gZnVuY3Rpb24gcGFyc2VGaWxsT3B0aW9uKGxpbmUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbGluZS5vcHRpb25zO1xuICAgIGNvbnN0IGZpbGxPcHRpb24gPSBvcHRpb25zLmZpbGw7XG4gICAgbGV0IGZpbGwgPSB2YWx1ZU9yRGVmYXVsdChmaWxsT3B0aW9uICYmIGZpbGxPcHRpb24udGFyZ2V0LCBmaWxsT3B0aW9uKTtcbiAgICBpZiAoZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbGwgPSAhIW9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBpZiAoZmlsbCA9PT0gZmFsc2UgfHwgZmlsbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiAnb3JpZ2luJztcbiAgICB9XG4gICAgcmV0dXJuIGZpbGw7XG59XG5cbmZ1bmN0aW9uIF9idWlsZFN0YWNrTGluZShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgaW5kZXggLCBsaW5lICB9ID0gc291cmNlO1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbGluZS5zZWdtZW50cztcbiAgICBjb25zdCBzb3VyY2VQb2ludHMgPSBsaW5lLnBvaW50cztcbiAgICBjb25zdCBsaW5lc0JlbG93ID0gZ2V0TGluZXNCZWxvdyhzY2FsZSwgaW5kZXgpO1xuICAgIGxpbmVzQmVsb3cucHVzaChfY3JlYXRlQm91bmRhcnlMaW5lKHtcbiAgICAgICAgeDogbnVsbCxcbiAgICAgICAgeTogc2NhbGUuYm90dG9tXG4gICAgfSwgbGluZSkpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICAgICAgZm9yKGxldCBqID0gc2VnbWVudC5zdGFydDsgaiA8PSBzZWdtZW50LmVuZDsgaisrKXtcbiAgICAgICAgICAgIGFkZFBvaW50c0JlbG93KHBvaW50cywgc291cmNlUG9pbnRzW2pdLCBsaW5lc0JlbG93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExpbmVFbGVtZW50KHtcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICBvcHRpb25zOiB7fVxuICAgIH0pO1xufVxuIGZ1bmN0aW9uIGdldExpbmVzQmVsb3coc2NhbGUsIGluZGV4KSB7XG4gICAgY29uc3QgYmVsb3cgPSBbXTtcbiAgICBjb25zdCBtZXRhcyA9IHNjYWxlLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKCdsaW5lJyk7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG1ldGFzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgbWV0YSA9IG1ldGFzW2ldO1xuICAgICAgICBpZiAobWV0YS5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWV0YS5oaWRkZW4pIHtcbiAgICAgICAgICAgIGJlbG93LnVuc2hpZnQobWV0YS5kYXRhc2V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVsb3c7XG59XG4gZnVuY3Rpb24gYWRkUG9pbnRzQmVsb3cocG9pbnRzLCBzb3VyY2VQb2ludCwgbGluZXNCZWxvdykge1xuICAgIGNvbnN0IHBvc3Rwb25lZCA9IFtdO1xuICAgIGZvcihsZXQgaiA9IDA7IGogPCBsaW5lc0JlbG93Lmxlbmd0aDsgaisrKXtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzQmVsb3dbal07XG4gICAgICAgIGNvbnN0IHsgZmlyc3QgLCBsYXN0ICwgcG9pbnQgIH0gPSBmaW5kUG9pbnQobGluZSwgc291cmNlUG9pbnQsICd4Jyk7XG4gICAgICAgIGlmICghcG9pbnQgfHwgZmlyc3QgJiYgbGFzdCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBwb3N0cG9uZWQudW5zaGlmdChwb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgICAgICBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwb2ludHMucHVzaCguLi5wb3N0cG9uZWQpO1xufVxuIGZ1bmN0aW9uIGZpbmRQb2ludChsaW5lLCBzb3VyY2VQb2ludCwgcHJvcGVydHkpIHtcbiAgICBjb25zdCBwb2ludCA9IGxpbmUuaW50ZXJwb2xhdGUoc291cmNlUG9pbnQsIHByb3BlcnR5KTtcbiAgICBpZiAoIXBvaW50KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcG9pbnRWYWx1ZSA9IHBvaW50W3Byb3BlcnR5XTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGxpbmUuc2VnbWVudHM7XG4gICAgY29uc3QgbGluZVBvaW50cyA9IGxpbmUucG9pbnRzO1xuICAgIGxldCBmaXJzdCA9IGZhbHNlO1xuICAgIGxldCBsYXN0ID0gZmFsc2U7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gbGluZVBvaW50c1tzZWdtZW50LnN0YXJ0XVtwcm9wZXJ0eV07XG4gICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGxpbmVQb2ludHNbc2VnbWVudC5lbmRdW3Byb3BlcnR5XTtcbiAgICAgICAgaWYgKF9pc0JldHdlZW4ocG9pbnRWYWx1ZSwgZmlyc3RWYWx1ZSwgbGFzdFZhbHVlKSkge1xuICAgICAgICAgICAgZmlyc3QgPSBwb2ludFZhbHVlID09PSBmaXJzdFZhbHVlO1xuICAgICAgICAgICAgbGFzdCA9IHBvaW50VmFsdWUgPT09IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0LFxuICAgICAgICBsYXN0LFxuICAgICAgICBwb2ludFxuICAgIH07XG59XG5cbmNsYXNzIHNpbXBsZUFyYyB7XG4gICAgY29uc3RydWN0b3Iob3B0cyl7XG4gICAgICAgIHRoaXMueCA9IG9wdHMueDtcbiAgICAgICAgdGhpcy55ID0gb3B0cy55O1xuICAgICAgICB0aGlzLnJhZGl1cyA9IG9wdHMucmFkaXVzO1xuICAgIH1cbiAgICBwYXRoU2VnbWVudChjdHgsIGJvdW5kcywgb3B0cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICwgcmFkaXVzICB9ID0gdGhpcztcbiAgICAgICAgYm91bmRzID0gYm91bmRzIHx8IHtcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZW5kOiBUQVVcbiAgICAgICAgfTtcbiAgICAgICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIGJvdW5kcy5lbmQsIGJvdW5kcy5zdGFydCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiAhb3B0cy5ib3VuZHM7XG4gICAgfVxuICAgIGludGVycG9sYXRlKHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCByYWRpdXMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBhbmdsZSA9IHBvaW50LmFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCArIE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyxcbiAgICAgICAgICAgIHk6IHkgKyBNYXRoLnNpbihhbmdsZSkgKiByYWRpdXMsXG4gICAgICAgICAgICBhbmdsZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2dldFRhcmdldChzb3VyY2UpIHtcbiAgICBjb25zdCB7IGNoYXJ0ICwgZmlsbCAsIGxpbmUgIH0gPSBzb3VyY2U7XG4gICAgaWYgKGlzTnVtYmVyRmluaXRlKGZpbGwpKSB7XG4gICAgICAgIHJldHVybiBnZXRMaW5lQnlJbmRleChjaGFydCwgZmlsbCk7XG4gICAgfVxuICAgIGlmIChmaWxsID09PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybiBfYnVpbGRTdGFja0xpbmUoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGZpbGwgPT09ICdzaGFwZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kYXJ5ID0gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgaWYgKGJvdW5kYXJ5IGluc3RhbmNlb2Ygc2ltcGxlQXJjKSB7XG4gICAgICAgIHJldHVybiBib3VuZGFyeTtcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVCb3VuZGFyeUxpbmUoYm91bmRhcnksIGxpbmUpO1xufVxuIGZ1bmN0aW9uIGdldExpbmVCeUluZGV4KGNoYXJ0LCBpbmRleCkge1xuICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShpbmRleCk7XG4gICAgY29uc3QgdmlzaWJsZSA9IG1ldGEgJiYgY2hhcnQuaXNEYXRhc2V0VmlzaWJsZShpbmRleCk7XG4gICAgcmV0dXJuIHZpc2libGUgPyBtZXRhLmRhdGFzZXQgOiBudWxsO1xufVxuZnVuY3Rpb24gY29tcHV0ZUJvdW5kYXJ5KHNvdXJjZSkge1xuICAgIGNvbnN0IHNjYWxlID0gc291cmNlLnNjYWxlIHx8IHt9O1xuICAgIGlmIChzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVDaXJjdWxhckJvdW5kYXJ5KHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiBjb21wdXRlTGluZWFyQm91bmRhcnkoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVMaW5lYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlID17fSAsIGZpbGwgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgcGl4ZWwgPSBfZ2V0VGFyZ2V0UGl4ZWwoZmlsbCwgc2NhbGUpO1xuICAgIGlmIChpc051bWJlckZpbml0ZShwaXhlbCkpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IHNjYWxlLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaG9yaXpvbnRhbCA/IHBpeGVsIDogbnVsbCxcbiAgICAgICAgICAgIHk6IGhvcml6b250YWwgPyBudWxsIDogcGl4ZWxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21wdXRlQ2lyY3VsYXJCb3VuZGFyeShzb3VyY2UpIHtcbiAgICBjb25zdCB7IHNjYWxlICwgZmlsbCAgfSA9IHNvdXJjZTtcbiAgICBjb25zdCBvcHRpb25zID0gc2NhbGUub3B0aW9ucztcbiAgICBjb25zdCBsZW5ndGggPSBzY2FsZS5nZXRMYWJlbHMoKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnJldmVyc2UgPyBzY2FsZS5tYXggOiBzY2FsZS5taW47XG4gICAgY29uc3QgdmFsdWUgPSBfZ2V0VGFyZ2V0VmFsdWUoZmlsbCwgc2NhbGUsIHN0YXJ0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5ncmlkLmNpcmN1bGFyKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSgwLCBzdGFydCk7XG4gICAgICAgIHJldHVybiBuZXcgc2ltcGxlQXJjKHtcbiAgICAgICAgICAgIHg6IGNlbnRlci54LFxuICAgICAgICAgICAgeTogY2VudGVyLnksXG4gICAgICAgICAgICByYWRpdXM6IHNjYWxlLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgdGFyZ2V0LnB1c2goc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGksIHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9kcmF3ZmlsbChjdHgsIHNvdXJjZSwgYXJlYSkge1xuICAgIGNvbnN0IHRhcmdldCA9IF9nZXRUYXJnZXQoc291cmNlKTtcbiAgICBjb25zdCB7IGxpbmUgLCBzY2FsZSAsIGF4aXMgIH0gPSBzb3VyY2U7XG4gICAgY29uc3QgbGluZU9wdHMgPSBsaW5lLm9wdGlvbnM7XG4gICAgY29uc3QgZmlsbE9wdGlvbiA9IGxpbmVPcHRzLmZpbGw7XG4gICAgY29uc3QgY29sb3IgPSBsaW5lT3B0cy5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgY29uc3QgeyBhYm92ZSA9Y29sb3IgLCBiZWxvdyA9Y29sb3IgIH0gPSBmaWxsT3B0aW9uIHx8IHt9O1xuICAgIGlmICh0YXJnZXQgJiYgbGluZS5wb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNsaXBBcmVhKGN0eCwgYXJlYSk7XG4gICAgICAgIGRvRmlsbChjdHgsIHtcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBhYm92ZSxcbiAgICAgICAgICAgIGJlbG93LFxuICAgICAgICAgICAgYXJlYSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgYXhpc1xuICAgICAgICB9KTtcbiAgICAgICAgdW5jbGlwQXJlYShjdHgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRvRmlsbChjdHgsIGNmZykge1xuICAgIGNvbnN0IHsgbGluZSAsIHRhcmdldCAsIGFib3ZlICwgYmVsb3cgLCBhcmVhICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3QgcHJvcGVydHkgPSBsaW5lLl9sb29wID8gJ2FuZ2xlJyA6IGNmZy5heGlzO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcgJiYgYmVsb3cgIT09IGFib3ZlKSB7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS50b3ApO1xuICAgICAgICBmaWxsKGN0eCwge1xuICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGNvbG9yOiBhYm92ZSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgYXJlYS5ib3R0b20pO1xuICAgIH1cbiAgICBmaWxsKGN0eCwge1xuICAgICAgICBsaW5lLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGNvbG9yOiBiZWxvdyxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIHByb3BlcnR5XG4gICAgfSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbn1cbmZ1bmN0aW9uIGNsaXBWZXJ0aWNhbChjdHgsIHRhcmdldCwgY2xpcFkpIHtcbiAgICBjb25zdCB7IHNlZ21lbnRzICwgcG9pbnRzICB9ID0gdGFyZ2V0O1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgbGV0IGxpbmVMb29wID0gZmFsc2U7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQgLCBlbmQgIH0gPSBzZWdtZW50O1xuICAgICAgICBjb25zdCBmaXJzdFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcG9pbnRzW19maW5kU2VnbWVudEVuZChzdGFydCwgZW5kLCBwb2ludHMpXTtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBjdHgubW92ZVRvKGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55KTtcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdHgubGluZVRvKGZpcnN0UG9pbnQueCwgY2xpcFkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhmaXJzdFBvaW50LngsIGZpcnN0UG9pbnQueSk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZUxvb3AgPSAhIXRhcmdldC5wYXRoU2VnbWVudChjdHgsIHNlZ21lbnQsIHtcbiAgICAgICAgICAgIG1vdmU6IGxpbmVMb29wXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8obGFzdFBvaW50LngsIGNsaXBZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdHgubGluZVRvKHRhcmdldC5maXJzdCgpLngsIGNsaXBZKTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgY3R4LmNsaXAoKTtcbn1cbmZ1bmN0aW9uIGZpbGwoY3R4LCBjZmcpIHtcbiAgICBjb25zdCB7IGxpbmUgLCB0YXJnZXQgLCBwcm9wZXJ0eSAsIGNvbG9yICwgc2NhbGUgIH0gPSBjZmc7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBfc2VnbWVudHMobGluZSwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgZm9yIChjb25zdCB7IHNvdXJjZTogc3JjICwgdGFyZ2V0OiB0Z3QgLCBzdGFydCAsIGVuZCAgfSBvZiBzZWdtZW50cyl7XG4gICAgICAgIGNvbnN0IHsgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yID1jb2xvciAgfSA9IHt9ICB9ID0gc3JjO1xuICAgICAgICBjb25zdCBub3RTaGFwZSA9IHRhcmdldCAhPT0gdHJ1ZTtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBub3RTaGFwZSAmJiBfZ2V0Qm91bmRzKHByb3BlcnR5LCBzdGFydCwgZW5kKSk7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29uc3QgbGluZUxvb3AgPSAhIWxpbmUucGF0aFNlZ21lbnQoY3R4LCBzcmMpO1xuICAgICAgICBsZXQgbG9vcDtcbiAgICAgICAgaWYgKG5vdFNoYXBlKSB7XG4gICAgICAgICAgICBpZiAobGluZUxvb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlZExpbmVUbyhjdHgsIHRhcmdldCwgZW5kLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRMb29wID0gISF0YXJnZXQucGF0aFNlZ21lbnQoY3R4LCB0Z3QsIHtcbiAgICAgICAgICAgICAgICBtb3ZlOiBsaW5lTG9vcCxcbiAgICAgICAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvb3AgPSBsaW5lTG9vcCAmJiB0YXJnZXRMb29wO1xuICAgICAgICAgICAgaWYgKCFsb29wKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkTGluZVRvKGN0eCwgdGFyZ2V0LCBzdGFydCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwobG9vcCA/ICdldmVub2RkJyA6ICdub256ZXJvJyk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2xpcEJvdW5kcyhjdHgsIHNjYWxlLCBib3VuZHMpIHtcbiAgICBjb25zdCB7IHRvcCAsIGJvdHRvbSAgfSA9IHNjYWxlLmNoYXJ0LmNoYXJ0QXJlYTtcbiAgICBjb25zdCB7IHByb3BlcnR5ICwgc3RhcnQgLCBlbmQgIH0gPSBib3VuZHMgfHwge307XG4gICAgaWYgKHByb3BlcnR5ID09PSAneCcpIHtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgucmVjdChzdGFydCwgdG9wLCBlbmQgLSBzdGFydCwgYm90dG9tIC0gdG9wKTtcbiAgICAgICAgY3R4LmNsaXAoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZWRMaW5lVG8oY3R4LCB0YXJnZXQsIHBvaW50LCBwcm9wZXJ0eSkge1xuICAgIGNvbnN0IGludGVycG9sYXRlZFBvaW50ID0gdGFyZ2V0LmludGVycG9sYXRlKHBvaW50LCBwcm9wZXJ0eSk7XG4gICAgaWYgKGludGVycG9sYXRlZFBvaW50KSB7XG4gICAgICAgIGN0eC5saW5lVG8oaW50ZXJwb2xhdGVkUG9pbnQueCwgaW50ZXJwb2xhdGVkUG9pbnQueSk7XG4gICAgfVxufVxuXG52YXIgaW5kZXggPSB7XG4gICAgaWQ6ICdmaWxsZXInLFxuICAgIGFmdGVyRGF0YXNldHNVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb3VudCA9IChjaGFydC5kYXRhLmRhdGFzZXRzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBbXTtcbiAgICAgICAgbGV0IG1ldGEsIGksIGxpbmUsIHNvdXJjZTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSl7XG4gICAgICAgICAgICBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaSk7XG4gICAgICAgICAgICBsaW5lID0gbWV0YS5kYXRhc2V0O1xuICAgICAgICAgICAgc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChsaW5lICYmIGxpbmUub3B0aW9ucyAmJiBsaW5lIGluc3RhbmNlb2YgTGluZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoYXJ0LmlzRGF0YXNldFZpc2libGUoaSksXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBfZGVjb2RlRmlsbChsaW5lLCBpLCBjb3VudCksXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgICAgICBheGlzOiBtZXRhLmNvbnRyb2xsZXIub3B0aW9ucy5pbmRleEF4aXMsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBtZXRhLnZTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXRhLiRmaWxsZXIgPSBzb3VyY2U7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKXtcbiAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuZmlsbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZS5maWxsID0gX3Jlc29sdmVUYXJnZXQoc291cmNlcywgaSwgb3B0aW9ucy5wcm9wYWdhdGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVEcmF3IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZHJhdyA9IG9wdGlvbnMuZHJhd1RpbWUgPT09ICdiZWZvcmVEcmF3JztcbiAgICAgICAgY29uc3QgbWV0YXNldHMgPSBjaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjaGFydC5jaGFydEFyZWE7XG4gICAgICAgIGZvcihsZXQgaSA9IG1ldGFzZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKXtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG1ldGFzZXRzW2ldLiRmaWxsZXI7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLmxpbmUudXBkYXRlQ29udHJvbFBvaW50cyhhcmVhLCBzb3VyY2UuYXhpcyk7XG4gICAgICAgICAgICBpZiAoZHJhdyAmJiBzb3VyY2UuZmlsbCkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgYXJlYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJlZm9yZURhdGFzZXRzRHJhdyAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldHNEcmF3Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFzZXRzID0gY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO1xuICAgICAgICBmb3IobGV0IGkgPSBtZXRhc2V0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSl7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBtZXRhc2V0c1tpXS4kZmlsbGVyO1xuICAgICAgICAgICAgaWYgKF9zaG91bGRBcHBseUZpbGwoc291cmNlKSkge1xuICAgICAgICAgICAgICAgIF9kcmF3ZmlsbChjaGFydC5jdHgsIHNvdXJjZSwgY2hhcnQuY2hhcnRBcmVhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgYmVmb3JlRGF0YXNldERyYXcgKGNoYXJ0LCBhcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGFyZ3MubWV0YS4kZmlsbGVyO1xuICAgICAgICBpZiAoIV9zaG91bGRBcHBseUZpbGwoc291cmNlKSB8fCBvcHRpb25zLmRyYXdUaW1lICE9PSAnYmVmb3JlRGF0YXNldERyYXcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2RyYXdmaWxsKGNoYXJ0LmN0eCwgc291cmNlLCBjaGFydC5jaGFydEFyZWEpO1xuICAgIH0sXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgcHJvcGFnYXRlOiB0cnVlLFxuICAgICAgICBkcmF3VGltZTogJ2JlZm9yZURhdGFzZXREcmF3J1xuICAgIH1cbn07XG5cbmNvbnN0IGdldEJveFNpemUgPSAobGFiZWxPcHRzLCBmb250U2l6ZSk9PntcbiAgICBsZXQgeyBib3hIZWlnaHQgPWZvbnRTaXplICwgYm94V2lkdGggPWZvbnRTaXplICB9ID0gbGFiZWxPcHRzO1xuICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICBib3hIZWlnaHQgPSBNYXRoLm1pbihib3hIZWlnaHQsIGZvbnRTaXplKTtcbiAgICAgICAgYm94V2lkdGggPSBsYWJlbE9wdHMucG9pbnRTdHlsZVdpZHRoIHx8IE1hdGgubWluKGJveFdpZHRoLCBmb250U2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJveFdpZHRoLFxuICAgICAgICBib3hIZWlnaHQsXG4gICAgICAgIGl0ZW1IZWlnaHQ6IE1hdGgubWF4KGZvbnRTaXplLCBib3hIZWlnaHQpXG4gICAgfTtcbn07XG5jb25zdCBpdGVtc0VxdWFsID0gKGEsIGIpPT5hICE9PSBudWxsICYmIGIgIT09IG51bGwgJiYgYS5kYXRhc2V0SW5kZXggPT09IGIuZGF0YXNldEluZGV4ICYmIGEuaW5kZXggPT09IGIuaW5kZXg7XG5jbGFzcyBMZWdlbmQgZXh0ZW5kcyBFbGVtZW50IHtcbiBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9hZGRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gdGhpcy5faG92ZXJlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmRvdWdobnV0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5jdHggPSBjb25maWcuY3R4O1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNvbHVtblNpemVzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxpbmVXaWR0aHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX21hcmdpbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud2VpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZ1bGxTaXplID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB1cGRhdGUobWF4V2lkdGgsIG1heEhlaWdodCwgbWFyZ2lucykge1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICB0aGlzLl9tYXJnaW5zID0gbWFyZ2lucztcbiAgICAgICAgdGhpcy5zZXREaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgdGhpcy5maXQoKTtcbiAgICB9XG4gICAgc2V0RGltZW5zaW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5fbWFyZ2lucy5sZWZ0O1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMud2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMubWF4SGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy50b3AgPSB0aGlzLl9tYXJnaW5zLnRvcDtcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRMYWJlbHMoKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsT3B0cyA9IHRoaXMub3B0aW9ucy5sYWJlbHMgfHwge307XG4gICAgICAgIGxldCBsZWdlbmRJdGVtcyA9IGNhbGxiYWNrKGxhYmVsT3B0cy5nZW5lcmF0ZUxhYmVscywgW1xuICAgICAgICAgICAgdGhpcy5jaGFydFxuICAgICAgICBdLCB0aGlzKSB8fCBbXTtcbiAgICAgICAgaWYgKGxhYmVsT3B0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuZmlsdGVyKChpdGVtKT0+bGFiZWxPcHRzLmZpbHRlcihpdGVtLCB0aGlzLmNoYXJ0LmRhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFiZWxPcHRzLnNvcnQpIHtcbiAgICAgICAgICAgIGxlZ2VuZEl0ZW1zID0gbGVnZW5kSXRlbXMuc29ydCgoYSwgYik9PmxhYmVsT3B0cy5zb3J0KGEsIGIsIHRoaXMuY2hhcnQuZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgbGVnZW5kSXRlbXMucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMgPSBsZWdlbmRJdGVtcztcbiAgICB9XG4gICAgZml0KCkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgLCBjdHggIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIW9wdGlvbnMuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbE9wdHMgPSBvcHRpb25zLmxhYmVscztcbiAgICAgICAgY29uc3QgbGFiZWxGb250ID0gdG9Gb250KGxhYmVsT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBsYWJlbEZvbnQuc2l6ZTtcbiAgICAgICAgY29uc3QgdGl0bGVIZWlnaHQgPSB0aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgeyBib3hXaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBnZXRCb3hTaXplKGxhYmVsT3B0cywgZm9udFNpemUpO1xuICAgICAgICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgY3R4LmZvbnQgPSBsYWJlbEZvbnQuc3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLm1heFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSArIDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5tYXhIZWlnaHQ7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIGl0ZW1IZWlnaHQpICsgMTA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IE1hdGgubWluKHdpZHRoLCBvcHRpb25zLm1heFdpZHRoIHx8IHRoaXMubWF4V2lkdGgpO1xuICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgb3B0aW9ucy5tYXhIZWlnaHQgfHwgdGhpcy5tYXhIZWlnaHQpO1xuICAgIH1cbiBfZml0Um93cyh0aXRsZUhlaWdodCwgZm9udFNpemUsIGJveFdpZHRoLCBpdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4V2lkdGggLCBvcHRpb25zOiB7IGxhYmVsczogeyBwYWRkaW5nICB9ICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGl0Ym94ZXMgPSB0aGlzLmxlZ2VuZEhpdEJveGVzID0gW107XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aHMgPSB0aGlzLmxpbmVXaWR0aHMgPSBbXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgbGV0IHRvdGFsSGVpZ2h0ID0gdGl0bGVIZWlnaHQ7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgbGV0IHJvdyA9IC0xO1xuICAgICAgICBsZXQgdG9wID0gLWxpbmVIZWlnaHQ7XG4gICAgICAgIHRoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobGVnZW5kSXRlbSwgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGJveFdpZHRoICsgZm9udFNpemUgLyAyICsgY3R4Lm1lYXN1cmVUZXh0KGxlZ2VuZEl0ZW0udGV4dCkud2lkdGg7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKyBpdGVtV2lkdGggKyAyICogcGFkZGluZyA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdG90YWxIZWlnaHQgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gKGkgPiAwID8gMCA6IDEpXSA9IDA7XG4gICAgICAgICAgICAgICAgdG9wICs9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoaXRib3hlc1tpXSA9IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW1XaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsaW5lV2lkdGhzW2xpbmVXaWR0aHMubGVuZ3RoIC0gMV0gKz0gaXRlbVdpZHRoICsgcGFkZGluZztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3RhbEhlaWdodDtcbiAgICB9XG4gICAgX2ZpdENvbHModGl0bGVIZWlnaHQsIGxhYmVsRm9udCwgYm94V2lkdGgsIF9pdGVtSGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4ICwgbWF4SGVpZ2h0ICwgb3B0aW9uczogeyBsYWJlbHM6IHsgcGFkZGluZyAgfSAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGhpdGJveGVzID0gdGhpcy5sZWdlbmRIaXRCb3hlcyA9IFtdO1xuICAgICAgICBjb25zdCBjb2x1bW5TaXplcyA9IHRoaXMuY29sdW1uU2l6ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0TGltaXQgPSBtYXhIZWlnaHQgLSB0aXRsZUhlaWdodDtcbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSBwYWRkaW5nO1xuICAgICAgICBsZXQgY3VycmVudENvbFdpZHRoID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRDb2xIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgbGVmdCA9IDA7XG4gICAgICAgIGxldCBjb2wgPSAwO1xuICAgICAgICB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGxlZ2VuZEl0ZW0sIGkpPT57XG4gICAgICAgICAgICBjb25zdCB7IGl0ZW1XaWR0aCAsIGl0ZW1IZWlnaHQgIH0gPSBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KTtcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBjdXJyZW50Q29sSGVpZ2h0ICsgaXRlbUhlaWdodCArIDIgKiBwYWRkaW5nID4gaGVpZ2h0TGltaXQpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjdXJyZW50Q29sV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY3VycmVudENvbEhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxlZnQgKz0gY3VycmVudENvbFdpZHRoICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICBjb2wrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29sV2lkdGggPSBjdXJyZW50Q29sSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhpdGJveGVzW2ldID0ge1xuICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50Q29sSGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICB3aWR0aDogaXRlbVdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbUhlaWdodFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xXaWR0aCA9IE1hdGgubWF4KGN1cnJlbnRDb2xXaWR0aCwgaXRlbVdpZHRoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb2xIZWlnaHQgKz0gaXRlbUhlaWdodCArIHBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnJlbnRDb2xXaWR0aDtcbiAgICAgICAgY29sdW1uU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICB3aWR0aDogY3VycmVudENvbFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBjdXJyZW50Q29sSGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG90YWxXaWR0aDtcbiAgICB9XG4gICAgYWRqdXN0SGl0Qm94ZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBjb25zdCB7IGxlZ2VuZEhpdEJveGVzOiBoaXRib3hlcyAsIG9wdGlvbnM6IHsgYWxpZ24gLCBsYWJlbHM6IHsgcGFkZGluZyAgfSAsIHJ0bCAgfSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIocnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgbGV0IHJvdyA9IDA7XG4gICAgICAgICAgICBsZXQgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChyb3cgIT09IGhpdGJveC5yb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93ID0gaGl0Ym94LnJvdztcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0aGlzLmxlZnQgKyBwYWRkaW5nLCB0aGlzLnJpZ2h0IC0gdGhpcy5saW5lV2lkdGhzW3Jvd10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wICs9IHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLngobGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgbGVmdCArPSBoaXRib3gud2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbCA9IDA7XG4gICAgICAgICAgICBsZXQgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBoaXRib3ggb2YgaGl0Ym94ZXMpe1xuICAgICAgICAgICAgICAgIGlmIChoaXRib3guY29sICE9PSBjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gaGl0Ym94LmNvbDtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIHRoaXMuY29sdW1uU2l6ZXNbY29sXS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaXRib3gudG9wID0gdG9wO1xuICAgICAgICAgICAgICAgIGhpdGJveC5sZWZ0ICs9IHRoaXMubGVmdCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgaGl0Ym94LmxlZnQgPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxIZWxwZXIueChoaXRib3gubGVmdCksIGhpdGJveC53aWR0aCk7XG4gICAgICAgICAgICAgICAgdG9wICs9IGhpdGJveC5oZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5vcHRpb25zLnBvc2l0aW9uID09PSAnYm90dG9tJztcbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgIGNsaXBBcmVhKGN0eCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9kcmF3KCk7XG4gICAgICAgICAgICB1bmNsaXBBcmVhKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXcoKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uczogb3B0cyAsIGNvbHVtblNpemVzICwgbGluZVdpZHRocyAsIGN0eCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYWxpZ24gLCBsYWJlbHM6IGxhYmVsT3B0cyAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGRlZmF1bHRzLmNvbG9yO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdHMucnRsLCB0aGlzLmxlZnQsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBsYWJlbEZvbnQgPSB0b0ZvbnQobGFiZWxPcHRzLmZvbnQpO1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgIH0gPSBsYWJlbE9wdHM7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gbGFiZWxGb250LnNpemU7XG4gICAgICAgIGNvbnN0IGhhbGZGb250U2l6ZSA9IGZvbnRTaXplIC8gMjtcbiAgICAgICAgbGV0IGN1cnNvcjtcbiAgICAgICAgdGhpcy5kcmF3VGl0bGUoKTtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24oJ2xlZnQnKTtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gMC41O1xuICAgICAgICBjdHguZm9udCA9IGxhYmVsRm9udC5zdHJpbmc7XG4gICAgICAgIGNvbnN0IHsgYm94V2lkdGggLCBib3hIZWlnaHQgLCBpdGVtSGVpZ2h0ICB9ID0gZ2V0Qm94U2l6ZShsYWJlbE9wdHMsIGZvbnRTaXplKTtcbiAgICAgICAgY29uc3QgZHJhd0xlZ2VuZEJveCA9IGZ1bmN0aW9uKHgsIHksIGxlZ2VuZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChpc05hTihib3hXaWR0aCkgfHwgYm94V2lkdGggPD0gMCB8fCBpc05hTihib3hIZWlnaHQpIHx8IGJveEhlaWdodCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gdmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lV2lkdGgsIDEpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uZmlsbFN0eWxlLCBkZWZhdWx0Q29sb3IpO1xuICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVDYXAsICdidXR0Jyk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSB2YWx1ZU9yRGVmYXVsdChsZWdlbmRJdGVtLmxpbmVEYXNoT2Zmc2V0LCAwKTtcbiAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0ubGluZUpvaW4sICdtaXRlcicpO1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlT3JEZWZhdWx0KGxlZ2VuZEl0ZW0uc3Ryb2tlU3R5bGUsIGRlZmF1bHRDb2xvcik7XG4gICAgICAgICAgICBjdHguc2V0TGluZURhc2godmFsdWVPckRlZmF1bHQobGVnZW5kSXRlbS5saW5lRGFzaCwgW10pKTtcbiAgICAgICAgICAgIGlmIChsYWJlbE9wdHMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYXdPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJveEhlaWdodCAqIE1hdGguU1FSVDIgLyAyLFxuICAgICAgICAgICAgICAgICAgICBwb2ludFN0eWxlOiBsZWdlbmRJdGVtLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBsZWdlbmRJdGVtLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogbGluZVdpZHRoXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJYID0gcnRsSGVscGVyLnhQbHVzKHgsIGJveFdpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IHkgKyBoYWxmRm9udFNpemU7XG4gICAgICAgICAgICAgICAgZHJhd1BvaW50TGVnZW5kKGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclksIGxhYmVsT3B0cy5wb2ludFN0eWxlV2lkdGggJiYgYm94V2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5Qm94VG9wID0geSArIE1hdGgubWF4KChmb250U2l6ZSAtIGJveEhlaWdodCkgLyAyLCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4Qm94TGVmdCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHgsIGJveFdpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxlZ2VuZEl0ZW0uYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoYm9yZGVyUmFkaXVzKS5zb21lKCh2KT0+diAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeEJveExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5Qm94VG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgdzogYm94V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoOiBib3hIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHgucmVjdCh4Qm94TGVmdCwgeUJveFRvcCwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsbFRleHQgPSBmdW5jdGlvbih4LCB5LCBsZWdlbmRJdGVtKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgbGVnZW5kSXRlbS50ZXh0LCB4LCB5ICsgaXRlbUhlaWdodCAvIDIsIGxhYmVsRm9udCwge1xuICAgICAgICAgICAgICAgIHN0cmlrZXRocm91Z2g6IGxlZ2VuZEl0ZW0uaGlkZGVuLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogcnRsSGVscGVyLnRleHRBbGlnbihsZWdlbmRJdGVtLnRleHRBbGlnbilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgICBjb25zdCB0aXRsZUhlaWdodCA9IHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpO1xuICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgeDogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzWzBdKSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnRvcCArIHBhZGRpbmcgKyB0aXRsZUhlaWdodCxcbiAgICAgICAgICAgICAgICBsaW5lOiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMubGVmdCArIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgeTogX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMudG9wICsgdGl0bGVIZWlnaHQgKyBwYWRkaW5nLCB0aGlzLmJvdHRvbSAtIGNvbHVtblNpemVzWzBdLmhlaWdodCksXG4gICAgICAgICAgICAgICAgbGluZTogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvdmVycmlkZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBpdGVtSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgICAgdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChsZWdlbmRJdGVtLCBpKT0+e1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gbGVnZW5kSXRlbS5mb250Q29sb3I7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjdHgubWVhc3VyZVRleHQobGVnZW5kSXRlbS50ZXh0KS53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHJ0bEhlbHBlci50ZXh0QWxpZ24obGVnZW5kSXRlbS50ZXh0QWxpZ24gfHwgKGxlZ2VuZEl0ZW0udGV4dEFsaWduID0gbGFiZWxPcHRzLnRleHRBbGlnbikpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBib3hXaWR0aCArIGhhbGZGb250U2l6ZSArIHRleHRXaWR0aDtcbiAgICAgICAgICAgIGxldCB4ID0gY3Vyc29yLng7XG4gICAgICAgICAgICBsZXQgeSA9IGN1cnNvci55O1xuICAgICAgICAgICAgcnRsSGVscGVyLnNldFdpZHRoKHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiB4ICsgd2lkdGggKyBwYWRkaW5nID4gdGhpcy5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0gX2FsaWduU3RhcnRFbmQoYWxpZ24sIHRoaXMubGVmdCArIHBhZGRpbmcsIHRoaXMucmlnaHQgLSBsaW5lV2lkdGhzW2N1cnNvci5saW5lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCAmJiB5ICsgbGluZUhlaWdodCA+IHRoaXMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgeCA9IGN1cnNvci54ID0geCArIGNvbHVtblNpemVzW2N1cnNvci5saW5lXS53aWR0aCArIHBhZGRpbmc7XG4gICAgICAgICAgICAgICAgY3Vyc29yLmxpbmUrKztcbiAgICAgICAgICAgICAgICB5ID0gY3Vyc29yLnkgPSBfYWxpZ25TdGFydEVuZChhbGlnbiwgdGhpcy50b3AgKyB0aXRsZUhlaWdodCArIHBhZGRpbmcsIHRoaXMuYm90dG9tIC0gY29sdW1uU2l6ZXNbY3Vyc29yLmxpbmVdLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWFsWCA9IHJ0bEhlbHBlci54KHgpO1xuICAgICAgICAgICAgZHJhd0xlZ2VuZEJveChyZWFsWCwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICB4ID0gX3RleHRYKHRleHRBbGlnbiwgeCArIGJveFdpZHRoICsgaGFsZkZvbnRTaXplLCBpc0hvcml6b250YWwgPyB4ICsgd2lkdGggOiB0aGlzLnJpZ2h0LCBvcHRzLnJ0bCk7XG4gICAgICAgICAgICBmaWxsVGV4dChydGxIZWxwZXIueCh4KSwgeSwgbGVnZW5kSXRlbSk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnggKz0gd2lkdGggKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGVnZW5kSXRlbS50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRMaW5lSGVpZ2h0ID0gbGFiZWxGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY3Vyc29yLnkgKz0gY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodChsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkgKyBwYWRkaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IueSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdG9yZVRleHREaXJlY3Rpb24odGhpcy5jdHgsIG9wdHMudGV4dERpcmVjdGlvbik7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGl0bGVPcHRzID0gb3B0cy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgaWYgKCF0aXRsZU9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ0bEhlbHBlciA9IGdldFJ0bEFkYXB0ZXIob3B0cy5ydGwsIHRoaXMubGVmdCwgdGhpcy53aWR0aCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRpdGxlT3B0cy5wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgaGFsZkZvbnRTaXplID0gdGl0bGVGb250LnNpemUgLyAyO1xuICAgICAgICBjb25zdCB0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSA9IHRpdGxlUGFkZGluZy50b3AgKyBoYWxmRm9udFNpemU7XG4gICAgICAgIGxldCB5O1xuICAgICAgICBsZXQgbGVmdCA9IHRoaXMubGVmdDtcbiAgICAgICAgbGV0IG1heFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKTtcbiAgICAgICAgICAgIHkgPSB0aGlzLnRvcCArIHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplO1xuICAgICAgICAgICAgbGVmdCA9IF9hbGlnblN0YXJ0RW5kKG9wdHMuYWxpZ24sIGxlZnQsIHRoaXMucmlnaHQgLSBtYXhXaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmNvbHVtblNpemVzLnJlZHVjZSgoYWNjLCBzaXplKT0+TWF0aC5tYXgoYWNjLCBzaXplLmhlaWdodCksIDApO1xuICAgICAgICAgICAgeSA9IHRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplICsgX2FsaWduU3RhcnRFbmQob3B0cy5hbGlnbiwgdGhpcy50b3AsIHRoaXMuYm90dG9tIC0gbWF4SGVpZ2h0IC0gb3B0cy5sYWJlbHMucGFkZGluZyAtIHRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gX2FsaWduU3RhcnRFbmQocG9zaXRpb24sIGxlZnQsIGxlZnQgKyBtYXhXaWR0aCk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKF90b0xlZnRSaWdodENlbnRlcihwb3NpdGlvbikpO1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRpdGxlT3B0cy5jb2xvcjtcbiAgICAgICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGl0bGVPcHRzLnRleHQsIHgsIHksIHRpdGxlRm9udCk7XG4gICAgfVxuIF9jb21wdXRlVGl0bGVIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlT3B0cyA9IHRoaXMub3B0aW9ucy50aXRsZTtcbiAgICAgICAgY29uc3QgdGl0bGVGb250ID0gdG9Gb250KHRpdGxlT3B0cy5mb250KTtcbiAgICAgICAgY29uc3QgdGl0bGVQYWRkaW5nID0gdG9QYWRkaW5nKHRpdGxlT3B0cy5wYWRkaW5nKTtcbiAgICAgICAgcmV0dXJuIHRpdGxlT3B0cy5kaXNwbGF5ID8gdGl0bGVGb250LmxpbmVIZWlnaHQgKyB0aXRsZVBhZGRpbmcuaGVpZ2h0IDogMDtcbiAgICB9XG4gX2dldExlZ2VuZEl0ZW1BdCh4LCB5KSB7XG4gICAgICAgIGxldCBpLCBoaXRCb3gsIGxoO1xuICAgICAgICBpZiAoX2lzQmV0d2Vlbih4LCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpICYmIF9pc0JldHdlZW4oeSwgdGhpcy50b3AsIHRoaXMuYm90dG9tKSkge1xuICAgICAgICAgICAgbGggPSB0aGlzLmxlZ2VuZEhpdEJveGVzO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGgubGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGhpdEJveCA9IGxoW2ldO1xuICAgICAgICAgICAgICAgIGlmIChfaXNCZXR3ZWVuKHgsIGhpdEJveC5sZWZ0LCBoaXRCb3gubGVmdCArIGhpdEJveC53aWR0aCkgJiYgX2lzQmV0d2Vlbih5LCBoaXRCb3gudG9wLCBoaXRCb3gudG9wICsgaGl0Qm94LmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmICghaXNMaXN0ZW5lZChlLnR5cGUsIG9wdHMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSB0aGlzLl9nZXRMZWdlbmRJdGVtQXQoZS54LCBlLnkpO1xuICAgICAgICBpZiAoZS50eXBlID09PSAnbW91c2Vtb3ZlJyB8fCBlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5faG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBjb25zdCBzYW1lSXRlbSA9IGl0ZW1zRXF1YWwocHJldmlvdXMsIGhvdmVyZWRJdGVtKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiAhc2FtZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvcHRzLm9uTGVhdmUsIFtcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hvdmVyZWRJdGVtID0gaG92ZXJlZEl0ZW07XG4gICAgICAgICAgICBpZiAoaG92ZXJlZEl0ZW0gJiYgIXNhbWVJdGVtKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sob3B0cy5vbkhvdmVyLCBbXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRJdGVtLFxuICAgICAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdHMub25DbGljaywgW1xuICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgaG92ZXJlZEl0ZW0sXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtU2l6ZShib3hXaWR0aCwgbGFiZWxGb250LCBjdHgsIGxlZ2VuZEl0ZW0sIF9pdGVtSGVpZ2h0KSB7XG4gICAgY29uc3QgaXRlbVdpZHRoID0gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCk7XG4gICAgY29uc3QgaXRlbUhlaWdodCA9IGNhbGN1bGF0ZUl0ZW1IZWlnaHQoX2l0ZW1IZWlnaHQsIGxlZ2VuZEl0ZW0sIGxhYmVsRm9udC5saW5lSGVpZ2h0KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpdGVtV2lkdGgsXG4gICAgICAgIGl0ZW1IZWlnaHRcbiAgICB9O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlSXRlbVdpZHRoKGxlZ2VuZEl0ZW0sIGJveFdpZHRoLCBsYWJlbEZvbnQsIGN0eCkge1xuICAgIGxldCBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW0udGV4dDtcbiAgICBpZiAobGVnZW5kSXRlbVRleHQgJiYgdHlwZW9mIGxlZ2VuZEl0ZW1UZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBsZWdlbmRJdGVtVGV4dCA9IGxlZ2VuZEl0ZW1UZXh0LnJlZHVjZSgoYSwgYik9PmEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYik7XG4gICAgfVxuICAgIHJldHVybiBib3hXaWR0aCArIGxhYmVsRm9udC5zaXplIC8gMiArIGN0eC5tZWFzdXJlVGV4dChsZWdlbmRJdGVtVGV4dCkud2lkdGg7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVJdGVtSGVpZ2h0KF9pdGVtSGVpZ2h0LCBsZWdlbmRJdGVtLCBmb250TGluZUhlaWdodCkge1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gX2l0ZW1IZWlnaHQ7XG4gICAgaWYgKHR5cGVvZiBsZWdlbmRJdGVtLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGl0ZW1IZWlnaHQgPSBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1IZWlnaHQ7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0KGxlZ2VuZEl0ZW0sIGZvbnRMaW5lSGVpZ2h0KSB7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSBsZWdlbmRJdGVtLnRleHQgPyBsZWdlbmRJdGVtLnRleHQubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gZm9udExpbmVIZWlnaHQgKiBsYWJlbEhlaWdodDtcbn1cbmZ1bmN0aW9uIGlzTGlzdGVuZWQodHlwZSwgb3B0cykge1xuICAgIGlmICgodHlwZSA9PT0gJ21vdXNlbW92ZScgfHwgdHlwZSA9PT0gJ21vdXNlb3V0JykgJiYgKG9wdHMub25Ib3ZlciB8fCBvcHRzLm9uTGVhdmUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5vbkNsaWNrICYmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT09ICdtb3VzZXVwJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbnZhciBwbHVnaW5fbGVnZW5kID0ge1xuICAgIGlkOiAnbGVnZW5kJyxcbiBfZWxlbWVudDogTGVnZW5kLFxuICAgIHN0YXJ0IChjaGFydCwgX2FyZ3MsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kID0gbmV3IExlZ2VuZCh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIGxlZ2VuZCwgb3B0aW9ucyk7XG4gICAgICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCBsZWdlbmQpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIGNoYXJ0LmxlZ2VuZCk7XG4gICAgICAgIGRlbGV0ZSBjaGFydC5sZWdlbmQ7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBsZWdlbmQgPSBjaGFydC5sZWdlbmQ7XG4gICAgICAgIGxheW91dHMuY29uZmlndXJlKGNoYXJ0LCBsZWdlbmQsIG9wdGlvbnMpO1xuICAgICAgICBsZWdlbmQub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBhZnRlclVwZGF0ZSAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gY2hhcnQubGVnZW5kO1xuICAgICAgICBsZWdlbmQuYnVpbGRMYWJlbHMoKTtcbiAgICAgICAgbGVnZW5kLmFkanVzdEhpdEJveGVzKCk7XG4gICAgfSxcbiAgICBhZnRlckV2ZW50IChjaGFydCwgYXJncykge1xuICAgICAgICBpZiAoIWFyZ3MucmVwbGF5KSB7XG4gICAgICAgICAgICBjaGFydC5sZWdlbmQuaGFuZGxlRXZlbnQoYXJncy5ldmVudCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcmV2ZXJzZTogZmFsc2UsXG4gICAgICAgIHdlaWdodDogMTAwMCxcbiAgICAgICAgb25DbGljayAoZSwgbGVnZW5kSXRlbSwgbGVnZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGxlZ2VuZEl0ZW0uZGF0YXNldEluZGV4O1xuICAgICAgICAgICAgY29uc3QgY2kgPSBsZWdlbmQuY2hhcnQ7XG4gICAgICAgICAgICBpZiAoY2kuaXNEYXRhc2V0VmlzaWJsZShpbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjaS5oaWRlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZWdlbmRJdGVtLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNpLnNob3coaW5kZXgpO1xuICAgICAgICAgICAgICAgIGxlZ2VuZEl0ZW0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uSG92ZXI6IG51bGwsXG4gICAgICAgIG9uTGVhdmU6IG51bGwsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgY29sb3I6IChjdHgpPT5jdHguY2hhcnQub3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGJveFdpZHRoOiA0MCxcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwLFxuICAgICAgICAgICAgZ2VuZXJhdGVMYWJlbHMgKGNoYXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSBjaGFydC5kYXRhLmRhdGFzZXRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IHVzZVBvaW50U3R5bGUgLCBwb2ludFN0eWxlICwgdGV4dEFsaWduICwgY29sb3IgLCB1c2VCb3JkZXJSYWRpdXMgLCBib3JkZXJSYWRpdXMgIH0gIH0gPSBjaGFydC5sZWdlbmQub3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnQuX2dldFNvcnRlZERhdGFzZXRNZXRhcygpLm1hcCgobWV0YSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodXNlUG9pbnRTdHlsZSA/IDAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRvUGFkZGluZyhzdHlsZS5ib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkYXRhc2V0c1ttZXRhLmluZGV4XS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogc3R5bGUuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udENvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIW1ldGEudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVDYXA6IHN0eWxlLmJvcmRlckNhcFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZURhc2g6IHN0eWxlLmJvcmRlckRhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGFzaE9mZnNldDogc3R5bGUuYm9yZGVyRGFzaE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVKb2luOiBzdHlsZS5ib3JkZXJKb2luU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IChib3JkZXJXaWR0aC53aWR0aCArIGJvcmRlcldpZHRoLmhlaWdodCkgLyA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IHN0eWxlLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogcG9pbnRTdHlsZSB8fCBzdHlsZS5wb2ludFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IHN0eWxlLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24gfHwgc3R5bGUudGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiB1c2VCb3JkZXJSYWRpdXMgJiYgKGJvcmRlclJhZGl1cyB8fCBzdHlsZS5ib3JkZXJSYWRpdXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldEluZGV4OiBtZXRhLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBjb2xvcjogKGN0eCk9PmN0eC5jaGFydC5vcHRpb25zLmNvbG9yLFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXNjcmlwdG9yczoge1xuICAgICAgICBfc2NyaXB0YWJsZTogKG5hbWUpPT4hbmFtZS5zdGFydHNXaXRoKCdvbicpLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9PiFbXG4gICAgICAgICAgICAgICAgICAgICdnZW5lcmF0ZUxhYmVscycsXG4gICAgICAgICAgICAgICAgICAgICdmaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnc29ydCdcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG5hbWUpXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jbGFzcyBUaXRsZSBleHRlbmRzIEVsZW1lbnQge1xuIGNvbnN0cnVjdG9yKGNvbmZpZyl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2hhcnQgPSBjb25maWcuY2hhcnQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGNvbmZpZy5vcHRpb25zO1xuICAgICAgICB0aGlzLmN0eCA9IGNvbmZpZy5jdHg7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5sZWZ0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53ZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZnVsbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHVwZGF0ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMubGVmdCA9IDA7XG4gICAgICAgIHRoaXMudG9wID0gMDtcbiAgICAgICAgaWYgKCFvcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmhlaWdodCA9IHRoaXMucmlnaHQgPSB0aGlzLmJvdHRvbSA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSA9IG1heEhlaWdodDtcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gaXNBcnJheShvcHRzLnRleHQpID8gb3B0cy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5wYWRkaW5nKTtcbiAgICAgICAgY29uc3QgdGV4dFNpemUgPSBsaW5lQ291bnQgKiB0b0ZvbnQob3B0cy5mb250KS5saW5lSGVpZ2h0ICsgdGhpcy5fcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRleHRTaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRleHRTaXplO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gcG9zID09PSAndG9wJyB8fCBwb3MgPT09ICdib3R0b20nO1xuICAgIH1cbiAgICBfZHJhd0FyZ3Mob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHsgdG9wICwgbGVmdCAsIGJvdHRvbSAsIHJpZ2h0ICwgb3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGFsaWduID0gb3B0aW9ucy5hbGlnbjtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gMDtcbiAgICAgICAgbGV0IG1heFdpZHRoLCB0aXRsZVgsIHRpdGxlWTtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHRpdGxlWCA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICB0aXRsZVkgPSB0b3AgKyBvZmZzZXQ7XG4gICAgICAgICAgICBtYXhXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICB0aXRsZVggPSBsZWZ0ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCBib3R0b20sIHRvcCk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIC0wLjU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpdGxlWCA9IHJpZ2h0IC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRpdGxlWSA9IF9hbGlnblN0YXJ0RW5kKGFsaWduLCB0b3AsIGJvdHRvbSk7XG4gICAgICAgICAgICAgICAgcm90YXRpb24gPSBQSSAqIDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1heFdpZHRoID0gYm90dG9tIC0gdG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICB0aXRsZVksXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRyYXcoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW9wdHMuZGlzcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvbnRPcHRzID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBmb250T3B0cy5saW5lSGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBsaW5lSGVpZ2h0IC8gMiArIHRoaXMuX3BhZGRpbmcudG9wO1xuICAgICAgICBjb25zdCB7IHRpdGxlWCAsIHRpdGxlWSAsIG1heFdpZHRoICwgcm90YXRpb24gIH0gPSB0aGlzLl9kcmF3QXJncyhvZmZzZXQpO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgb3B0cy50ZXh0LCAwLCAwLCBmb250T3B0cywge1xuICAgICAgICAgICAgY29sb3I6IG9wdHMuY29sb3IsXG4gICAgICAgICAgICBtYXhXaWR0aCxcbiAgICAgICAgICAgIHJvdGF0aW9uLFxuICAgICAgICAgICAgdGV4dEFsaWduOiBfdG9MZWZ0UmlnaHRDZW50ZXIob3B0cy5hbGlnbiksXG4gICAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICdtaWRkbGUnLFxuICAgICAgICAgICAgdHJhbnNsYXRpb246IFtcbiAgICAgICAgICAgICAgICB0aXRsZVgsXG4gICAgICAgICAgICAgICAgdGl0bGVZXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKGNoYXJ0LCB0aXRsZU9wdHMpIHtcbiAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgIGN0eDogY2hhcnQuY3R4LFxuICAgICAgICBvcHRpb25zOiB0aXRsZU9wdHMsXG4gICAgICAgIGNoYXJ0XG4gICAgfSk7XG4gICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCB0aXRsZU9wdHMpO1xuICAgIGxheW91dHMuYWRkQm94KGNoYXJ0LCB0aXRsZSk7XG4gICAgY2hhcnQudGl0bGVCbG9jayA9IHRpdGxlO1xufVxudmFyIHBsdWdpbl90aXRsZSA9IHtcbiAgICBpZDogJ3RpdGxlJyxcbiBfZWxlbWVudDogVGl0bGUsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjcmVhdGVUaXRsZShjaGFydCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBzdG9wIChjaGFydCkge1xuICAgICAgICBjb25zdCB0aXRsZUJsb2NrID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIHRpdGxlQmxvY2spO1xuICAgICAgICBkZWxldGUgY2hhcnQudGl0bGVCbG9jaztcbiAgICB9LFxuICAgIGJlZm9yZVVwZGF0ZSAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gY2hhcnQudGl0bGVCbG9jaztcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgdGl0bGUub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSxcbiAgICBkZWZhdWx0czoge1xuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICB3ZWlnaHQ6ICdib2xkJ1xuICAgICAgICB9LFxuICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMjAwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgbWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciBwbHVnaW5fc3VidGl0bGUgPSB7XG4gICAgaWQ6ICdzdWJ0aXRsZScsXG4gICAgc3RhcnQgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG5ldyBUaXRsZSh7XG4gICAgICAgICAgICBjdHg6IGNoYXJ0LmN0eCxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBjaGFydFxuICAgICAgICB9KTtcbiAgICAgICAgbGF5b3V0cy5jb25maWd1cmUoY2hhcnQsIHRpdGxlLCBvcHRpb25zKTtcbiAgICAgICAgbGF5b3V0cy5hZGRCb3goY2hhcnQsIHRpdGxlKTtcbiAgICAgICAgbWFwLnNldChjaGFydCwgdGl0bGUpO1xuICAgIH0sXG4gICAgc3RvcCAoY2hhcnQpIHtcbiAgICAgICAgbGF5b3V0cy5yZW1vdmVCb3goY2hhcnQsIG1hcC5nZXQoY2hhcnQpKTtcbiAgICAgICAgbWFwLmRlbGV0ZShjaGFydCk7XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IG1hcC5nZXQoY2hhcnQpO1xuICAgICAgICBsYXlvdXRzLmNvbmZpZ3VyZShjaGFydCwgdGl0bGUsIG9wdGlvbnMpO1xuICAgICAgICB0aXRsZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIHdlaWdodDogJ25vcm1hbCdcbiAgICAgICAgfSxcbiAgICAgICAgZnVsbFNpemU6IHRydWUsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHdlaWdodDogMTUwMFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlczoge1xuICAgICAgICBjb2xvcjogJ2NvbG9yJ1xuICAgIH0sXG4gICAgZGVzY3JpcHRvcnM6IHtcbiAgICAgICAgX3NjcmlwdGFibGU6IHRydWUsXG4gICAgICAgIF9pbmRleGFibGU6IGZhbHNlXG4gICAgfVxufTtcblxuY29uc3QgcG9zaXRpb25lcnMgPSB7XG4gYXZlcmFnZSAoaXRlbXMpIHtcbiAgICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBsZXQgeFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgbGV0IHkgPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gZWwudG9vbHRpcFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgeFNldC5hZGQocG9zLngpO1xuICAgICAgICAgICAgICAgIHkgKz0gcG9zLnk7XG4gICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgPT09IDAgfHwgeFNldC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeEF2ZXJhZ2UgPSBbXG4gICAgICAgICAgICAuLi54U2V0XG4gICAgICAgIF0ucmVkdWNlKChhLCBiKT0+YSArIGIpIC8geFNldC5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeEF2ZXJhZ2UsXG4gICAgICAgICAgICB5OiB5IC8gY291bnRcbiAgICAgICAgfTtcbiAgICB9LFxuIG5lYXJlc3QgKGl0ZW1zLCBldmVudFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHggPSBldmVudFBvc2l0aW9uLng7XG4gICAgICAgIGxldCB5ID0gZXZlbnRQb3NpdGlvbi55O1xuICAgICAgICBsZXQgbWluRGlzdGFuY2UgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGxldCBpLCBsZW4sIG5lYXJlc3RFbGVtZW50O1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgKytpKXtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gaXRlbXNbaV0uZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbCAmJiBlbC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gZWwuZ2V0Q2VudGVyUG9pbnQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGV2ZW50UG9zaXRpb24sIGNlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGQgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3RFbGVtZW50ID0gZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdHAgPSBuZWFyZXN0RWxlbWVudC50b29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHggPSB0cC54O1xuICAgICAgICAgICAgeSA9IHRwLnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHB1c2hPckNvbmNhdChiYXNlLCB0b1B1c2gpIHtcbiAgICBpZiAodG9QdXNoKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRvUHVzaCkpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGJhc2UsIHRvUHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlLnB1c2godG9QdXNoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbn1cbiBmdW5jdGlvbiBzcGxpdE5ld2xpbmVzKHN0cikge1xuICAgIGlmICgodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgfHwgc3RyIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCdcXG4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbiBmdW5jdGlvbiBjcmVhdGVUb29sdGlwSXRlbShjaGFydCwgaXRlbSkge1xuICAgIGNvbnN0IHsgZWxlbWVudCAsIGRhdGFzZXRJbmRleCAsIGluZGV4ICB9ID0gaXRlbTtcbiAgICBjb25zdCBjb250cm9sbGVyID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KS5jb250cm9sbGVyO1xuICAgIGNvbnN0IHsgbGFiZWwgLCB2YWx1ZSAgfSA9IGNvbnRyb2xsZXIuZ2V0TGFiZWxBbmRWYWx1ZShpbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2hhcnQsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBwYXJzZWQ6IGNvbnRyb2xsZXIuZ2V0UGFyc2VkKGluZGV4KSxcbiAgICAgICAgcmF3OiBjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uZGF0YVtpbmRleF0sXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZGF0YXNldDogY29udHJvbGxlci5nZXREYXRhc2V0KCksXG4gICAgICAgIGRhdGFJbmRleDogaW5kZXgsXG4gICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgZWxlbWVudFxuICAgIH07XG59XG4gZnVuY3Rpb24gZ2V0VG9vbHRpcFNpemUodG9vbHRpcCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGN0eCA9IHRvb2x0aXAuY2hhcnQuY3R4O1xuICAgIGNvbnN0IHsgYm9keSAsIGZvb3RlciAsIHRpdGxlICB9ID0gdG9vbHRpcDtcbiAgICBjb25zdCB7IGJveFdpZHRoICwgYm94SGVpZ2h0ICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBib2R5Rm9udCA9IHRvRm9udChvcHRpb25zLmJvZHlGb250KTtcbiAgICBjb25zdCB0aXRsZUZvbnQgPSB0b0ZvbnQob3B0aW9ucy50aXRsZUZvbnQpO1xuICAgIGNvbnN0IGZvb3RlckZvbnQgPSB0b0ZvbnQob3B0aW9ucy5mb290ZXJGb250KTtcbiAgICBjb25zdCB0aXRsZUxpbmVDb3VudCA9IHRpdGxlLmxlbmd0aDtcbiAgICBjb25zdCBmb290ZXJMaW5lQ291bnQgPSBmb290ZXIubGVuZ3RoO1xuICAgIGNvbnN0IGJvZHlMaW5lSXRlbUNvdW50ID0gYm9keS5sZW5ndGg7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIGxldCBoZWlnaHQgPSBwYWRkaW5nLmhlaWdodDtcbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBjb21iaW5lZEJvZHlMZW5ndGggPSBib2R5LnJlZHVjZSgoY291bnQsIGJvZHlJdGVtKT0+Y291bnQgKyBib2R5SXRlbS5iZWZvcmUubGVuZ3RoICsgYm9keUl0ZW0ubGluZXMubGVuZ3RoICsgYm9keUl0ZW0uYWZ0ZXIubGVuZ3RoLCAwKTtcbiAgICBjb21iaW5lZEJvZHlMZW5ndGggKz0gdG9vbHRpcC5iZWZvcmVCb2R5Lmxlbmd0aCArIHRvb2x0aXAuYWZ0ZXJCb2R5Lmxlbmd0aDtcbiAgICBpZiAodGl0bGVMaW5lQ291bnQpIHtcbiAgICAgICAgaGVpZ2h0ICs9IHRpdGxlTGluZUNvdW50ICogdGl0bGVGb250LmxpbmVIZWlnaHQgKyAodGl0bGVMaW5lQ291bnQgLSAxKSAqIG9wdGlvbnMudGl0bGVTcGFjaW5nICsgb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbTtcbiAgICB9XG4gICAgaWYgKGNvbWJpbmVkQm9keUxlbmd0aCkge1xuICAgICAgICBjb25zdCBib2R5TGluZUhlaWdodCA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IE1hdGgubWF4KGJveEhlaWdodCwgYm9keUZvbnQubGluZUhlaWdodCkgOiBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICBoZWlnaHQgKz0gYm9keUxpbmVJdGVtQ291bnQgKiBib2R5TGluZUhlaWdodCArIChjb21iaW5lZEJvZHlMZW5ndGggLSBib2R5TGluZUl0ZW1Db3VudCkgKiBib2R5Rm9udC5saW5lSGVpZ2h0ICsgKGNvbWJpbmVkQm9keUxlbmd0aCAtIDEpICogb3B0aW9ucy5ib2R5U3BhY2luZztcbiAgICB9XG4gICAgaWYgKGZvb3RlckxpbmVDb3VudCkge1xuICAgICAgICBoZWlnaHQgKz0gb3B0aW9ucy5mb290ZXJNYXJnaW5Ub3AgKyBmb290ZXJMaW5lQ291bnQgKiBmb290ZXJGb250LmxpbmVIZWlnaHQgKyAoZm9vdGVyTGluZUNvdW50IC0gMSkgKiBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgfVxuICAgIGxldCB3aWR0aFBhZGRpbmcgPSAwO1xuICAgIGNvbnN0IG1heExpbmVXaWR0aCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3R4Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoICsgd2lkdGhQYWRkaW5nKTtcbiAgICB9O1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LmZvbnQgPSB0aXRsZUZvbnQuc3RyaW5nO1xuICAgIGVhY2godG9vbHRpcC50aXRsZSwgbWF4TGluZVdpZHRoKTtcbiAgICBjdHguZm9udCA9IGJvZHlGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuYmVmb3JlQm9keS5jb25jYXQodG9vbHRpcC5hZnRlckJvZHkpLCBtYXhMaW5lV2lkdGgpO1xuICAgIHdpZHRoUGFkZGluZyA9IG9wdGlvbnMuZGlzcGxheUNvbG9ycyA/IGJveFdpZHRoICsgMiArIG9wdGlvbnMuYm94UGFkZGluZyA6IDA7XG4gICAgZWFjaChib2R5LCAoYm9keUl0ZW0pPT57XG4gICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmxpbmVzLCBtYXhMaW5lV2lkdGgpO1xuICAgICAgICBlYWNoKGJvZHlJdGVtLmFmdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIH0pO1xuICAgIHdpZHRoUGFkZGluZyA9IDA7XG4gICAgY3R4LmZvbnQgPSBmb290ZXJGb250LnN0cmluZztcbiAgICBlYWNoKHRvb2x0aXAuZm9vdGVyLCBtYXhMaW5lV2lkdGgpO1xuICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgd2lkdGggKz0gcGFkZGluZy53aWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSkge1xuICAgIGNvbnN0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHkgPCBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAndG9wJztcbiAgICB9IGVsc2UgaWYgKHkgPiBjaGFydC5oZWlnaHQgLSBoZWlnaHQgLyAyKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tJztcbiAgICB9XG4gICAgcmV0dXJuICdjZW50ZXInO1xufVxuZnVuY3Rpb24gZG9lc05vdEZpdFdpdGhBbGlnbih4QWxpZ24sIGNoYXJ0LCBvcHRpb25zLCBzaXplKSB7XG4gICAgY29uc3QgeyB4ICwgd2lkdGggIH0gPSBzaXplO1xuICAgIGNvbnN0IGNhcmV0ID0gb3B0aW9ucy5jYXJldFNpemUgKyBvcHRpb25zLmNhcmV0UGFkZGluZztcbiAgICBpZiAoeEFsaWduID09PSAnbGVmdCcgJiYgeCArIHdpZHRoICsgY2FyZXQgPiBjaGFydC53aWR0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHhBbGlnbiA9PT0gJ3JpZ2h0JyAmJiB4IC0gd2lkdGggLSBjYXJldCA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gZGV0ZXJtaW5lWEFsaWduKGNoYXJ0LCBvcHRpb25zLCBzaXplLCB5QWxpZ24pIHtcbiAgICBjb25zdCB7IHggLCB3aWR0aCAgfSA9IHNpemU7XG4gICAgY29uc3QgeyB3aWR0aDogY2hhcnRXaWR0aCAsIGNoYXJ0QXJlYTogeyBsZWZ0ICwgcmlnaHQgIH0gIH0gPSBjaGFydDtcbiAgICBsZXQgeEFsaWduID0gJ2NlbnRlcic7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgeEFsaWduID0geCA8PSAobGVmdCArIHJpZ2h0KSAvIDIgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIH0gZWxzZSBpZiAoeCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgeEFsaWduID0gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoeCA+PSBjaGFydFdpZHRoIC0gd2lkdGggLyAyKSB7XG4gICAgICAgIHhBbGlnbiA9ICdyaWdodCc7XG4gICAgfVxuICAgIGlmIChkb2VzTm90Rml0V2l0aEFsaWduKHhBbGlnbiwgY2hhcnQsIG9wdGlvbnMsIHNpemUpKSB7XG4gICAgICAgIHhBbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgICByZXR1cm4geEFsaWduO1xufVxuIGZ1bmN0aW9uIGRldGVybWluZUFsaWdubWVudChjaGFydCwgb3B0aW9ucywgc2l6ZSkge1xuICAgIGNvbnN0IHlBbGlnbiA9IHNpemUueUFsaWduIHx8IG9wdGlvbnMueUFsaWduIHx8IGRldGVybWluZVlBbGlnbihjaGFydCwgc2l6ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeEFsaWduOiBzaXplLnhBbGlnbiB8fCBvcHRpb25zLnhBbGlnbiB8fCBkZXRlcm1pbmVYQWxpZ24oY2hhcnQsIG9wdGlvbnMsIHNpemUsIHlBbGlnbiksXG4gICAgICAgIHlBbGlnblxuICAgIH07XG59XG5mdW5jdGlvbiBhbGlnblgoc2l6ZSwgeEFsaWduKSB7XG4gICAgbGV0IHsgeCAsIHdpZHRoICB9ID0gc2l6ZTtcbiAgICBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggLT0gd2lkdGg7XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gd2lkdGggLyAyO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn1cbmZ1bmN0aW9uIGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKSB7XG4gICAgbGV0IHsgeSAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgeSArPSBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2UgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgeSAtPSBoZWlnaHQgKyBwYWRkaW5nQW5kU2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5IC09IGhlaWdodCAvIDI7XG4gICAgfVxuICAgIHJldHVybiB5O1xufVxuIGZ1bmN0aW9uIGdldEJhY2tncm91bmRQb2ludChvcHRpb25zLCBzaXplLCBhbGlnbm1lbnQsIGNoYXJ0KSB7XG4gICAgY29uc3QgeyBjYXJldFNpemUgLCBjYXJldFBhZGRpbmcgLCBjb3JuZXJSYWRpdXMgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHsgeEFsaWduICwgeUFsaWduICB9ID0gYWxpZ25tZW50O1xuICAgIGNvbnN0IHBhZGRpbmdBbmRTaXplID0gY2FyZXRTaXplICsgY2FyZXRQYWRkaW5nO1xuICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgIGxldCB4ID0gYWxpZ25YKHNpemUsIHhBbGlnbik7XG4gICAgY29uc3QgeSA9IGFsaWduWShzaXplLCB5QWxpZ24sIHBhZGRpbmdBbmRTaXplKTtcbiAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICBpZiAoeEFsaWduID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHggKz0gcGFkZGluZ0FuZFNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB4IC09IHBhZGRpbmdBbmRTaXplO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICB4IC09IE1hdGgubWF4KHRvcExlZnQsIGJvdHRvbUxlZnQpICsgY2FyZXRTaXplO1xuICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHggKz0gTWF0aC5tYXgodG9wUmlnaHQsIGJvdHRvbVJpZ2h0KSArIGNhcmV0U2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogX2xpbWl0VmFsdWUoeCwgMCwgY2hhcnQud2lkdGggLSBzaXplLndpZHRoKSxcbiAgICAgICAgeTogX2xpbWl0VmFsdWUoeSwgMCwgY2hhcnQuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEFsaWduZWRYKHRvb2x0aXAsIGFsaWduLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgIHJldHVybiBhbGlnbiA9PT0gJ2NlbnRlcicgPyB0b29sdGlwLnggKyB0b29sdGlwLndpZHRoIC8gMiA6IGFsaWduID09PSAncmlnaHQnID8gdG9vbHRpcC54ICsgdG9vbHRpcC53aWR0aCAtIHBhZGRpbmcucmlnaHQgOiB0b29sdGlwLnggKyBwYWRkaW5nLmxlZnQ7XG59XG4gZnVuY3Rpb24gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcHVzaE9yQ29uY2F0KFtdLCBzcGxpdE5ld2xpbmVzKGNhbGxiYWNrKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUb29sdGlwQ29udGV4dChwYXJlbnQsIHRvb2x0aXAsIHRvb2x0aXBJdGVtcykge1xuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHBhcmVudCwge1xuICAgICAgICB0b29sdGlwLFxuICAgICAgICB0b29sdGlwSXRlbXMsXG4gICAgICAgIHR5cGU6ICd0b29sdGlwJ1xuICAgIH0pO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVDYWxsYmFja3MoY2FsbGJhY2tzLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSBjb250ZXh0ICYmIGNvbnRleHQuZGF0YXNldCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcCAmJiBjb250ZXh0LmRhdGFzZXQudG9vbHRpcC5jYWxsYmFja3M7XG4gICAgcmV0dXJuIG92ZXJyaWRlID8gY2FsbGJhY2tzLm92ZXJyaWRlKG92ZXJyaWRlKSA6IGNhbGxiYWNrcztcbn1cbmNvbnN0IGRlZmF1bHRDYWxsYmFja3MgPSB7XG4gICAgYmVmb3JlVGl0bGU6IG5vb3AsXG4gICAgdGl0bGUgKHRvb2x0aXBJdGVtcykge1xuICAgICAgICBpZiAodG9vbHRpcEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0b29sdGlwSXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBpdGVtLmNoYXJ0LmRhdGEubGFiZWxzO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxDb3VudCA9IGxhYmVscyA/IGxhYmVscy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhYmVsQ291bnQgPiAwICYmIGl0ZW0uZGF0YUluZGV4IDwgbGFiZWxDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaXRlbS5kYXRhSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIGFmdGVyVGl0bGU6IG5vb3AsXG4gICAgYmVmb3JlQm9keTogbm9vcCxcbiAgICBiZWZvcmVMYWJlbDogbm9vcCxcbiAgICBsYWJlbCAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb2RlID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwSXRlbS5sYWJlbCArICc6ICcgKyB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZSB8fCB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFiZWwgPSB0b29sdGlwSXRlbS5kYXRhc2V0LmxhYmVsIHx8ICcnO1xuICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsICs9ICc6ICc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0b29sdGlwSXRlbS5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgbGFiZWwgKz0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0sXG4gICAgbGFiZWxDb2xvciAodG9vbHRpcEl0ZW0pIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRvb2x0aXBJdGVtLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRvb2x0aXBJdGVtLmRhdGFzZXRJbmRleCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBtZXRhLmNvbnRyb2xsZXIuZ2V0U3R5bGUodG9vbHRpcEl0ZW0uZGF0YUluZGV4KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBvcHRpb25zLmJvcmRlckNvbG9yLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBvcHRpb25zLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiBvcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaDogb3B0aW9ucy5ib3JkZXJEYXNoLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogb3B0aW9ucy5ib3JkZXJEYXNoT2Zmc2V0LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBsYWJlbFRleHRDb2xvciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYm9keUNvbG9yO1xuICAgIH0sXG4gICAgbGFiZWxQb2ludFN0eWxlICh0b29sdGlwSXRlbSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdG9vbHRpcEl0ZW0uY2hhcnQuZ2V0RGF0YXNldE1ldGEodG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1ldGEuY29udHJvbGxlci5nZXRTdHlsZSh0b29sdGlwSXRlbS5kYXRhSW5kZXgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnRTdHlsZTogb3B0aW9ucy5wb2ludFN0eWxlLFxuICAgICAgICAgICAgcm90YXRpb246IG9wdGlvbnMucm90YXRpb25cbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGFmdGVyTGFiZWw6IG5vb3AsXG4gICAgYWZ0ZXJCb2R5OiBub29wLFxuICAgIGJlZm9yZUZvb3Rlcjogbm9vcCxcbiAgICBmb290ZXI6IG5vb3AsXG4gICAgYWZ0ZXJGb290ZXI6IG5vb3Bcbn07XG4gZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCBuYW1lLCBjdHgsIGFyZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrc1tuYW1lXS5jYWxsKGN0eCwgYXJnKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDYWxsYmFja3NbbmFtZV0uY2FsbChjdHgsIGFyZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgRWxlbWVudCB7XG4gc3RhdGljIHBvc2l0aW9uZXJzID0gcG9zaXRpb25lcnM7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gMDtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gW107XG4gICAgICAgIHRoaXMuX2V2ZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2NhY2hlZEFuaW1hdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLiRhbmltYXRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmNoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgdGhpcy5kYXRhUG9pbnRzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9vdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhBbGlnbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55QWxpZ24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYXJldFggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2FyZXRZID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsQ29sb3JzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhYmVsUG9pbnRTdHlsZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubGFiZWxUZXh0Q29sb3JzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0aWFsaXplKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gX3Jlc29sdmVBbmltYXRpb25zKCkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9jYWNoZWRBbmltYXRpb25zO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMuZW5hYmxlZCAmJiBjaGFydC5vcHRpb25zLmFuaW1hdGlvbiAmJiBvcHRpb25zLmFuaW1hdGlvbnM7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBuZXcgQW5pbWF0aW9ucyh0aGlzLmNoYXJ0LCBvcHRzKTtcbiAgICAgICAgaWYgKG9wdHMuX2NhY2hlYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVkQW5pbWF0aW9ucyA9IE9iamVjdC5mcmVlemUoYW5pbWF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnM7XG4gICAgfVxuIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250ZXh0IHx8ICh0aGlzLiRjb250ZXh0ID0gY3JlYXRlVG9vbHRpcENvbnRleHQodGhpcy5jaGFydC5nZXRDb250ZXh0KCksIHRoaXMsIHRoaXMuX3Rvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRUaXRsZShjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYmVmb3JlVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdiZWZvcmVUaXRsZScsIHRoaXMsIGNvbnRleHQpO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ3RpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGFmdGVyVGl0bGUgPSBpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhjYWxsYmFja3MsICdhZnRlclRpdGxlJywgdGhpcywgY29udGV4dCk7XG4gICAgICAgIGxldCBsaW5lcyA9IFtdO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhiZWZvcmVUaXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyh0aXRsZSkpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlclRpdGxlKSk7XG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG4gICAgZ2V0QmVmb3JlQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGdldEJlZm9yZUFmdGVyQm9keUxpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKG9wdGlvbnMuY2FsbGJhY2tzLCAnYmVmb3JlQm9keScsIHRoaXMsIHRvb2x0aXBJdGVtcykpO1xuICAgIH1cbiAgICBnZXRCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlJdGVtcyA9IFtdO1xuICAgICAgICBlYWNoKHRvb2x0aXBJdGVtcywgKGNvbnRleHQpPT57XG4gICAgICAgICAgICBjb25zdCBib2R5SXRlbSA9IHtcbiAgICAgICAgICAgICAgICBiZWZvcmU6IFtdLFxuICAgICAgICAgICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgICAgICAgICBhZnRlcjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzY29wZWQgPSBvdmVycmlkZUNhbGxiYWNrcyhjYWxsYmFja3MsIGNvbnRleHQpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmJlZm9yZSwgc3BsaXROZXdsaW5lcyhpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdiZWZvcmVMYWJlbCcsIHRoaXMsIGNvbnRleHQpKSk7XG4gICAgICAgICAgICBwdXNoT3JDb25jYXQoYm9keUl0ZW0ubGluZXMsIGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2xhYmVsJywgdGhpcywgY29udGV4dCkpO1xuICAgICAgICAgICAgcHVzaE9yQ29uY2F0KGJvZHlJdGVtLmFmdGVyLCBzcGxpdE5ld2xpbmVzKGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKHNjb3BlZCwgJ2FmdGVyTGFiZWwnLCB0aGlzLCBjb250ZXh0KSkpO1xuICAgICAgICAgICAgYm9keUl0ZW1zLnB1c2goYm9keUl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvZHlJdGVtcztcbiAgICB9XG4gICAgZ2V0QWZ0ZXJCb2R5KHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMoaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2sob3B0aW9ucy5jYWxsYmFja3MsICdhZnRlckJvZHknLCB0aGlzLCB0b29sdGlwSXRlbXMpKTtcbiAgICB9XG4gICAgZ2V0Rm9vdGVyKHRvb2x0aXBJdGVtcywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJlZm9yZUZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2JlZm9yZUZvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IGludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrKGNhbGxiYWNrcywgJ2Zvb3RlcicsIHRoaXMsIHRvb2x0aXBJdGVtcyk7XG4gICAgICAgIGNvbnN0IGFmdGVyRm9vdGVyID0gaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soY2FsbGJhY2tzLCAnYWZ0ZXJGb290ZXInLCB0aGlzLCB0b29sdGlwSXRlbXMpO1xuICAgICAgICBsZXQgbGluZXMgPSBbXTtcbiAgICAgICAgbGluZXMgPSBwdXNoT3JDb25jYXQobGluZXMsIHNwbGl0TmV3bGluZXMoYmVmb3JlRm9vdGVyKSk7XG4gICAgICAgIGxpbmVzID0gcHVzaE9yQ29uY2F0KGxpbmVzLCBzcGxpdE5ld2xpbmVzKGZvb3RlcikpO1xuICAgICAgICBsaW5lcyA9IHB1c2hPckNvbmNhdChsaW5lcywgc3BsaXROZXdsaW5lcyhhZnRlckZvb3RlcikpO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuIF9jcmVhdGVJdGVtcyhvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2FjdGl2ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnQuZGF0YTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbGFiZWxQb2ludFN0eWxlcyA9IFtdO1xuICAgICAgICBjb25zdCBsYWJlbFRleHRDb2xvcnMgPSBbXTtcbiAgICAgICAgbGV0IHRvb2x0aXBJdGVtcyA9IFtdO1xuICAgICAgICBsZXQgaSwgbGVuO1xuICAgICAgICBmb3IoaSA9IDAsIGxlbiA9IGFjdGl2ZS5sZW5ndGg7IGkgPCBsZW47ICsraSl7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMucHVzaChjcmVhdGVUb29sdGlwSXRlbSh0aGlzLmNoYXJ0LCBhY3RpdmVbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRvb2x0aXBJdGVtcyA9IHRvb2x0aXBJdGVtcy5maWx0ZXIoKGVsZW1lbnQsIGluZGV4LCBhcnJheSk9Pm9wdGlvbnMuZmlsdGVyKGVsZW1lbnQsIGluZGV4LCBhcnJheSwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLml0ZW1Tb3J0KSB7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0b29sdGlwSXRlbXMuc29ydCgoYSwgYik9Pm9wdGlvbnMuaXRlbVNvcnQoYSwgYiwgZGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGVhY2godG9vbHRpcEl0ZW1zLCAoY29udGV4dCk9PntcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlZCA9IG92ZXJyaWRlQ2FsbGJhY2tzKG9wdGlvbnMuY2FsbGJhY2tzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGxhYmVsQ29sb3JzLnB1c2goaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2soc2NvcGVkLCAnbGFiZWxDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgICAgIGxhYmVsUG9pbnRTdHlsZXMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFBvaW50U3R5bGUnLCB0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgICAgICBsYWJlbFRleHRDb2xvcnMucHVzaChpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayhzY29wZWQsICdsYWJlbFRleHRDb2xvcicsIHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGFiZWxDb2xvcnMgPSBsYWJlbENvbG9ycztcbiAgICAgICAgdGhpcy5sYWJlbFBvaW50U3R5bGVzID0gbGFiZWxQb2ludFN0eWxlcztcbiAgICAgICAgdGhpcy5sYWJlbFRleHRDb2xvcnMgPSBsYWJlbFRleHRDb2xvcnM7XG4gICAgICAgIHRoaXMuZGF0YVBvaW50cyA9IHRvb2x0aXBJdGVtcztcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBJdGVtcztcbiAgICB9XG4gICAgdXBkYXRlKGNoYW5nZWQsIHJlcGxheSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmU7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgdG9vbHRpcEl0ZW1zID0gW107XG4gICAgICAgIGlmICghYWN0aXZlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BhY2l0eSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgdGhpcy5fZXZlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICB0b29sdGlwSXRlbXMgPSB0aGlzLl9jcmVhdGVJdGVtcyhvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKHRvb2x0aXBJdGVtcywgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZUJvZHkgPSB0aGlzLmdldEJlZm9yZUJvZHkodG9vbHRpcEl0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IHRoaXMuZ2V0Qm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5hZnRlckJvZHkgPSB0aGlzLmdldEFmdGVyQm9keSh0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5mb290ZXIgPSB0aGlzLmdldEZvb3Rlcih0b29sdGlwSXRlbXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX3NpemUgPSBnZXRUb29sdGlwU2l6ZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uQW5kU2l6ZSA9IE9iamVjdC5hc3NpZ24oe30sIHBvc2l0aW9uLCBzaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGRldGVybWluZUFsaWdubWVudCh0aGlzLmNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZFBvaW50ID0gZ2V0QmFja2dyb3VuZFBvaW50KG9wdGlvbnMsIHBvc2l0aW9uQW5kU2l6ZSwgYWxpZ25tZW50LCB0aGlzLmNoYXJ0KTtcbiAgICAgICAgICAgIHRoaXMueEFsaWduID0gYWxpZ25tZW50LnhBbGlnbjtcbiAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB4OiBiYWNrZ3JvdW5kUG9pbnQueCxcbiAgICAgICAgICAgICAgICB5OiBiYWNrZ3JvdW5kUG9pbnQueSxcbiAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhcmV0WDogcG9zaXRpb24ueCxcbiAgICAgICAgICAgICAgICBjYXJldFk6IHBvc2l0aW9uLnlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9vbHRpcEl0ZW1zID0gdG9vbHRpcEl0ZW1zO1xuICAgICAgICB0aGlzLiRjb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZWQgJiYgb3B0aW9ucy5leHRlcm5hbCkge1xuICAgICAgICAgICAgb3B0aW9ucy5leHRlcm5hbC5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjaGFydDogdGhpcy5jaGFydCxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0aGlzLFxuICAgICAgICAgICAgICAgIHJlcGxheVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0NhcmV0KHRvb2x0aXBQb2ludCwgY3R4LCBzaXplLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhcmV0UG9zaXRpb24gPSB0aGlzLmdldENhcmV0UG9zaXRpb24odG9vbHRpcFBvaW50LCBzaXplLCBvcHRpb25zKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngxLCBjYXJldFBvc2l0aW9uLnkxKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngyLCBjYXJldFBvc2l0aW9uLnkyKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjYXJldFBvc2l0aW9uLngzLCBjYXJldFBvc2l0aW9uLnkzKTtcbiAgICB9XG4gICAgZ2V0Q2FyZXRQb3NpdGlvbih0b29sdGlwUG9pbnQsIHNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGNhcmV0U2l6ZSAsIGNvcm5lclJhZGl1cyAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHsgdG9wTGVmdCAsIHRvcFJpZ2h0ICwgYm90dG9tTGVmdCAsIGJvdHRvbVJpZ2h0ICB9ID0gdG9UUkJMQ29ybmVycyhjb3JuZXJSYWRpdXMpO1xuICAgICAgICBjb25zdCB7IHg6IHB0WCAsIHk6IHB0WSAgfSA9IHRvb2x0aXBQb2ludDtcbiAgICAgICAgY29uc3QgeyB3aWR0aCAsIGhlaWdodCAgfSA9IHNpemU7XG4gICAgICAgIGxldCB4MSwgeDIsIHgzLCB5MSwgeTIsIHkzO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgeTIgPSBwdFkgKyBoZWlnaHQgLyAyO1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDEgPSBwdFg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgxID0gcHRYICsgd2lkdGg7XG4gICAgICAgICAgICAgICAgeDIgPSB4MSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB5MSA9IHkyIC0gY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHkzID0geTIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4MyA9IHgxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHhBbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyBNYXRoLm1heCh0b3BMZWZ0LCBib3R0b21MZWZ0KSArIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgeDIgPSBwdFggKyB3aWR0aCAtIE1hdGgubWF4KHRvcFJpZ2h0LCBib3R0b21SaWdodCkgLSBjYXJldFNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHgyID0gdGhpcy5jYXJldFg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeUFsaWduID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHkxID0gcHRZO1xuICAgICAgICAgICAgICAgIHkyID0geTEgLSBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDEgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgICAgICB4MyA9IHgyICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5MSA9IHB0WSArIGhlaWdodDtcbiAgICAgICAgICAgICAgICB5MiA9IHkxICsgY2FyZXRTaXplO1xuICAgICAgICAgICAgICAgIHgxID0geDIgKyBjYXJldFNpemU7XG4gICAgICAgICAgICAgICAgeDMgPSB4MiAtIGNhcmV0U2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHkzID0geTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgxLFxuICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICB4MyxcbiAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgeTIsXG4gICAgICAgICAgICB5M1xuICAgICAgICB9O1xuICAgIH1cbiAgICBkcmF3VGl0bGUocHQsIGN0eCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRpdGxlLmxlbmd0aDtcbiAgICAgICAgbGV0IHRpdGxlRm9udCwgdGl0bGVTcGFjaW5nLCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMudGl0bGVBbGlnbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgudGV4dEFsaWduID0gcnRsSGVscGVyLnRleHRBbGlnbihvcHRpb25zLnRpdGxlQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgdGl0bGVGb250ID0gdG9Gb250KG9wdGlvbnMudGl0bGVGb250KTtcbiAgICAgICAgICAgIHRpdGxlU3BhY2luZyA9IG9wdGlvbnMudGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMudGl0bGVDb2xvcjtcbiAgICAgICAgICAgIGN0eC5mb250ID0gdGl0bGVGb250LnN0cmluZztcbiAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbmd0aDsgKytpKXtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQodGl0bGVbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgdGl0bGVGb250LmxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICBwdC55ICs9IHRpdGxlRm9udC5saW5lSGVpZ2h0ICsgdGl0bGVTcGFjaW5nO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHB0LnkgKz0gb3B0aW9ucy50aXRsZU1hcmdpbkJvdHRvbSAtIHRpdGxlU3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gX2RyYXdDb2xvckJveChjdHgsIHB0LCBpLCBydGxIZWxwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xvciA9IHRoaXMubGFiZWxDb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGxhYmVsUG9pbnRTdHlsZSA9IHRoaXMubGFiZWxQb2ludFN0eWxlc1tpXTtcbiAgICAgICAgY29uc3QgeyBib3hIZWlnaHQgLCBib3hXaWR0aCAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGJvZHlGb250ID0gdG9Gb250KG9wdGlvbnMuYm9keUZvbnQpO1xuICAgICAgICBjb25zdCBjb2xvclggPSBnZXRBbGlnbmVkWCh0aGlzLCAnbGVmdCcsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBydGxDb2xvclggPSBydGxIZWxwZXIueChjb2xvclgpO1xuICAgICAgICBjb25zdCB5T2ZmU2V0ID0gYm94SGVpZ2h0IDwgYm9keUZvbnQubGluZUhlaWdodCA/IChib2R5Rm9udC5saW5lSGVpZ2h0IC0gYm94SGVpZ2h0KSAvIDIgOiAwO1xuICAgICAgICBjb25zdCBjb2xvclkgPSBwdC55ICsgeU9mZlNldDtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlUG9pbnRTdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgZHJhd09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgcmFkaXVzOiBNYXRoLm1pbihib3hXaWR0aCwgYm94SGVpZ2h0KSAvIDIsXG4gICAgICAgICAgICAgICAgcG9pbnRTdHlsZTogbGFiZWxQb2ludFN0eWxlLnBvaW50U3R5bGUsXG4gICAgICAgICAgICAgICAgcm90YXRpb246IGxhYmVsUG9pbnRTdHlsZS5yb3RhdGlvbixcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclggPSBydGxIZWxwZXIubGVmdEZvckx0cihydGxDb2xvclgsIGJveFdpZHRoKSArIGJveFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclkgPSBjb2xvclkgKyBib3hIZWlnaHQgLyAyO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICBkcmF3UG9pbnQoY3R4LCBkcmF3T3B0aW9ucywgY2VudGVyWCwgY2VudGVyWSk7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgZHJhd1BvaW50KGN0eCwgZHJhd09wdGlvbnMsIGNlbnRlclgsIGNlbnRlclkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGlzT2JqZWN0KGxhYmVsQ29sb3IuYm9yZGVyV2lkdGgpID8gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhsYWJlbENvbG9yLmJvcmRlcldpZHRoKSkgOiBsYWJlbENvbG9yLmJvcmRlcldpZHRoIHx8IDE7XG4gICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsYWJlbENvbG9yLmJvcmRlckNvbG9yO1xuICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGxhYmVsQ29sb3IuYm9yZGVyRGFzaCB8fCBbXSk7XG4gICAgICAgICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBsYWJlbENvbG9yLmJvcmRlckRhc2hPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyWCA9IHJ0bEhlbHBlci5sZWZ0Rm9yTHRyKHJ0bENvbG9yWCwgYm94V2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJYID0gcnRsSGVscGVyLmxlZnRGb3JMdHIocnRsSGVscGVyLnhQbHVzKHJ0bENvbG9yWCwgMSksIGJveFdpZHRoIC0gMik7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0b1RSQkxDb3JuZXJzKGxhYmVsQ29sb3IuYm9yZGVyUmFkaXVzKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLm11bHRpS2V5QmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IG91dGVyWCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29sb3JZLFxuICAgICAgICAgICAgICAgICAgICB3OiBib3hXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IGJvcmRlclJhZGl1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBsYWJlbENvbG9yLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgYWRkUm91bmRlZFJlY3RQYXRoKGN0eCwge1xuICAgICAgICAgICAgICAgICAgICB4OiBpbm5lclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNvbG9yWSArIDEsXG4gICAgICAgICAgICAgICAgICAgIHc6IGJveFdpZHRoIC0gMixcbiAgICAgICAgICAgICAgICAgICAgaDogYm94SGVpZ2h0IC0gMixcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5tdWx0aUtleUJhY2tncm91bmQ7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KG91dGVyWCwgY29sb3JZLCBib3hXaWR0aCwgYm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlUmVjdChvdXRlclgsIGNvbG9yWSwgYm94V2lkdGgsIGJveEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGxhYmVsQ29sb3IuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpbm5lclgsIGNvbG9yWSArIDEsIGJveFdpZHRoIC0gMiwgYm94SGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgIH1cbiAgICBkcmF3Qm9keShwdCwgY3R4LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYm9keSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgYm9keVNwYWNpbmcgLCBib2R5QWxpZ24gLCBkaXNwbGF5Q29sb3JzICwgYm94SGVpZ2h0ICwgYm94V2lkdGggLCBib3hQYWRkaW5nICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgYm9keUZvbnQgPSB0b0ZvbnQob3B0aW9ucy5ib2R5Rm9udCk7XG4gICAgICAgIGxldCBib2R5TGluZUhlaWdodCA9IGJvZHlGb250LmxpbmVIZWlnaHQ7XG4gICAgICAgIGxldCB4TGluZVBhZGRpbmcgPSAwO1xuICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICBjb25zdCBmaWxsTGluZU9mVGV4dCA9IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChsaW5lLCBydGxIZWxwZXIueChwdC54ICsgeExpbmVQYWRkaW5nKSwgcHQueSArIGJvZHlMaW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBwdC55ICs9IGJvZHlMaW5lSGVpZ2h0ICsgYm9keVNwYWNpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvZHlBbGlnbkZvckNhbGN1bGF0aW9uID0gcnRsSGVscGVyLnRleHRBbGlnbihib2R5QWxpZ24pO1xuICAgICAgICBsZXQgYm9keUl0ZW0sIHRleHRDb2xvciwgbGluZXMsIGksIGosIGlsZW4sIGpsZW47XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBib2R5QWxpZ247XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICAgICAgY3R4LmZvbnQgPSBib2R5Rm9udC5zdHJpbmc7XG4gICAgICAgIHB0LnggPSBnZXRBbGlnbmVkWCh0aGlzLCBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJvZHlDb2xvcjtcbiAgICAgICAgZWFjaCh0aGlzLmJlZm9yZUJvZHksIGZpbGxMaW5lT2ZUZXh0KTtcbiAgICAgICAgeExpbmVQYWRkaW5nID0gZGlzcGxheUNvbG9ycyAmJiBib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiAhPT0gJ3JpZ2h0JyA/IGJvZHlBbGlnbiA9PT0gJ2NlbnRlcicgPyBib3hXaWR0aCAvIDIgKyBib3hQYWRkaW5nIDogYm94V2lkdGggKyAyICsgYm94UGFkZGluZyA6IDA7XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IGJvZHkubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIGJvZHlJdGVtID0gYm9keVtpXTtcbiAgICAgICAgICAgIHRleHRDb2xvciA9IHRoaXMubGFiZWxUZXh0Q29sb3JzW2ldO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjtcbiAgICAgICAgICAgIGVhY2goYm9keUl0ZW0uYmVmb3JlLCBmaWxsTGluZU9mVGV4dCk7XG4gICAgICAgICAgICBsaW5lcyA9IGJvZHlJdGVtLmxpbmVzO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlDb2xvcnMgJiYgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd0NvbG9yQm94KGN0eCwgcHQsIGksIHJ0bEhlbHBlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBNYXRoLm1heChib2R5Rm9udC5saW5lSGVpZ2h0LCBib3hIZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGogPSAwLCBqbGVuID0gbGluZXMubGVuZ3RoOyBqIDwgamxlbjsgKytqKXtcbiAgICAgICAgICAgICAgICBmaWxsTGluZU9mVGV4dChsaW5lc1tqXSk7XG4gICAgICAgICAgICAgICAgYm9keUxpbmVIZWlnaHQgPSBib2R5Rm9udC5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWFjaChib2R5SXRlbS5hZnRlciwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHhMaW5lUGFkZGluZyA9IDA7XG4gICAgICAgIGJvZHlMaW5lSGVpZ2h0ID0gYm9keUZvbnQubGluZUhlaWdodDtcbiAgICAgICAgZWFjaCh0aGlzLmFmdGVyQm9keSwgZmlsbExpbmVPZlRleHQpO1xuICAgICAgICBwdC55IC09IGJvZHlTcGFjaW5nO1xuICAgIH1cbiAgICBkcmF3Rm9vdGVyKHB0LCBjdHgsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZm9vdGVyID0gdGhpcy5mb290ZXI7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZvb3Rlci5sZW5ndGg7XG4gICAgICAgIGxldCBmb290ZXJGb250LCBpO1xuICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBydGxIZWxwZXIgPSBnZXRSdGxBZGFwdGVyKG9wdGlvbnMucnRsLCB0aGlzLngsIHRoaXMud2lkdGgpO1xuICAgICAgICAgICAgcHQueCA9IGdldEFsaWduZWRYKHRoaXMsIG9wdGlvbnMuZm9vdGVyQWxpZ24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgcHQueSArPSBvcHRpb25zLmZvb3Rlck1hcmdpblRvcDtcbiAgICAgICAgICAgIGN0eC50ZXh0QWxpZ24gPSBydGxIZWxwZXIudGV4dEFsaWduKG9wdGlvbnMuZm9vdGVyQWxpZ24pO1xuICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICAgICAgZm9vdGVyRm9udCA9IHRvRm9udChvcHRpb25zLmZvb3RlckZvbnQpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuZm9vdGVyQ29sb3I7XG4gICAgICAgICAgICBjdHguZm9udCA9IGZvb3RlckZvbnQuc3RyaW5nO1xuICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpe1xuICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChmb290ZXJbaV0sIHJ0bEhlbHBlci54KHB0LngpLCBwdC55ICsgZm9vdGVyRm9udC5saW5lSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgcHQueSArPSBmb290ZXJGb250LmxpbmVIZWlnaHQgKyBvcHRpb25zLmZvb3RlclNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyB4QWxpZ24gLCB5QWxpZ24gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcHQ7XG4gICAgICAgIGNvbnN0IHsgd2lkdGggLCBoZWlnaHQgIH0gPSB0b29sdGlwU2l6ZTtcbiAgICAgICAgY29uc3QgeyB0b3BMZWZ0ICwgdG9wUmlnaHQgLCBib3R0b21MZWZ0ICwgYm90dG9tUmlnaHQgIH0gPSB0b1RSQkxDb3JuZXJzKG9wdGlvbnMuY29ybmVyUmFkaXVzKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmJvcmRlckNvbG9yO1xuICAgICAgICBjdHgubGluZVdpZHRoID0gb3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHgubW92ZVRvKHggKyB0b3BMZWZ0LCB5KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyB3aWR0aCAtIHRvcFJpZ2h0LCB5KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5LCB4ICsgd2lkdGgsIHkgKyB0b3BSaWdodCk7XG4gICAgICAgIGlmICh5QWxpZ24gPT09ICdjZW50ZXInICYmIHhBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgaWYgKHlBbGlnbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0NhcmV0KHB0LCBjdHgsIHRvb2x0aXBTaXplLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgubGluZVRvKHggKyBib3R0b21MZWZ0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnQpO1xuICAgICAgICBpZiAoeUFsaWduID09PSAnY2VudGVyJyAmJiB4QWxpZ24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGhpcy5kcmF3Q2FyZXQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5saW5lVG8oeCwgeSArIHRvcExlZnQpO1xuICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgdG9wTGVmdCwgeSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gX3VwZGF0ZUFuaW1hdGlvblRhcmdldChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNoYXJ0ID0gdGhpcy5jaGFydDtcbiAgICAgICAgY29uc3QgYW5pbXMgPSB0aGlzLiRhbmltYXRpb25zO1xuICAgICAgICBjb25zdCBhbmltWCA9IGFuaW1zICYmIGFuaW1zLng7XG4gICAgICAgIGNvbnN0IGFuaW1ZID0gYW5pbXMgJiYgYW5pbXMueTtcbiAgICAgICAgaWYgKGFuaW1YIHx8IGFuaW1ZKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBvc2l0aW9uZXJzW29wdGlvbnMucG9zaXRpb25dLmNhbGwodGhpcywgdGhpcy5fYWN0aXZlLCB0aGlzLl9ldmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fc2l6ZSA9IGdldFRvb2x0aXBTaXplKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25BbmRTaXplID0gT2JqZWN0LmFzc2lnbih7fSwgcG9zaXRpb24sIHRoaXMuX3NpemUpO1xuICAgICAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gZGV0ZXJtaW5lQWxpZ25tZW50KGNoYXJ0LCBvcHRpb25zLCBwb3NpdGlvbkFuZFNpemUpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXRCYWNrZ3JvdW5kUG9pbnQob3B0aW9ucywgcG9zaXRpb25BbmRTaXplLCBhbGlnbm1lbnQsIGNoYXJ0KTtcbiAgICAgICAgICAgIGlmIChhbmltWC5fdG8gIT09IHBvaW50LnggfHwgYW5pbVkuX3RvICE9PSBwb2ludC55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy54QWxpZ24gPSBhbGlnbm1lbnQueEFsaWduO1xuICAgICAgICAgICAgICAgIHRoaXMueUFsaWduID0gYWxpZ25tZW50LnlBbGlnbjtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHNpemUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRYID0gcG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmV0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcywgcG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuIF93aWxsUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wYWNpdHk7XG4gICAgfVxuICAgIGRyYXcoY3R4KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSk7XG4gICAgICAgIGxldCBvcGFjaXR5ID0gdGhpcy5vcGFjaXR5O1xuICAgICAgICBpZiAoIW9wYWNpdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBTaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHB0ID0ge1xuICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgeTogdGhpcy55XG4gICAgICAgIH07XG4gICAgICAgIG9wYWNpdHkgPSBNYXRoLmFicyhvcGFjaXR5KSA8IDFlLTMgPyAwIDogb3BhY2l0eTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHRvUGFkZGluZyhvcHRpb25zLnBhZGRpbmcpO1xuICAgICAgICBjb25zdCBoYXNUb29sdGlwQ29udGVudCA9IHRoaXMudGl0bGUubGVuZ3RoIHx8IHRoaXMuYmVmb3JlQm9keS5sZW5ndGggfHwgdGhpcy5ib2R5Lmxlbmd0aCB8fCB0aGlzLmFmdGVyQm9keS5sZW5ndGggfHwgdGhpcy5mb290ZXIubGVuZ3RoO1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkICYmIGhhc1Rvb2x0aXBDb250ZW50KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JhY2tncm91bmQocHQsIGN0eCwgdG9vbHRpcFNpemUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgb3ZlcnJpZGVUZXh0RGlyZWN0aW9uKGN0eCwgb3B0aW9ucy50ZXh0RGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHB0LnkgKz0gcGFkZGluZy50b3A7XG4gICAgICAgICAgICB0aGlzLmRyYXdUaXRsZShwdCwgY3R4LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvZHkocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRyYXdGb290ZXIocHQsIGN0eCwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXN0b3JlVGV4dERpcmVjdGlvbihjdHgsIG9wdGlvbnMudGV4dERpcmVjdGlvbik7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGdldEFjdGl2ZUVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgIH1cbiBzZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50cywgZXZlbnRQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50cy5tYXAoKHsgZGF0YXNldEluZGV4ICwgaW5kZXggIH0pPT57XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggJyArIGRhdGFzZXRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRJbmRleCxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBtZXRhLmRhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9ICFfZWxlbWVudHNFcXVhbChsYXN0QWN0aXZlLCBhY3RpdmUpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkNoYW5nZWQgPSB0aGlzLl9wb3NpdGlvbkNoYW5nZWQoYWN0aXZlLCBldmVudFBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGNoYW5nZWQgfHwgcG9zaXRpb25DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgICAgICB0aGlzLl9ldmVudFBvc2l0aW9uID0gZXZlbnRQb3NpdGlvbjtcbiAgICAgICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiBoYW5kbGVFdmVudChlLCByZXBsYXksIGluQ2hhcnRBcmVhID0gdHJ1ZSkge1xuICAgICAgICBpZiAocmVwbGF5ICYmIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYXN0QWN0aXZlID0gdGhpcy5fYWN0aXZlIHx8IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25DaGFuZ2VkID0gdGhpcy5fcG9zaXRpb25DaGFuZ2VkKGFjdGl2ZSwgZSk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSByZXBsYXkgfHwgIV9lbGVtZW50c0VxdWFsKGFjdGl2ZSwgbGFzdEFjdGl2ZSkgfHwgcG9zaXRpb25DaGFuZ2VkO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCBvcHRpb25zLmV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogZS54LFxuICAgICAgICAgICAgICAgICAgICB5OiBlLnlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKHRydWUsIHJlcGxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZWQ7XG4gICAgfVxuIF9nZXRBY3RpdmVFbGVtZW50cyhlLCBsYXN0QWN0aXZlLCByZXBsYXksIGluQ2hhcnRBcmVhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChlLnR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluQ2hhcnRBcmVhKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEFjdGl2ZS5maWx0ZXIoKGkpPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbaS5kYXRhc2V0SW5kZXhdICYmIHRoaXMuY2hhcnQuZ2V0RGF0YXNldE1ldGEoaS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXIuZ2V0UGFyc2VkKGkuaW5kZXgpICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLCBvcHRpb25zLm1vZGUsIG9wdGlvbnMsIHJlcGxheSk7XG4gICAgICAgIGlmIChvcHRpb25zLnJldmVyc2UpIHtcbiAgICAgICAgICAgIGFjdGl2ZS5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICB9XG4gX3Bvc2l0aW9uQ2hhbmdlZChhY3RpdmUsIGUpIHtcbiAgICAgICAgY29uc3QgeyBjYXJldFggLCBjYXJldFkgLCBvcHRpb25zICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbmVyc1tvcHRpb25zLnBvc2l0aW9uXS5jYWxsKHRoaXMsIGFjdGl2ZSwgZSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbiAhPT0gZmFsc2UgJiYgKGNhcmV0WCAhPT0gcG9zaXRpb24ueCB8fCBjYXJldFkgIT09IHBvc2l0aW9uLnkpO1xuICAgIH1cbn1cbnZhciBwbHVnaW5fdG9vbHRpcCA9IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIF9lbGVtZW50OiBUb29sdGlwLFxuICAgIHBvc2l0aW9uZXJzLFxuICAgIGFmdGVySW5pdCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwID0gbmV3IFRvb2x0aXAoe1xuICAgICAgICAgICAgICAgIGNoYXJ0LFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBiZWZvcmVVcGRhdGUgKGNoYXJ0LCBfYXJncywgb3B0aW9ucykge1xuICAgICAgICBpZiAoY2hhcnQudG9vbHRpcCkge1xuICAgICAgICAgICAgY2hhcnQudG9vbHRpcC5pbml0aWFsaXplKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZXNldCAoY2hhcnQsIF9hcmdzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjaGFydC50b29sdGlwLmluaXRpYWxpemUob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRHJhdyAoY2hhcnQpIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGNoYXJ0LnRvb2x0aXA7XG4gICAgICAgIGlmICh0b29sdGlwICYmIHRvb2x0aXAuX3dpbGxSZW5kZXIoKSkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNoYXJ0Lm5vdGlmeVBsdWdpbnMoJ2JlZm9yZVRvb2x0aXBEcmF3Jywge1xuICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcC5kcmF3KGNoYXJ0LmN0eCk7XG4gICAgICAgICAgICBjaGFydC5ub3RpZnlQbHVnaW5zKCdhZnRlclRvb2x0aXBEcmF3JywgYXJncyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyRXZlbnQgKGNoYXJ0LCBhcmdzKSB7XG4gICAgICAgIGlmIChjaGFydC50b29sdGlwKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VGaW5hbFBvc2l0aW9uID0gYXJncy5yZXBsYXk7XG4gICAgICAgICAgICBpZiAoY2hhcnQudG9vbHRpcC5oYW5kbGVFdmVudChhcmdzLmV2ZW50LCB1c2VGaW5hbFBvc2l0aW9uLCBhcmdzLmluQ2hhcnRBcmVhKSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGV4dGVybmFsOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogJ2F2ZXJhZ2UnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuOCknLFxuICAgICAgICB0aXRsZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgIHRpdGxlRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGVTcGFjaW5nOiAyLFxuICAgICAgICB0aXRsZU1hcmdpbkJvdHRvbTogNixcbiAgICAgICAgdGl0bGVBbGlnbjogJ2xlZnQnLFxuICAgICAgICBib2R5Q29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9keVNwYWNpbmc6IDIsXG4gICAgICAgIGJvZHlGb250OiB7fSxcbiAgICAgICAgYm9keUFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvb3RlckNvbG9yOiAnI2ZmZicsXG4gICAgICAgIGZvb3RlclNwYWNpbmc6IDIsXG4gICAgICAgIGZvb3Rlck1hcmdpblRvcDogNixcbiAgICAgICAgZm9vdGVyRm9udDoge1xuICAgICAgICAgICAgd2VpZ2h0OiAnYm9sZCdcbiAgICAgICAgfSxcbiAgICAgICAgZm9vdGVyQWxpZ246ICdsZWZ0JyxcbiAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgY2FyZXRQYWRkaW5nOiAyLFxuICAgICAgICBjYXJldFNpemU6IDUsXG4gICAgICAgIGNvcm5lclJhZGl1czogNixcbiAgICAgICAgYm94SGVpZ2h0OiAoY3R4LCBvcHRzKT0+b3B0cy5ib2R5Rm9udC5zaXplLFxuICAgICAgICBib3hXaWR0aDogKGN0eCwgb3B0cyk9Pm9wdHMuYm9keUZvbnQuc2l6ZSxcbiAgICAgICAgbXVsdGlLZXlCYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgIGRpc3BsYXlDb2xvcnM6IHRydWUsXG4gICAgICAgIGJveFBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLDAsMCwwKScsXG4gICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICBhbmltYXRpb246IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiA0MDAsXG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIG51bWJlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICd4JyxcbiAgICAgICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmV0WCcsXG4gICAgICAgICAgICAgICAgICAgICdjYXJldFknXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBkZWZhdWx0Q2FsbGJhY2tzXG4gICAgfSxcbiAgICBkZWZhdWx0Um91dGVzOiB7XG4gICAgICAgIGJvZHlGb250OiAnZm9udCcsXG4gICAgICAgIGZvb3RlckZvbnQ6ICdmb250JyxcbiAgICAgICAgdGl0bGVGb250OiAnZm9udCdcbiAgICB9LFxuICAgIGRlc2NyaXB0b3JzOiB7XG4gICAgICAgIF9zY3JpcHRhYmxlOiAobmFtZSk9Pm5hbWUgIT09ICdmaWx0ZXInICYmIG5hbWUgIT09ICdpdGVtU29ydCcgJiYgbmFtZSAhPT0gJ2V4dGVybmFsJyxcbiAgICAgICAgX2luZGV4YWJsZTogZmFsc2UsXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgX3NjcmlwdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgX2luZGV4YWJsZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGFuaW1hdGlvbnM6IHtcbiAgICAgICAgICAgIF9mYWxsYmFjazogJ2FuaW1hdGlvbidcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRkaXRpb25hbE9wdGlvblNjb3BlczogW1xuICAgICAgICAnaW50ZXJhY3Rpb24nXG4gICAgXVxufTtcblxudmFyIHBsdWdpbnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG5fX3Byb3RvX186IG51bGwsXG5Db2xvcnM6IHBsdWdpbl9jb2xvcnMsXG5EZWNpbWF0aW9uOiBwbHVnaW5fZGVjaW1hdGlvbixcbkZpbGxlcjogaW5kZXgsXG5MZWdlbmQ6IHBsdWdpbl9sZWdlbmQsXG5TdWJUaXRsZTogcGx1Z2luX3N1YnRpdGxlLFxuVGl0bGU6IHBsdWdpbl90aXRsZSxcblRvb2x0aXA6IHBsdWdpbl90b29sdGlwXG59KTtcblxuY29uc3QgYWRkSWZTdHJpbmcgPSAobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk9PntcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZXggPSBsYWJlbHMucHVzaChyYXcpIC0gMTtcbiAgICAgICAgYWRkZWRMYWJlbHMudW5zaGlmdCh7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxhYmVsOiByYXdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpc05hTihyYXcpKSB7XG4gICAgICAgIGluZGV4ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xufTtcbmZ1bmN0aW9uIGZpbmRPckFkZExhYmVsKGxhYmVscywgcmF3LCBpbmRleCwgYWRkZWRMYWJlbHMpIHtcbiAgICBjb25zdCBmaXJzdCA9IGxhYmVscy5pbmRleE9mKHJhdyk7XG4gICAgaWYgKGZpcnN0ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gYWRkSWZTdHJpbmcobGFiZWxzLCByYXcsIGluZGV4LCBhZGRlZExhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSBsYWJlbHMubGFzdEluZGV4T2YocmF3KTtcbiAgICByZXR1cm4gZmlyc3QgIT09IGxhc3QgPyBpbmRleCA6IGZpcnN0O1xufVxuY29uc3QgdmFsaWRJbmRleCA9IChpbmRleCwgbWF4KT0+aW5kZXggPT09IG51bGwgPyBudWxsIDogX2xpbWl0VmFsdWUoTWF0aC5yb3VuZChpbmRleCksIDAsIG1heCk7XG5mdW5jdGlvbiBfZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPCBsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBsYWJlbHNbdmFsdWVdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5jbGFzcyBDYXRlZ29yeVNjYWxlIGV4dGVuZHMgU2NhbGUge1xuICAgIHN0YXRpYyBpZCA9ICdjYXRlZ29yeSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgY2FsbGJhY2s6IF9nZXRMYWJlbEZvclZhbHVlXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gMDtcbiAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICB9XG4gICAgaW5pdChzY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLl9hZGRlZExhYmVscztcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBpbmRleCAsIGxhYmVsICB9IG9mIGFkZGVkKXtcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2luZGV4XSA9PT0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRkZWRMYWJlbHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0aW9ucyk7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYocmF3KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgaW5kZXggPSBpc0Zpbml0ZShpbmRleCkgJiYgbGFiZWxzW2luZGV4XSA9PT0gcmF3ID8gaW5kZXggOiBmaW5kT3JBZGRMYWJlbChsYWJlbHMsIHJhdywgdmFsdWVPckRlZmF1bHQoaW5kZXgsIHJhdyksIHRoaXMuX2FkZGVkTGFiZWxzKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkSW5kZXgoaW5kZXgsIGxhYmVscy5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW5EZWZpbmVkICwgbWF4RGVmaW5lZCAgfSA9IHRoaXMuZ2V0VXNlckJvdW5kcygpO1xuICAgICAgICBsZXQgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycpIHtcbiAgICAgICAgICAgIGlmICghbWluRGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1pbiA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLmdldExhYmVscygpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub3B0aW9ucy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgICAgIGxldCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpO1xuICAgICAgICBsYWJlbHMgPSBtaW4gPT09IDAgJiYgbWF4ID09PSBsYWJlbHMubGVuZ3RoIC0gMSA/IGxhYmVscyA6IGxhYmVscy5zbGljZShtaW4sIG1heCArIDEpO1xuICAgICAgICB0aGlzLl92YWx1ZVJhbmdlID0gTWF0aC5tYXgobGFiZWxzLmxlbmd0aCAtIChvZmZzZXQgPyAwIDogMSksIDEpO1xuICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdGhpcy5taW4gLSAob2Zmc2V0ID8gMC41IDogMCk7XG4gICAgICAgIGZvcihsZXQgdmFsdWUgPSBtaW47IHZhbHVlIDw9IG1heDsgdmFsdWUrKyl7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpY2tzO1xuICAgIH1cbiAgICBnZXRMYWJlbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfZ2V0TGFiZWxGb3JWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBzdXBlci5jb25maWd1cmUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXZlcnNlUGl4ZWxzID0gIXRoaXMuX3JldmVyc2VQaXhlbHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBOYU4gOiB0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgodmFsdWUgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRQaXhlbEZvclRpY2soaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLnRpY2tzO1xuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGlja3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aWNrc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUgKyB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0QmFzZVBpeGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpY2tzJDEoZ2VuZXJhdGlvbk9wdGlvbnMsIGRhdGFSYW5nZSkge1xuICAgIGNvbnN0IHRpY2tzID0gW107XG4gICAgY29uc3QgTUlOX1NQQUNJTkcgPSAxZS0xNDtcbiAgICBjb25zdCB7IGJvdW5kcyAsIHN0ZXAgLCBtaW4gLCBtYXggLCBwcmVjaXNpb24gLCBjb3VudCAsIG1heFRpY2tzICwgbWF4RGlnaXRzICwgaW5jbHVkZUJvdW5kcyAgfSA9IGdlbmVyYXRpb25PcHRpb25zO1xuICAgIGNvbnN0IHVuaXQgPSBzdGVwIHx8IDE7XG4gICAgY29uc3QgbWF4U3BhY2VzID0gbWF4VGlja3MgLSAxO1xuICAgIGNvbnN0IHsgbWluOiBybWluICwgbWF4OiBybWF4ICB9ID0gZGF0YVJhbmdlO1xuICAgIGNvbnN0IG1pbkRlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtaW4pO1xuICAgIGNvbnN0IG1heERlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihtYXgpO1xuICAgIGNvbnN0IGNvdW50RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKGNvdW50KTtcbiAgICBjb25zdCBtaW5TcGFjaW5nID0gKHJtYXggLSBybWluKSAvIChtYXhEaWdpdHMgKyAxKTtcbiAgICBsZXQgc3BhY2luZyA9IG5pY2VOdW0oKHJtYXggLSBybWluKSAvIG1heFNwYWNlcyAvIHVuaXQpICogdW5pdDtcbiAgICBsZXQgZmFjdG9yLCBuaWNlTWluLCBuaWNlTWF4LCBudW1TcGFjZXM7XG4gICAgaWYgKHNwYWNpbmcgPCBNSU5fU1BBQ0lORyAmJiAhbWluRGVmaW5lZCAmJiAhbWF4RGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWluXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBybWF4XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChybWF4IC8gc3BhY2luZykgLSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKTtcbiAgICBpZiAobnVtU3BhY2VzID4gbWF4U3BhY2VzKSB7XG4gICAgICAgIHNwYWNpbmcgPSBuaWNlTnVtKG51bVNwYWNlcyAqIHNwYWNpbmcgLyBtYXhTcGFjZXMgLyB1bml0KSAqIHVuaXQ7XG4gICAgfVxuICAgIGlmICghaXNOdWxsT3JVbmRlZihwcmVjaXNpb24pKSB7XG4gICAgICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuICAgICAgICBzcGFjaW5nID0gTWF0aC5jZWlsKHNwYWNpbmcgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgIH1cbiAgICBpZiAoYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgIG5pY2VNaW4gPSBNYXRoLmZsb29yKHJtaW4gLyBzcGFjaW5nKSAqIHNwYWNpbmc7XG4gICAgICAgIG5pY2VNYXggPSBNYXRoLmNlaWwocm1heCAvIHNwYWNpbmcpICogc3BhY2luZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBuaWNlTWluID0gcm1pbjtcbiAgICAgICAgbmljZU1heCA9IHJtYXg7XG4gICAgfVxuICAgIGlmIChtaW5EZWZpbmVkICYmIG1heERlZmluZWQgJiYgc3RlcCAmJiBhbG1vc3RXaG9sZSgobWF4IC0gbWluKSAvIHN0ZXAsIHNwYWNpbmcgLyAxMDAwKSkge1xuICAgICAgICBudW1TcGFjZXMgPSBNYXRoLnJvdW5kKE1hdGgubWluKChtYXggLSBtaW4pIC8gc3BhY2luZywgbWF4VGlja3MpKTtcbiAgICAgICAgc3BhY2luZyA9IChtYXggLSBtaW4pIC8gbnVtU3BhY2VzO1xuICAgICAgICBuaWNlTWluID0gbWluO1xuICAgICAgICBuaWNlTWF4ID0gbWF4O1xuICAgIH0gZWxzZSBpZiAoY291bnREZWZpbmVkKSB7XG4gICAgICAgIG5pY2VNaW4gPSBtaW5EZWZpbmVkID8gbWluIDogbmljZU1pbjtcbiAgICAgICAgbmljZU1heCA9IG1heERlZmluZWQgPyBtYXggOiBuaWNlTWF4O1xuICAgICAgICBudW1TcGFjZXMgPSBjb3VudCAtIDE7XG4gICAgICAgIHNwYWNpbmcgPSAobmljZU1heCAtIG5pY2VNaW4pIC8gbnVtU3BhY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG51bVNwYWNlcyA9IChuaWNlTWF4IC0gbmljZU1pbikgLyBzcGFjaW5nO1xuICAgICAgICBpZiAoYWxtb3N0RXF1YWxzKG51bVNwYWNlcywgTWF0aC5yb3VuZChudW1TcGFjZXMpLCBzcGFjaW5nIC8gMTAwMCkpIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGgucm91bmQobnVtU3BhY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bVNwYWNlcyA9IE1hdGguY2VpbChudW1TcGFjZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlY2ltYWxQbGFjZXMgPSBNYXRoLm1heChfZGVjaW1hbFBsYWNlcyhzcGFjaW5nKSwgX2RlY2ltYWxQbGFjZXMobmljZU1pbikpO1xuICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCBpc051bGxPclVuZGVmKHByZWNpc2lvbikgPyBkZWNpbWFsUGxhY2VzIDogcHJlY2lzaW9uKTtcbiAgICBuaWNlTWluID0gTWF0aC5yb3VuZChuaWNlTWluICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBuaWNlTWF4ID0gTWF0aC5yb3VuZChuaWNlTWF4ICogZmFjdG9yKSAvIGZhY3RvcjtcbiAgICBsZXQgaiA9IDA7XG4gICAgaWYgKG1pbkRlZmluZWQpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVCb3VuZHMgJiYgbmljZU1pbiAhPT0gbWluKSB7XG4gICAgICAgICAgICB0aWNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWluXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuaWNlTWluIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbW9zdEVxdWFscyhNYXRoLnJvdW5kKChuaWNlTWluICsgaiAqIHNwYWNpbmcpICogZmFjdG9yKSAvIGZhY3RvciwgbWluLCByZWxhdGl2ZUxhYmVsU2l6ZShtaW4sIG1pblNwYWNpbmcsIGdlbmVyYXRpb25PcHRpb25zKSkpIHtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmljZU1pbiA8IG1pbikge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcig7IGogPCBudW1TcGFjZXM7ICsrail7XG4gICAgICAgIGNvbnN0IHRpY2tWYWx1ZSA9IE1hdGgucm91bmQoKG5pY2VNaW4gKyBqICogc3BhY2luZykgKiBmYWN0b3IpIC8gZmFjdG9yO1xuICAgICAgICBpZiAobWF4RGVmaW5lZCAmJiB0aWNrVmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IHRpY2tWYWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG1heERlZmluZWQgJiYgaW5jbHVkZUJvdW5kcyAmJiBuaWNlTWF4ICE9PSBtYXgpIHtcbiAgICAgICAgaWYgKHRpY2tzLmxlbmd0aCAmJiBhbG1vc3RFcXVhbHModGlja3NbdGlja3MubGVuZ3RoIC0gMV0udmFsdWUsIG1heCwgcmVsYXRpdmVMYWJlbFNpemUobWF4LCBtaW5TcGFjaW5nLCBnZW5lcmF0aW9uT3B0aW9ucykpKSB7XG4gICAgICAgICAgICB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZSA9IG1heDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICghbWF4RGVmaW5lZCB8fCBuaWNlTWF4ID09PSBtYXgpIHtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogbmljZU1heFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuZnVuY3Rpb24gcmVsYXRpdmVMYWJlbFNpemUodmFsdWUsIG1pblNwYWNpbmcsIHsgaG9yaXpvbnRhbCAsIG1pblJvdGF0aW9uICB9KSB7XG4gICAgY29uc3QgcmFkID0gdG9SYWRpYW5zKG1pblJvdGF0aW9uKTtcbiAgICBjb25zdCByYXRpbyA9IChob3Jpem9udGFsID8gTWF0aC5zaW4ocmFkKSA6IE1hdGguY29zKHJhZCkpIHx8IDAuMDAxO1xuICAgIGNvbnN0IGxlbmd0aCA9IDAuNzUgKiBtaW5TcGFjaW5nICogKCcnICsgdmFsdWUpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5taW4obWluU3BhY2luZyAvIHJhdGlvLCBsZW5ndGgpO1xufVxuY2xhc3MgTGluZWFyU2NhbGVCYXNlIGV4dGVuZHMgU2NhbGUge1xuICAgIGNvbnN0cnVjdG9yKGNmZyl7XG4gICAgICAgIHN1cGVyKGNmZyk7XG4gICAgICAgICB0aGlzLnN0YXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5lbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl9zdGFydFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSAwO1xuICAgIH1cbiAgICBwYXJzZShyYXcsIGluZGV4KSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHJhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodHlwZW9mIHJhdyA9PT0gJ251bWJlcicgfHwgcmF3IGluc3RhbmNlb2YgTnVtYmVyKSAmJiAhaXNGaW5pdGUoK3JhdykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiArcmF3O1xuICAgIH1cbiAgICBoYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCkge1xuICAgICAgICBjb25zdCB7IGJlZ2luQXRaZXJvICB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB7IG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgY29uc3QgbWluU2lnbiA9IHNpZ24obWluKTtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpZ24gPSBzaWduKG1heCk7XG4gICAgICAgICAgICBpZiAobWluU2lnbiA8IDAgJiYgbWF4U2lnbiA8IDApIHtcbiAgICAgICAgICAgICAgICBzZXRNYXgoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1pblNpZ24gPiAwICYmIG1heFNpZ24gPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IG1heCA9PT0gMCA/IDEgOiBNYXRoLmFicyhtYXggKiAwLjA1KTtcbiAgICAgICAgICAgIHNldE1heChtYXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgaWYgKCFiZWdpbkF0WmVybykge1xuICAgICAgICAgICAgICAgIHNldE1pbihtaW4gLSBvZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgZ2V0VGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IHRoaXMub3B0aW9ucy50aWNrcztcbiAgICAgICAgbGV0IHsgbWF4VGlja3NMaW1pdCAsIHN0ZXBTaXplICB9ID0gdGlja09wdHM7XG4gICAgICAgIGxldCBtYXhUaWNrcztcbiAgICAgICAgaWYgKHN0ZXBTaXplKSB7XG4gICAgICAgICAgICBtYXhUaWNrcyA9IE1hdGguY2VpbCh0aGlzLm1heCAvIHN0ZXBTaXplKSAtIE1hdGguZmxvb3IodGhpcy5taW4gLyBzdGVwU2l6ZSkgKyAxO1xuICAgICAgICAgICAgaWYgKG1heFRpY2tzID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7c3RlcFNpemV9IHdvdWxkIHJlc3VsdCBnZW5lcmF0aW5nIHVwIHRvICR7bWF4VGlja3N9IHRpY2tzLiBMaW1pdGluZyB0byAxMDAwLmApO1xuICAgICAgICAgICAgICAgIG1heFRpY2tzID0gMTAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1heFRpY2tzID0gdGhpcy5jb21wdXRlVGlja0xpbWl0KCk7XG4gICAgICAgICAgICBtYXhUaWNrc0xpbWl0ID0gbWF4VGlja3NMaW1pdCB8fCAxMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VGlja3NMaW1pdCkge1xuICAgICAgICAgICAgbWF4VGlja3MgPSBNYXRoLm1pbihtYXhUaWNrc0xpbWl0LCBtYXhUaWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFRpY2tzO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aWNrT3B0cyA9IG9wdHMudGlja3M7XG4gICAgICAgIGxldCBtYXhUaWNrcyA9IHRoaXMuZ2V0VGlja0xpbWl0KCk7XG4gICAgICAgIG1heFRpY2tzID0gTWF0aC5tYXgoMiwgbWF4VGlja3MpO1xuICAgICAgICBjb25zdCBudW1lcmljR2VuZXJhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFRpY2tzLFxuICAgICAgICAgICAgYm91bmRzOiBvcHRzLmJvdW5kcyxcbiAgICAgICAgICAgIG1pbjogb3B0cy5taW4sXG4gICAgICAgICAgICBtYXg6IG9wdHMubWF4LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0aWNrT3B0cy5wcmVjaXNpb24sXG4gICAgICAgICAgICBzdGVwOiB0aWNrT3B0cy5zdGVwU2l6ZSxcbiAgICAgICAgICAgIGNvdW50OiB0aWNrT3B0cy5jb3VudCxcbiAgICAgICAgICAgIG1heERpZ2l0czogdGhpcy5fbWF4RGlnaXRzKCksXG4gICAgICAgICAgICBob3Jpem9udGFsOiB0aGlzLmlzSG9yaXpvbnRhbCgpLFxuICAgICAgICAgICAgbWluUm90YXRpb246IHRpY2tPcHRzLm1pblJvdGF0aW9uIHx8IDAsXG4gICAgICAgICAgICBpbmNsdWRlQm91bmRzOiB0aWNrT3B0cy5pbmNsdWRlQm91bmRzICE9PSBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhUmFuZ2UgPSB0aGlzLl9yYW5nZSB8fCB0aGlzO1xuICAgICAgICBjb25zdCB0aWNrcyA9IGdlbmVyYXRlVGlja3MkMShudW1lcmljR2VuZXJhdG9yT3B0aW9ucywgZGF0YVJhbmdlKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gY29uZmlndXJlKCkge1xuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3M7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMubWluO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5tYXg7XG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IChlbmQgLSBzdGFydCkgLyBNYXRoLm1heCh0aWNrcy5sZW5ndGggLSAxLCAxKSAvIDI7XG4gICAgICAgICAgICBzdGFydCAtPSBvZmZzZXQ7XG4gICAgICAgICAgICBlbmQgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBzdGFydDtcbiAgICAgICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBlbmQgLSBzdGFydDtcbiAgICB9XG4gICAgZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLCB0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAnbGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluICwgbWF4ICB9ID0gdGhpcy5nZXRNaW5NYXgodHJ1ZSk7XG4gICAgICAgIHRoaXMubWluID0gaXNOdW1iZXJGaW5pdGUobWluKSA/IG1pbiA6IDA7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IG1heCA6IDE7XG4gICAgICAgIHRoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpO1xuICAgIH1cbiBjb21wdXRlVGlja0xpbWl0KCkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gdGhpcy5pc0hvcml6b250YWwoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaG9yaXpvbnRhbCA/IHRoaXMud2lkdGggOiB0aGlzLmhlaWdodDtcbiAgICAgICAgY29uc3QgbWluUm90YXRpb24gPSB0b1JhZGlhbnModGhpcy5vcHRpb25zLnRpY2tzLm1pblJvdGF0aW9uKTtcbiAgICAgICAgY29uc3QgcmF0aW8gPSAoaG9yaXpvbnRhbCA/IE1hdGguc2luKG1pblJvdGF0aW9uKSA6IE1hdGguY29zKG1pblJvdGF0aW9uKSkgfHwgMC4wMDE7XG4gICAgICAgIGNvbnN0IHRpY2tGb250ID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKTtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsZW5ndGggLyBNYXRoLm1pbig0MCwgdGlja0ZvbnQubGluZUhlaWdodCAvIHJhdGlvKSk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gTmFOIDogdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZSkgLyB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRWYWx1ZSArIHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAqIHRoaXMuX3ZhbHVlUmFuZ2U7XG4gICAgfVxufVxuXG5jb25zdCBsb2cxMEZsb29yID0gKHYpPT5NYXRoLmZsb29yKGxvZzEwKHYpKTtcbmNvbnN0IGNoYW5nZUV4cG9uZW50ID0gKHYsIG0pPT5NYXRoLnBvdygxMCwgbG9nMTBGbG9vcih2KSArIG0pO1xuZnVuY3Rpb24gaXNNYWpvcih0aWNrVmFsKSB7XG4gICAgY29uc3QgcmVtYWluID0gdGlja1ZhbCAvIE1hdGgucG93KDEwLCBsb2cxMEZsb29yKHRpY2tWYWwpKTtcbiAgICByZXR1cm4gcmVtYWluID09PSAxO1xufVxuZnVuY3Rpb24gc3RlcHMobWluLCBtYXgsIHJhbmdlRXhwKSB7XG4gICAgY29uc3QgcmFuZ2VTdGVwID0gTWF0aC5wb3coMTAsIHJhbmdlRXhwKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGguZmxvb3IobWluIC8gcmFuZ2VTdGVwKTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLmNlaWwobWF4IC8gcmFuZ2VTdGVwKTtcbiAgICByZXR1cm4gZW5kIC0gc3RhcnQ7XG59XG5mdW5jdGlvbiBzdGFydEV4cChtaW4sIG1heCkge1xuICAgIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuICAgIGxldCByYW5nZUV4cCA9IGxvZzEwRmxvb3IocmFuZ2UpO1xuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPiAxMCl7XG4gICAgICAgIHJhbmdlRXhwKys7XG4gICAgfVxuICAgIHdoaWxlKHN0ZXBzKG1pbiwgbWF4LCByYW5nZUV4cCkgPCAxMCl7XG4gICAgICAgIHJhbmdlRXhwLS07XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihyYW5nZUV4cCwgbG9nMTBGbG9vcihtaW4pKTtcbn1cbiBmdW5jdGlvbiBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB7IG1pbiAsIG1heCAgfSkge1xuICAgIG1pbiA9IGZpbml0ZU9yRGVmYXVsdChnZW5lcmF0aW9uT3B0aW9ucy5taW4sIG1pbik7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICBjb25zdCBtaW5FeHAgPSBsb2cxMEZsb29yKG1pbik7XG4gICAgbGV0IGV4cCA9IHN0YXJ0RXhwKG1pbiwgbWF4KTtcbiAgICBsZXQgcHJlY2lzaW9uID0gZXhwIDwgMCA/IE1hdGgucG93KDEwLCBNYXRoLmFicyhleHApKSA6IDE7XG4gICAgY29uc3Qgc3RlcFNpemUgPSBNYXRoLnBvdygxMCwgZXhwKTtcbiAgICBjb25zdCBiYXNlID0gbWluRXhwID4gZXhwID8gTWF0aC5wb3coMTAsIG1pbkV4cCkgOiAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5yb3VuZCgobWluIC0gYmFzZSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuICAgIGNvbnN0IG9mZnNldCA9IE1hdGguZmxvb3IoKG1pbiAtIGJhc2UpIC8gc3RlcFNpemUgLyAxMCkgKiBzdGVwU2l6ZSAqIDEwO1xuICAgIGxldCBzaWduaWZpY2FuZCA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gb2Zmc2V0KSAvIE1hdGgucG93KDEwLCBleHApKTtcbiAgICBsZXQgdmFsdWUgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWluLCBNYXRoLnJvdW5kKChiYXNlICsgb2Zmc2V0ICsgc2lnbmlmaWNhbmQgKiBNYXRoLnBvdygxMCwgZXhwKSkgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uKTtcbiAgICB3aGlsZSh2YWx1ZSA8IG1heCl7XG4gICAgICAgIHRpY2tzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtYWpvcjogaXNNYWpvcih2YWx1ZSksXG4gICAgICAgICAgICBzaWduaWZpY2FuZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNpZ25pZmljYW5kID49IDEwKSB7XG4gICAgICAgICAgICBzaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kIDwgMTUgPyAxNSA6IDIwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lnbmlmaWNhbmQgPj0gMjApIHtcbiAgICAgICAgICAgIGV4cCsrO1xuICAgICAgICAgICAgc2lnbmlmaWNhbmQgPSAyO1xuICAgICAgICAgICAgcHJlY2lzaW9uID0gZXhwID49IDAgPyAxIDogcHJlY2lzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCgoYmFzZSArIG9mZnNldCArIHNpZ25pZmljYW5kICogTWF0aC5wb3coMTAsIGV4cCkpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgICB9XG4gICAgY29uc3QgbGFzdFRpY2sgPSBmaW5pdGVPckRlZmF1bHQoZ2VuZXJhdGlvbk9wdGlvbnMubWF4LCB2YWx1ZSk7XG4gICAgdGlja3MucHVzaCh7XG4gICAgICAgIHZhbHVlOiBsYXN0VGljayxcbiAgICAgICAgbWFqb3I6IGlzTWFqb3IobGFzdFRpY2spLFxuICAgICAgICBzaWduaWZpY2FuZFxuICAgIH0pO1xuICAgIHJldHVybiB0aWNrcztcbn1cbmNsYXNzIExvZ2FyaXRobWljU2NhbGUgZXh0ZW5kcyBTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ2xvZ2FyaXRobWljJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5sb2dhcml0aG1pYyxcbiAgICAgICAgICAgIG1ham9yOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy5zdGFydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuZW5kID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fdmFsdWVSYW5nZSA9IDA7XG4gICAgfVxuICAgIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBMaW5lYXJTY2FsZUJhc2UucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsIFtcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgIF0pO1xuICAgICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3plcm8gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOdW1iZXJGaW5pdGUodmFsdWUpICYmIHZhbHVlID4gMCA/IHZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgZGV0ZXJtaW5lRGF0YUxpbWl0cygpIHtcbiAgICAgICAgY29uc3QgeyBtaW4gLCBtYXggIH0gPSB0aGlzLmdldE1pbk1heCh0cnVlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pID8gTWF0aC5tYXgoMCwgbWluKSA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSA/IE1hdGgubWF4KDAsIG1heCkgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvKSB7XG4gICAgICAgICAgICB0aGlzLl96ZXJvID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5femVybyAmJiB0aGlzLm1pbiAhPT0gdGhpcy5fc3VnZ2VzdGVkTWluICYmICFpc051bWJlckZpbml0ZSh0aGlzLl91c2VyTWluKSkge1xuICAgICAgICAgICAgdGhpcy5taW4gPSBtaW4gPT09IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAwKSA/IGNoYW5nZUV4cG9uZW50KHRoaXMubWluLCAtMSkgOiBjaGFuZ2VFeHBvbmVudCh0aGlzLm1pbiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuICAgIGhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluRGVmaW5lZCAsIG1heERlZmluZWQgIH0gPSB0aGlzLmdldFVzZXJCb3VuZHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IHRoaXMubWluO1xuICAgICAgICBsZXQgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHNldE1pbiA9ICh2KT0+bWluID0gbWluRGVmaW5lZCA/IG1pbiA6IHY7XG4gICAgICAgIGNvbnN0IHNldE1heCA9ICh2KT0+bWF4ID0gbWF4RGVmaW5lZCA/IG1heCA6IHY7XG4gICAgICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluKDEpO1xuICAgICAgICAgICAgICAgIHNldE1heCgxMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtaW4sIC0xKSk7XG4gICAgICAgICAgICAgICAgc2V0TWF4KGNoYW5nZUV4cG9uZW50KG1heCwgKzEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgICAgIHNldE1pbihjaGFuZ2VFeHBvbmVudChtYXgsIC0xKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCA8PSAwKSB7XG4gICAgICAgICAgICBzZXRNYXgoY2hhbmdlRXhwb25lbnQobWluLCArMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICB9XG4gICAgYnVpbGRUaWNrcygpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgZ2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtaW46IHRoaXMuX3VzZXJNaW4sXG4gICAgICAgICAgICBtYXg6IHRoaXMuX3VzZXJNYXhcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGlja3MgPSBnZW5lcmF0ZVRpY2tzKGdlbmVyYXRpb25PcHRpb25zLCB0aGlzKTtcbiAgICAgICAgaWYgKG9wdHMuYm91bmRzID09PSAndGlja3MnKSB7XG4gICAgICAgICAgICBfc2V0TWluQW5kTWF4QnlLZXkodGlja3MsIHRoaXMsICd2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLnJldmVyc2UpIHtcbiAgICAgICAgICAgIHRpY2tzLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1heDtcbiAgICAgICAgICAgIHRoaXMuZW5kID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB0aGlzLmVuZCA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrcztcbiAgICB9XG4gZ2V0TGFiZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcwJyA6IGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSwgdGhpcy5vcHRpb25zLnRpY2tzLmZvcm1hdCk7XG4gICAgfVxuIGNvbmZpZ3VyZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLm1pbjtcbiAgICAgICAgc3VwZXIuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0VmFsdWUgPSBsb2cxMChzdGFydCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlUmFuZ2UgPSBsb2cxMCh0aGlzLm1heCkgLSBsb2cxMChzdGFydCk7XG4gICAgfVxuICAgIGdldFBpeGVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwodmFsdWUgPT09IHRoaXMubWluID8gMCA6IChsb2cxMCh2YWx1ZSkgLSB0aGlzLl9zdGFydFZhbHVlKSAvIHRoaXMuX3ZhbHVlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCk7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhcnRWYWx1ZSArIGRlY2ltYWwgKiB0aGlzLl92YWx1ZVJhbmdlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFRpY2tCYWNrZHJvcEhlaWdodChvcHRzKSB7XG4gICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgIGlmICh0aWNrT3B0cy5kaXNwbGF5ICYmIG9wdHMuZGlzcGxheSkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKHRpY2tPcHRzLmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgIHJldHVybiB2YWx1ZU9yRGVmYXVsdCh0aWNrT3B0cy5mb250ICYmIHRpY2tPcHRzLmZvbnQuc2l6ZSwgZGVmYXVsdHMuZm9udC5zaXplKSArIHBhZGRpbmcuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIG1lYXN1cmVMYWJlbFNpemUoY3R4LCBmb250LCBsYWJlbCkge1xuICAgIGxhYmVsID0gaXNBcnJheShsYWJlbCkgPyBsYWJlbCA6IFtcbiAgICAgICAgbGFiZWxcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICAgIHc6IF9sb25nZXN0VGV4dChjdHgsIGZvbnQuc3RyaW5nLCBsYWJlbCksXG4gICAgICAgIGg6IGxhYmVsLmxlbmd0aCAqIGZvbnQubGluZUhlaWdodFxuICAgIH07XG59XG5mdW5jdGlvbiBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvcywgc2l6ZSwgbWluLCBtYXgpIHtcbiAgICBpZiAoYW5nbGUgPT09IG1pbiB8fCBhbmdsZSA9PT0gbWF4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogcG9zIC0gc2l6ZSAvIDIsXG4gICAgICAgICAgICBlbmQ6IHBvcyArIHNpemUgLyAyXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IG1pbiB8fCBhbmdsZSA+IG1heCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHBvcyAtIHNpemUsXG4gICAgICAgICAgICBlbmQ6IHBvc1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogcG9zLFxuICAgICAgICBlbmQ6IHBvcyArIHNpemVcbiAgICB9O1xufVxuIGZ1bmN0aW9uIGZpdFdpdGhQb2ludExhYmVscyhzY2FsZSkge1xuICAgIGNvbnN0IG9yaWcgPSB7XG4gICAgICAgIGw6IHNjYWxlLmxlZnQgKyBzY2FsZS5fcGFkZGluZy5sZWZ0LFxuICAgICAgICByOiBzY2FsZS5yaWdodCAtIHNjYWxlLl9wYWRkaW5nLnJpZ2h0LFxuICAgICAgICB0OiBzY2FsZS50b3AgKyBzY2FsZS5fcGFkZGluZy50b3AsXG4gICAgICAgIGI6IHNjYWxlLmJvdHRvbSAtIHNjYWxlLl9wYWRkaW5nLmJvdHRvbVxuICAgIH07XG4gICAgY29uc3QgbGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZyk7XG4gICAgY29uc3QgbGFiZWxTaXplcyA9IFtdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBbXTtcbiAgICBjb25zdCB2YWx1ZUNvdW50ID0gc2NhbGUuX3BvaW50TGFiZWxzLmxlbmd0aDtcbiAgICBjb25zdCBwb2ludExhYmVsT3B0cyA9IHNjYWxlLm9wdGlvbnMucG9pbnRMYWJlbHM7XG4gICAgY29uc3QgYWRkaXRpb25hbEFuZ2xlID0gcG9pbnRMYWJlbE9wdHMuY2VudGVyUG9pbnRMYWJlbHMgPyBQSSAvIHZhbHVlQ291bnQgOiAwO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBjb25zdCBvcHRzID0gcG9pbnRMYWJlbE9wdHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIHBhZGRpbmdbaV0gPSBvcHRzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uKGksIHNjYWxlLmRyYXdpbmdBcmVhICsgcGFkZGluZ1tpXSwgYWRkaXRpb25hbEFuZ2xlKTtcbiAgICAgICAgY29uc3QgcGxGb250ID0gdG9Gb250KG9wdHMuZm9udCk7XG4gICAgICAgIGNvbnN0IHRleHRTaXplID0gbWVhc3VyZUxhYmVsU2l6ZShzY2FsZS5jdHgsIHBsRm9udCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldKTtcbiAgICAgICAgbGFiZWxTaXplc1tpXSA9IHRleHRTaXplO1xuICAgICAgICBjb25zdCBhbmdsZVJhZGlhbnMgPSBfbm9ybWFsaXplQW5nbGUoc2NhbGUuZ2V0SW5kZXhBbmdsZShpKSArIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5yb3VuZCh0b0RlZ3JlZXMoYW5nbGVSYWRpYW5zKSk7XG4gICAgICAgIGNvbnN0IGhMaW1pdHMgPSBkZXRlcm1pbmVMaW1pdHMoYW5nbGUsIHBvaW50UG9zaXRpb24ueCwgdGV4dFNpemUudywgMCwgMTgwKTtcbiAgICAgICAgY29uc3QgdkxpbWl0cyA9IGRldGVybWluZUxpbWl0cyhhbmdsZSwgcG9pbnRQb3NpdGlvbi55LCB0ZXh0U2l6ZS5oLCA5MCwgMjcwKTtcbiAgICAgICAgdXBkYXRlTGltaXRzKGxpbWl0cywgb3JpZywgYW5nbGVSYWRpYW5zLCBoTGltaXRzLCB2TGltaXRzKTtcbiAgICB9XG4gICAgc2NhbGUuc2V0Q2VudGVyUG9pbnQob3JpZy5sIC0gbGltaXRzLmwsIGxpbWl0cy5yIC0gb3JpZy5yLCBvcmlnLnQgLSBsaW1pdHMudCwgbGltaXRzLmIgLSBvcmlnLmIpO1xuICAgIHNjYWxlLl9wb2ludExhYmVsSXRlbXMgPSBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZyk7XG59XG5mdW5jdGlvbiB1cGRhdGVMaW1pdHMobGltaXRzLCBvcmlnLCBhbmdsZSwgaExpbWl0cywgdkxpbWl0cykge1xuICAgIGNvbnN0IHNpbiA9IE1hdGguYWJzKE1hdGguc2luKGFuZ2xlKSk7XG4gICAgY29uc3QgY29zID0gTWF0aC5hYnMoTWF0aC5jb3MoYW5nbGUpKTtcbiAgICBsZXQgeCA9IDA7XG4gICAgbGV0IHkgPSAwO1xuICAgIGlmIChoTGltaXRzLnN0YXJ0IDwgb3JpZy5sKSB7XG4gICAgICAgIHggPSAob3JpZy5sIC0gaExpbWl0cy5zdGFydCkgLyBzaW47XG4gICAgICAgIGxpbWl0cy5sID0gTWF0aC5taW4obGltaXRzLmwsIG9yaWcubCAtIHgpO1xuICAgIH0gZWxzZSBpZiAoaExpbWl0cy5lbmQgPiBvcmlnLnIpIHtcbiAgICAgICAgeCA9IChoTGltaXRzLmVuZCAtIG9yaWcucikgLyBzaW47XG4gICAgICAgIGxpbWl0cy5yID0gTWF0aC5tYXgobGltaXRzLnIsIG9yaWcuciArIHgpO1xuICAgIH1cbiAgICBpZiAodkxpbWl0cy5zdGFydCA8IG9yaWcudCkge1xuICAgICAgICB5ID0gKG9yaWcudCAtIHZMaW1pdHMuc3RhcnQpIC8gY29zO1xuICAgICAgICBsaW1pdHMudCA9IE1hdGgubWluKGxpbWl0cy50LCBvcmlnLnQgLSB5KTtcbiAgICB9IGVsc2UgaWYgKHZMaW1pdHMuZW5kID4gb3JpZy5iKSB7XG4gICAgICAgIHkgPSAodkxpbWl0cy5lbmQgLSBvcmlnLmIpIC8gY29zO1xuICAgICAgICBsaW1pdHMuYiA9IE1hdGgubWF4KGxpbWl0cy5iLCBvcmlnLmIgKyB5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaW5kZXgsIGl0ZW1PcHRzKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXN0YW5jZSA9IHNjYWxlLmRyYXdpbmdBcmVhO1xuICAgIGNvbnN0IHsgZXh0cmEgLCBhZGRpdGlvbmFsQW5nbGUgLCBwYWRkaW5nICwgc2l6ZSAgfSA9IGl0ZW1PcHRzO1xuICAgIGNvbnN0IHBvaW50TGFiZWxQb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb24oaW5kZXgsIG91dGVyRGlzdGFuY2UgKyBleHRyYSArIHBhZGRpbmcsIGFkZGl0aW9uYWxBbmdsZSk7XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLnJvdW5kKHRvRGVncmVlcyhfbm9ybWFsaXplQW5nbGUocG9pbnRMYWJlbFBvc2l0aW9uLmFuZ2xlICsgSEFMRl9QSSkpKTtcbiAgICBjb25zdCB5ID0geUZvckFuZ2xlKHBvaW50TGFiZWxQb3NpdGlvbi55LCBzaXplLmgsIGFuZ2xlKTtcbiAgICBjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25Gb3JBbmdsZShhbmdsZSk7XG4gICAgY29uc3QgbGVmdCA9IGxlZnRGb3JUZXh0QWxpZ24ocG9pbnRMYWJlbFBvc2l0aW9uLngsIHNpemUudywgdGV4dEFsaWduKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICB4OiBwb2ludExhYmVsUG9zaXRpb24ueCxcbiAgICAgICAgeSxcbiAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0b3A6IHksXG4gICAgICAgIHJpZ2h0OiBsZWZ0ICsgc2l6ZS53LFxuICAgICAgICBib3R0b206IHkgKyBzaXplLmhcbiAgICB9O1xufVxuZnVuY3Rpb24gaXNOb3RPdmVybGFwcGVkKGl0ZW0sIGFyZWEpIHtcbiAgICBpZiAoIWFyZWEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHsgbGVmdCAsIHRvcCAsIHJpZ2h0ICwgYm90dG9tICB9ID0gaXRlbTtcbiAgICBjb25zdCBhcGV4ZXNJbkFyZWEgPSBfaXNQb2ludEluQXJlYSh7XG4gICAgICAgIHg6IGxlZnQsXG4gICAgICAgIHk6IHRvcFxuICAgIH0sIGFyZWEpIHx8IF9pc1BvaW50SW5BcmVhKHtcbiAgICAgICAgeDogbGVmdCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogdG9wXG4gICAgfSwgYXJlYSkgfHwgX2lzUG9pbnRJbkFyZWEoe1xuICAgICAgICB4OiByaWdodCxcbiAgICAgICAgeTogYm90dG9tXG4gICAgfSwgYXJlYSk7XG4gICAgcmV0dXJuICFhcGV4ZXNJbkFyZWE7XG59XG5mdW5jdGlvbiBidWlsZFBvaW50TGFiZWxJdGVtcyhzY2FsZSwgbGFiZWxTaXplcywgcGFkZGluZykge1xuICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgY29uc3QgdmFsdWVDb3VudCA9IHNjYWxlLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgY29uc3Qgb3B0cyA9IHNjYWxlLm9wdGlvbnM7XG4gICAgY29uc3QgeyBjZW50ZXJQb2ludExhYmVscyAsIGRpc3BsYXkgIH0gPSBvcHRzLnBvaW50TGFiZWxzO1xuICAgIGNvbnN0IGl0ZW1PcHRzID0ge1xuICAgICAgICBleHRyYTogZ2V0VGlja0JhY2tkcm9wSGVpZ2h0KG9wdHMpIC8gMixcbiAgICAgICAgYWRkaXRpb25hbEFuZ2xlOiBjZW50ZXJQb2ludExhYmVscyA/IFBJIC8gdmFsdWVDb3VudCA6IDBcbiAgICB9O1xuICAgIGxldCBhcmVhO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspe1xuICAgICAgICBpdGVtT3B0cy5wYWRkaW5nID0gcGFkZGluZ1tpXTtcbiAgICAgICAgaXRlbU9wdHMuc2l6ZSA9IGxhYmVsU2l6ZXNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjcmVhdGVQb2ludExhYmVsSXRlbShzY2FsZSwgaSwgaXRlbU9wdHMpO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICBpZiAoZGlzcGxheSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBpdGVtLnZpc2libGUgPSBpc05vdE92ZXJsYXBwZWQoaXRlbSwgYXJlYSk7XG4gICAgICAgICAgICBpZiAoaXRlbS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgYXJlYSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xufVxuZnVuY3Rpb24gZ2V0VGV4dEFsaWduRm9yQW5nbGUoYW5nbGUpIHtcbiAgICBpZiAoYW5nbGUgPT09IDAgfHwgYW5nbGUgPT09IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA8IDE4MCkge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgICByZXR1cm4gJ3JpZ2h0Jztcbn1cbmZ1bmN0aW9uIGxlZnRGb3JUZXh0QWxpZ24oeCwgdywgYWxpZ24pIHtcbiAgICBpZiAoYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgeCAtPSB3O1xuICAgIH0gZWxzZSBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgIHggLT0gdyAvIDI7XG4gICAgfVxuICAgIHJldHVybiB4O1xufVxuZnVuY3Rpb24geUZvckFuZ2xlKHksIGgsIGFuZ2xlKSB7XG4gICAgaWYgKGFuZ2xlID09PSA5MCB8fCBhbmdsZSA9PT0gMjcwKSB7XG4gICAgICAgIHkgLT0gaCAvIDI7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA+IDI3MCB8fCBhbmdsZSA8IDkwKSB7XG4gICAgICAgIHkgLT0gaDtcbiAgICB9XG4gICAgcmV0dXJuIHk7XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbEJveChjdHgsIG9wdHMsIGl0ZW0pIHtcbiAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IGl0ZW07XG4gICAgY29uc3QgeyBiYWNrZHJvcENvbG9yICB9ID0gb3B0cztcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWYoYmFja2Ryb3BDb2xvcikpIHtcbiAgICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gdG9UUkJMQ29ybmVycyhvcHRzLmJvcmRlclJhZGl1cyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0b1BhZGRpbmcob3B0cy5iYWNrZHJvcFBhZGRpbmcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BMZWZ0ID0gbGVmdCAtIHBhZGRpbmcubGVmdDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BUb3AgPSB0b3AgLSBwYWRkaW5nLnRvcDtcbiAgICAgICAgY29uc3QgYmFja2Ryb3BXaWR0aCA9IHJpZ2h0IC0gbGVmdCArIHBhZGRpbmcud2lkdGg7XG4gICAgICAgIGNvbnN0IGJhY2tkcm9wSGVpZ2h0ID0gYm90dG9tIC0gdG9wICsgcGFkZGluZy5oZWlnaHQ7XG4gICAgICAgIGlmIChPYmplY3QudmFsdWVzKGJvcmRlclJhZGl1cykuc29tZSgodik9PnYgIT09IDApKSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBhZGRSb3VuZGVkUmVjdFBhdGgoY3R4LCB7XG4gICAgICAgICAgICAgICAgeDogYmFja2Ryb3BMZWZ0LFxuICAgICAgICAgICAgICAgIHk6IGJhY2tkcm9wVG9wLFxuICAgICAgICAgICAgICAgIHc6IGJhY2tkcm9wV2lkdGgsXG4gICAgICAgICAgICAgICAgaDogYmFja2Ryb3BIZWlnaHQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBib3JkZXJSYWRpdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdChiYWNrZHJvcExlZnQsIGJhY2tkcm9wVG9wLCBiYWNrZHJvcFdpZHRoLCBiYWNrZHJvcEhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UG9pbnRMYWJlbHMoc2NhbGUsIGxhYmVsQ291bnQpIHtcbiAgICBjb25zdCB7IGN0eCAsIG9wdGlvbnM6IHsgcG9pbnRMYWJlbHMgIH0gIH0gPSBzY2FsZTtcbiAgICBmb3IobGV0IGkgPSBsYWJlbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgICBjb25zdCBpdGVtID0gc2NhbGUuX3BvaW50TGFiZWxJdGVtc1tpXTtcbiAgICAgICAgaWYgKCFpdGVtLnZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gcG9pbnRMYWJlbHMuc2V0Q29udGV4dChzY2FsZS5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgIGRyYXdQb2ludExhYmVsQm94KGN0eCwgb3B0c0F0SW5kZXgsIGl0ZW0pO1xuICAgICAgICBjb25zdCBwbEZvbnQgPSB0b0ZvbnQob3B0c0F0SW5kZXguZm9udCk7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgLCB0ZXh0QWxpZ24gIH0gPSBpdGVtO1xuICAgICAgICByZW5kZXJUZXh0KGN0eCwgc2NhbGUuX3BvaW50TGFiZWxzW2ldLCB4LCB5ICsgcGxGb250LmxpbmVIZWlnaHQgLyAyLCBwbEZvbnQsIHtcbiAgICAgICAgICAgIGNvbG9yOiBvcHRzQXRJbmRleC5jb2xvcixcbiAgICAgICAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduLFxuICAgICAgICAgICAgdGV4dEJhc2VsaW5lOiAnbWlkZGxlJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCkge1xuICAgIGNvbnN0IHsgY3R4ICB9ID0gc2NhbGU7XG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICAgIGN0eC5hcmMoc2NhbGUueENlbnRlciwgc2NhbGUueUNlbnRlciwgcmFkaXVzLCAwLCBUQVUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbigwLCByYWRpdXMpO1xuICAgICAgICBjdHgubW92ZVRvKHBvaW50UG9zaXRpb24ueCwgcG9pbnRQb3NpdGlvbi55KTtcbiAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxhYmVsQ291bnQ7IGkrKyl7XG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uID0gc2NhbGUuZ2V0UG9pbnRQb3NpdGlvbihpLCByYWRpdXMpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhwb2ludFBvc2l0aW9uLngsIHBvaW50UG9zaXRpb24ueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkcmF3UmFkaXVzTGluZShzY2FsZSwgZ3JpZExpbmVPcHRzLCByYWRpdXMsIGxhYmVsQ291bnQsIGJvcmRlck9wdHMpIHtcbiAgICBjb25zdCBjdHggPSBzY2FsZS5jdHg7XG4gICAgY29uc3QgY2lyY3VsYXIgPSBncmlkTGluZU9wdHMuY2lyY3VsYXI7XG4gICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IGdyaWRMaW5lT3B0cztcbiAgICBpZiAoIWNpcmN1bGFyICYmICFsYWJlbENvdW50IHx8ICFjb2xvciB8fCAhbGluZVdpZHRoIHx8IHJhZGl1cyA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgY3R4LnNldExpbmVEYXNoKGJvcmRlck9wdHMuZGFzaCk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gYm9yZGVyT3B0cy5kYXNoT2Zmc2V0O1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBwYXRoUmFkaXVzTGluZShzY2FsZSwgcmFkaXVzLCBjaXJjdWxhciwgbGFiZWxDb3VudCk7XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICBjdHgucmVzdG9yZSgpO1xufVxuZnVuY3Rpb24gY3JlYXRlUG9pbnRMYWJlbENvbnRleHQocGFyZW50LCBpbmRleCwgbGFiZWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29udGV4dChwYXJlbnQsIHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIGluZGV4LFxuICAgICAgICB0eXBlOiAncG9pbnRMYWJlbCdcbiAgICB9KTtcbn1cbmNsYXNzIFJhZGlhbExpbmVhclNjYWxlIGV4dGVuZHMgTGluZWFyU2NhbGVCYXNlIHtcbiAgICBzdGF0aWMgaWQgPSAncmFkaWFsTGluZWFyJztcbiBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgIGFuaW1hdGU6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiAnY2hhcnRBcmVhJyxcbiAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICAgIGxpbmVXaWR0aDogMSxcbiAgICAgICAgICAgIGJvcmRlckRhc2g6IFtdLFxuICAgICAgICAgICAgYm9yZGVyRGFzaE9mZnNldDogMC4wXG4gICAgICAgIH0sXG4gICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIGNpcmN1bGFyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBzdGFydEFuZ2xlOiAwLFxuICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgc2hvd0xhYmVsQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogVGlja3MuZm9ybWF0dGVycy5udW1lcmljXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgICBiYWNrZHJvcENvbG9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiYWNrZHJvcFBhZGRpbmc6IDIsXG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgZm9udDoge1xuICAgICAgICAgICAgICAgIHNpemU6IDEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2sgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZGRpbmc6IDUsXG4gICAgICAgICAgICBjZW50ZXJQb2ludExhYmVsczogZmFsc2VcbiAgICAgICAgfVxuICAgIH07XG4gICAgc3RhdGljIGRlZmF1bHRSb3V0ZXMgPSB7XG4gICAgICAgICdhbmdsZUxpbmVzLmNvbG9yJzogJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgJ3BvaW50TGFiZWxzLmNvbG9yJzogJ2NvbG9yJyxcbiAgICAgICAgJ3RpY2tzLmNvbG9yJzogJ2NvbG9yJ1xuICAgIH07XG4gICAgc3RhdGljIGRlc2NyaXB0b3JzID0ge1xuICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgICBfZmFsbGJhY2s6ICdncmlkJ1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdHJ1Y3RvcihjZmcpe1xuICAgICAgICBzdXBlcihjZmcpO1xuICAgICAgICAgdGhpcy54Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy55Q2VudGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMuX3BvaW50TGFiZWxzID0gW107XG4gICAgICAgIHRoaXMuX3BvaW50TGFiZWxJdGVtcyA9IFtdO1xuICAgIH1cbiAgICBzZXREaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5fcGFkZGluZyA9IHRvUGFkZGluZyhnZXRUaWNrQmFja2Ryb3BIZWlnaHQodGhpcy5vcHRpb25zKSAvIDIpO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWR0aCA9IHRoaXMubWF4V2lkdGggLSBwYWRkaW5nLndpZHRoO1xuICAgICAgICBjb25zdCBoID0gdGhpcy5oZWlnaHQgPSB0aGlzLm1heEhlaWdodCAtIHBhZGRpbmcuaGVpZ2h0O1xuICAgICAgICB0aGlzLnhDZW50ZXIgPSBNYXRoLmZsb29yKHRoaXMubGVmdCArIHcgLyAyICsgcGFkZGluZy5sZWZ0KTtcbiAgICAgICAgdGhpcy55Q2VudGVyID0gTWF0aC5mbG9vcih0aGlzLnRvcCArIGggLyAyICsgcGFkZGluZy50b3ApO1xuICAgICAgICB0aGlzLmRyYXdpbmdBcmVhID0gTWF0aC5mbG9vcihNYXRoLm1pbih3LCBoKSAvIDIpO1xuICAgIH1cbiAgICBkZXRlcm1pbmVEYXRhTGltaXRzKCkge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXMuZ2V0TWluTWF4KGZhbHNlKTtcbiAgICAgICAgdGhpcy5taW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogMDtcbiAgICAgICAgdGhpcy5tYXggPSBpc051bWJlckZpbml0ZShtYXgpICYmICFpc05hTihtYXgpID8gbWF4IDogMDtcbiAgICAgICAgdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCk7XG4gICAgfVxuIGNvbXB1dGVUaWNrTGltaXQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYSAvIGdldFRpY2tCYWNrZHJvcEhlaWdodCh0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIExpbmVhclNjYWxlQmFzZS5wcm90b3R5cGUuZ2VuZXJhdGVUaWNrTGFiZWxzLmNhbGwodGhpcywgdGlja3MpO1xuICAgICAgICB0aGlzLl9wb2ludExhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCkubWFwKCh2YWx1ZSwgaW5kZXgpPT57XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGNhbGxiYWNrKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjaywgW1xuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBsYWJlbCB8fCBsYWJlbCA9PT0gMCA/IGxhYmVsIDogJyc7XG4gICAgICAgIH0pLmZpbHRlcigodiwgaSk9PnRoaXMuY2hhcnQuZ2V0RGF0YVZpc2liaWxpdHkoaSkpO1xuICAgIH1cbiAgICBmaXQoKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRzLmRpc3BsYXkgJiYgb3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBmaXRXaXRoUG9pbnRMYWJlbHModGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENlbnRlclBvaW50KDAsIDAsIDAsIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENlbnRlclBvaW50KGxlZnRNb3ZlbWVudCwgcmlnaHRNb3ZlbWVudCwgdG9wTW92ZW1lbnQsIGJvdHRvbU1vdmVtZW50KSB7XG4gICAgICAgIHRoaXMueENlbnRlciArPSBNYXRoLmZsb29yKChsZWZ0TW92ZW1lbnQgLSByaWdodE1vdmVtZW50KSAvIDIpO1xuICAgICAgICB0aGlzLnlDZW50ZXIgKz0gTWF0aC5mbG9vcigodG9wTW92ZW1lbnQgLSBib3R0b21Nb3ZlbWVudCkgLyAyKTtcbiAgICAgICAgdGhpcy5kcmF3aW5nQXJlYSAtPSBNYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhIC8gMiwgTWF0aC5tYXgobGVmdE1vdmVtZW50LCByaWdodE1vdmVtZW50LCB0b3BNb3ZlbWVudCwgYm90dG9tTW92ZW1lbnQpKTtcbiAgICB9XG4gICAgZ2V0SW5kZXhBbmdsZShpbmRleCkge1xuICAgICAgICBjb25zdCBhbmdsZU11bHRpcGxpZXIgPSBUQVUgLyAodGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoIHx8IDEpO1xuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5vcHRpb25zLnN0YXJ0QW5nbGUgfHwgMDtcbiAgICAgICAgcmV0dXJuIF9ub3JtYWxpemVBbmdsZShpbmRleCAqIGFuZ2xlTXVsdGlwbGllciArIHRvUmFkaWFucyhzdGFydEFuZ2xlKSk7XG4gICAgfVxuICAgIGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2FsaW5nRmFjdG9yID0gdGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXZlcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMubWF4IC0gdmFsdWUpICogc2NhbGluZ0ZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5taW4pICogc2NhbGluZ0ZhY3RvcjtcbiAgICB9XG4gICAgZ2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZGlzdGFuY2UpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYoZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyAodGhpcy5kcmF3aW5nQXJlYSAvICh0aGlzLm1heCAtIHRoaXMubWluKSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmV2ZXJzZSA/IHRoaXMubWF4IC0gc2NhbGVkRGlzdGFuY2UgOiB0aGlzLm1pbiArIHNjYWxlZERpc3RhbmNlO1xuICAgIH1cbiAgICBnZXRQb2ludExhYmVsQ29udGV4dChpbmRleCkge1xuICAgICAgICBjb25zdCBwb2ludExhYmVscyA9IHRoaXMuX3BvaW50TGFiZWxzIHx8IFtdO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHBvaW50TGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRMYWJlbCA9IHBvaW50TGFiZWxzW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQb2ludExhYmVsQ29udGV4dCh0aGlzLmdldENvbnRleHQoKSwgaW5kZXgsIHBvaW50TGFiZWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFBvaW50UG9zaXRpb24oaW5kZXgsIGRpc3RhbmNlRnJvbUNlbnRlciwgYWRkaXRpb25hbEFuZ2xlID0gMCkge1xuICAgICAgICBjb25zdCBhbmdsZSA9IHRoaXMuZ2V0SW5kZXhBbmdsZShpbmRleCkgLSBIQUxGX1BJICsgYWRkaXRpb25hbEFuZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5jb3MoYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy54Q2VudGVyLFxuICAgICAgICAgICAgeTogTWF0aC5zaW4oYW5nbGUpICogZGlzdGFuY2VGcm9tQ2VudGVyICsgdGhpcy55Q2VudGVyLFxuICAgICAgICAgICAgYW5nbGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGluZGV4LCB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHZhbHVlKSk7XG4gICAgfVxuICAgIGdldEJhc2VQb3NpdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXggfHwgMCwgdGhpcy5nZXRCYXNlVmFsdWUoKSk7XG4gICAgfVxuICAgIGdldFBvaW50TGFiZWxQb3NpdGlvbihpbmRleCkge1xuICAgICAgICBjb25zdCB7IGxlZnQgLCB0b3AgLCByaWdodCAsIGJvdHRvbSAgfSA9IHRoaXMuX3BvaW50TGFiZWxJdGVtc1tpbmRleF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICBib3R0b21cbiAgICAgICAgfTtcbiAgICB9XG4gZHJhd0JhY2tncm91bmQoKSB7XG4gICAgICAgIGNvbnN0IHsgYmFja2dyb3VuZENvbG9yICwgZ3JpZDogeyBjaXJjdWxhciAgfSAgfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgcGF0aFJhZGl1c0xpbmUodGhpcywgdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLl9lbmRWYWx1ZSksIGNpcmN1bGFyLCB0aGlzLl9wb2ludExhYmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuIGRyYXdHcmlkKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBhbmdsZUxpbmVzICwgZ3JpZCAsIGJvcmRlciAgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IGxhYmVsQ291bnQgPSB0aGlzLl9wb2ludExhYmVscy5sZW5ndGg7XG4gICAgICAgIGxldCBpLCBvZmZzZXQsIHBvc2l0aW9uO1xuICAgICAgICBpZiAob3B0cy5wb2ludExhYmVscy5kaXNwbGF5KSB7XG4gICAgICAgICAgICBkcmF3UG9pbnRMYWJlbHModGhpcywgbGFiZWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdyaWQuZGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50aWNrcy5mb3JFYWNoKCh0aWNrLCBpbmRleCk9PntcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IDAgfHwgaW5kZXggPT09IDAgJiYgdGhpcy5taW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGljay52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzQXRJbmRleCA9IGdyaWQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXhCb3JkZXIgPSBib3JkZXIuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgZHJhd1JhZGl1c0xpbmUodGhpcywgb3B0c0F0SW5kZXgsIG9mZnNldCwgbGFiZWxDb3VudCwgb3B0c0F0SW5kZXhCb3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmdsZUxpbmVzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBmb3IoaSA9IGxhYmVsQ291bnQgLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0c0F0SW5kZXggPSBhbmdsZUxpbmVzLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChpKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2xvciAsIGxpbmVXaWR0aCAgfSA9IG9wdHNBdEluZGV4O1xuICAgICAgICAgICAgICAgIGlmICghbGluZVdpZHRoIHx8ICFjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2gob3B0c0F0SW5kZXguYm9yZGVyRGFzaCk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gb3B0c0F0SW5kZXguYm9yZGVyRGFzaE9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKG9wdHMucmV2ZXJzZSA/IHRoaXMubWluIDogdGhpcy5tYXgpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5nZXRQb2ludFBvc2l0aW9uKGksIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8odGhpcy54Q2VudGVyLCB0aGlzLnlDZW50ZXIpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiBkcmF3Qm9yZGVyKCkge31cbiBkcmF3TGFiZWxzKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRzLnRpY2tzO1xuICAgICAgICBpZiAoIXRpY2tPcHRzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gdGhpcy5nZXRJbmRleEFuZ2xlKDApO1xuICAgICAgICBsZXQgb2Zmc2V0LCB3aWR0aDtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLnhDZW50ZXIsIHRoaXMueUNlbnRlcik7XG4gICAgICAgIGN0eC5yb3RhdGUoc3RhcnRBbmdsZSk7XG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xuICAgICAgICB0aGlzLnRpY2tzLmZvckVhY2goKHRpY2ssIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMubWluID49IDAgJiYgIW9wdHMucmV2ZXJzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdHNBdEluZGV4ID0gdGlja09wdHMuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoaW5kZXgpKTtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tGb250ID0gdG9Gb250KG9wdHNBdEluZGV4LmZvbnQpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0aGlzLnRpY2tzW2luZGV4XS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAob3B0c0F0SW5kZXguc2hvd0xhYmVsQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICBjdHguZm9udCA9IHRpY2tGb250LnN0cmluZztcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGN0eC5tZWFzdXJlVGV4dCh0aWNrLmxhYmVsKS53aWR0aDtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0c0F0SW5kZXguYmFja2Ryb3BDb2xvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gdG9QYWRkaW5nKG9wdHNBdEluZGV4LmJhY2tkcm9wUGFkZGluZyk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KC13aWR0aCAvIDIgLSBwYWRkaW5nLmxlZnQsIC1vZmZzZXQgLSB0aWNrRm9udC5zaXplIC8gMiAtIHBhZGRpbmcudG9wLCB3aWR0aCArIHBhZGRpbmcud2lkdGgsIHRpY2tGb250LnNpemUgKyBwYWRkaW5nLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXJUZXh0KGN0eCwgdGljay5sYWJlbCwgMCwgLW9mZnNldCwgdGlja0ZvbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3B0c0F0SW5kZXguY29sb3IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdHNBdEluZGV4LnRleHRTdHJva2VDb2xvcixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogb3B0c0F0SW5kZXgudGV4dFN0cm9rZVdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuIGRyYXdUaXRsZSgpIHt9XG59XG5cbmNvbnN0IElOVEVSVkFMUyA9IHtcbiAgICBtaWxsaXNlY29uZDoge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHN0ZXBzOiAxMDAwXG4gICAgfSxcbiAgICBzZWNvbmQ6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAxMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIG1pbnV0ZToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDYwMDAwLFxuICAgICAgICBzdGVwczogNjBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzNjAwMDAwLFxuICAgICAgICBzdGVwczogMjRcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgICBjb21tb246IHRydWUsXG4gICAgICAgIHNpemU6IDg2NDAwMDAwLFxuICAgICAgICBzdGVwczogMzBcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNjA0ODAwMDAwLFxuICAgICAgICBzdGVwczogNFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAyLjYyOGU5LFxuICAgICAgICBzdGVwczogMTJcbiAgICB9LFxuICAgIHF1YXJ0ZXI6IHtcbiAgICAgICAgY29tbW9uOiBmYWxzZSxcbiAgICAgICAgc2l6ZTogNy44ODRlOSxcbiAgICAgICAgc3RlcHM6IDRcbiAgICB9LFxuICAgIHllYXI6IHtcbiAgICAgICAgY29tbW9uOiB0cnVlLFxuICAgICAgICBzaXplOiAzLjE1NGUxMFxuICAgIH1cbn07XG4gY29uc3QgVU5JVFMgPSAgLyogI19fUFVSRV9fICovIE9iamVjdC5rZXlzKElOVEVSVkFMUyk7XG4gZnVuY3Rpb24gc29ydGVyKGEsIGIpIHtcbiAgICByZXR1cm4gYSAtIGI7XG59XG4gZnVuY3Rpb24gcGFyc2Uoc2NhbGUsIGlucHV0KSB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWYoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgeyBwYXJzZXIgLCByb3VuZCAsIGlzb1dlZWtkYXkgIH0gPSBzY2FsZS5fcGFyc2VPcHRzO1xuICAgIGxldCB2YWx1ZSA9IGlucHV0O1xuICAgIGlmICh0eXBlb2YgcGFyc2VyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFpc051bWJlckZpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgcGFyc2VyID09PSAnc3RyaW5nJyA/IGFkYXB0ZXIucGFyc2UodmFsdWUsICBwYXJzZXIpIDogYWRhcHRlci5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICAgIHZhbHVlID0gcm91bmQgPT09ICd3ZWVrJyAmJiAoaXNOdW1iZXIoaXNvV2Vla2RheSkgfHwgaXNvV2Vla2RheSA9PT0gdHJ1ZSkgPyBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsICdpc29XZWVrJywgaXNvV2Vla2RheSkgOiBhZGFwdGVyLnN0YXJ0T2YodmFsdWUsIHJvdW5kKTtcbiAgICB9XG4gICAgcmV0dXJuICt2YWx1ZTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKG1pblVuaXQsIG1pbiwgbWF4LCBjYXBhY2l0eSkge1xuICAgIGNvbnN0IGlsZW4gPSBVTklUUy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gVU5JVFMuaW5kZXhPZihtaW5Vbml0KTsgaSA8IGlsZW4gLSAxOyArK2kpe1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IElOVEVSVkFMU1tVTklUU1tpXV07XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGludGVydmFsLnN0ZXBzID8gaW50ZXJ2YWwuc3RlcHMgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgaWYgKGludGVydmFsLmNvbW1vbiAmJiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoZmFjdG9yICogaW50ZXJ2YWwuc2l6ZSkpIDw9IGNhcGFjaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gVU5JVFNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW2lsZW4gLSAxXTtcbn1cbiBmdW5jdGlvbiBkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyhzY2FsZSwgbnVtVGlja3MsIG1pblVuaXQsIG1pbiwgbWF4KSB7XG4gICAgZm9yKGxldCBpID0gVU5JVFMubGVuZ3RoIC0gMTsgaSA+PSBVTklUUy5pbmRleE9mKG1pblVuaXQpOyBpLS0pe1xuICAgICAgICBjb25zdCB1bml0ID0gVU5JVFNbaV07XG4gICAgICAgIGlmIChJTlRFUlZBTFNbdW5pdF0uY29tbW9uICYmIHNjYWxlLl9hZGFwdGVyLmRpZmYobWF4LCBtaW4sIHVuaXQpID49IG51bVRpY2tzIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFVOSVRTW21pblVuaXQgPyBVTklUUy5pbmRleE9mKG1pblVuaXQpIDogMF07XG59XG4gZnVuY3Rpb24gZGV0ZXJtaW5lTWFqb3JVbml0KHVuaXQpIHtcbiAgICBmb3IobGV0IGkgPSBVTklUUy5pbmRleE9mKHVuaXQpICsgMSwgaWxlbiA9IFVOSVRTLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIGlmIChJTlRFUlZBTFNbVU5JVFNbaV1dLmNvbW1vbikge1xuICAgICAgICAgICAgcmV0dXJuIFVOSVRTW2ldO1xuICAgICAgICB9XG4gICAgfVxufVxuIGZ1bmN0aW9uIGFkZFRpY2sodGlja3MsIHRpbWUsIHRpbWVzdGFtcHMpIHtcbiAgICBpZiAoIXRpbWVzdGFtcHMpIHtcbiAgICAgICAgdGlja3NbdGltZV0gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeyBsbyAsIGhpICB9ID0gX2xvb2t1cCh0aW1lc3RhbXBzLCB0aW1lKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGltZXN0YW1wc1tsb10gPj0gdGltZSA/IHRpbWVzdGFtcHNbbG9dIDogdGltZXN0YW1wc1toaV07XG4gICAgICAgIHRpY2tzW3RpbWVzdGFtcF0gPSB0cnVlO1xuICAgIH1cbn1cbiBmdW5jdGlvbiBzZXRNYWpvclRpY2tzKHNjYWxlLCB0aWNrcywgbWFwLCBtYWpvclVuaXQpIHtcbiAgICBjb25zdCBhZGFwdGVyID0gc2NhbGUuX2FkYXB0ZXI7XG4gICAgY29uc3QgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKHRpY2tzWzBdLnZhbHVlLCBtYWpvclVuaXQpO1xuICAgIGNvbnN0IGxhc3QgPSB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52YWx1ZTtcbiAgICBsZXQgbWFqb3IsIGluZGV4O1xuICAgIGZvcihtYWpvciA9IGZpcnN0OyBtYWpvciA8PSBsYXN0OyBtYWpvciA9ICthZGFwdGVyLmFkZChtYWpvciwgMSwgbWFqb3JVbml0KSl7XG4gICAgICAgIGluZGV4ID0gbWFwW21ham9yXTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRpY2tzW2luZGV4XS5tYWpvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRpY2tzO1xufVxuIGZ1bmN0aW9uIHRpY2tzRnJvbVRpbWVzdGFtcHMoc2NhbGUsIHZhbHVlcywgbWFqb3JVbml0KSB7XG4gICAgY29uc3QgdGlja3MgPSBbXTtcbiAgICAgY29uc3QgbWFwID0ge307XG4gICAgY29uc3QgaWxlbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgbGV0IGksIHZhbHVlO1xuICAgIGZvcihpID0gMDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICBtYXBbdmFsdWVdID0gaTtcbiAgICAgICAgdGlja3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG1ham9yOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlsZW4gPT09IDAgfHwgIW1ham9yVW5pdCA/IHRpY2tzIDogc2V0TWFqb3JUaWNrcyhzY2FsZSwgdGlja3MsIG1hcCwgbWFqb3JVbml0KTtcbn1cbmNsYXNzIFRpbWVTY2FsZSBleHRlbmRzIFNjYWxlIHtcbiAgICBzdGF0aWMgaWQgPSAndGltZSc7XG4gc3RhdGljIGRlZmF1bHRzID0ge1xuIGJvdW5kczogJ2RhdGEnLFxuICAgICAgICBhZGFwdGVyczoge30sXG4gICAgICAgIHRpbWU6IHtcbiAgICAgICAgICAgIHBhcnNlcjogZmFsc2UsXG4gICAgICAgICAgICB1bml0OiBmYWxzZSxcbiAgICAgICAgICAgIHJvdW5kOiBmYWxzZSxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IGZhbHNlLFxuICAgICAgICAgICAgbWluVW5pdDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICB0aWNrczoge1xuIHNvdXJjZTogJ2F1dG8nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgICAgbWFqb3I6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICBsYWJlbHM6IFtdLFxuICAgICAgICAgICAgYWxsOiBbXVxuICAgICAgICB9O1xuICAgICAgICAgdGhpcy5fdW5pdCA9ICdkYXknO1xuICAgICAgICAgdGhpcy5fbWFqb3JVbml0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9vZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyc2VPcHRzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpbml0KHNjYWxlT3B0cywgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBzY2FsZU9wdHMudGltZSB8fCAoc2NhbGVPcHRzLnRpbWUgPSB7fSk7XG4gICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlciA9IG5ldyBhZGFwdGVycy5fZGF0ZShzY2FsZU9wdHMuYWRhcHRlcnMuZGF0ZSk7XG4gICAgICAgIGFkYXB0ZXIuaW5pdChvcHRzKTtcbiAgICAgICAgbWVyZ2VJZih0aW1lLmRpc3BsYXlGb3JtYXRzLCBhZGFwdGVyLmZvcm1hdHMoKSk7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0cyA9IHtcbiAgICAgICAgICAgIHBhcnNlcjogdGltZS5wYXJzZXIsXG4gICAgICAgICAgICByb3VuZDogdGltZS5yb3VuZCxcbiAgICAgICAgICAgIGlzb1dlZWtkYXk6IHRpbWUuaXNvV2Vla2RheVxuICAgICAgICB9O1xuICAgICAgICBzdXBlci5pbml0KHNjYWxlT3B0cyk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZWQgPSBvcHRzLm5vcm1hbGl6ZWQ7XG4gICAgfVxuIHBhcnNlKHJhdywgaW5kZXgpIHtcbiAgICAgICAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2UodGhpcywgcmF3KTtcbiAgICB9XG4gICAgYmVmb3JlTGF5b3V0KCkge1xuICAgICAgICBzdXBlci5iZWZvcmVMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XG4gICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIGxhYmVsczogW10sXG4gICAgICAgICAgICBhbGw6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIGRldGVybWluZURhdGFMaW1pdHMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLl9hZGFwdGVyO1xuICAgICAgICBjb25zdCB1bml0ID0gb3B0aW9ucy50aW1lLnVuaXQgfHwgJ2RheSc7XG4gICAgICAgIGxldCB7IG1pbiAsIG1heCAsIG1pbkRlZmluZWQgLCBtYXhEZWZpbmVkICB9ID0gdGhpcy5nZXRVc2VyQm91bmRzKCk7XG4gZnVuY3Rpb24gX2FwcGx5Qm91bmRzKGJvdW5kcykge1xuICAgICAgICAgICAgaWYgKCFtaW5EZWZpbmVkICYmICFpc05hTihib3VuZHMubWluKSkge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgYm91bmRzLm1pbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1heERlZmluZWQgJiYgIWlzTmFOKGJvdW5kcy5tYXgpKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkRlZmluZWQgfHwgIW1heERlZmluZWQpIHtcbiAgICAgICAgICAgIF9hcHBseUJvdW5kcyh0aGlzLl9nZXRMYWJlbEJvdW5kcygpKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvdW5kcyAhPT0gJ3RpY2tzJyB8fCBvcHRpb25zLnRpY2tzLnNvdXJjZSAhPT0gJ2xhYmVscycpIHtcbiAgICAgICAgICAgICAgICBfYXBwbHlCb3VuZHModGhpcy5nZXRNaW5NYXgoZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtaW4gPSBpc051bWJlckZpbml0ZShtaW4pICYmICFpc05hTihtaW4pID8gbWluIDogK2FkYXB0ZXIuc3RhcnRPZihEYXRlLm5vdygpLCB1bml0KTtcbiAgICAgICAgbWF4ID0gaXNOdW1iZXJGaW5pdGUobWF4KSAmJiAhaXNOYU4obWF4KSA/IG1heCA6ICthZGFwdGVyLmVuZE9mKERhdGUubm93KCksIHVuaXQpICsgMTtcbiAgICAgICAgdGhpcy5taW4gPSBNYXRoLm1pbihtaW4sIG1heCAtIDEpO1xuICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KG1pbiArIDEsIG1heCk7XG4gICAgfVxuIF9nZXRMYWJlbEJvdW5kcygpIHtcbiAgICAgICAgY29uc3QgYXJyID0gdGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtcbiAgICAgICAgbGV0IG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgbGV0IG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1pbiA9IGFyclswXTtcbiAgICAgICAgICAgIG1heCA9IGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heFxuICAgICAgICB9O1xuICAgIH1cbiBidWlsZFRpY2tzKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgdGlja09wdHMgPSBvcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBzID0gdGlja09wdHMuc291cmNlID09PSAnbGFiZWxzJyA/IHRoaXMuZ2V0TGFiZWxUaW1lc3RhbXBzKCkgOiB0aGlzLl9nZW5lcmF0ZSgpO1xuICAgICAgICBpZiAob3B0aW9ucy5ib3VuZHMgPT09ICd0aWNrcycgJiYgdGltZXN0YW1wcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gdGhpcy5fdXNlck1pbiB8fCB0aW1lc3RhbXBzWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLl91c2VyTWF4IHx8IHRpbWVzdGFtcHNbdGltZXN0YW1wcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG4gICAgICAgIGNvbnN0IHRpY2tzID0gX2ZpbHRlckJldHdlZW4odGltZXN0YW1wcywgbWluLCBtYXgpO1xuICAgICAgICB0aGlzLl91bml0ID0gdGltZU9wdHMudW5pdCB8fCAodGlja09wdHMuYXV0b1NraXAgPyBkZXRlcm1pbmVVbml0Rm9yQXV0b1RpY2tzKHRpbWVPcHRzLm1pblVuaXQsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5fZ2V0TGFiZWxDYXBhY2l0eShtaW4pKSA6IGRldGVybWluZVVuaXRGb3JGb3JtYXR0aW5nKHRoaXMsIHRpY2tzLmxlbmd0aCwgdGltZU9wdHMubWluVW5pdCwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gICAgICAgIHRoaXMuX21ham9yVW5pdCA9ICF0aWNrT3B0cy5tYWpvci5lbmFibGVkIHx8IHRoaXMuX3VuaXQgPT09ICd5ZWFyJyA/IHVuZGVmaW5lZCA6IGRldGVybWluZU1ham9yVW5pdCh0aGlzLl91bml0KTtcbiAgICAgICAgdGhpcy5pbml0T2Zmc2V0cyh0aW1lc3RhbXBzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucmV2ZXJzZSkge1xuICAgICAgICAgICAgdGlja3MucmV2ZXJzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrc0Zyb21UaW1lc3RhbXBzKHRoaXMsIHRpY2tzLCB0aGlzLl9tYWpvclVuaXQpO1xuICAgIH1cbiAgICBhZnRlckF1dG9Ta2lwKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldEFmdGVyQXV0b3NraXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdE9mZnNldHModGhpcy50aWNrcy5tYXAoKHRpY2spPT4rdGljay52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuIGluaXRPZmZzZXRzKHRpbWVzdGFtcHMgPSBbXSkge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgZW5kID0gMDtcbiAgICAgICAgbGV0IGZpcnN0LCBsYXN0O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9mZnNldCAmJiB0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzBdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gMSAtIGZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9ICh0aGlzLmdldERlY2ltYWxGb3JWYWx1ZSh0aW1lc3RhbXBzWzFdKSAtIGZpcnN0KSAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGxhc3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVuZCA9IChsYXN0IC0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodGltZXN0YW1wc1t0aW1lc3RhbXBzLmxlbmd0aCAtIDJdKSkgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGltZXN0YW1wcy5sZW5ndGggPCAzID8gMC41IDogMC4yNTtcbiAgICAgICAgc3RhcnQgPSBfbGltaXRWYWx1ZShzdGFydCwgMCwgbGltaXQpO1xuICAgICAgICBlbmQgPSBfbGltaXRWYWx1ZShlbmQsIDAsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgZmFjdG9yOiAxIC8gKHN0YXJ0ICsgMSArIGVuZClcbiAgICAgICAgfTtcbiAgICB9XG4gX2dlbmVyYXRlKCkge1xuICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5fYWRhcHRlcjtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCB0aW1lT3B0cyA9IG9wdGlvbnMudGltZTtcbiAgICAgICAgY29uc3QgbWlub3IgPSB0aW1lT3B0cy51bml0IHx8IGRldGVybWluZVVuaXRGb3JBdXRvVGlja3ModGltZU9wdHMubWluVW5pdCwgbWluLCBtYXgsIHRoaXMuX2dldExhYmVsQ2FwYWNpdHkobWluKSk7XG4gICAgICAgIGNvbnN0IHN0ZXBTaXplID0gdmFsdWVPckRlZmF1bHQob3B0aW9ucy50aWNrcy5zdGVwU2l6ZSwgMSk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBtaW5vciA9PT0gJ3dlZWsnID8gdGltZU9wdHMuaXNvV2Vla2RheSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBoYXNXZWVrZGF5ID0gaXNOdW1iZXIod2Vla2RheSkgfHwgd2Vla2RheSA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdGlja3MgPSB7fTtcbiAgICAgICAgbGV0IGZpcnN0ID0gbWluO1xuICAgICAgICBsZXQgdGltZSwgY291bnQ7XG4gICAgICAgIGlmIChoYXNXZWVrZGF5KSB7XG4gICAgICAgICAgICBmaXJzdCA9ICthZGFwdGVyLnN0YXJ0T2YoZmlyc3QsICdpc29XZWVrJywgd2Vla2RheSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSArYWRhcHRlci5zdGFydE9mKGZpcnN0LCBoYXNXZWVrZGF5ID8gJ2RheScgOiBtaW5vcik7XG4gICAgICAgIGlmIChhZGFwdGVyLmRpZmYobWF4LCBtaW4sIG1pbm9yKSA+IDEwMDAwMCAqIHN0ZXBTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWluICsgJyBhbmQgJyArIG1heCArICcgYXJlIHRvbyBmYXIgYXBhcnQgd2l0aCBzdGVwU2l6ZSBvZiAnICsgc3RlcFNpemUgKyAnICcgKyBtaW5vcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IG9wdGlvbnMudGlja3Muc291cmNlID09PSAnZGF0YScgJiYgdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO1xuICAgICAgICBmb3IodGltZSA9IGZpcnN0LCBjb3VudCA9IDA7IHRpbWUgPCBtYXg7IHRpbWUgPSArYWRhcHRlci5hZGQodGltZSwgc3RlcFNpemUsIG1pbm9yKSwgY291bnQrKyl7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZSA9PT0gbWF4IHx8IG9wdGlvbnMuYm91bmRzID09PSAndGlja3MnIHx8IGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICBhZGRUaWNrKHRpY2tzLCB0aW1lLCB0aW1lc3RhbXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGlja3MpLnNvcnQoc29ydGVyKS5tYXAoKHgpPT4reCk7XG4gICAgfVxuIGdldExhYmVsRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgYWRhcHRlciA9IHRoaXMuX2FkYXB0ZXI7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGlmICh0aW1lT3B0cy50b29sdGlwRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gYWRhcHRlci5mb3JtYXQodmFsdWUsIHRpbWVPcHRzLnRvb2x0aXBGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGltZU9wdHMuZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpO1xuICAgIH1cbiBmb3JtYXQodmFsdWUsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gb3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzO1xuICAgICAgICBjb25zdCB1bml0ID0gdGhpcy5fdW5pdDtcbiAgICAgICAgY29uc3QgZm10ID0gZm9ybWF0IHx8IGZvcm1hdHNbdW5pdF07XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdCh2YWx1ZSwgZm10KTtcbiAgICB9XG4gX3RpY2tGb3JtYXRGdW5jdGlvbih0aW1lLCBpbmRleCwgdGlja3MsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBvcHRpb25zLnRpY2tzLmNhbGxiYWNrO1xuICAgICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZm9ybWF0dGVyLCBbXG4gICAgICAgICAgICAgICAgdGltZSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICB0aWNrc1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IG9wdGlvbnMudGltZS5kaXNwbGF5Rm9ybWF0cztcbiAgICAgICAgY29uc3QgdW5pdCA9IHRoaXMuX3VuaXQ7XG4gICAgICAgIGNvbnN0IG1ham9yVW5pdCA9IHRoaXMuX21ham9yVW5pdDtcbiAgICAgICAgY29uc3QgbWlub3JGb3JtYXQgPSB1bml0ICYmIGZvcm1hdHNbdW5pdF07XG4gICAgICAgIGNvbnN0IG1ham9yRm9ybWF0ID0gbWFqb3JVbml0ICYmIGZvcm1hdHNbbWFqb3JVbml0XTtcbiAgICAgICAgY29uc3QgdGljayA9IHRpY2tzW2luZGV4XTtcbiAgICAgICAgY29uc3QgbWFqb3IgPSBtYWpvclVuaXQgJiYgbWFqb3JGb3JtYXQgJiYgdGljayAmJiB0aWNrLm1ham9yO1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRhcHRlci5mb3JtYXQodGltZSwgZm9ybWF0IHx8IChtYWpvciA/IG1ham9yRm9ybWF0IDogbWlub3JGb3JtYXQpKTtcbiAgICB9XG4gZ2VuZXJhdGVUaWNrTGFiZWxzKHRpY2tzKSB7XG4gICAgICAgIGxldCBpLCBpbGVuLCB0aWNrO1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aWNrcy5sZW5ndGg7IGkgPCBpbGVuOyArK2kpe1xuICAgICAgICAgICAgdGljayA9IHRpY2tzW2ldO1xuICAgICAgICAgICAgdGljay5sYWJlbCA9IHRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbih0aWNrLnZhbHVlLCBpLCB0aWNrcyk7XG4gICAgICAgIH1cbiAgICB9XG4gZ2V0RGVjaW1hbEZvclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IE5hTiA6ICh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICB9XG4gZ2V0UGl4ZWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXREZWNpbWFsRm9yVmFsdWUodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKG9mZnNldHMuc3RhcnQgKyBwb3MpICogb2Zmc2V0cy5mYWN0b3IpO1xuICAgIH1cbiBnZXRWYWx1ZUZvclBpeGVsKHBpeGVsKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSB0aGlzLl9vZmZzZXRzO1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldERlY2ltYWxGb3JQaXhlbChwaXhlbCkgLyBvZmZzZXRzLmZhY3RvciAtIG9mZnNldHMuZW5kO1xuICAgICAgICByZXR1cm4gdGhpcy5taW4gKyBwb3MgKiAodGhpcy5tYXggLSB0aGlzLm1pbik7XG4gICAgfVxuIF9nZXRMYWJlbFNpemUobGFiZWwpIHtcbiAgICAgICAgY29uc3QgdGlja3NPcHRzID0gdGhpcy5vcHRpb25zLnRpY2tzO1xuICAgICAgICBjb25zdCB0aWNrTGFiZWxXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aDtcbiAgICAgICAgY29uc3QgYW5nbGUgPSB0b1JhZGlhbnModGhpcy5pc0hvcml6b250YWwoKSA/IHRpY2tzT3B0cy5tYXhSb3RhdGlvbiA6IHRpY2tzT3B0cy5taW5Sb3RhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvc1JvdGF0aW9uID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBjb25zdCBzaW5Sb3RhdGlvbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgICAgY29uc3QgdGlja0ZvbnRTaXplID0gdGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5zaXplO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdzogdGlja0xhYmVsV2lkdGggKiBjb3NSb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIHNpblJvdGF0aW9uLFxuICAgICAgICAgICAgaDogdGlja0xhYmVsV2lkdGggKiBzaW5Sb3RhdGlvbiArIHRpY2tGb250U2l6ZSAqIGNvc1JvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuIF9nZXRMYWJlbENhcGFjaXR5KGV4YW1wbGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IHRpbWVPcHRzID0gdGhpcy5vcHRpb25zLnRpbWU7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXRzID0gdGltZU9wdHMuZGlzcGxheUZvcm1hdHM7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGRpc3BsYXlGb3JtYXRzW3RpbWVPcHRzLnVuaXRdIHx8IGRpc3BsYXlGb3JtYXRzLm1pbGxpc2Vjb25kO1xuICAgICAgICBjb25zdCBleGFtcGxlTGFiZWwgPSB0aGlzLl90aWNrRm9ybWF0RnVuY3Rpb24oZXhhbXBsZVRpbWUsIDAsIHRpY2tzRnJvbVRpbWVzdGFtcHModGhpcywgW1xuICAgICAgICAgICAgZXhhbXBsZVRpbWVcbiAgICAgICAgXSwgdGhpcy5fbWFqb3JVbml0KSwgZm9ybWF0KTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2dldExhYmVsU2l6ZShleGFtcGxlTGFiZWwpO1xuICAgICAgICBjb25zdCBjYXBhY2l0eSA9IE1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKSA/IHRoaXMud2lkdGggLyBzaXplLncgOiB0aGlzLmhlaWdodCAvIHNpemUuaCkgLSAxO1xuICAgICAgICByZXR1cm4gY2FwYWNpdHkgPiAwID8gY2FwYWNpdHkgOiAxO1xuICAgIH1cbiBnZXREYXRhVGltZXN0YW1wcygpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5kYXRhIHx8IFtdO1xuICAgICAgICBsZXQgaSwgaWxlbjtcbiAgICAgICAgaWYgKHRpbWVzdGFtcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXRhcyA9IHRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtcbiAgICAgICAgaWYgKHRoaXMuX25vcm1hbGl6ZWQgJiYgbWV0YXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuZGF0YSA9IG1ldGFzWzBdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGZvcihpID0gMCwgaWxlbiA9IG1ldGFzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGltZXN0YW1wcy5jb25jYXQobWV0YXNbaV0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZS5kYXRhID0gdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIGdldExhYmVsVGltZXN0YW1wcygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2NhY2hlLmxhYmVscyB8fCBbXTtcbiAgICAgICAgbGV0IGksIGlsZW47XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKTtcbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gbGFiZWxzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICB0aW1lc3RhbXBzLnB1c2gocGFyc2UodGhpcywgbGFiZWxzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxhYmVscyA9IHRoaXMuX25vcm1hbGl6ZWQgPyB0aW1lc3RhbXBzIDogdGhpcy5ub3JtYWxpemUodGltZXN0YW1wcyk7XG4gICAgfVxuIG5vcm1hbGl6ZSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIF9hcnJheVVuaXF1ZSh2YWx1ZXMuc29ydChzb3J0ZXIpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlKHRhYmxlLCB2YWwsIHJldmVyc2UpIHtcbiAgICBsZXQgbG8gPSAwO1xuICAgIGxldCBoaSA9IHRhYmxlLmxlbmd0aCAtIDE7XG4gICAgbGV0IHByZXZTb3VyY2UsIG5leHRTb3VyY2UsIHByZXZUYXJnZXQsIG5leHRUYXJnZXQ7XG4gICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgaWYgKHZhbCA+PSB0YWJsZVtsb10ucG9zICYmIHZhbCA8PSB0YWJsZVtoaV0ucG9zKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAncG9zJywgdmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgKHsgcG9zOiBwcmV2U291cmNlICwgdGltZTogcHJldlRhcmdldCAgfSA9IHRhYmxlW2xvXSk7XG4gICAgICAgICh7IHBvczogbmV4dFNvdXJjZSAsIHRpbWU6IG5leHRUYXJnZXQgIH0gPSB0YWJsZVtoaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwgPj0gdGFibGVbbG9dLnRpbWUgJiYgdmFsIDw9IHRhYmxlW2hpXS50aW1lKSB7XG4gICAgICAgICAgICAoeyBsbyAsIGhpICB9ID0gX2xvb2t1cEJ5S2V5KHRhYmxlLCAndGltZScsIHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgICh7IHRpbWU6IHByZXZTb3VyY2UgLCBwb3M6IHByZXZUYXJnZXQgIH0gPSB0YWJsZVtsb10pO1xuICAgICAgICAoeyB0aW1lOiBuZXh0U291cmNlICwgcG9zOiBuZXh0VGFyZ2V0ICB9ID0gdGFibGVbaGldKTtcbiAgICB9XG4gICAgY29uc3Qgc3BhbiA9IG5leHRTb3VyY2UgLSBwcmV2U291cmNlO1xuICAgIHJldHVybiBzcGFuID8gcHJldlRhcmdldCArIChuZXh0VGFyZ2V0IC0gcHJldlRhcmdldCkgKiAodmFsIC0gcHJldlNvdXJjZSkgLyBzcGFuIDogcHJldlRhcmdldDtcbn1cbmNsYXNzIFRpbWVTZXJpZXNTY2FsZSBleHRlbmRzIFRpbWVTY2FsZSB7XG4gICAgc3RhdGljIGlkID0gJ3RpbWVzZXJpZXMnO1xuIHN0YXRpYyBkZWZhdWx0cyA9IFRpbWVTY2FsZS5kZWZhdWx0cztcbiBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgIHRoaXMuX3RhYmxlID0gW107XG4gICAgICAgICB0aGlzLl9taW5Qb3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gdW5kZWZpbmVkO1xuICAgIH1cbiBpbml0T2Zmc2V0cygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3RhYmxlID0gdGhpcy5idWlsZExvb2t1cFRhYmxlKHRpbWVzdGFtcHMpO1xuICAgICAgICB0aGlzLl9taW5Qb3MgPSBpbnRlcnBvbGF0ZSh0YWJsZSwgdGhpcy5taW4pO1xuICAgICAgICB0aGlzLl90YWJsZVJhbmdlID0gaW50ZXJwb2xhdGUodGFibGUsIHRoaXMubWF4KSAtIHRoaXMuX21pblBvcztcbiAgICAgICAgc3VwZXIuaW5pdE9mZnNldHModGltZXN0YW1wcyk7XG4gICAgfVxuIGJ1aWxkTG9va3VwVGFibGUodGltZXN0YW1wcykge1xuICAgICAgICBjb25zdCB7IG1pbiAsIG1heCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IHRhYmxlID0gW107XG4gICAgICAgIGxldCBpLCBpbGVuLCBwcmV2LCBjdXJyLCBuZXh0O1xuICAgICAgICBmb3IoaSA9IDAsIGlsZW4gPSB0aW1lc3RhbXBzLmxlbmd0aDsgaSA8IGlsZW47ICsraSl7XG4gICAgICAgICAgICBjdXJyID0gdGltZXN0YW1wc1tpXTtcbiAgICAgICAgICAgIGlmIChjdXJyID49IG1pbiAmJiBjdXJyIDw9IG1heCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY3Vycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtaW4sXG4gICAgICAgICAgICAgICAgICAgIHBvczogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aW1lOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgIHBvczogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGkgPSAwLCBpbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgaWxlbjsgKytpKXtcbiAgICAgICAgICAgIG5leHQgPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICBwcmV2ID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgY3VyciA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKE1hdGgucm91bmQoKG5leHQgKyBwcmV2KSAvIDIpICE9PSBjdXJyKSB7XG4gICAgICAgICAgICAgICAgdGFibGUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IGN1cnIsXG4gICAgICAgICAgICAgICAgICAgIHBvczogaSAvIChpbGVuIC0gMSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuIF9nZW5lcmF0ZSgpIHtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW47XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4O1xuICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHN1cGVyLmdldERhdGFUaW1lc3RhbXBzKCk7XG4gICAgICAgIGlmICghdGltZXN0YW1wcy5pbmNsdWRlcyhtaW4pIHx8ICF0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5zcGxpY2UoMCwgMCwgbWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRpbWVzdGFtcHMuaW5jbHVkZXMobWF4KSB8fCB0aW1lc3RhbXBzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGltZXN0YW1wcy5wdXNoKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHMuc29ydCgoYSwgYik9PmEgLSBiKTtcbiAgICB9XG4gX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLl9jYWNoZS5hbGwgfHwgW107XG4gICAgICAgIGlmICh0aW1lc3RhbXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0RGF0YVRpbWVzdGFtcHMoKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsVGltZXN0YW1wcygpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggJiYgbGFiZWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5ub3JtYWxpemUoZGF0YS5jb25jYXQobGFiZWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcHMgPSBkYXRhLmxlbmd0aCA/IGRhdGEgOiBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aW1lc3RhbXBzID0gdGhpcy5fY2FjaGUuYWxsID0gdGltZXN0YW1wcztcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHM7XG4gICAgfVxuIGdldERlY2ltYWxGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKGludGVycG9sYXRlKHRoaXMuX3RhYmxlLCB2YWx1ZSkgLSB0aGlzLl9taW5Qb3MpIC8gdGhpcy5fdGFibGVSYW5nZTtcbiAgICB9XG4gZ2V0VmFsdWVGb3JQaXhlbChwaXhlbCkge1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy5fb2Zmc2V0cztcbiAgICAgICAgY29uc3QgZGVjaW1hbCA9IHRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKHBpeGVsKSAvIG9mZnNldHMuZmFjdG9yIC0gb2Zmc2V0cy5lbmQ7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0aGlzLl90YWJsZSwgZGVjaW1hbCAqIHRoaXMuX3RhYmxlUmFuZ2UgKyB0aGlzLl9taW5Qb3MsIHRydWUpO1xuICAgIH1cbn1cblxudmFyIHNjYWxlcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbl9fcHJvdG9fXzogbnVsbCxcbkNhdGVnb3J5U2NhbGU6IENhdGVnb3J5U2NhbGUsXG5MaW5lYXJTY2FsZTogTGluZWFyU2NhbGUsXG5Mb2dhcml0aG1pY1NjYWxlOiBMb2dhcml0aG1pY1NjYWxlLFxuUmFkaWFsTGluZWFyU2NhbGU6IFJhZGlhbExpbmVhclNjYWxlLFxuVGltZVNjYWxlOiBUaW1lU2NhbGUsXG5UaW1lU2VyaWVzU2NhbGU6IFRpbWVTZXJpZXNTY2FsZVxufSk7XG5cbmNvbnN0IHJlZ2lzdGVyYWJsZXMgPSBbXG4gICAgY29udHJvbGxlcnMsXG4gICAgZWxlbWVudHMsXG4gICAgcGx1Z2lucyxcbiAgICBzY2FsZXNcbl07XG5cbmV4cG9ydCB7IEFuaW1hdGlvbiwgQW5pbWF0aW9ucywgQXJjRWxlbWVudCwgQmFyQ29udHJvbGxlciwgQmFyRWxlbWVudCwgQmFzZVBsYXRmb3JtLCBCYXNpY1BsYXRmb3JtLCBCdWJibGVDb250cm9sbGVyLCBDYXRlZ29yeVNjYWxlLCBDaGFydCwgcGx1Z2luX2NvbG9ycyBhcyBDb2xvcnMsIERhdGFzZXRDb250cm9sbGVyLCBwbHVnaW5fZGVjaW1hdGlvbiBhcyBEZWNpbWF0aW9uLCBEb21QbGF0Zm9ybSwgRG91Z2hudXRDb250cm9sbGVyLCBFbGVtZW50LCBpbmRleCBhcyBGaWxsZXIsIEludGVyYWN0aW9uLCBwbHVnaW5fbGVnZW5kIGFzIExlZ2VuZCwgTGluZUNvbnRyb2xsZXIsIExpbmVFbGVtZW50LCBMaW5lYXJTY2FsZSwgTG9nYXJpdGhtaWNTY2FsZSwgUGllQ29udHJvbGxlciwgUG9pbnRFbGVtZW50LCBQb2xhckFyZWFDb250cm9sbGVyLCBSYWRhckNvbnRyb2xsZXIsIFJhZGlhbExpbmVhclNjYWxlLCBTY2FsZSwgU2NhdHRlckNvbnRyb2xsZXIsIHBsdWdpbl9zdWJ0aXRsZSBhcyBTdWJUaXRsZSwgVGlja3MsIFRpbWVTY2FsZSwgVGltZVNlcmllc1NjYWxlLCBwbHVnaW5fdGl0bGUgYXMgVGl0bGUsIHBsdWdpbl90b29sdGlwIGFzIFRvb2x0aXAsIGFkYXB0ZXJzIGFzIF9hZGFwdGVycywgX2RldGVjdFBsYXRmb3JtLCBhbmltYXRvciwgY29udHJvbGxlcnMsIGRlZmF1bHRzLCBlbGVtZW50cywgbGF5b3V0cywgcGx1Z2lucywgcmVnaXN0ZXJhYmxlcywgcmVnaXN0cnksIHNjYWxlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhcnQuanMubWFwXG4iLCJpbXBvcnQge0NoYXJ0LCByZWdpc3RlcmFibGVzfSBmcm9tICcuLi9kaXN0L2NoYXJ0LmpzJztcblxuQ2hhcnQucmVnaXN0ZXIoLi4ucmVnaXN0ZXJhYmxlcyk7XG5cbmV4cG9ydCAqIGZyb20gJy4uL2Rpc3QvY2hhcnQuanMnO1xuZXhwb3J0IGRlZmF1bHQgQ2hhcnQ7XG4iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJleHBvcnQgKiBmcm9tIFwiLi9lbnVtcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdywgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckJhc2UgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IiwiLyohXG4gICogQm9vdHN0cmFwIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKCk7XG5jb25zdCBEYXRhID0ge1xuICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZW1lbnQsIG5ldyBNYXAoKSk7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG5cbiAgICAvLyBtYWtlIGl0IGNsZWFyIHdlIG9ubHkgd2FudCBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnRcbiAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKTtcbiAgfSxcbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICByZW1vdmUoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpO1xuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMTAwMDAwMDtcbmNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMDtcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnO1xuXG4vKipcbiAqIFByb3Blcmx5IGVzY2FwZSBJRHMgc2VsZWN0b3JzIHRvIGhhbmRsZSB3ZWlyZCBJRHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgcGFyc2VTZWxlY3RvciA9IHNlbGVjdG9yID0+IHtcbiAgaWYgKHNlbGVjdG9yICYmIHdpbmRvdy5DU1MgJiYgd2luZG93LkNTUy5lc2NhcGUpIHtcbiAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIG5lZWRzIGVzY2FwaW5nIHRvIGhhbmRsZSBJRHMgKGh0bWw1KykgY29udGFpbmluZyBmb3IgaW5zdGFuY2UgL1xuICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvIyhbXlxcc1wiIyddKykvZywgKG1hdGNoLCBpZCkgPT4gYCMke0NTUy5lc2NhcGUoaWQpfWApO1xuICB9XG4gIHJldHVybiBzZWxlY3Rvcjtcbn07XG5cbi8vIFNob3V0LW91dCBBbmd1cyBDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxuY29uc3QgdG9UeXBlID0gb2JqZWN0ID0+IHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgJHtvYmplY3R9YDtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRCk7XG4gIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuICByZXR1cm4gcHJlZml4O1xufTtcbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgbGV0IHtcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgdHJhbnNpdGlvbkRlbGF5XG4gIH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EZWxheSA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSk7XG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXTtcbiAgdHJhbnNpdGlvbkRlbGF5ID0gdHJhbnNpdGlvbkRlbGF5LnNwbGl0KCcsJylbMF07XG4gIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG59O1xuY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpO1xufTtcbmNvbnN0IGlzRWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbMF07XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnO1xufTtcbmNvbnN0IGdldEVsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICBpZiAoaXNFbGVtZW50KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0LmpxdWVyeSA/IG9iamVjdFswXSA6IG9iamVjdDtcbiAgfVxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJzZVNlbGVjdG9yKG9iamVjdCkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJc1Zpc2libGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ3Zpc2libGUnO1xuICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJyk7XG4gIGlmICghY2xvc2VkRGV0YWlscykge1xuICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICB9XG4gIGlmIChjbG9zZWREZXRhaWxzICE9PSBlbGVtZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnQuY2xvc2VzdCgnc3VtbWFyeScpO1xuICAgIGlmIChzdW1tYXJ5ICYmIHN1bW1hcnkucGFyZW50Tm9kZSAhPT0gY2xvc2VkRGV0YWlscykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbn07XG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudC5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSc7XG59O1xuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcbiAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogbnVsbDtcbiAgfVxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG59O1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFRyaWNrIHRvIHJlc3RhcnQgYW4gZWxlbWVudCdzIGFuaW1hdGlvblxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4gdm9pZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cuY2hhcmlzdGhlby5pby9ibG9nLzIwMjEvMDIvcmVzdGFydC1hLWNzcy1hbmltYXRpb24td2l0aC1qYXZhc2NyaXB0LyNyZXN0YXJ0aW5nLWEtY3NzLWFuaW1hdGlvblxuICovXG5jb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG59O1xuY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICBpZiAod2luZG93LmpRdWVyeSAmJiAhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnMtbm8tanF1ZXJ5JykpIHtcbiAgICByZXR1cm4gd2luZG93LmpRdWVyeTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW107XG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnO1xuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRTtcbiAgICAgIGNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bbmFtZV07XG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW47XG4gICAgICAkLmZuW25hbWVdLm5vQ29uZmxpY3QgPSAoKSA9PiB7XG4gICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGV4ZWN1dGUgPSAocG9zc2libGVDYWxsYmFjaywgYXJncyA9IFtdLCBkZWZhdWx0VmFsdWUgPSBwb3NzaWJsZUNhbGxiYWNrKSA9PiB7XG4gIHJldHVybiB0eXBlb2YgcG9zc2libGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IHBvc3NpYmxlQ2FsbGJhY2soLi4uYXJncykgOiBkZWZhdWx0VmFsdWU7XG59O1xuY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICBpZiAoIXdhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGR1cmF0aW9uUGFkZGluZyA9IDU7XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmc7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgY29uc3QgaGFuZGxlciA9ICh7XG4gICAgdGFyZ2V0XG4gIH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICB9O1xuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KTtcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHByZXZpb3VzL25leHQgZWxlbWVudCBvZiBhIGxpc3QuXG4gKlxuICogQHBhcmFtIHthcnJheX0gbGlzdCAgICBUaGUgbGlzdCBvZiBlbGVtZW50c1xuICogQHBhcmFtIGFjdGl2ZUVsZW1lbnQgICBUaGUgYWN0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAqIEBwYXJhbSBpc0N5Y2xlQWxsb3dlZFxuICogQHJldHVybiB7RWxlbWVudHxlbGVtfSBUaGUgcHJvcGVyIGVsZW1lbnRcbiAqL1xuY29uc3QgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQgPSAobGlzdCwgYWN0aXZlRWxlbWVudCwgc2hvdWxkR2V0TmV4dCwgaXNDeWNsZUFsbG93ZWQpID0+IHtcbiAgY29uc3QgbGlzdExlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudCk7XG5cbiAgLy8gaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QgcmV0dXJuIGFuIGVsZW1lbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiAhc2hvdWxkR2V0TmV4dCAmJiBpc0N5Y2xlQWxsb3dlZCA/IGxpc3RbbGlzdExlbmd0aCAtIDFdIDogbGlzdFswXTtcbiAgfVxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xO1xuICBpZiAoaXNDeWNsZUFsbG93ZWQpIHtcbiAgICBpbmRleCA9IChpbmRleCArIGxpc3RMZW5ndGgpICUgbGlzdExlbmd0aDtcbiAgfVxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV07XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgbmFtZXNwYWNlUmVnZXggPSAvW14uXSooPz1cXC4uKilcXC58LiovO1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovO1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskLztcbmNvbnN0IGV2ZW50UmVnaXN0cnkgPSB7fTsgLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDE7XG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59O1xuY29uc3QgbmF0aXZlRXZlbnRzID0gbmV3IFNldChbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNldXAnLCAnbW91c2Vkb3duJywgJ2NvbnRleHRtZW51JywgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnLCAnbW91c2VvdmVyJywgJ21vdXNlb3V0JywgJ21vdXNlbW92ZScsICdzZWxlY3RzdGFydCcsICdzZWxlY3RlbmQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdvcmllbnRhdGlvbmNoYW5nZScsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVybW92ZScsICdwb2ludGVydXAnLCAncG9pbnRlcmxlYXZlJywgJ3BvaW50ZXJjYW5jZWwnLCAnZ2VzdHVyZXN0YXJ0JywgJ2dlc3R1cmVjaGFuZ2UnLCAnZ2VzdHVyZWVuZCcsICdmb2N1cycsICdibHVyJywgJ2NoYW5nZScsICdyZXNldCcsICdzZWxlY3QnLCAnc3VibWl0JywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnbG9hZCcsICd1bmxvYWQnLCAnYmVmb3JldW5sb2FkJywgJ3Jlc2l6ZScsICdtb3ZlJywgJ0RPTUNvbnRlbnRMb2FkZWQnLCAncmVhZHlzdGF0ZWNoYW5nZScsICdlcnJvcicsICdhYm9ydCcsICdzY3JvbGwnXSk7XG5cbi8qKlxuICogUHJpdmF0ZSBtZXRob2RzXG4gKi9cblxuZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gdWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrKztcbn1cbmZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudCk7XG4gIGVsZW1lbnQudWlkRXZlbnQgPSB1aWQ7XG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fTtcbiAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXTtcbn1cbmZ1bmN0aW9uIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICBkZWxlZ2F0ZVRhcmdldDogZWxlbWVudFxuICAgIH0pO1xuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbik7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50LCBbZXZlbnRdKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICBmb3IgKGxldCB7XG4gICAgICB0YXJnZXRcbiAgICB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICBmb3IgKGNvbnN0IGRvbUVsZW1lbnQgb2YgZG9tRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IHRhcmdldCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgICBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBjYWxsYWJsZSwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICBjb25zdCBpc0RlbGVnYXRlZCA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJztcbiAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gIGNvbnN0IGNhbGxhYmxlID0gaXNEZWxlZ2F0ZWQgPyBkZWxlZ2F0aW9uRnVuY3Rpb24gOiBoYW5kbGVyIHx8IGRlbGVnYXRpb25GdW5jdGlvbjtcbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudCk7XG4gIGlmICghbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpKSB7XG4gICAgdHlwZUV2ZW50ID0gb3JpZ2luYWxUeXBlRXZlbnQ7XG4gIH1cbiAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF07XG59XG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIG9uZU9mZikge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgIGNvbnN0IHdyYXBGdW5jdGlvbiA9IGZuID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGNhbGxhYmxlID0gd3JhcEZ1bmN0aW9uKGNhbGxhYmxlKTtcbiAgfVxuICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICBjb25zdCBoYW5kbGVycyA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IChldmVudHNbdHlwZUV2ZW50XSA9IHt9KTtcbiAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gIGlmIChwcmV2aW91c0Z1bmN0aW9uKSB7XG4gICAgcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgPSBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiAmJiBvbmVPZmY7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChjYWxsYWJsZSwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKTtcbiAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/IGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGNhbGxhYmxlKSA6IGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpO1xuICBmbi5kZWxlZ2F0aW9uU2VsZWN0b3IgPSBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsO1xuICBmbi5jYWxsYWJsZSA9IGNhbGxhYmxlO1xuICBmbi5vbmVPZmYgPSBvbmVPZmY7XG4gIGZuLnVpZEV2ZW50ID0gdWlkO1xuICBoYW5kbGVyc1t1aWRdID0gZm47XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBpc0RlbGVnYXRlZCk7XG59XG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgaWYgKCFmbikge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgQm9vbGVhbihkZWxlZ2F0aW9uU2VsZWN0b3IpKTtcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XTtcbn1cbmZ1bmN0aW9uIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgbmFtZXNwYWNlKSB7XG4gIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpO1xuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudDtcbn1cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgZmFsc2UpO1xuICB9LFxuICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgdHJ1ZSk7XG4gIH0sXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50O1xuICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fTtcbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKTtcbiAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudEV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgZWxlbWVudEV2ZW50LCBvcmlnaW5hbFR5cGVFdmVudC5zbGljZSgxKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleUhhbmRsZXJzLCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJyk7XG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgdHJpZ2dlcihlbGVtZW50LCBldmVudCwgYXJncykge1xuICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgIGNvbnN0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChldmVudCk7XG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50O1xuICAgIGxldCBqUXVlcnlFdmVudCA9IG51bGw7XG4gICAgbGV0IGJ1YmJsZXMgPSB0cnVlO1xuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWU7XG4gICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKTtcbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudCk7XG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICBuYXRpdmVEaXNwYXRjaCA9ICFqUXVlcnlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgIH1cbiAgICBjb25zdCBldnQgPSBoeWRyYXRlT2JqKG5ldyBFdmVudChldmVudCwge1xuICAgICAgYnViYmxlcyxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KSwgYXJncyk7XG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgIH1cbiAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgalF1ZXJ5RXZlbnQpIHtcbiAgICAgIGpRdWVyeUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiBldnQ7XG4gIH1cbn07XG5mdW5jdGlvbiBoeWRyYXRlT2JqKG9iaiwgbWV0YSA9IHt9KSB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGEpKSB7XG4gICAgdHJ5IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vbWFuaXB1bGF0b3IuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcbiAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApO1xufVxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKTtcbiAgfSxcbiAgcmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKTtcbiAgfSxcbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG4gICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgYnNLZXlzKSB7XG4gICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJyk7XG4gICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpO1xuICAgICAgYXR0cmlidXRlc1twdXJlS2V5XSA9IG5vcm1hbGl6ZURhdGEoZWxlbWVudC5kYXRhc2V0W2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfSxcbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29uZmlnIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgc3RhdGljIG1ldGhvZCBcIk5BTUVcIiwgZm9yIGVhY2ggY29tcG9uZW50IScpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBqc29uQ29uZmlnID0gaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCAnY29uZmlnJykgOiB7fTsgLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICB9XG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgZXhwZWN0ZWRUeXBlc10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnVHlwZXMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1twcm9wZXJ0eV07XG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKTtcbiAgICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuMyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIERhdGEucmVtb3ZlKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBudWxsO1xuICAgIH1cbiAgfVxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgdGhpcy5fZWxlbWVudCk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSk7XG4gIH1cbiAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpO1xuICB9XG4gIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAgICByZXR1cm4gVkVSU0lPTjtcbiAgfVxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YDtcbiAgfVxuICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YDtcbiAgfVxuICBzdGF0aWMgZXZlbnROYW1lKG5hbWUpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0ke3RoaXMuRVZFTlRfS0VZfWA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9zZWxlY3Rvci1lbmdpbmUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBnZXRTZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKTtcbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuXG4gICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAvLyBzbyBldmVyeXRoaW5nIHN0YXJ0aW5nIHdpdGggYCNgIG9yIGAuYC4gSWYgYSBcInJlYWxcIiBVUkwgaXMgdXNlZCBhcyB0aGUgc2VsZWN0b3IsXG4gICAgLy8gYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgIHdpbGwgcmlnaHRmdWxseSBjb21wbGFpbiBpdCBpcyBpbnZhbGlkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgaWYgKCFocmVmQXR0cmlidXRlIHx8ICFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YDtcbiAgICB9XG4gICAgc2VsZWN0b3IgPSBocmVmQXR0cmlidXRlICYmIGhyZWZBdHRyaWJ1dGUgIT09ICcjJyA/IGhyZWZBdHRyaWJ1dGUudHJpbSgpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3IgPyBzZWxlY3Rvci5zcGxpdCgnLCcpLm1hcChzZWwgPT4gcGFyc2VTZWxlY3RvcihzZWwpKS5qb2luKCcsJykgOiBudWxsO1xufTtcbmNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICBmaW5kKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKTtcbiAgfSxcbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpO1xuICB9LFxuICBjaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uZWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGNoaWxkID0+IGNoaWxkLm1hdGNoZXMoc2VsZWN0b3IpKTtcbiAgfSxcbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50cztcbiAgfSxcbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgIGlmIChwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW3ByZXZpb3VzXTtcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuICAvLyBUT0RPOiB0aGlzIGlzIG5vdyB1bnVzZWQ7IHJlbW92ZSBsYXRlciBhbG9uZyB3aXRoIHByZXYoKVxuICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IG5leHQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFsnYScsICdidXR0b24nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnc2VsZWN0JywgJ2RldGFpbHMnLCAnW3RhYmluZGV4XScsICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSddLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKTtcbiAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaXNEaXNhYmxlZChlbCkgJiYgaXNWaXNpYmxlKGVsKSk7XG4gIH0sXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbDtcbiAgfSxcbiAgZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKSA6IFtdO1xuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWA7XG4gIGNvbnN0IG5hbWUgPSBjb21wb25lbnQuTkFNRTtcbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYWxlcnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRmID0gJ2FsZXJ0JztcbmNvbnN0IERBVEFfS0VZJGEgPSAnYnMuYWxlcnQnO1xuY29uc3QgRVZFTlRfS0VZJGIgPSBgLiR7REFUQV9LRVkkYX1gO1xuY29uc3QgRVZFTlRfQ0xPU0UgPSBgY2xvc2Uke0VWRU5UX0tFWSRifWA7XG5jb25zdCBFVkVOVF9DTE9TRUQgPSBgY2xvc2VkJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDUgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckOCA9ICdzaG93JztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQWxlcnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBjbG9zZSgpIHtcbiAgICBjb25zdCBjbG9zZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0UpO1xuICAgIGlmIChjbG9zZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ4KTtcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDUpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5fZGVzdHJveUVsZW1lbnQoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kZXN0cm95RWxlbWVudCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRCk7XG4gICAgdGhpcy5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBBbGVydC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihBbGVydCwgJ2Nsb3NlJyk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEFsZXJ0KTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGUgPSAnYnV0dG9uJztcbmNvbnN0IERBVEFfS0VZJDkgPSAnYnMuYnV0dG9uJztcbmNvbnN0IEVWRU5UX0tFWSRhID0gYC4ke0RBVEFfS0VZJDl9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ2ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQzID0gJ2FjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImJ1dHRvblwiXSc7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ2ID0gYGNsaWNrJHtFVkVOVF9LRVkkYX0ke0RBVEFfQVBJX0tFWSQ2fWA7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRlO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUkMykpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ2LCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1LCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGJ1dHRvbiA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUpO1xuICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UoYnV0dG9uKTtcbiAgZGF0YS50b2dnbGUoKTtcbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zd2lwZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGQgPSAnc3dpcGUnO1xuY29uc3QgRVZFTlRfS0VZJDkgPSAnLmJzLnN3aXBlJztcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG5jb25zdCBQT0lOVEVSX1RZUEVfUEVOID0gJ3Blbic7XG5jb25zdCBDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQgPSAncG9pbnRlci1ldmVudCc7XG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MDtcbmNvbnN0IERlZmF1bHQkYyA9IHtcbiAgZW5kQ2FsbGJhY2s6IG51bGwsXG4gIGxlZnRDYWxsYmFjazogbnVsbCxcbiAgcmlnaHRDYWxsYmFjazogbnVsbFxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGMgPSB7XG4gIGVuZENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgbGVmdENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgcmlnaHRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fZGVsdGFYID0gMDtcbiAgICB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyA9IEJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudCk7XG4gICAgdGhpcy5faW5pdEV2ZW50cygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRjO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRkO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVkkOSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9zdGFydChldmVudCkge1xuICAgIGlmICghdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYO1xuICAgIH1cbiAgfVxuICBfZW5kKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5fZGVsdGFYO1xuICAgIH1cbiAgICB0aGlzLl9oYW5kbGVTd2lwZSgpO1xuICAgIGV4ZWN1dGUodGhpcy5fY29uZmlnLmVuZENhbGxiYWNrKTtcbiAgfVxuICBfbW92ZShldmVudCkge1xuICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxID8gMCA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgfVxuICBfaGFuZGxlU3dpcGUoKSB7XG4gICAgY29uc3QgYWJzRGVsdGFYID0gTWF0aC5hYnModGhpcy5fZGVsdGFYKTtcbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBhYnNEZWx0YVggLyB0aGlzLl9kZWx0YVg7XG4gICAgdGhpcy5fZGVsdGFYID0gMDtcbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGVjdXRlKGRpcmVjdGlvbiA+IDAgPyB0aGlzLl9jb25maWcucmlnaHRDYWxsYmFjayA6IHRoaXMuX2NvbmZpZy5sZWZ0Q2FsbGJhY2spO1xuICB9XG4gIF9pbml0RXZlbnRzKCkge1xuICAgIGlmICh0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJET1dOLCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJVUCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UKTtcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIU1RBUlQsIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hFTkQsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgIH1cbiAgfVxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGlzU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRjID0gJ2Nhcm91c2VsJztcbmNvbnN0IERBVEFfS0VZJDggPSAnYnMuY2Fyb3VzZWwnO1xuY29uc3QgRVZFTlRfS0VZJDggPSBgLiR7REFUQV9LRVkkOH1gO1xuY29uc3QgREFUQV9BUElfS0VZJDUgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEFSUk9XX0xFRlRfS0VZJDEgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSQxID0gJ0Fycm93UmlnaHQnO1xuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMDsgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5cbmNvbnN0IE9SREVSX05FWFQgPSAnbmV4dCc7XG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnO1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCc7XG5jb25zdCBESVJFQ1RJT05fUklHSFQgPSAncmlnaHQnO1xuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOJDEgPSBga2V5ZG93biR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIkMSA9IGBtb3VzZWVudGVyJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSQxID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMyA9IGBsb2FkJHtFVkVOVF9LRVkkOH0ke0RBVEFfQVBJX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1ID0gYGNsaWNrJHtFVkVOVF9LRVkkOH0ke0RBVEFfQVBJX0tFWSQ1fWA7XG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDIgPSAnYWN0aXZlJztcbmNvbnN0IENMQVNTX05BTUVfU0xJREUgPSAnc2xpZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfTkVYVCA9ICdjYXJvdXNlbC1pdGVtLW5leHQnO1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldic7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkUgPSAnLmFjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9JVEVNID0gU0VMRUNUT1JfQUNUSVZFICsgU0VMRUNUT1JfSVRFTTtcbmNvbnN0IFNFTEVDVE9SX0lURU1fSU1HID0gJy5jYXJvdXNlbC1pdGVtIGltZyc7XG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b10nO1xuY29uc3QgU0VMRUNUT1JfREFUQV9SSURFID0gJ1tkYXRhLWJzLXJpZGU9XCJjYXJvdXNlbFwiXSc7XG5jb25zdCBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBbQVJST1dfTEVGVF9LRVkkMV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWSQxXTogRElSRUNUSU9OX0xFRlRcbn07XG5jb25zdCBEZWZhdWx0JGIgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHJpZGU6IGZhbHNlLFxuICB0b3VjaDogdHJ1ZSxcbiAgd3JhcDogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGIgPSB7XG4gIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsXG4gIC8vIFRPRE86djYgcmVtb3ZlIGJvb2xlYW4gc3VwcG9ydFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICByaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIHRvdWNoOiAnYm9vbGVhbicsXG4gIHdyYXA6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ2Fyb3VzZWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbnVsbDtcbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJpZGUgPT09IENMQVNTX05BTUVfQ0FST1VTRUwpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRiO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGI7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGM7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9ORVhUKTtcbiAgfVxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRklYTUUgVE9ETyB1c2UgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWBcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByZXYoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfUFJFVik7XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKTtcbiAgfVxuICBjeWNsZSgpIHtcbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKTtcbiAgICB0aGlzLl9pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMubmV4dFdoZW5WaXNpYmxlKCksIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gIH1cbiAgX21heWJlRW5hYmxlQ3ljbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMuY3ljbGUoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3ljbGUoKTtcbiAgfVxuICB0byhpbmRleCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXMoKTtcbiAgICBpZiAoaW5kZXggPiBpdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMudG8oaW5kZXgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fZ2V0QWN0aXZlKCkpO1xuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JkZXIgPSBpbmRleCA+IGFjdGl2ZUluZGV4ID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVY7XG4gICAgdGhpcy5fc2xpZGUob3JkZXIsIGl0ZW1zW2luZGV4XSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fc3dpcGVIZWxwZXIpIHtcbiAgICAgIHRoaXMuX3N3aXBlSGVscGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuZGVmYXVsdEludGVydmFsID0gY29uZmlnLmludGVydmFsO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOJDEsIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRU5URVIkMSwgKCkgPT4gdGhpcy5wYXVzZSgpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUxFQVZFJDEsICgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG91Y2ggJiYgU3dpcGUuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuICBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU1fSU1HLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGltZywgRVZFTlRfRFJBR19TVEFSVCwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGNvbnN0IGVuZENhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSAhPT0gJ2hvdmVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIGlmICh0aGlzLnRvdWNoVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBzd2lwZUNvbmZpZyA9IHtcbiAgICAgIGxlZnRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fTEVGVCkpLFxuICAgICAgcmlnaHRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fUklHSFQpKSxcbiAgICAgIGVuZENhbGxiYWNrOiBlbmRDYWxsQmFja1xuICAgIH07XG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBuZXcgU3dpcGUodGhpcy5fZWxlbWVudCwgc3dpcGVDb25maWcpO1xuICB9XG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XTtcbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pKTtcbiAgICB9XG4gIH1cbiAgX2dldEl0ZW1JbmRleChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1zKCkuaW5kZXhPZihlbGVtZW50KTtcbiAgfVxuICBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChpbmRleCkge1xuICAgIGlmICghdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBhY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICBhY3RpdmVJbmRpY2F0b3IucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnKTtcbiAgICBjb25zdCBuZXdBY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGBbZGF0YS1icy1zbGlkZS10bz1cIiR7aW5kZXh9XCJdYCwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO1xuICAgIGlmIChuZXdBY3RpdmVJbmRpY2F0b3IpIHtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZUludGVydmFsKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9hY3RpdmVFbGVtZW50IHx8IHRoaXMuX2dldEFjdGl2ZSgpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApO1xuICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IGVsZW1lbnRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsO1xuICB9XG4gIF9zbGlkZShvcmRlciwgZWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVDtcbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQodGhpcy5fZ2V0SXRlbXMoKSwgYWN0aXZlRWxlbWVudCwgaXNOZXh0LCB0aGlzLl9jb25maWcud3JhcCk7XG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpO1xuICAgIGNvbnN0IHRyaWdnZXJFdmVudCA9IGV2ZW50TmFtZSA9PiB7XG4gICAgICByZXR1cm4gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgZXZlbnROYW1lLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpLFxuICAgICAgICBmcm9tOiB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudCksXG4gICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNsaWRlRXZlbnQgPSB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJREUpO1xuICAgIGlmIChzbGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAvLyBUT0RPOiBjaGFuZ2UgdGVzdHMgdGhhdCB1c2UgZW1wdHkgZGl2cyB0byBhdm9pZCB0aGlzIGNoZWNrXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzQ3ljbGluZyA9IEJvb2xlYW4odGhpcy5faW50ZXJ2YWwpO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnRJbmRleCk7XG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG5leHRFbGVtZW50O1xuICAgIGNvbnN0IGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9TVEFSVCA6IENMQVNTX05BTUVfRU5EO1xuICAgIGNvbnN0IG9yZGVyQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9ORVhUIDogQ0xBU1NfTkFNRV9QUkVWO1xuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQob3JkZXJDbGFzc05hbWUpO1xuICAgIHJlZmxvdyhuZXh0RWxlbWVudCk7XG4gICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShkaXJlY3Rpb25hbENsYXNzTmFtZSwgb3JkZXJDbGFzc05hbWUpO1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQyLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJRCk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIGFjdGl2ZUVsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpO1xuICAgIH1cbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TTElERSk7XG4gIH1cbiAgX2dldEFjdGl2ZSgpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudCk7XG4gIH1cbiAgX2dldEl0ZW1zKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9jbGVhckludGVydmFsKCkge1xuICAgIGlmICh0aGlzLl9pbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX1BSRVYgOiBPUkRFUl9ORVhUO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICB9XG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fUklHSFQgOiBESVJFQ1RJT05fTEVGVDtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJykge1xuICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDUsIFNFTEVDVE9SX0RBVEFfU0xJREUsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBjYXJvdXNlbCA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJyk7XG4gIGlmIChzbGlkZUluZGV4KSB7XG4gICAgY2Fyb3VzZWwudG8oc2xpZGVJbmRleCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUodGhpcywgJ3NsaWRlJykgPT09ICduZXh0Jykge1xuICAgIGNhcm91c2VsLm5leHQoKTtcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBjYXJvdXNlbC5wcmV2KCk7XG4gIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMywgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfUklERSk7XG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY2Fyb3VzZWxzKSB7XG4gICAgQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDYXJvdXNlbCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBjb2xsYXBzZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGIgPSAnY29sbGFwc2UnO1xuY29uc3QgREFUQV9LRVkkNyA9ICdicy5jb2xsYXBzZSc7XG5jb25zdCBFVkVOVF9LRVkkNyA9IGAuJHtEQVRBX0tFWSQ3fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNCA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfU0hPVyQ2ID0gYHNob3cke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ2ID0gYHNob3duJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElERSQ2ID0gYGhpZGUke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNiA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQ0ID0gYGNsaWNrJHtFVkVOVF9LRVkkN30ke0RBVEFfQVBJX0tFWSQ0fWA7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTSU5HID0gJ2NvbGxhcHNpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRUQgPSAnY29sbGFwc2VkJztcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWA7XG5jb25zdCBDTEFTU19OQU1FX0hPUklaT05UQUwgPSAnY29sbGFwc2UtaG9yaXpvbnRhbCc7XG5jb25zdCBXSURUSCA9ICd3aWR0aCc7XG5jb25zdCBIRUlHSFQgPSAnaGVpZ2h0JztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nO1xuY29uc3QgRGVmYXVsdCRhID0ge1xuICBwYXJlbnQ6IG51bGwsXG4gIHRvZ2dsZTogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJGEgPSB7XG4gIHBhcmVudDogJyhudWxsfGVsZW1lbnQpJyxcbiAgdG9nZ2xlOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW107XG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUkNCk7XG4gICAgZm9yIChjb25zdCBlbGVtIG9mIHRvZ2dsZUxpc3QpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JFbmdpbmUuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgIGNvbnN0IGZpbHRlckVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKS5maWx0ZXIoZm91bmRFbGVtZW50ID0+IGZvdW5kRWxlbWVudCA9PT0gdGhpcy5fZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbigpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRhO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRiO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGFjdGl2ZUNoaWxkcmVuID0gW107XG5cbiAgICAvLyBmaW5kIGFjdGl2ZSBjaGlsZHJlblxuICAgIGlmICh0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICBhY3RpdmVDaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9BQ1RJVkVTKS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50KS5tYXAoZWxlbWVudCA9PiBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHtcbiAgICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlQ2hpbGRyZW4ubGVuZ3RoICYmIGFjdGl2ZUNoaWxkcmVuWzBdLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNik7XG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFjdGl2ZUluc3RhbmNlIG9mIGFjdGl2ZUNoaWxkcmVuKSB7XG4gICAgICBhY3RpdmVJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRydWUpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNik7XG4gICAgfTtcbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpO1xuICAgIGNvbnN0IHNjcm9sbFNpemUgPSBgc2Nyb2xsJHtjYXBpdGFsaXplZERpbWVuc2lvbn1gO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV19cHhgO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YDtcbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdGhpcy5fdHJpZ2dlckFycmF5KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKTtcbiAgICAgIGlmIChlbGVtZW50ICYmICF0aGlzLl9pc1Nob3duKGVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbdHJpZ2dlcl0sIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpOyAvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlc1xuICAgIGNvbmZpZy5wYXJlbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5wYXJlbnQpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2dldERpbWVuc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9IT1JJWk9OVEFMKSA/IFdJRFRIIDogSEVJR0hUO1xuICB9XG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZWxlbWVudF0sIHRoaXMuX2lzU2hvd24oc2VsZWN0ZWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihzZWxlY3Rvcikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gU2VsZWN0b3JFbmdpbmUuZmluZChDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiwgdGhpcy5fY29uZmlnLnBhcmVudCk7XG4gICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGlmIGdyZWF0ZXIgZGVwdGhcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW1lbnQgPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW1lbnQpKTtcbiAgfVxuICBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRyaWdnZXJBcnJheSwgaXNPcGVuKSB7XG4gICAgaWYgKCF0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3Blbik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGlzT3Blbik7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgX2NvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ0LCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0LCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiBldmVudC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5nZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKHRoaXMpKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICB0b2dnbGU6IGZhbHNlXG4gICAgfSkudG9nZ2xlKCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDb2xsYXBzZSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGEgPSAnZHJvcGRvd24nO1xuY29uc3QgREFUQV9LRVkkNiA9ICdicy5kcm9wZG93bic7XG5jb25zdCBFVkVOVF9LRVkkNiA9IGAuJHtEQVRBX0tFWSQ2fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMyA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVNDQVBFX0tFWSQyID0gJ0VzY2FwZSc7XG5jb25zdCBUQUJfS0VZJDEgPSAnVGFiJztcbmNvbnN0IEFSUk9XX1VQX0tFWSQxID0gJ0Fycm93VXAnO1xuY29uc3QgQVJST1dfRE9XTl9LRVkkMSA9ICdBcnJvd0Rvd24nO1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMjsgLy8gTW91c2VFdmVudC5idXR0b24gdmFsdWUgZm9yIHRoZSBzZWNvbmRhcnkgYnV0dG9uLCB1c3VhbGx5IHRoZSByaWdodCBidXR0b25cblxuY29uc3QgRVZFTlRfSElERSQ1ID0gYGhpZGUke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNSA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XJDUgPSBgc2hvdyR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDUgPSBgc2hvd24ke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQzID0gYGNsaWNrJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJID0gYGtleWRvd24ke0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNiA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BFTkQgPSAnZHJvcGVuZCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BTVEFSVCA9ICdkcm9wc3RhcnQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIgPSAnZHJvcGRvd24tY2VudGVyJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzfS4ke0NMQVNTX05BTUVfU0hPVyQ2fWA7XG5jb25zdCBTRUxFQ1RPUl9NRU5VID0gJy5kcm9wZG93bi1tZW51JztcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJztcbmNvbnN0IFNFTEVDVE9SX05BVkJBUl9OQVYgPSAnLm5hdmJhci1uYXYnO1xuY29uc3QgU0VMRUNUT1JfVklTSUJMRV9JVEVNUyA9ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSc7XG5jb25zdCBQTEFDRU1FTlRfVE9QID0gaXNSVEwoKSA/ICd0b3AtZW5kJyA6ICd0b3Atc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX1RPUEVORCA9IGlzUlRMKCkgPyAndG9wLXN0YXJ0JyA6ICd0b3AtZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NRU5EID0gaXNSVEwoKSA/ICdib3R0b20tc3RhcnQnIDogJ2JvdHRvbS1lbmQnO1xuY29uc3QgUExBQ0VNRU5UX1JJR0hUID0gaXNSVEwoKSA/ICdsZWZ0LXN0YXJ0JyA6ICdyaWdodC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX1RPUENFTlRFUiA9ICd0b3AnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUNFTlRFUiA9ICdib3R0b20nO1xuY29uc3QgRGVmYXVsdCQ5ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkOSA9IHtcbiAgYXV0b0Nsb3NlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGRpc3BsYXk6ICdzdHJpbmcnLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICByZWZlcmVuY2U6ICcoc3RyaW5nfGVsZW1lbnR8b2JqZWN0KSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGU7IC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01FTlUsIHRoaXMuX3BhcmVudCk7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDk7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkOTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24oKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9O1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NyZWF0ZVBvcHBlcigpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNSwgcmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICB0aGlzLl9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJyk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gc3VwZXIuX2dldENvbmZpZyhjb25maWcpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcgJiYgIWlzRWxlbWVudChjb25maWcucmVmZXJlbmNlKSAmJiB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUkYS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwicmVmZXJlbmNlXCIgcHJvdmlkZWQgdHlwZSBcIm9iamVjdFwiIHdpdGhvdXQgYSByZXF1aXJlZCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiIG1ldGhvZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICB9XG4gICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAncGFyZW50Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX3BhcmVudDtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSkge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IGdldEVsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlO1xuICAgIH1cbiAgICBjb25zdCBwb3BwZXJDb25maWcgPSB0aGlzLl9nZXRQb3BwZXJDb25maWcoKTtcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZyk7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgfVxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50O1xuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRU5EKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9SSUdIVDtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BTVEFSVCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfTEVGVDtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUjtcbiAgICB9XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJztcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQKSkge1xuICAgICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX1RPUEVORCA6IFBMQUNFTUVOVF9UT1A7XG4gICAgfVxuICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9CT1RUT01FTkQgOiBQTEFDRU1FTlRfQk9UVE9NO1xuICB9XG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiB0aGlzLl9nZXRQbGFjZW1lbnQoKSxcbiAgICAgIG1vZGlmaWVyczogW3tcbiAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIC8vIERpc2FibGUgUG9wcGVyIGlmIHdlIGhhdmUgYSBzdGF0aWMgZGlzcGxheSBvciBEcm9wZG93biBpcyBpbiBOYXZiYXJcbiAgICBpZiAodGhpcy5faW5OYXZiYXIgfHwgdGhpcy5fY29uZmlnLmRpc3BsYXkgPT09ICdzdGF0aWMnKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInLCAnc3RhdGljJyk7IC8vIFRPRE86IHY2IHJlbW92ZVxuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLmV4ZWN1dGUodGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZywgW2RlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2VsZWN0TWVudUl0ZW0oe1xuICAgIGtleSxcbiAgICB0YXJnZXRcbiAgfSkge1xuICAgIGNvbnN0IGl0ZW1zID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9WSVNJQkxFX0lURU1TLCB0aGlzLl9tZW51KS5maWx0ZXIoZWxlbWVudCA9PiBpc1Zpc2libGUoZWxlbWVudCkpO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGFyZ2V0IGlzbid0IGluY2x1ZGVkIGluIGl0ZW1zIChlLmcuIHdoZW4gZXhwYW5kaW5nIHRoZSBkcm9wZG93bilcbiAgICAvLyBhbGxvdyBjeWNsaW5nIHRvIGdldCB0aGUgbGFzdCBpdGVtIGluIGNhc2Uga2V5IGVxdWFscyBBUlJPV19VUF9LRVlcbiAgICBnZXROZXh0QWN0aXZlRWxlbWVudChpdGVtcywgdGFyZ2V0LCBrZXkgPT09IEFSUk9XX0RPV05fS0VZJDEsICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIGNsZWFyTWVudXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuYnV0dG9uID09PSBSSUdIVF9NT1VTRV9CVVRUT04gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkkMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVuVG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04pO1xuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKTtcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpO1xuICAgICAgaWYgKGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhYiBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIGRyb3Bkb3duIG1lbnUgb3IgZXZlbnRzIGZyb20gY29udGFpbmVkIGlucHV0cyBzaG91bGRuJ3QgY2xvc2UgdGhlIG1lbnVcbiAgICAgIGlmIChjb250ZXh0Ll9tZW51LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZJDEgfHwgL2lucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8Zm9ybS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcihldmVudCkge1xuICAgIC8vIElmIG5vdCBhbiBVUCB8IERPV04gfCBFU0NBUEUga2V5ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYSAmJiBpZiBrZXkgaXMgb3RoZXIgdGhhbiBFU0NBUEUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuXG4gICAgY29uc3QgaXNJbnB1dCA9IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpO1xuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkkMjtcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZJDEsIEFSUk9XX0RPV05fS0VZJDFdLmluY2x1ZGVzKGV2ZW50LmtleSk7XG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzSW5wdXQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICBjb25zdCBnZXRUb2dnbGVCdXR0b24gPSB0aGlzLm1hdGNoZXMoU0VMRUNUT1JfREFUQV9UT0dHTEUkMykgPyB0aGlzIDogU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZSk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKGdldFRvZ2dsZUJ1dHRvbik7XG4gICAgaWYgKGlzVXBPckRvd25FdmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkge1xuICAgICAgLy8gZWxzZSBpcyBlc2NhcGUgYW5kIHdlIGNoZWNrIGlmIGl0IGlzIHNob3duXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZVVBfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS50b2dnbGUoKTtcbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOSA9ICdiYWNrZHJvcCc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNCA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ1ID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUUkOX1gO1xuY29uc3QgRGVmYXVsdCQ4ID0ge1xuICBjbGFzc05hbWU6ICdtb2RhbC1iYWNrZHJvcCcsXG4gIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gIGlzQW5pbWF0ZWQ6IGZhbHNlLFxuICBpc1Zpc2libGU6IHRydWUsXG4gIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gIHJvb3RFbGVtZW50OiAnYm9keScgLy8gZ2l2ZSB0aGUgY2hvaWNlIHRvIHBsYWNlIGJhY2tkcm9wIHVuZGVyIGRpZmZlcmVudCBlbGVtZW50c1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDggPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkODtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hcHBlbmQoKTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV04pO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGJhY2tkcm9wLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgfVxuICBfZW11bGF0ZUFuaW1hdGlvbihjYWxsYmFjaykge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDggPSAnZm9jdXN0cmFwJztcbmNvbnN0IERBVEFfS0VZJDUgPSAnYnMuZm9jdXN0cmFwJztcbmNvbnN0IEVWRU5UX0tFWSQ1ID0gYC4ke0RBVEFfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMiA9IGBmb2N1c2luJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBUQUJfS0VZID0gJ1RhYic7XG5jb25zdCBUQUJfTkFWX0ZPUldBUkQgPSAnZm9yd2FyZCc7XG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJztcbmNvbnN0IERlZmF1bHQkNyA9IHtcbiAgYXV0b2ZvY3VzOiB0cnVlLFxuICB0cmFwRWxlbWVudDogbnVsbCAvLyBUaGUgZWxlbWVudCB0byB0cmFwIGZvY3VzIGluc2lkZSBvZlxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDcgPSB7XG4gIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICB0cmFwRWxlbWVudDogJ2VsZW1lbnQnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDc7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDg7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLl9jb25maWcudHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0ZPQ1VTSU4kMiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9UQUIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUtleWRvd24oZXZlbnQpKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7XG4gIH1cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZJDUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRyYXBFbGVtZW50XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnO1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuY29uc3QgUFJPUEVSVFlfUEFERElORyA9ICdwYWRkaW5nLXJpZ2h0JztcbmNvbnN0IFBST1BFUlRZX01BUkdJTiA9ICdtYXJnaW4tcmlnaHQnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aCk7XG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTiwgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pO1xuICB9XG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDA7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGNhbGxCYWNrKHNlbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBtb2RhbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDcgPSAnbW9kYWwnO1xuY29uc3QgREFUQV9LRVkkNCA9ICdicy5tb2RhbCc7XG5jb25zdCBFVkVOVF9LRVkkNCA9IGAuJHtEQVRBX0tFWSQ0fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMiA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVNDQVBFX0tFWSQxID0gJ0VzY2FwZSc7XG5jb25zdCBFVkVOVF9ISURFJDQgPSBgaGlkZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEJDEgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ0ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNCA9IGBzaG93JHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPV04kNCA9IGBzaG93biR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSQxID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTID0gYG1vdXNlZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiA9IGBjbGljayR7RVZFTlRfS0VZJDR9JHtEQVRBX0FQSV9LRVkkMn1gO1xuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDMgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNCA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU1RBVElDID0gJ21vZGFsLXN0YXRpYyc7XG5jb25zdCBPUEVOX1NFTEVDVE9SJDEgPSAnLm1vZGFsLnNob3cnO1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuY29uc3QgU0VMRUNUT1JfTU9EQUxfQk9EWSA9ICcubW9kYWwtYm9keSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCJdJztcbmNvbnN0IERlZmF1bHQkNiA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGZvY3VzOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDYgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGZvY3VzOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fZGlhbG9nID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ESUFMT0csIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDY7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckNCwge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTik7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2hpZGVNb2RhbCgpLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX0tFWSQ0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2RpYWxvZywgRVZFTlRfS0VZJDQpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSxcbiAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRoaXMuX2lzQW5pbWF0ZWQoKVxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIGNvbnN0IG1vZGFsQm9keSA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTU9EQUxfQk9EWSwgdGhpcy5fZGlhbG9nKTtcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mb2N1cykge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kNCwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSwgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSQxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUkMSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgIXRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudDIgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTik7XG4gICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKCk7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ0KTtcbiAgICB9KTtcbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDMpO1xuICB9XG4gIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEJDEpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgaW5pdGlhbE92ZXJmbG93WSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZO1xuICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gaW5pdGlhbE92ZXJmbG93WTtcbiAgICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICovXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKTtcbiAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICBpZiAoaXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICAgIGlmICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gIH1cbiAgX3Jlc2V0QWRqdXN0bWVudHMoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9TSE9XJDQsIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kNCwgKCkgPT4ge1xuICAgICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgbW9kYWwgdG9nZ2xlciB3aGlsZSBhbm90aGVyIG9uZSBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SJDEpO1xuICBpZiAoYWxyZWFkeU9wZW4pIHtcbiAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihNb2RhbCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDYgPSAnb2ZmY2FudmFzJztcbmNvbnN0IERBVEFfS0VZJDMgPSAnYnMub2ZmY2FudmFzJztcbmNvbnN0IEVWRU5UX0tFWSQzID0gYC4ke0RBVEFfS0VZJDN9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQxID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIgPSBgbG9hZCR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDMgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkckMSA9ICdzaG93aW5nJztcbmNvbnN0IENMQVNTX05BTUVfSElESU5HID0gJ2hpZGluZyc7XG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCc7XG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XJDMgPSBgc2hvdyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDMgPSBgc2hvd24ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFJDMgPSBgaGlkZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURERU4kMyA9IGBoaWRkZW4ke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSA9IGBjbGljayR7RVZFTlRfS0VZJDN9JHtEQVRBX0FQSV9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJztcbmNvbnN0IERlZmF1bHQkNSA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzY3JvbGw6IGZhbHNlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ2O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDMsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwgfHwgdGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQzKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQzLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDMpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQzLCBDTEFTU19OQU1FX0hJRElORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKTtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQzKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgY29uc3QgY2xpY2tDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfTtcblxuICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKTtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4kMywgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIGEgdG9nZ2xlciBvZiBhbiBvZmZjYW52YXMsIHdoaWxlIGFub3RoZXIgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGRhdGEudG9nZ2xlKHRoaXMpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDIsICgpID0+IHtcbiAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBTZWxlY3RvckVuZ2luZS5maW5kKE9QRU5fU0VMRUNUT1IpKSB7XG4gICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2Uoc2VsZWN0b3IpLnNob3coKTtcbiAgfVxufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUsICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoJ1thcmlhLW1vZGFsXVtjbGFzcyo9c2hvd11bY2xhc3MqPW9mZmNhbnZhcy1dJykpIHtcbiAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuICAgICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuaGlkZSgpO1xuICAgIH1cbiAgfVxufSk7XG5lbmFibGVEaXNtaXNzVHJpZ2dlcihPZmZjYW52YXMpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vLyBqcy1kb2NzLXN0YXJ0IGFsbG93LWxpc3RcbmNvbnN0IEFSSUFfQVRUUklCVVRFX1BBVFRFUk4gPSAvXmFyaWEtW1xcdy1dKiQvaTtcbmNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGQ6IFtdLFxuICBkaXY6IFtdLFxuICBkbDogW10sXG4gIGR0OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn07XG4vLyBqcy1kb2NzLWVuZCBhbGxvdy1saXN0XG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFsnYmFja2dyb3VuZCcsICdjaXRlJywgJ2hyZWYnLCAnaXRlbXR5cGUnLCAnbG9uZ2Rlc2MnLCAncG9zdGVyJywgJ3NyYycsICd4bGluazpocmVmJ10pO1xuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgVVJMcyB0aGF0IGFyZSBzYWZlIHdydC4gWFNTIGluIFVSTCBuYXZpZ2F0aW9uXG4gKiBjb250ZXh0cy5cbiAqXG4gKiBTaG91dC1vdXQgdG8gQW5ndWxhciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTUuMi44L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzI0wzOFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9iZXR0ZXItcmVnZXhcbmNvbnN0IFNBRkVfVVJMX1BBVFRFUk4gPSAvXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOi8/I10qKD86Wy8/I118JCkpL2k7XG5jb25zdCBhbGxvd2VkQXR0cmlidXRlID0gKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpID0+IHtcbiAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICBpZiAodXJpQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFNBRkVfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gIHJldHVybiBhbGxvd2VkQXR0cmlidXRlTGlzdC5maWx0ZXIoYXR0cmlidXRlUmVnZXggPT4gYXR0cmlidXRlUmVnZXggaW5zdGFuY2VvZiBSZWdFeHApLnNvbWUocmVnZXggPT4gcmVnZXgudGVzdChhdHRyaWJ1dGVOYW1lKSk7XG59O1xuZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIGFsbG93TGlzdCwgc2FuaXRpemVGdW5jdGlvbikge1xuICBpZiAoIXVuc2FmZUh0bWwubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc2FmZUh0bWw7XG4gIH1cbiAgaWYgKHNhbml0aXplRnVuY3Rpb24gJiYgdHlwZW9mIHNhbml0aXplRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2FuaXRpemVGdW5jdGlvbih1bnNhZmVIdG1sKTtcbiAgfVxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuICBjb25zdCBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgY29uc3QgZWxlbWVudHMgPSBbXS5jb25jYXQoLi4uY3JlYXRlZERvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgnKicpKTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgZWxlbWVudE5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gW10uY29uY2F0KC4uLmVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pO1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUxpc3QpIHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVzKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubm9kZU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNSA9ICdUZW1wbGF0ZUZhY3RvcnknO1xuY29uc3QgRGVmYXVsdCQ0ID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGNvbnRlbnQ6IHt9LFxuICAvLyB7IHNlbGVjdG9yIDogdGV4dCAsICBzZWxlY3RvcjIgOiB0ZXh0MiAsIH1cbiAgZXh0cmFDbGFzczogJycsXG4gIGh0bWw6IGZhbHNlLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2Pidcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ0ID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBjb250ZW50OiAnb2JqZWN0JyxcbiAgZXh0cmFDbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnXG59O1xuY29uc3QgRGVmYXVsdENvbnRlbnRUeXBlID0ge1xuICBlbnRyeTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbnxudWxsKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xlbGVtZW50KSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRlbXBsYXRlRmFjdG9yeSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDQ7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jb25maWcuY29udGVudCkubWFwKGNvbmZpZyA9PiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb25maWcpKS5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbiAgaGFzQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCkubGVuZ3RoID4gMDtcbiAgfVxuICBjaGFuZ2VDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29udGVudCk7XG4gICAgdGhpcy5fY29uZmlnLmNvbnRlbnQgPSB7XG4gICAgICAuLi50aGlzLl9jb25maWcuY29udGVudCxcbiAgICAgIC4uLmNvbnRlbnRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHRvSHRtbCgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0ZW1wbGF0ZVdyYXBwZXIuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZSh0aGlzLl9jb25maWcudGVtcGxhdGUpO1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCB0ZXh0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcuY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3NldENvbnRlbnQodGVtcGxhdGVXcmFwcGVyLCB0ZXh0LCBzZWxlY3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVXcmFwcGVyLmNoaWxkcmVuWzBdO1xuICAgIGNvbnN0IGV4dHJhQ2xhc3MgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuZXh0cmFDbGFzcyk7XG4gICAgaWYgKGV4dHJhQ2xhc3MpIHtcbiAgICAgIHRlbXBsYXRlLmNsYXNzTGlzdC5hZGQoLi4uZXh0cmFDbGFzcy5zcGxpdCgnICcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZykge1xuICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29uZmlnLmNvbnRlbnQpO1xuICB9XG4gIF9jaGVja0NvbnRlbnQoYXJnKSB7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGFyZykpIHtcbiAgICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoe1xuICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgZW50cnk6IGNvbnRlbnRcbiAgICAgIH0sIERlZmF1bHRDb250ZW50VHlwZSk7XG4gICAgfVxuICB9XG4gIF9zZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKTtcbiAgICBpZiAoIXRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZW50ID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29udGVudCk7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3B1dEVsZW1lbnRJblRlbXBsYXRlKGdldEVsZW1lbnQoY29udGVudCksIHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUoY29udGVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gIH1cbiAgX21heWJlU2FuaXRpemUoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSA/IHNhbml0aXplSHRtbChhcmcsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKSA6IGFyZztcbiAgfVxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGUoYXJnLCBbdGhpc10pO1xuICB9XG4gIF9wdXRFbGVtZW50SW5UZW1wbGF0ZShlbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ0ID0gJ3Rvb2x0aXAnO1xuY29uc3QgRElTQUxMT1dFRF9BVFRSSUJVVEVTID0gbmV3IFNldChbJ3Nhbml0aXplJywgJ2FsbG93TGlzdCcsICdzYW5pdGl6ZUZuJ10pO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDIgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX01PREFMID0gJ21vZGFsJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcic7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTCA9IGAuJHtDTEFTU19OQU1FX01PREFMfWA7XG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnO1xuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3Zlcic7XG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJztcbmNvbnN0IFRSSUdHRVJfQ0xJQ0sgPSAnY2xpY2snO1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJztcbmNvbnN0IEVWRU5UX0hJREUkMiA9ICdoaWRlJztcbmNvbnN0IEVWRU5UX0hJRERFTiQyID0gJ2hpZGRlbic7XG5jb25zdCBFVkVOVF9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9TSE9XTiQyID0gJ3Nob3duJztcbmNvbnN0IEVWRU5UX0lOU0VSVEVEID0gJ2luc2VydGVkJztcbmNvbnN0IEVWRU5UX0NMSUNLJDEgPSAnY2xpY2snO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQxID0gJ2ZvY3VzaW4nO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQkMSA9ICdmb2N1c291dCc7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gJ21vdXNlZW50ZXInO1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9ICdtb3VzZWxlYXZlJztcbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufTtcbmNvbnN0IERlZmF1bHQkMyA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBhbmltYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBkZWxheTogMCxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLFxuICBodG1sOiBmYWxzZSxcbiAgb2Zmc2V0OiBbMCwgNl0sXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRpdGxlOiAnJyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDMgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICBmYWxsYmFja1BsYWNlbWVudHM6ICdhcnJheScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyOiAnc3RyaW5nJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICB9XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIFByaXZhdGVcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RpbWVvdXQgPSAwO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9O1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbnVsbDtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gbnVsbDtcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQzO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gIH1cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuICB0b2dnbGVFbmFibGVkKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWQ7XG4gIH1cbiAgdG9nZ2xlKCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljaztcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9sZWF2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbnRlcigpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsIHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpO1xuICAgIH1cbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIGlmICghKHRoaXMuX2lzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1ckMikpO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBmaW5kU2hhZG93Um9vdCh0aGlzLl9lbGVtZW50KTtcbiAgICBjb25zdCBpc0luVGhlRG9tID0gKHNoYWRvd1Jvb3QgfHwgdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY29udGFpbnModGhpcy5fZWxlbWVudCk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFpc0luVGhlRG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdjYgcmVtb3ZlIHRoaXMgb3IgbWFrZSBpdCBvcHRpb25hbFxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KCk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKTtcbiAgICBjb25zdCB7XG4gICAgICBjb250YWluZXJcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICghdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLnRpcCkpIHtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmQodGlwKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0lOU0VSVEVEKSk7XG4gICAgfVxuICAgIHRoaXMuX3BvcHBlciA9IHRoaXMuX2NyZWF0ZVBvcHBlcih0aXApO1xuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1dOJDIpKTtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSQyKSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMik7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZTtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfSE9WRVJdID0gZmFsc2U7XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbDsgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJRERFTiQyKSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZFxuICBfaXNXaXRoQ29udGVudCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9nZXRUaXRsZSgpKTtcbiAgfVxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRpcDtcbiAgfVxuICBfY3JlYXRlVGlwRWxlbWVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpLnRvSHRtbCgpO1xuXG4gICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgY2hlY2sgaW4gdjZcbiAgICBpZiAoIXRpcCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfRkFERSQyLCBDTEFTU19OQU1FX1NIT1ckMik7XG4gICAgLy8gVE9ETzogdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApO1xuICAgIGNvbnN0IHRpcElkID0gZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSkudG9TdHJpbmcoKTtcbiAgICB0aXAuc2V0QXR0cmlidXRlKCdpZCcsIHRpcElkKTtcbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUkMik7XG4gICAgfVxuICAgIHJldHVybiB0aXA7XG4gIH1cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG4gIF9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkge1xuICAgIGlmICh0aGlzLl90ZW1wbGF0ZUZhY3RvcnkpIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeS5jaGFuZ2VDb250ZW50KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHtcbiAgICAgICAgLi4udGhpcy5fY29uZmlnLFxuICAgICAgICAvLyB0aGUgYGNvbnRlbnRgIHZhciBoYXMgdG8gYmUgYWZ0ZXIgYHRoaXMuX2NvbmZpZ2BcbiAgICAgICAgLy8gdG8gb3ZlcnJpZGUgY29uZmlnLmNvbnRlbnQgaW4gY2FzZSBvZiBwb3BvdmVyXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGV4dHJhQ2xhc3M6IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jdXN0b21DbGFzcylcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVGYWN0b3J5O1xuICB9XG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH07XG4gIH1cbiAgX2dldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcudGl0bGUpIHx8IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKTtcbiAgfVxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmFuaW1hdGlvbiB8fCB0aGlzLnRpcCAmJiB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDIpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLnRpcCAmJiB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuICB9XG4gIF9jcmVhdGVQb3BwZXIodGlwKSB7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gZXhlY3V0ZSh0aGlzLl9jb25maWcucGxhY2VtZW50LCBbdGhpcywgdGlwLCB0aGlzLl9lbGVtZW50XSk7XG4gICAgY29uc3QgYXR0YWNobWVudCA9IEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldO1xuICAgIHJldHVybiBQb3BwZXIuY3JlYXRlUG9wcGVyKHRoaXMuX2VsZW1lbnQsIHRpcCwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpKTtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGUoYXJnLCBbdGhpcy5fZWxlbWVudF0pO1xuICB9XG4gIF9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogYXR0YWNobWVudCxcbiAgICAgIG1vZGlmaWVyczogW3tcbiAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICBwaGFzZTogJ2JlZm9yZU1haW4nLFxuICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgLy8gUHJlLXNldCBQb3BwZXIncyBwbGFjZW1lbnQgYXR0cmlidXRlIGluIG9yZGVyIHRvIHJlYWQgdGhlIGFycm93IHNpemVzIHByb3Blcmx5LlxuICAgICAgICAgIC8vIE90aGVyd2lzZSwgUG9wcGVyIG1peGVzIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGRpbWVuc2lvbnMgc2luY2UgdGhlIGluaXRpYWwgYXJyb3cgc3R5bGUgaXMgZm9yIHRvcCBwbGFjZW1lbnRcbiAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9O1xuICB9XG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgnICcpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0cmlnZ2Vycykge1xuICAgICAgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0NMSUNLJDEpLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0LnRvZ2dsZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgPyB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9NT1VTRUVOVEVSKSA6IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTSU4kMSk7XG4gICAgICAgIGNvbnN0IGV2ZW50T3V0ID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNPVVQkMSk7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudEluLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWU7XG4gICAgICAgICAgY29udGV4dC5fZW50ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNvdXQnID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICBjb250ZXh0Ll9sZWF2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faGlkZU1vZGFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpO1xuICB9XG4gIF9maXhUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmICF0aGlzLl9lbGVtZW50LnRleHRDb250ZW50LnRyaW0oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJywgdGl0bGUpOyAvLyBETyBOT1QgVVNFIElULiBJcyBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICB9XG4gIF9lbnRlcigpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpIHx8IHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5LnNob3cpO1xuICB9XG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5LmhpZGUpO1xuICB9XG4gIF9zZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCk7XG4gIH1cbiAgX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fYWN0aXZlVHJpZ2dlcikuaW5jbHVkZXModHJ1ZSk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpO1xuICAgIGZvciAoY29uc3QgZGF0YUF0dHJpYnV0ZSBvZiBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChESVNBTExPV0VEX0FUVFJJQlVURVMuaGFzKGRhdGFBdHRyaWJ1dGUpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhQXR0cmlidXRlc1tkYXRhQXR0cmlidXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uZGF0YUF0dHJpYnV0ZXMsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfTtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy5jb250YWluZXIgPSBjb25maWcuY29udGFpbmVyID09PSBmYWxzZSA/IGRvY3VtZW50LmJvZHkgOiBnZXRFbGVtZW50KGNvbmZpZy5jb250YWluZXIpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb25maWcuY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5jb250ZW50ID0gY29uZmlnLmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZ2V0RGVsZWdhdGVDb25maWcoKSB7XG4gICAgY29uc3QgY29uZmlnID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKSkge1xuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcuc2VsZWN0b3IgPSBmYWxzZTtcbiAgICBjb25maWcudHJpZ2dlciA9ICdtYW51YWwnO1xuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZGlzcG9zZVBvcHBlcigpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKTtcbiAgICAgIHRoaXMudGlwID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDMgPSAncG9wb3Zlcic7XG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInO1xuY29uc3QgU0VMRUNUT1JfQ09OVEVOVCA9ICcucG9wb3Zlci1ib2R5JztcbmNvbnN0IERlZmF1bHQkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBjb250ZW50OiAnJyxcbiAgb2Zmc2V0OiBbMCwgOF0sXG4gIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgKyAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PicgKyAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDIgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdFR5cGUsXG4gIGNvbnRlbnQ6ICcobnVsbHxzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBQb3BvdmVyIGV4dGVuZHMgVG9vbHRpcCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDI7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlc1xuICBfaXNXaXRoQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VGl0bGUoKSB8fCB0aGlzLl9nZXRDb250ZW50KCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9USVRMRV06IHRoaXMuX2dldFRpdGxlKCksXG4gICAgICBbU0VMRUNUT1JfQ09OVEVOVF06IHRoaXMuX2dldENvbnRlbnQoKVxuICAgIH07XG4gIH1cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jb250ZW50KTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFBvcG92ZXIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oUG9wb3Zlcik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBzY3JvbGxzcHkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQyID0gJ3Njcm9sbHNweSc7XG5jb25zdCBEQVRBX0tFWSQyID0gJ2JzLnNjcm9sbHNweSc7XG5jb25zdCBFVkVOVF9LRVkkMiA9IGAuJHtEQVRBX0tFWSQyfWA7XG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVkkMn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDEgPSBgbG9hZCR7RVZFTlRfS0VZJDJ9JHtEQVRBX0FQSV9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDEgPSAnYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU1BZID0gJ1tkYXRhLWJzLXNweT1cInNjcm9sbFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJztcbmNvbnN0IFNFTEVDVE9SX05BVl9MSVNUX0dST1VQID0gJy5uYXYsIC5saXN0LWdyb3VwJztcbmNvbnN0IFNFTEVDVE9SX05BVl9MSU5LUyA9ICcubmF2LWxpbmsnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSVNUX0lURU1TID0gJy5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfTElOS19JVEVNUyA9IGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTkFWX0lURU1TfSA+ICR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9MSVNUX0lURU1TfWA7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFJDEgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG5jb25zdCBEZWZhdWx0JDEgPSB7XG4gIG9mZnNldDogbnVsbCxcbiAgLy8gVE9ETzogdjYgQGRlcHJlY2F0ZWQsIGtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnNcbiAgcm9vdE1hcmdpbjogJzBweCAwcHggLTI1JScsXG4gIHNtb290aFNjcm9sbDogZmFsc2UsXG4gIHRhcmdldDogbnVsbCxcbiAgdGhyZXNob2xkOiBbMC4xLCAwLjUsIDFdXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMSA9IHtcbiAgb2Zmc2V0OiAnKG51bWJlcnxudWxsKScsXG4gIC8vIFRPRE8gdjYgQGRlcHJlY2F0ZWQsIGtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnNcbiAgcm9vdE1hcmdpbjogJ3N0cmluZycsXG4gIHNtb290aFNjcm9sbDogJ2Jvb2xlYW4nLFxuICB0YXJnZXQ6ICdlbGVtZW50JyxcbiAgdGhyZXNob2xkOiAnYXJyYXknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIHRoaXMuX2VsZW1lbnQgaXMgdGhlIG9ic2VydmFibGVzQ29udGFpbmVyIGFuZCBjb25maWcudGFyZ2V0IHRoZSBtZW51IGxpbmtzIHdyYXBwZXJcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnQ7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfTtcbiAgICB0aGlzLnJlZnJlc2goKTsgLy8gaW5pdGlhbGl6ZVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQxO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQyO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpO1xuICAgIHRoaXMuX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCk7XG4gICAgaWYgKHRoaXMuX29ic2VydmVyKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5fZ2V0TmV3T2JzZXJ2ZXIoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZShzZWN0aW9uKTtcbiAgICB9XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyBUT0RPOiBvbiB2NiB0YXJnZXQgc2hvdWxkIGJlIGdpdmVuIGV4cGxpY2l0bHkgJiByZW1vdmUgdGhlIHt0YXJnZXQ6ICdzcy10YXJnZXQnfSBjYXNlXG4gICAgY29uZmlnLnRhcmdldCA9IGdldEVsZW1lbnQoY29uZmlnLnRhcmdldCkgfHwgZG9jdW1lbnQuYm9keTtcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLnRocmVzaG9sZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZy50aHJlc2hvbGQgPSBjb25maWcudGhyZXNob2xkLnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVucmVnaXN0ZXIgYW55IHByZXZpb3VzIGxpc3RlbmVyc1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fY29uZmlnLnRhcmdldCwgRVZFTlRfQ0xJQ0spO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpO1xuICAgICAgaWYgKG9ic2VydmFibGVTZWN0aW9uKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9yb290RWxlbWVudCB8fCB3aW5kb3c7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBpZiAocm9vdC5zY3JvbGxUbykge1xuICAgICAgICAgIHJvb3Quc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wOiBoZWlnaHQsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaHJvbWUgNjAgZG9lc24ndCBzdXBwb3J0IGBzY3JvbGxUb2BcbiAgICAgICAgcm9vdC5zY3JvbGxUb3AgPSBoZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgX2dldE5ld09ic2VydmVyKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290OiB0aGlzLl9yb290RWxlbWVudCxcbiAgICAgIHRocmVzaG9sZDogdGhpcy5fY29uZmlnLnRocmVzaG9sZCxcbiAgICAgIHJvb3RNYXJnaW46IHRoaXMuX2NvbmZpZy5yb290TWFyZ2luXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBUaGUgbG9naWMgb2Ygc2VsZWN0aW9uXG4gIF9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpIHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZW50cnkgPT4gdGhpcy5fdGFyZ2V0TGlua3MuZ2V0KGAjJHtlbnRyeS50YXJnZXQuaWR9YCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSBlbnRyeSA9PiB7XG4gICAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcDtcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpO1xuICAgIH07XG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHVzZXJTY3JvbGxzRG93biA9IHBhcmVudFNjcm9sbFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wO1xuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3AgPSBwYXJlbnRTY3JvbGxUb3A7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcDtcbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgZG93biwgcGljayB0aGUgYmlnZ2VyIG9mZnNldFRvcFxuICAgICAgaWYgKHVzZXJTY3JvbGxzRG93biAmJiBlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgICAvLyBpZiBwYXJlbnQgaXNuJ3Qgc2Nyb2xsZWQsIGxldCdzIGtlZXAgdGhlIGZpcnN0IHZpc2libGUgaXRlbSwgYnJlYWtpbmcgdGhlIGl0ZXJhdGlvblxuICAgICAgICBpZiAoIXBhcmVudFNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyB1cCwgcGljayB0aGUgc21hbGxlc3Qgb2Zmc2V0VG9wXG4gICAgICBpZiAoIXVzZXJTY3JvbGxzRG93biAmJiAhZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKSB7XG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHRhcmdldExpbmtzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIHRoaXMuX2NvbmZpZy50YXJnZXQpO1xuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCB0aGlzLl9lbGVtZW50KTtcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIG9ic2VydmFibGVTZWN0aW9uIGV4aXN0cyAmIGlzIHZpc2libGVcbiAgICAgIGlmIChpc1Zpc2libGUob2JzZXJ2YWJsZVNlY3Rpb24pKSB7XG4gICAgICAgIHRoaXMuX3RhcmdldExpbmtzLnNldChkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCBhbmNob3IpO1xuICAgICAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMuc2V0KGFuY2hvci5oYXNoLCBvYnNlcnZhYmxlU2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9wcm9jZXNzKHRhcmdldCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRoaXMuX2NvbmZpZy50YXJnZXQpO1xuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IHRhcmdldDtcbiAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICB0aGlzLl9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgfSk7XG4gIH1cbiAgX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpIHtcbiAgICAvLyBBY3RpdmF0ZSBkcm9wZG93biBwYXJlbnRzXG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNKSkge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSwgdGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfRFJPUERPV04pKS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpc3RHcm91cCBvZiBTZWxlY3RvckVuZ2luZS5wYXJlbnRzKHRhcmdldCwgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApKSB7XG4gICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAvLyBXaXRoIGJvdGggPHVsPiBhbmQgPG5hdj4gbWFya3VwIGEgcGFyZW50IGlzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGFueSBuYXYgYW5jZXN0b3JcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBTZWxlY3RvckVuZ2luZS5wcmV2KGxpc3RHcm91cCwgU0VMRUNUT1JfTElOS19JVEVNUykpIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfY2xlYXJBY3RpdmVDbGFzcyhwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICBjb25zdCBhY3RpdmVOb2RlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoYCR7U0VMRUNUT1JfVEFSR0VUX0xJTktTfS4ke0NMQVNTX05BTUVfQUNUSVZFJDF9YCwgcGFyZW50KTtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYWN0aXZlTm9kZXMpIHtcbiAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNweSBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKSkge1xuICAgIFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHNweSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihTY3JvbGxTcHkpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdGFiLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMSA9ICd0YWInO1xuY29uc3QgREFUQV9LRVkkMSA9ICdicy50YWInO1xuY29uc3QgRVZFTlRfS0VZJDEgPSBgLiR7REFUQV9LRVkkMX1gO1xuY29uc3QgRVZFTlRfSElERSQxID0gYGhpZGUke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURERU4kMSA9IGBoaWRkZW4ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9TSE9XJDEgPSBgc2hvdyR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDEgPSBgc2hvd24ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCc7XG5jb25zdCBBUlJPV19VUF9LRVkgPSAnQXJyb3dVcCc7XG5jb25zdCBBUlJPV19ET1dOX0tFWSA9ICdBcnJvd0Rvd24nO1xuY29uc3QgSE9NRV9LRVkgPSAnSG9tZSc7XG5jb25zdCBFTkRfS0VZID0gJ0VuZCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDEgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMSA9ICdzaG93JztcbmNvbnN0IENMQVNTX0RST1BET1dOID0gJ2Ryb3Bkb3duJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuY29uc3QgTk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9IGA6bm90KCR7U0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSlgO1xuY29uc3QgU0VMRUNUT1JfVEFCX1BBTkVMID0gJy5saXN0LWdyb3VwLCAubmF2LCBbcm9sZT1cInRhYmxpc3RcIl0nO1xuY29uc3QgU0VMRUNUT1JfT1VURVIgPSAnLm5hdi1pdGVtLCAubGlzdC1ncm91cC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0lOTkVSID0gYC5uYXYtbGluayR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIC5saXN0LWdyb3VwLWl0ZW0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCBbcm9sZT1cInRhYlwiXSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX1gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdJzsgLy8gVE9ETzogY291bGQgb25seSBiZSBgdGFiYCBpbiB2NlxuY29uc3QgU0VMRUNUT1JfSU5ORVJfRUxFTSA9IGAke1NFTEVDVE9SX0lOTkVSfSwgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX1gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFID0gYC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXWA7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRhYiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgc3VwZXIoZWxlbWVudCk7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX1RBQl9QQU5FTCk7XG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICAgIC8vIFRPRE86IHNob3VsZCB0aHJvdyBleGNlcHRpb24gaW4gdjZcbiAgICAgIC8vIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZWxlbWVudC5vdXRlckhUTUx9IGhhcyBub3QgYSB2YWxpZCBwYXJlbnQgJHtTRUxFQ1RPUl9JTk5FUl9FTEVNfWApXG4gICAgfVxuXG4gICAgLy8gU2V0IHVwIGluaXRpYWwgYXJpYSBhdHRyaWJ1dGVzXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXModGhpcy5fcGFyZW50LCB0aGlzLl9nZXRDaGlsZHJlbigpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIC8vIFNob3dzIHRoaXMgZWxlbSBhbmQgZGVhY3RpdmF0ZSB0aGUgYWN0aXZlIHNpYmxpbmcgaWYgZXhpc3RzXG4gICAgY29uc3QgaW5uZXJFbGVtID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fZWxlbUlzQWN0aXZlKGlubmVyRWxlbSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZWFyY2ggZm9yIGFjdGl2ZSB0YWIgb24gc2FtZSBwYXJlbnQgdG8gZGVhY3RpdmF0ZSBpdFxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW0oKTtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBhY3RpdmUgPyBFdmVudEhhbmRsZXIudHJpZ2dlcihhY3RpdmUsIEVWRU5UX0hJREUkMSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogaW5uZXJFbGVtXG4gICAgfSkgOiBudWxsO1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKGlubmVyRWxlbSwgRVZFTlRfU0hPVyQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBhY3RpdmVcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgaGlkZUV2ZW50ICYmIGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2RlYWN0aXZhdGUoYWN0aXZlLCBpbm5lckVsZW0pO1xuICAgIHRoaXMuX2FjdGl2YXRlKGlubmVyRWxlbSwgYWN0aXZlKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2FjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSk7IC8vIFNlYXJjaCBhbmQgYWN0aXZhdGUvc2hvdyB0aGUgcHJvcGVyIHNlY3Rpb25cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIHRydWUpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfU0hPV04kMSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMSkpO1xuICB9XG4gIF9kZWFjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgZWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBkZWFjdGl2YXRlIHRoZSBzaG93biBzZWN0aW9uIHRvb1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIGZhbHNlKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX0hJRERFTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoIVtBUlJPV19MRUZUX0tFWSwgQVJST1dfUklHSFRfS0VZLCBBUlJPV19VUF9LRVksIEFSUk9XX0RPV05fS0VZLCBIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gc3RvcFByb3BhZ2F0aW9uL3ByZXZlbnREZWZhdWx0IGJvdGggYWRkZWQgdG8gc3VwcG9ydCB1cC9kb3duIGtleXMgd2l0aG91dCBzY3JvbGxpbmcgdGhlIHBhZ2VcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Q2hpbGRyZW4oKS5maWx0ZXIoZWxlbWVudCA9PiAhaXNEaXNhYmxlZChlbGVtZW50KSk7XG4gICAgbGV0IG5leHRBY3RpdmVFbGVtZW50O1xuICAgIGlmIChbSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gY2hpbGRyZW5bZXZlbnQua2V5ID09PSBIT01FX0tFWSA/IDAgOiBjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNOZXh0ID0gW0FSUk9XX1JJR0hUX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSk7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGdldE5leHRBY3RpdmVFbGVtZW50KGNoaWxkcmVuLCBldmVudC50YXJnZXQsIGlzTmV4dCwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChuZXh0QWN0aXZlRWxlbWVudCkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKG5leHRBY3RpdmVFbGVtZW50KS5zaG93KCk7XG4gICAgfVxuICB9XG4gIF9nZXRDaGlsZHJlbigpIHtcbiAgICAvLyBjb2xsZWN0aW9uIG9mIGlubmVyIGVsZW1lbnRzXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSU5ORVJfRUxFTSwgdGhpcy5fcGFyZW50KTtcbiAgfVxuICBfZ2V0QWN0aXZlRWxlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2hpbGRyZW4oKS5maW5kKGNoaWxkID0+IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZCkpIHx8IG51bGw7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKSB7XG4gICAgY2hpbGQgPSB0aGlzLl9nZXRJbm5lckVsZW1lbnQoY2hpbGQpO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKTtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpO1xuICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGlzQWN0aXZlKTtcbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgIH1cbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhjaGlsZCwgJ3JvbGUnLCAndGFiJyk7XG5cbiAgICAvLyBzZXQgYXR0cmlidXRlcyB0byB0aGUgcmVsYXRlZCBwYW5lbCB0b29cbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwoY2hpbGQpO1xuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwoY2hpbGQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGNoaWxkKTtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0YXJnZXQsICdyb2xlJywgJ3RhYnBhbmVsJyk7XG4gICAgaWYgKGNoaWxkLmlkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0YXJnZXQsICdhcmlhLWxhYmVsbGVkYnknLCBgJHtjaGlsZC5pZH1gKTtcbiAgICB9XG4gIH1cbiAgX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIG9wZW4pIHtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKCFvdXRlckVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX0RST1BET1dOKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2dnbGUgPSAoc2VsZWN0b3IsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIG91dGVyRWxlbSk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCBvcGVuKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fTUVOVSwgQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgIG91dGVyRWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBvcGVuKTtcbiAgfVxuICBfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIF9lbGVtSXNBY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0FDVElWRSk7XG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBpbm5lciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWxpbmspXG4gIF9nZXRJbm5lckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLm1hdGNoZXMoU0VMRUNUT1JfSU5ORVJfRUxFTSkgPyBlbGVtIDogU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTk5FUl9FTEVNLCBlbGVtKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIG91dGVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtaXRlbSlcbiAgX2dldE91dGVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xvc2VzdChTRUxFQ1RPUl9PVVRFUikgfHwgZWxlbTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykuc2hvdygpO1xufSk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBvbiBmb2N1c1xuICovXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSkpIHtcbiAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KTtcbiAgfVxufSk7XG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b2FzdCc7XG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCc7XG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVVQgPSBgbW91c2VvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWA7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX0hJREUgPSAnaGlkZSc7IC8vIEBkZXByZWNhdGVkIC0ga2VwdCBoZXJlIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZyc7XG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGF1dG9oaWRlOiAnYm9vbGVhbicsXG4gIGRlbGF5OiAnbnVtYmVyJ1xufTtcbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYXV0b2hpZGU6IHRydWUsXG4gIGRlbGF5OiA1MDAwXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb2FzdCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pO1xuICAgICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XLCBDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKTsgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcsIENMQVNTX05BTUVfU0hPVyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gfHwgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkpO1xuICB9XG4gIF9vbkludGVyYWN0aW9uKGV2ZW50LCBpc0ludGVyYWN0aW5nKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3Rpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzSW50ZXJhY3RpbmcpIHtcbiAgICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpO1xuICB9XG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9hc3QuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihUb2FzdCk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KTtcblxuZXhwb3J0IHsgQWxlcnQsIEJ1dHRvbiwgQ2Fyb3VzZWwsIENvbGxhcHNlLCBEcm9wZG93biwgTW9kYWwsIE9mZmNhbnZhcywgUG9wb3ZlciwgU2Nyb2xsU3B5LCBUYWIsIFRvYXN0LCBUb29sdGlwIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAuZXNtLmpzLm1hcFxuIiwiLy9cbi8vIFNDU1Mgc3R5bGVzXG4vL1xuaW1wb3J0ICcuLi9zY3NzL2FwcC5zY3NzJztcblxuLy9cbi8vIE9sZCBub24tbW9kdWxhciBKUyB2ZW5kb3IgZmlsZXNcbi8vXG4vLyBpbXBvcnQgalF1ZXJ5IGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdqcXVlcnktdWktYnVuZGxlJztcbmltcG9ydCAnQHJlZ3J1L2pxdWVyeS1tZW51LWFpbSc7XG5cbndpbmRvdy4kID0gJDtcbndpbmRvdy5qcXVlcnkgPSAkO1xud2luZG93LmpRdWVyeSA9ICQ7XG5cbmdsb2JhbC5qUXVlcnkgPSAkO1xuXG5pbXBvcnQge0NoYXJ0fSBmcm9tIFwiY2hhcnQuanMvYXV0b1wiO1xuaW1wb3J0IE5ldHRlIGZyb20gJ25ldHRlLWZvcm1zJztcbmltcG9ydCAnLi4vLi4vdmVuZG9yL25hc2V4dC9kZXBlbmRlbnQtc2VsZWN0LWJveC9jbGllbnQtc2lkZS9kZXBlbmRlbnRTZWxlY3RCb3gnXG5OZXR0ZS5pbml0T25Mb2FkKCk7XG53aW5kb3cuTmV0dGUgPSBOZXR0ZTtcbndpbmRvdy5DaGFydCA9IENoYXJ0O1xuXG5pbXBvcnQgJ25ldHRlLmFqYXguanMnO1xuJC5uZXR0ZS5pbml0KHtcbiAgICBsb2FkOiBmdW5jdGlvbiAocmgpIHtcbiAgICAgICAgJCh0aGlzLmxpbmtTZWxlY3Rvcikub2ZmKCdjbGljay5uZXR0ZScsIHJoKS5vbignY2xpY2submV0dGUnLCByaCk7XG4gICAgICAgICQodGhpcy5mb3JtU2VsZWN0b3IpLm9mZignc3VibWl0Lm5ldHRlJywgcmgpLm9uKCdzdWJtaXQubmV0dGUnLCByaClcbiAgICAgICAgICAgIC5vZmYoJ2NsaWNrLm5ldHRlJywgJzppbWFnZScsIHJoKS5vbignY2xpY2submV0dGUnLCAnOmltYWdlJywgcmgpXG4gICAgICAgICAgICAub2ZmKCdjbGljay5uZXR0ZScsICc6c3VibWl0JywgcmgpLm9uKCdjbGljay5uZXR0ZScsICc6c3VibWl0JywgcmgpO1xuICAgICAgICAkKHRoaXMuYnV0dG9uU2VsZWN0b3IpLmNsb3Nlc3QoJ2Zvcm0nKVxuICAgICAgICAgICAgLm9mZignY2xpY2submV0dGUnLCB0aGlzLmJ1dHRvblNlbGVjdG9yLCByaCkub24oJ2NsaWNrLm5ldHRlJywgdGhpcy5idXR0b25TZWxlY3RvciwgcmgpO1xuICAgIH1cbn0sIHtcbiAgICBsaW5rU2VsZWN0b3I6ICdhOm5vdChbdGFyZ2V0XSk6bm90KFtocmVmXj1cImh0dHBcIl0pOm5vdChbaHJlZl49XCIvL1wiXSk6bm90KC5ub2FqYXgpJyxcbiAgICBmb3JtU2VsZWN0b3I6ICdmb3JtJyxcbiAgICBidXR0b25TZWxlY3RvcjogJ2lucHV0LmFqYXhbdHlwZT1cInN1Ym1pdFwiXSwgYnV0dG9uLmFqYXhbdHlwZT1cInN1Ym1pdFwiXSwgaW5wdXQuYWpheFt0eXBlPVwiaW1hZ2VcIl0nXG59KTtcbmltcG9ydCAnYWR0LW5ldHRlLWFqYXgnO1xuXG5pbXBvcnQgJy4vdG9nZ2xlTWVudSc7XG5cbmltcG9ydCAnLi9oaXN0b3J5LmFqYXguanMnO1xuaWYgKCQubmV0dGUuZXh0KCdoaXN0b3J5JykpIHtcbiAgICAvLyBQb2Rtw61uxJtuw6kgamUgdG8ga3bFr2xpIFNhZmFyaSBuYSBpT1MsIHByb3Rvxb5lIHRhbSBqZSB6IG7Em2pha8OpaG8gZMWvdm9kdSAuZXh0KCdoaXN0b3J5JykgdW5kZWZpbmVkXG4gICAgJC5uZXR0ZS5leHQoJ2hpc3RvcnknKS5jYWNoZSA9IGZhbHNlOyAvLyBUT0RPOiBrdsWvbGkgdG9tdXRvIHNlIHbFoWVjaG55IEFKQVggcmVxdWVzdHkgcG9zw61sYWrDrSAyeCwgYWxlIG5ldsOtbWUgcHJvxI0hXG59XG5cbiQubmV0dGUuZXh0KCdsaXZlJykuYWZ0ZXIoZnVuY3Rpb24oJGVsKSB7XG4gICAkKCdbZGF0YS1kZXBlbmRlbnRzZWxlY3Rib3hdJykuZGVwZW5kZW50U2VsZWN0Qm94KCk7XG59KTtcblxuaW1wb3J0ICdkYXRlcmFuZ2VwaWNrZXInO1xuXG4vL1xuLy8gTW9kdWxhciB2ZW5kb3IgSlMgZmlsZXNcbi8vXG5pbXBvcnQgJ2Jvb3RzdHJhcCc7XG4vLyBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGltcG9ydCBwbHVnaW5zIGluZGl2aWR1YWxseSBhcyBuZWVkZWRcbi8vIElmIHlvdSBjaG9zZSB0byBpbXBvcnQgcGx1Z2lucyBpbmRpdmlkdWFsbHksIHlvdSBtdXN0IGFsc28gaW5zdGFsbCBleHBvcnRzLWxvYWRlclxuLy8gaW1wb3J0ICdib290c3RyYXAvanMvZGlzdC91dGlsJztcbi8vIGltcG9ydCAnYm9vdHN0cmFwL2pzL2Rpc3QvZHJvcGRvd24nO1xuLy8gLi4uXG5cbi8vXG4vLyBDb21wb25lbnRzICYgcHJlc2VudGVycyBKU1xuLy9cbi8qXG5pbXBvcnQgQWR0SnNDb21wb25lbnRzIGZyb20gJ2FkdC1qcy1jb21wb25lbnRzJztcbkFkdEpzQ29tcG9uZW50cy5pbml0Q3VycmVuY3lJbnB1dCgpO1xuLy8gQWR0SnNDb21wb25lbnRzLmluaXREYXRlSW5wdXQoKTtcbi8vIEFkdEpzQ29tcG9uZW50cy5pbml0UmVjYXB0Y2hhKCk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdFNlbGVjdDIoKTtcbkFkdEpzQ29tcG9uZW50cy5pbml0QWpheFNlbGVjdCgpO1xuQWR0SnNDb21wb25lbnRzLmluaXRTdWJtaXRGb3JtKCk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdFJlcGxpY2F0b3IoKTtcblxuQWR0SnNDb21wb25lbnRzLmluaXQoJ2NvbXBvbmVudHMtcGFuZWxzLWJhc2UtYmFzZUNoYXJ0UGFuZWwnLCAnVUkvUG9ydGFsL0NvbXBvbmVudHMvUGFuZWxzL0Jhc2UvQmFzZUNoYXJ0UGFuZWxDb250cm9sJyk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdCgnc3lzdGVtLXNlbGVjdC1jb21wYW55LWZvcm0nLCAnVUkvUG9ydGFsL0NvbXBvbmVudHMvRm9ybXMvU3lzdGVtU2VsZWN0Q29tcGFueScpO1xuQWR0SnNDb21wb25lbnRzLmluaXQoJ3BvcnRhbC1jb21wb25lbnRzLWZvcm1zLWRhc2hib2FyZEZpbHRlcicsICdVSS9Qb3J0YWwvQ29tcG9uZW50cy9Gb3Jtcy9EYXNoYm9hcmRGaWx0ZXInKTtcbkFkdEpzQ29tcG9uZW50cy5pbml0KCdwb3J0YWwtY29tcG9uZW50cy1mb3Jtcy1jaGFuZ2VMaWNlbmNlRm9ybScsICdVSS9Qb3J0YWwvQ29tcG9uZW50cy9Gb3Jtcy9DaGFuZ2VMaWNlbmNlJyk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdCgncG9ydGFsLWNvbXBvbmVudHMtZm9ybXMtd2FyZWhvdXNlT3BlcmF0aW9uRm9ybScsICdVSS9Qb3J0YWwvQ29tcG9uZW50cy9Gb3Jtcy9XYXJlaG91c2VPcGVyYXRpb24nKTtcbkFkdEpzQ29tcG9uZW50cy5pbml0KCdjb21wYW55U2l0ZVBsYW5EZXRhaWwnLCAnVUkvUG9ydGFsL1ByZXNlbnRlcnMvQ29tcGFueVNpdGVQbGFucycpO1xuQWR0SnNDb21wb25lbnRzLmluaXQoJ2Rhc2hib2FyZCcsICdVSS9Qb3J0YWwvUHJlc2VudGVycy9EYXNoYm9hcmQnKTtcbkFkdEpzQ29tcG9uZW50cy5pbml0KCdkYXNoYm9hcmQnLCAnYXNzZXRzL2pzL2Rhc2hib2FyZCcpO1xuQWR0SnNDb21wb25lbnRzLmluaXQoJ21lc3NhZ2luZycsICdhc3NldHMvanMvbWVzc2FnaW5nJyk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdCgnbm90aWZpY2F0aW9ucycsICdhc3NldHMvanMvbm90aWZpY2F0aW9ucycpO1xuQWR0SnNDb21wb25lbnRzLmluaXQoJ3RyYW5zbGF0ZScsICdhc3NldHMvanMvdHJhbnNsYXRlJyk7XG5BZHRKc0NvbXBvbmVudHMuaW5pdCgncHJpbnQtZGFzaGJvYXJkJywgJ2Fzc2V0cy9qcy9wcmludERhc2hib2FyZCcpO1xuQWR0SnNDb21wb25lbnRzLmluaXQoJ3NhZmFyaS1zdXBwb3J0JywgJ2Fzc2V0cy9qcy9zYWZhcmlTdXBwb3J0Jyk7XG5cbmltcG9ydCAnLi9uZXR0ZUZvcm0nO1xuaW1wb3J0ICcuL2ZsYXNoZXMnO1xuaW1wb3J0ICcuL3VzZXJEcm9wZG93bic7XG5pbXBvcnQgJy4vdGFibGVBY3Rpb25zU2hhZG93JztcbmltcG9ydCAnLi9fZGF0YWdyaWQnO1xuaW1wb3J0ICcuL2RhdGVSYW5nZSc7XG5pbXBvcnQgJy4uLy4uLy4uL3ZlbmRvci91YmxhYm9vL2RhdGFncmlkL2Fzc2V0cy9kYXRhZ3JpZCc7XG5pbXBvcnQgJy4vYWRkVG9Ib21lU2NyZWVuJztcbmltcG9ydCAnLi9mdWxsc2NyZWVuJztcbmltcG9ydCAnLi9zdHJ1Y3R1cmVkLWZpbHRlcic7XG5pbXBvcnQgJy4vZmlsdGVyZWRTZWFyY2gnXG5pbXBvcnQgJ2Zvcm1zLXJlcGxpY2F0b3InO1xuKi9cblxuaW1wb3J0ICcuL3NpZGVNZW51J1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///519\n")},82:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var jQuery = __webpack_require__(796);\n(function ($, undefined) {\n // Is History API reliably supported? (based on Modernizr & PJAX)\n if (!(window.history && history.pushState && window.history.replaceState)) {\n return;\n }\n $.nette.ext('redirect', false);\n var findSnippets = function () {\n var result = [];\n $('[id^=\"snippet-\"]').each(function () {\n var $el = $(this);\n if (!$el.is('[data-history-nocache]')) {\n result.push({\n id: $el.attr('id'),\n html: $el.html()\n });\n }\n });\n return result;\n };\n var handleState = function (context, name, args) {\n var handler = context['handle' + name.substring(0, 1).toUpperCase() + name.substring(1)];\n if (handler) {\n handler.apply(context, args);\n }\n };\n $.nette.ext('history', {\n init: function () {\n var snippetsExt;\n if (this.cache && (snippetsExt = $.nette.ext('snippets'))) {\n this.handleUI = function (domCache) {\n var snippets = {};\n $.each(domCache, function () {\n snippets[this.id] = this.html;\n });\n snippetsExt.updateSnippets(snippets, true);\n $.nette.load();\n };\n }\n this.popped = !!('state' in window.history) && !!window.history.state;\n var initialUrl = window.location.href;\n $(window).on('popstate.nette', $.proxy(function (e) {\n var state = e.originalEvent.state || this.initialState;\n var initialPop = !this.popped && initialUrl === state.href;\n this.popped = true;\n if (initialPop || !e.originalEvent.state) {\n return;\n }\n if (this.cache && state.ui) {\n handleState(this, 'UI', [state.ui]);\n handleState(this, 'title', [state.title]);\n } else {\n $.nette.ajax({\n url: state.href,\n off: ['history']\n });\n }\n }, this));\n history.replaceState(this.initialState = {\n nette: true,\n href: window.location.href,\n title: document.title,\n ui: this.cache ? findSnippets() : null\n }, document.title, window.location.href);\n },\n before: function (xhr, settings) {\n if (!settings.nette) {\n this.href = null;\n } else if (!settings.nette.form) {\n this.href = settings.nette.ui.href;\n } else if (settings.nette.form.get(0).method === 'get') {\n this.href = settings.nette.form.get(0).action || window.location.href;\n } else {\n this.href = null;\n }\n },\n success: function (payload) {\n var redirect = payload.redirect || payload.url; // backwards compatibility for 'url'\n if (redirect) {\n var regexp = new RegExp('//' + window.location.host + '($|/)');\n if (redirect.substring(0, 4) === 'http' ? regexp.test(redirect) : true) {\n this.href = redirect;\n } else {\n window.location.href = redirect;\n }\n }\n if (this.href) {\n const url = new URL(this.href);\n const hasDoParameter = url.searchParams.has('do');\n console.log([this.href !== window.location.href, !hasDoParameter]);\n if (this.href !== window.location.href && !hasDoParameter) {\n history.pushState({\n nette: true,\n href: this.href,\n title: document.title,\n ui: this.cache ? findSnippets() : null\n }, document.title, this.href);\n const url = new URL(this.href);\n $('a.nav-link').map((i, el) => {\n if ($(el).attr('href') === '/') {\n $(el).toggleClass('active', url.pathname === $(el).attr('href'));\n } else {\n $(el).toggleClass('active', url.pathname.includes($(el).attr('href')));\n }\n });\n $('.sub-menu > a').map((i, el) => {\n if ($(el).attr('href') === '/') {\n $(el).toggleClass('active', url.pathname === $(el).attr('href'));\n } else {\n $(el).toggleClass('active', url.pathname.includes($(el).attr('href')));\n }\n });\n $('.bottom-mobile-menu a:not(.sub-menu-toggle)').map((i, el) => {\n const isOpened = $(el).attr('href') === '/' ? url.pathname === '/' : url.pathname.includes($(el).attr('href'));\n if (isOpened) {\n $('.bottom-mobile-menu a').map((i, el) => {\n $(el).toggleClass('isOpened', false);\n });\n }\n $(el).toggleClass('isOpened', isOpened);\n });\n }\n }\n if (redirect) {\n $.nette.ajax({\n url: this.href,\n off: ['history']\n });\n }\n this.href = null;\n this.popped = true;\n }\n }, {\n href: null,\n cache: true,\n popped: false,\n handleTitle: function (title) {\n document.title = title;\n }\n });\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvaGlzdG9yeS5hamF4LmpzPzVhNDciXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uICgkLCB1bmRlZmluZWQpIHtcblxuXHQvLyBJcyBIaXN0b3J5IEFQSSByZWxpYWJseSBzdXBwb3J0ZWQ/IChiYXNlZCBvbiBNb2Rlcm5penIgJiBQSkFYKVxuXHRpZiAoISh3aW5kb3cuaGlzdG9yeSAmJiBoaXN0b3J5LnB1c2hTdGF0ZSAmJiB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0JC5uZXR0ZS5leHQoJ3JlZGlyZWN0JywgZmFsc2UpO1xuXG5cdHZhciBmaW5kU25pcHBldHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdCQoJ1tpZF49XCJzbmlwcGV0LVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyICRlbCA9ICQodGhpcyk7XG5cdFx0XHRpZiAoISRlbC5pcygnW2RhdGEtaGlzdG9yeS1ub2NhY2hlXScpKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJGVsLmF0dHIoJ2lkJyksXG5cdFx0XHRcdFx0aHRtbDogJGVsLmh0bWwoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXHR2YXIgaGFuZGxlU3RhdGUgPSBmdW5jdGlvbiAoY29udGV4dCwgbmFtZSwgYXJncykge1xuXHRcdHZhciBoYW5kbGVyID0gY29udGV4dFsnaGFuZGxlJyArIG5hbWUuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKV07XG5cdFx0aWYgKGhhbmRsZXIpIHtcblx0XHRcdGhhbmRsZXIuYXBwbHkoY29udGV4dCwgYXJncyk7XG5cdFx0fVxuXHR9O1xuXG5cdCQubmV0dGUuZXh0KCdoaXN0b3J5Jywge1xuXHRcdGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBzbmlwcGV0c0V4dDtcblx0XHRcdGlmICh0aGlzLmNhY2hlICYmIChzbmlwcGV0c0V4dCA9ICQubmV0dGUuZXh0KCdzbmlwcGV0cycpKSkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVVJID0gZnVuY3Rpb24gKGRvbUNhY2hlKSB7XG5cdFx0XHRcdFx0dmFyIHNuaXBwZXRzID0ge307XG5cdFx0XHRcdFx0JC5lYWNoKGRvbUNhY2hlLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRzbmlwcGV0c1t0aGlzLmlkXSA9IHRoaXMuaHRtbDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRzbmlwcGV0c0V4dC51cGRhdGVTbmlwcGV0cyhzbmlwcGV0cywgdHJ1ZSk7XG5cdFx0XHRcdFx0JC5uZXR0ZS5sb2FkKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucG9wcGVkID0gISEoJ3N0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeSkgJiYgISF3aW5kb3cuaGlzdG9yeS5zdGF0ZTtcblx0XHRcdHZhciBpbml0aWFsVXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cblx0XHRcdCQod2luZG93KS5vbigncG9wc3RhdGUubmV0dGUnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdHZhciBzdGF0ZSA9IGUub3JpZ2luYWxFdmVudC5zdGF0ZSB8fCB0aGlzLmluaXRpYWxTdGF0ZTtcblx0XHRcdFx0dmFyIGluaXRpYWxQb3AgPSAoIXRoaXMucG9wcGVkICYmIGluaXRpYWxVcmwgPT09IHN0YXRlLmhyZWYpO1xuXHRcdFx0XHR0aGlzLnBvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGlmIChpbml0aWFsUG9wIHx8ICFlLm9yaWdpbmFsRXZlbnQuc3RhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuY2FjaGUgJiYgc3RhdGUudWkpIHtcblx0XHRcdFx0XHRoYW5kbGVTdGF0ZSh0aGlzLCAnVUknLCBbc3RhdGUudWldKTtcblx0XHRcdFx0XHRoYW5kbGVTdGF0ZSh0aGlzLCAndGl0bGUnLCBbc3RhdGUudGl0bGVdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkLm5ldHRlLmFqYXgoe1xuXHRcdFx0XHRcdFx0dXJsOiBzdGF0ZS5ocmVmLFxuXHRcdFx0XHRcdFx0b2ZmOiBbJ2hpc3RvcnknXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzKSk7XG5cblx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlID0ge1xuXHRcdFx0XHRuZXR0ZTogdHJ1ZSxcblx0XHRcdFx0aHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG5cdFx0XHRcdHRpdGxlOiBkb2N1bWVudC50aXRsZSxcblx0XHRcdFx0dWk6IHRoaXMuY2FjaGUgPyBmaW5kU25pcHBldHMoKSA6IG51bGxcblx0XHRcdH0sIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0fSxcblx0XHRiZWZvcmU6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG5cdFx0XHRpZiAoIXNldHRpbmdzLm5ldHRlKSB7XG5cdFx0XHRcdHRoaXMuaHJlZiA9IG51bGw7XG5cdFx0XHR9IGVsc2UgaWYgKCFzZXR0aW5ncy5uZXR0ZS5mb3JtKSB7XG5cdFx0XHRcdHRoaXMuaHJlZiA9IHNldHRpbmdzLm5ldHRlLnVpLmhyZWY7XG5cdFx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLm5ldHRlLmZvcm0uZ2V0KDApLm1ldGhvZCA9PT0gJ2dldCcpIHtcblx0XHRcdFx0dGhpcy5ocmVmID0gc2V0dGluZ3MubmV0dGUuZm9ybS5nZXQoMCkuYWN0aW9uIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5ocmVmID0gbnVsbDtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uIChwYXlsb2FkKSB7XG5cdFx0XHR2YXIgcmVkaXJlY3QgPSBwYXlsb2FkLnJlZGlyZWN0IHx8IHBheWxvYWQudXJsOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgJ3VybCdcblx0XHRcdGlmIChyZWRpcmVjdCkge1xuXHRcdFx0XHR2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnKCR8LyknKTtcblx0XHRcdFx0aWYgKChyZWRpcmVjdC5zdWJzdHJpbmcoMCw0KSA9PT0gJ2h0dHAnKSA/IHJlZ2V4cC50ZXN0KHJlZGlyZWN0KSA6IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLmhyZWYgPSByZWRpcmVjdDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmhyZWYpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmhyZWYpO1xuXHRcdFx0XHRjb25zdCBoYXNEb1BhcmFtZXRlciA9IHVybC5zZWFyY2hQYXJhbXMuaGFzKCdkbycpO1xuXHRcdFx0XHRjb25zb2xlLmxvZyhbXG5cdFx0XHRcdFx0dGhpcy5ocmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZiwgIWhhc0RvUGFyYW1ldGVyXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRpZiAodGhpcy5ocmVmICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZiAmJiAhaGFzRG9QYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRoaXN0b3J5LnB1c2hTdGF0ZSh7XG5cdFx0XHRcdFx0XHRuZXR0ZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGhyZWY6IHRoaXMuaHJlZixcblx0XHRcdFx0XHRcdHRpdGxlOiBkb2N1bWVudC50aXRsZSxcblx0XHRcdFx0XHRcdHVpOiB0aGlzLmNhY2hlID8gZmluZFNuaXBwZXRzKCkgOiBudWxsXG5cdFx0XHRcdFx0fSwgZG9jdW1lbnQudGl0bGUsIHRoaXMuaHJlZik7XG5cblx0XHRcdFx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMuaHJlZik7XG5cdFx0XHRcdFx0JCgnYS5uYXYtbGluaycpLm1hcCgoaSwgZWwpID0+IHtcblx0XHRcdFx0XHRcdGlmICgkKGVsKS5hdHRyKCdocmVmJykgPT09ICcvJykge1xuXHRcdFx0XHRcdFx0XHQkKGVsKS50b2dnbGVDbGFzcygnYWN0aXZlJywgdXJsLnBhdGhuYW1lID09PSAkKGVsKS5hdHRyKCdocmVmJykpXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQkKGVsKS50b2dnbGVDbGFzcygnYWN0aXZlJywgdXJsLnBhdGhuYW1lLmluY2x1ZGVzKCQoZWwpLmF0dHIoJ2hyZWYnKSkpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQkKCcuc3ViLW1lbnUgPiBhJykubWFwKChpLCBlbCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCQoZWwpLmF0dHIoJ2hyZWYnKSA9PT0gJy8nKSB7XG5cdFx0XHRcdFx0XHRcdCQoZWwpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnLCB1cmwucGF0aG5hbWUgPT09ICQoZWwpLmF0dHIoJ2hyZWYnKSlcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdCQoZWwpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnLCB1cmwucGF0aG5hbWUuaW5jbHVkZXMoJChlbCkuYXR0cignaHJlZicpKSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdCQoJy5ib3R0b20tbW9iaWxlLW1lbnUgYTpub3QoLnN1Yi1tZW51LXRvZ2dsZSknKS5tYXAoKGksIGVsKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc09wZW5lZCA9ICQoZWwpLmF0dHIoJ2hyZWYnKSA9PT0gJy8nXG5cdFx0XHRcdFx0XHRcdD8gKHVybC5wYXRobmFtZSA9PT0gJy8nKVxuXHRcdFx0XHRcdFx0XHQ6ICh1cmwucGF0aG5hbWUuaW5jbHVkZXMoJChlbCkuYXR0cignaHJlZicpKSk7XG5cdFx0XHRcdFx0XHRpZiAoaXNPcGVuZWQpIHtcblx0XHRcdFx0XHRcdFx0JCgnLmJvdHRvbS1tb2JpbGUtbWVudSBhJykubWFwKChpLCBlbCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdCQoZWwpLnRvZ2dsZUNsYXNzKCdpc09wZW5lZCcsIGZhbHNlKVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0JChlbCkudG9nZ2xlQ2xhc3MoJ2lzT3BlbmVkJywgaXNPcGVuZWQpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZWRpcmVjdCkge1xuXHRcdFx0XHQkLm5ldHRlLmFqYXgoe1xuXHRcdFx0XHRcdHVybDogdGhpcy5ocmVmLFxuXHRcdFx0XHRcdG9mZjogWydoaXN0b3J5J11cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhyZWYgPSBudWxsO1xuXHRcdFx0dGhpcy5wb3BwZWQgPSB0cnVlO1xuXHRcdH1cblx0fSwge1xuXHRcdGhyZWY6IG51bGwsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0cG9wcGVkOiBmYWxzZSxcblx0XHRoYW5kbGVUaXRsZTogZnVuY3Rpb24gKHRpdGxlKSB7XG5cdFx0XHRkb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHRcdH1cblx0fSk7XG5cbn0pKGpRdWVyeSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///82\n")},94:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var $ = __webpack_require__(796);\n$.nette.ext('live').after(function (el) {\n $(el).find('.menu').menuAim({\n rowSelector: \"> .item\",\n submenuSelector: '.submenu',\n activate: el => {\n $(el).addClass('opened');\n },\n deactivate: el => {\n $(el).removeClass('opened');\n },\n exitMenu: () => {\n $(el).find('.menu > .item').removeClass('opened');\n return true;\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL3NpZGVNZW51LmpzPzEzZWYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5uZXR0ZS5leHQoJ2xpdmUnKS5hZnRlcihmdW5jdGlvbiAoZWwpIHtcblx0JChlbCkuZmluZCgnLm1lbnUnKS5tZW51QWltKHtcblx0XHRyb3dTZWxlY3RvcjogXCI+IC5pdGVtXCIsXG5cdFx0c3VibWVudVNlbGVjdG9yOiAnLnN1Ym1lbnUnLFxuXHRcdGFjdGl2YXRlOiAoZWwpID0+IHtcblx0XHRcdCQoZWwpLmFkZENsYXNzKCdvcGVuZWQnKTtcblx0XHR9LFxuXHRcdGRlYWN0aXZhdGU6IChlbCkgPT4ge1xuXHRcdFx0JChlbCkucmVtb3ZlQ2xhc3MoJ29wZW5lZCcpO1xuXHRcdH0sXG5cdFx0ZXhpdE1lbnU6ICgpID0+IHtcblx0XHRcdCQoZWwpLmZpbmQoJy5tZW51ID4gLml0ZW0nKS5yZW1vdmVDbGFzcygnb3BlbmVkJyk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0pO1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///94\n")},425:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var $ = __webpack_require__(796);\n$.nette.ext('live').after(function (el, data) {\n setTimeout(() => {\n $(el).find('.delay-animate').removeClass('delay-animate');\n }, 250);\n $(el).find('.bottom-mobile-menu a').on('click', e => {\n e.stopPropagation();\n const selector = $(e.currentTarget).attr('href');\n const hasSubMenu = selector.startsWith('#') || selector.startsWith('.');\n const currentIsOpened = $(e.currentTarget).hasClass('isOpened');\n $('.bottom-mobile-menu a').map((i, el) => {\n if ($(el).attr('href').startsWith('#') || $(el).attr('href').startsWith('.')) {\n $($(el).attr('href')).toggleClass('opened', false);\n }\n $(el).toggleClass('isOpened', false);\n });\n if (hasSubMenu && !currentIsOpened) {\n const $subMenu = $(selector);\n const isOpened = $subMenu.hasClass('opened');\n $subMenu.toggleClass('opened', !isOpened);\n $(e.currentTarget).toggleClass('isOpened', !isOpened);\n }\n });\n $(el).find('#snippet--container').map((i, el) => {\n let prevScrollPos = $(el).scrollTop();\n let top = 0;\n $(el).on('scroll', e => {\n if ($(window).width() < 575) {\n const innerHeight = $(el)[0].scrollHeight;\n const outerHeight = $(el).height();\n let currentScrollPos = Math.min(Math.max($(el).scrollTop(), 0), innerHeight - outerHeight - 80);\n let diff = currentScrollPos - prevScrollPos;\n if (innerHeight - outerHeight > 15 && Math.abs(diff) > 0) {\n top = Math.min(Math.max(top + diff, 0), 80);\n prevScrollPos = currentScrollPos;\n }\n } else {\n prevScrollPos = $(el).scrollTop();\n top = 0;\n }\n $('.navbar').css({\n top: `${0 - top}px`\n });\n });\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI1LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvdG9nZ2xlTWVudS5qcz85MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIiQubmV0dGUuZXh0KCdsaXZlJykuYWZ0ZXIoZnVuY3Rpb24gKGVsLCBkYXRhKSB7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0JChlbCkuZmluZCgnLmRlbGF5LWFuaW1hdGUnKS5yZW1vdmVDbGFzcygnZGVsYXktYW5pbWF0ZScpO1xuXHR9LCAyNTApXG5cblx0JChlbCkuZmluZCgnLmJvdHRvbS1tb2JpbGUtbWVudSBhJykub24oJ2NsaWNrJywgKGUpID0+IHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gJChlLmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2hyZWYnKTtcblx0XHRjb25zdCBoYXNTdWJNZW51ID0gc2VsZWN0b3Iuc3RhcnRzV2l0aCgnIycpIHx8IHNlbGVjdG9yLnN0YXJ0c1dpdGgoJy4nKTtcblx0XHRjb25zdCBjdXJyZW50SXNPcGVuZWQgPSAkKGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoJ2lzT3BlbmVkJyk7XG5cblx0XHQkKCcuYm90dG9tLW1vYmlsZS1tZW51IGEnKS5tYXAoKGksIGVsKSA9PiB7XG5cdFx0XHRpZiAoJChlbCkuYXR0cignaHJlZicpLnN0YXJ0c1dpdGgoJyMnKSB8fCAkKGVsKS5hdHRyKCdocmVmJykuc3RhcnRzV2l0aCgnLicpKSB7XG5cdFx0XHRcdCQoJChlbCkuYXR0cignaHJlZicpKS50b2dnbGVDbGFzcygnb3BlbmVkJywgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0JChlbCkudG9nZ2xlQ2xhc3MoJ2lzT3BlbmVkJywgZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGhhc1N1Yk1lbnUgJiYgIWN1cnJlbnRJc09wZW5lZCkge1xuXHRcdFx0Y29uc3QgJHN1Yk1lbnUgPSAkKHNlbGVjdG9yKTtcblx0XHRcdGNvbnN0IGlzT3BlbmVkID0gJHN1Yk1lbnUuaGFzQ2xhc3MoJ29wZW5lZCcpO1xuXG5cdFx0XHQkc3ViTWVudS50b2dnbGVDbGFzcygnb3BlbmVkJywgIWlzT3BlbmVkKTtcblx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS50b2dnbGVDbGFzcygnaXNPcGVuZWQnLCAhaXNPcGVuZWQpO1xuXHRcdH1cblxuXHR9KVxuXG5cdCQoZWwpLmZpbmQoJyNzbmlwcGV0LS1jb250YWluZXInKS5tYXAoKGksIGVsKSA9PiB7XG5cdFx0bGV0IHByZXZTY3JvbGxQb3MgPSAkKGVsKS5zY3JvbGxUb3AoKTtcblx0XHRsZXQgdG9wID0gMDtcblx0XHQkKGVsKS5vbignc2Nyb2xsJywgKGUpID0+IHtcblx0XHRcdGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDU3NSkge1xuXHRcdFx0XHRjb25zdCBpbm5lckhlaWdodCA9ICQoZWwpWzBdLnNjcm9sbEhlaWdodDtcblx0XHRcdFx0Y29uc3Qgb3V0ZXJIZWlnaHQgPSAkKGVsKS5oZWlnaHQoKTtcblx0XHRcdFx0bGV0IGN1cnJlbnRTY3JvbGxQb3MgPSBNYXRoLm1pbihNYXRoLm1heCgkKGVsKS5zY3JvbGxUb3AoKSwgMCksIChpbm5lckhlaWdodCAtIG91dGVySGVpZ2h0IC0gODApKTtcblx0XHRcdFx0bGV0IGRpZmYgPSBjdXJyZW50U2Nyb2xsUG9zIC0gcHJldlNjcm9sbFBvcztcblxuXHRcdFx0XHRpZiAoKGlubmVySGVpZ2h0IC0gb3V0ZXJIZWlnaHQpID4gMTUgJiYgTWF0aC5hYnMoZGlmZikgPiAwKSB7XG5cdFx0XHRcdFx0dG9wID0gTWF0aC5taW4oTWF0aC5tYXgodG9wICsgZGlmZiwgMCksIDgwKTtcblx0XHRcdFx0XHRwcmV2U2Nyb2xsUG9zID0gY3VycmVudFNjcm9sbFBvcztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHJldlNjcm9sbFBvcyA9ICQoZWwpLnNjcm9sbFRvcCgpO1xuXHRcdFx0XHR0b3AgPSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQkKCcubmF2YmFyJykuY3NzKHt0b3A6IGAkezAgLSB0b3B9cHhgfSk7XG5cdFx0fSk7XG5cdH0pXG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///425\n")},566:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("/* provided dependency */ var jQuery = __webpack_require__(796);\n/**\n * DependentSelectBox\n * @author Dusan Hudak <admin@dusan-hudak.com>\n */\n\n(function ($) {\n $.fn.dependentSelectBox = function (options) {\n var dsb = this;\n dsb.timeout = [];\n dsb.settings = $.extend({\n suggestTimeout: 350,\n dataLinkName: 'dependentselectbox',\n dataParentsName: 'dependentselectboxParents'\n }, options);\n\n /**\n * Get link to signal\n * @param element\n * @returns {*}\n */\n this.getSignalLink = function (element) {\n var signalLink = element.data(dsb.settings.dataLinkName);\n var parents = element.data(dsb.settings.dataParentsName);\n if (signalLink == undefined) {\n return false;\n }\n $.each(parents, function (name, id) {\n var parentElement = $('#' + id);\n if (parentElement.length > 0) {\n var val = $(parentElement).val();\n if (val) {\n signalLink = signalLink + '&' + name + '=' + val;\n }\n }\n });\n return signalLink;\n };\n\n /**\n * process\n * @param e\n * @param parentElement\n */\n this.process = function (e, parentElement, dependentSelect) {\n // Validate if signalLink exist\n var signalLink = dsb.getSignalLink(dependentSelect);\n if (signalLink == false) {\n return false;\n }\n\n // Send ajax request\n $.ajax(signalLink, {\n async: false,\n success: function (payload) {\n var data = payload.dependentselectbox;\n if (data !== undefined) {\n var $select = $('#' + data.id);\n $select.empty();\n if (data.prompt != false) {\n $('<option>').attr('value', '').text(data.prompt).appendTo($select);\n }\n if (Object.keys(data.items).length > 0) {\n if (data.disabledWhenEmpty) {\n $select.prop('disabled', false);\n }\n $.each(data.items, function (key, value) {\n var option = $('<option>').attr('value', key).text(value);\n if (data.value !== null && key == data.value) {\n option.attr('selected', true);\n }\n option.appendTo($select);\n });\n } else {\n if (data.disabledWhenEmpty) {\n $select.prop('disabled', true);\n }\n }\n $select.change();\n }\n }\n });\n };\n\n /**\n * Event onChange\n * @param e\n * @param parentElement\n * @returns {boolean}\n */\n this.onChange = function (e, parentElement, dependentSelect) {\n dsb.process(e, parentElement, dependentSelect);\n };\n\n /**\n * Event onKeyup\n * @param e\n * @param parentElement\n * @returns {boolean}\n */\n this.onKeyup = function (e, parentElement, dependentSelect) {\n // reset timeout\n var timeoutKey = dependentSelect.attr('id');\n if (dsb.timeout[timeoutKey] != undefined && dsb.timeout[timeoutKey] != false) {\n clearTimeout(dsb.timeout[timeoutKey]);\n }\n dsb.timeout[timeoutKey] = setTimeout(function () {\n dsb.process(e, parentElement, dependentSelect);\n }, dsb.settings.suggestTimeout);\n };\n\n /**\n * Process\n */\n return this.each(function () {\n var $dependentSelect = $(this);\n var parents = $($dependentSelect).data(dsb.settings.dataParentsName);\n $.each(parents, function (name, id) {\n var parentElement = $('#' + id);\n if (parentElement.length > 0) {\n if (parentElement.prop('type') === 'text' || parentElement.prop('nodeName').toLowerCase() === 'textarea') {\n $(parentElement).on(\"keyup\", function (e) {\n dsb.onKeyup(e, $(this), $dependentSelect);\n });\n } else {\n $(parentElement).on(\"change\", function (e) {\n dsb.onChange(e, $(this), $dependentSelect);\n });\n }\n }\n });\n });\n };\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY2LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vdmVuZG9yL25hc2V4dC9kZXBlbmRlbnQtc2VsZWN0LWJveC9jbGllbnQtc2lkZS9kZXBlbmRlbnRTZWxlY3RCb3guanM/ZGNmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlcGVuZGVudFNlbGVjdEJveFxuICogQGF1dGhvciBEdXNhbiBIdWRhayA8YWRtaW5AZHVzYW4taHVkYWsuY29tPlxuICovXG5cbihmdW5jdGlvbiAoJCkge1xuXHQkLmZuLmRlcGVuZGVudFNlbGVjdEJveCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cblx0XHR2YXIgZHNiID0gdGhpcztcblx0XHRkc2IudGltZW91dCA9IFtdO1xuXHRcdGRzYi5zZXR0aW5ncyA9ICQuZXh0ZW5kKHtcblx0XHRcdHN1Z2dlc3RUaW1lb3V0OiAzNTAsXG5cdFx0XHRkYXRhTGlua05hbWU6ICdkZXBlbmRlbnRzZWxlY3Rib3gnLFxuXHRcdFx0ZGF0YVBhcmVudHNOYW1lOiAnZGVwZW5kZW50c2VsZWN0Ym94UGFyZW50cydcblx0XHR9LCBvcHRpb25zKTtcblxuXG5cdFx0LyoqXG5cdFx0ICogR2V0IGxpbmsgdG8gc2lnbmFsXG5cdFx0ICogQHBhcmFtIGVsZW1lbnRcblx0XHQgKiBAcmV0dXJucyB7Kn1cblx0XHQgKi9cblx0XHR0aGlzLmdldFNpZ25hbExpbmsgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0dmFyIHNpZ25hbExpbmsgPSBlbGVtZW50LmRhdGEoZHNiLnNldHRpbmdzLmRhdGFMaW5rTmFtZSk7XG5cdFx0XHR2YXIgcGFyZW50cyA9IGVsZW1lbnQuZGF0YShkc2Iuc2V0dGluZ3MuZGF0YVBhcmVudHNOYW1lKTtcblxuXHRcdFx0aWYgKHNpZ25hbExpbmsgPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0JC5lYWNoKHBhcmVudHMsIGZ1bmN0aW9uIChuYW1lLCBpZCkge1xuXHRcdFx0XHR2YXIgcGFyZW50RWxlbWVudCA9ICQoJyMnICsgaWQpO1xuXHRcdFx0XHRpZiAocGFyZW50RWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9ICQocGFyZW50RWxlbWVudCkudmFsKCk7XG5cdFx0XHRcdFx0aWYgKHZhbCkge1xuXHRcdFx0XHRcdFx0c2lnbmFsTGluayA9IHNpZ25hbExpbmsgKyAnJicgKyBuYW1lICsgJz0nICsgdmFsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHNpZ25hbExpbms7XG5cdFx0fTtcblxuXG5cdFx0LyoqXG5cdFx0ICogcHJvY2Vzc1xuXHRcdCAqIEBwYXJhbSBlXG5cdFx0ICogQHBhcmFtIHBhcmVudEVsZW1lbnRcblx0XHQgKi9cblx0XHR0aGlzLnByb2Nlc3MgPSBmdW5jdGlvbiAoZSwgcGFyZW50RWxlbWVudCwgZGVwZW5kZW50U2VsZWN0KSB7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGlmIHNpZ25hbExpbmsgZXhpc3Rcblx0XHRcdHZhciBzaWduYWxMaW5rID0gZHNiLmdldFNpZ25hbExpbmsoZGVwZW5kZW50U2VsZWN0KTtcblx0XHRcdGlmIChzaWduYWxMaW5rID09IGZhbHNlKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VuZCBhamF4IHJlcXVlc3Rcblx0XHRcdCQuYWpheChzaWduYWxMaW5rLCB7XG5cdFx0XHRcdGFzeW5jOiBmYWxzZSxcblx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24gKHBheWxvYWQpIHtcblx0XHRcdFx0XHR2YXIgZGF0YSA9IHBheWxvYWQuZGVwZW5kZW50c2VsZWN0Ym94O1xuXHRcdFx0XHRcdGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcblxuXHRcdFx0XHRcdFx0dmFyICRzZWxlY3QgPSAkKCcjJyArIGRhdGEuaWQpO1xuXHRcdFx0XHRcdFx0JHNlbGVjdC5lbXB0eSgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YS5wcm9tcHQgIT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0JCgnPG9wdGlvbj4nKVxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCd2YWx1ZScsICcnKS50ZXh0KGRhdGEucHJvbXB0KVxuXHRcdFx0XHRcdFx0XHRcdC5hcHBlbmRUbygkc2VsZWN0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGRhdGEuaXRlbXMpLmxlbmd0aCA+IDApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5kaXNhYmxlZFdoZW5FbXB0eSkge1xuXHRcdFx0XHRcdFx0XHRcdCRzZWxlY3QucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQkLmVhY2goZGF0YS5pdGVtcywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgb3B0aW9uID0gJCgnPG9wdGlvbj4nKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ3ZhbHVlJywga2V5KS50ZXh0KHZhbHVlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhLnZhbHVlICE9PSBudWxsICYmIGtleSA9PSBkYXRhLnZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb24uYXR0cignc2VsZWN0ZWQnLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRvcHRpb24uYXBwZW5kVG8oJHNlbGVjdCk7XG5cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5kaXNhYmxlZFdoZW5FbXB0eSkge1xuXHRcdFx0XHRcdFx0XHRcdCRzZWxlY3QucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQkc2VsZWN0LmNoYW5nZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fTtcblxuXG5cdFx0LyoqXG5cdFx0ICogRXZlbnQgb25DaGFuZ2Vcblx0XHQgKiBAcGFyYW0gZVxuXHRcdCAqIEBwYXJhbSBwYXJlbnRFbGVtZW50XG5cdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0dGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChlLCBwYXJlbnRFbGVtZW50LCBkZXBlbmRlbnRTZWxlY3QpIHtcblx0XHRcdGRzYi5wcm9jZXNzKGUsIHBhcmVudEVsZW1lbnQsIGRlcGVuZGVudFNlbGVjdCk7XG5cdFx0fTtcblxuXG5cdFx0LyoqXG5cdFx0ICogRXZlbnQgb25LZXl1cFxuXHRcdCAqIEBwYXJhbSBlXG5cdFx0ICogQHBhcmFtIHBhcmVudEVsZW1lbnRcblx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHR0aGlzLm9uS2V5dXAgPSBmdW5jdGlvbiAoZSwgcGFyZW50RWxlbWVudCwgZGVwZW5kZW50U2VsZWN0KSB7XG5cdFx0XHQvLyByZXNldCB0aW1lb3V0XG5cdFx0XHR2YXIgdGltZW91dEtleSA9IGRlcGVuZGVudFNlbGVjdC5hdHRyKCdpZCcpO1xuXHRcdFx0aWYgKGRzYi50aW1lb3V0W3RpbWVvdXRLZXldICE9IHVuZGVmaW5lZCAmJiBkc2IudGltZW91dFt0aW1lb3V0S2V5XSAhPSBmYWxzZSkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQoZHNiLnRpbWVvdXRbdGltZW91dEtleV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRkc2IudGltZW91dFt0aW1lb3V0S2V5XSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRkc2IucHJvY2VzcyhlLCBwYXJlbnRFbGVtZW50LCBkZXBlbmRlbnRTZWxlY3QpO1xuXHRcdFx0fSwgZHNiLnNldHRpbmdzLnN1Z2dlc3RUaW1lb3V0KTtcblx0XHR9O1xuXG5cdFx0LyoqXG5cdFx0ICogUHJvY2Vzc1xuXHRcdCAqL1xuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyICRkZXBlbmRlbnRTZWxlY3QgPSAkKHRoaXMpO1xuXG5cdFx0XHR2YXIgcGFyZW50cyA9ICQoJGRlcGVuZGVudFNlbGVjdCkuZGF0YShkc2Iuc2V0dGluZ3MuZGF0YVBhcmVudHNOYW1lKTtcblx0XHRcdCQuZWFjaChwYXJlbnRzLCBmdW5jdGlvbiAobmFtZSwgaWQpIHtcblx0XHRcdFx0dmFyIHBhcmVudEVsZW1lbnQgPSAkKCcjJyArIGlkKTtcblxuXHRcdFx0XHRpZiAocGFyZW50RWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aWYgKHBhcmVudEVsZW1lbnQucHJvcCgndHlwZScpID09PSAndGV4dCcgfHwgcGFyZW50RWxlbWVudC5wcm9wKCdub2RlTmFtZScpLnRvTG93ZXJDYXNlKCkgPT09ICd0ZXh0YXJlYScpIHtcblx0XHRcdFx0XHRcdCQocGFyZW50RWxlbWVudCkub24oXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0XHRkc2Iub25LZXl1cChlLCAkKHRoaXMpLCAkZGVwZW5kZW50U2VsZWN0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQkKHBhcmVudEVsZW1lbnQpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGRzYi5vbkNoYW5nZShlLCAkKHRoaXMpLCAkZGVwZW5kZW50U2VsZWN0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///566\n")},335:function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\r\n* @version: 3.1\r\n* @author: Dan Grossman http://www.dangrossman.info/\r\n* @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.\r\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\r\n* @website: http://www.daterangepicker.com/\r\n*/\r\n// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\r\n(function (root, factory) {\r\n if (true) {\r\n // AMD. Make globaly available as well\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(93), __webpack_require__(796)], __WEBPACK_AMD_DEFINE_RESULT__ = (function (moment, jquery) {\r\n if (!jquery.fn) jquery.fn = {}; // webpack server rendering\r\n if (typeof moment !== 'function' && moment.hasOwnProperty('default')) moment = moment['default']\r\n return factory(moment, jquery);\r\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n } else { var moment, jQuery; }\r\n}(this, function(moment, $) {\r\n var DateRangePicker = function(element, options, cb) {\r\n\r\n //default settings for options\r\n this.parentEl = 'body';\r\n this.element = $(element);\r\n this.startDate = moment().startOf('day');\r\n this.endDate = moment().endOf('day');\r\n this.minDate = false;\r\n this.maxDate = false;\r\n this.maxSpan = false;\r\n this.autoApply = false;\r\n this.singleDatePicker = false;\r\n this.showDropdowns = false;\r\n this.minYear = moment().subtract(100, 'year').format('YYYY');\r\n this.maxYear = moment().add(100, 'year').format('YYYY');\r\n this.showWeekNumbers = false;\r\n this.showISOWeekNumbers = false;\r\n this.showCustomRangeLabel = true;\r\n this.timePicker = false;\r\n this.timePicker24Hour = false;\r\n this.timePickerIncrement = 1;\r\n this.timePickerSeconds = false;\r\n this.linkedCalendars = true;\r\n this.autoUpdateInput = true;\r\n this.alwaysShowCalendars = false;\r\n this.ranges = {};\r\n\r\n this.opens = 'right';\r\n if (this.element.hasClass('pull-right'))\r\n this.opens = 'left';\r\n\r\n this.drops = 'down';\r\n if (this.element.hasClass('dropup'))\r\n this.drops = 'up';\r\n\r\n this.buttonClasses = 'btn btn-sm';\r\n this.applyButtonClasses = 'btn-primary';\r\n this.cancelButtonClasses = 'btn-default';\r\n\r\n this.locale = {\r\n direction: 'ltr',\r\n format: moment.localeData().longDateFormat('L'),\r\n separator: ' - ',\r\n applyLabel: 'Apply',\r\n cancelLabel: 'Cancel',\r\n weekLabel: 'W',\r\n customRangeLabel: 'Custom Range',\r\n daysOfWeek: moment.weekdaysMin(),\r\n monthNames: moment.monthsShort(),\r\n firstDay: moment.localeData().firstDayOfWeek()\r\n };\r\n\r\n this.callback = function() { };\r\n\r\n //some state information\r\n this.isShowing = false;\r\n this.leftCalendar = {};\r\n this.rightCalendar = {};\r\n\r\n //custom options from user\r\n if (typeof options !== 'object' || options === null)\r\n options = {};\r\n\r\n //allow setting options with data attributes\r\n //data-api options will be overwritten with custom javascript options\r\n options = $.extend(this.element.data(), options);\r\n\r\n //html template for the picker UI\r\n if (typeof options.template !== 'string' && !(options.template instanceof $))\r\n options.template =\r\n '<div class=\"daterangepicker\">' +\r\n '<div class=\"ranges\"></div>' +\r\n '<div class=\"drp-calendar left\">' +\r\n '<div class=\"calendar-table\"></div>' +\r\n '<div class=\"calendar-time\"></div>' +\r\n '</div>' +\r\n '<div class=\"drp-calendar right\">' +\r\n '<div class=\"calendar-table\"></div>' +\r\n '<div class=\"calendar-time\"></div>' +\r\n '</div>' +\r\n '<div class=\"drp-buttons\">' +\r\n '<span class=\"drp-selected\"></span>' +\r\n '<button class=\"cancelBtn\" type=\"button\"></button>' +\r\n '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\r\n '</div>' +\r\n '</div>';\r\n\r\n this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\r\n this.container = $(options.template).appendTo(this.parentEl);\r\n\r\n //\r\n // handle all the possible options overriding defaults\r\n //\r\n\r\n if (typeof options.locale === 'object') {\r\n\r\n if (typeof options.locale.direction === 'string')\r\n this.locale.direction = options.locale.direction;\r\n\r\n if (typeof options.locale.format === 'string')\r\n this.locale.format = options.locale.format;\r\n\r\n if (typeof options.locale.separator === 'string')\r\n this.locale.separator = options.locale.separator;\r\n\r\n if (typeof options.locale.daysOfWeek === 'object')\r\n this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\r\n\r\n if (typeof options.locale.monthNames === 'object')\r\n this.locale.monthNames = options.locale.monthNames.slice();\r\n\r\n if (typeof options.locale.firstDay === 'number')\r\n this.locale.firstDay = options.locale.firstDay;\r\n\r\n if (typeof options.locale.applyLabel === 'string')\r\n this.locale.applyLabel = options.locale.applyLabel;\r\n\r\n if (typeof options.locale.cancelLabel === 'string')\r\n this.locale.cancelLabel = options.locale.cancelLabel;\r\n\r\n if (typeof options.locale.weekLabel === 'string')\r\n this.locale.weekLabel = options.locale.weekLabel;\r\n\r\n if (typeof options.locale.customRangeLabel === 'string'){\r\n //Support unicode chars in the custom range name.\r\n var elem = document.createElement('textarea');\r\n elem.innerHTML = options.locale.customRangeLabel;\r\n var rangeHtml = elem.value;\r\n this.locale.customRangeLabel = rangeHtml;\r\n }\r\n }\r\n this.container.addClass(this.locale.direction);\r\n\r\n if (typeof options.startDate === 'string')\r\n this.startDate = moment(options.startDate, this.locale.format);\r\n\r\n if (typeof options.endDate === 'string')\r\n this.endDate = moment(options.endDate, this.locale.format);\r\n\r\n if (typeof options.minDate === 'string')\r\n this.minDate = moment(options.minDate, this.locale.format);\r\n\r\n if (typeof options.maxDate === 'string')\r\n this.maxDate = moment(options.maxDate, this.locale.format);\r\n\r\n if (typeof options.startDate === 'object')\r\n this.startDate = moment(options.startDate);\r\n\r\n if (typeof options.endDate === 'object')\r\n this.endDate = moment(options.endDate);\r\n\r\n if (typeof options.minDate === 'object')\r\n this.minDate = moment(options.minDate);\r\n\r\n if (typeof options.maxDate === 'object')\r\n this.maxDate = moment(options.maxDate);\r\n\r\n // sanity check for bad options\r\n if (this.minDate && this.startDate.isBefore(this.minDate))\r\n this.startDate = this.minDate.clone();\r\n\r\n // sanity check for bad options\r\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n this.endDate = this.maxDate.clone();\r\n\r\n if (typeof options.applyButtonClasses === 'string')\r\n this.applyButtonClasses = options.applyButtonClasses;\r\n\r\n if (typeof options.applyClass === 'string') //backwards compat\r\n this.applyButtonClasses = options.applyClass;\r\n\r\n if (typeof options.cancelButtonClasses === 'string')\r\n this.cancelButtonClasses = options.cancelButtonClasses;\r\n\r\n if (typeof options.cancelClass === 'string') //backwards compat\r\n this.cancelButtonClasses = options.cancelClass;\r\n\r\n if (typeof options.maxSpan === 'object')\r\n this.maxSpan = options.maxSpan;\r\n\r\n if (typeof options.dateLimit === 'object') //backwards compat\r\n this.maxSpan = options.dateLimit;\r\n\r\n if (typeof options.opens === 'string')\r\n this.opens = options.opens;\r\n\r\n if (typeof options.drops === 'string')\r\n this.drops = options.drops;\r\n\r\n if (typeof options.showWeekNumbers === 'boolean')\r\n this.showWeekNumbers = options.showWeekNumbers;\r\n\r\n if (typeof options.showISOWeekNumbers === 'boolean')\r\n this.showISOWeekNumbers = options.showISOWeekNumbers;\r\n\r\n if (typeof options.buttonClasses === 'string')\r\n this.buttonClasses = options.buttonClasses;\r\n\r\n if (typeof options.buttonClasses === 'object')\r\n this.buttonClasses = options.buttonClasses.join(' ');\r\n\r\n if (typeof options.showDropdowns === 'boolean')\r\n this.showDropdowns = options.showDropdowns;\r\n\r\n if (typeof options.minYear === 'number')\r\n this.minYear = options.minYear;\r\n\r\n if (typeof options.maxYear === 'number')\r\n this.maxYear = options.maxYear;\r\n\r\n if (typeof options.showCustomRangeLabel === 'boolean')\r\n this.showCustomRangeLabel = options.showCustomRangeLabel;\r\n\r\n if (typeof options.singleDatePicker === 'boolean') {\r\n this.singleDatePicker = options.singleDatePicker;\r\n if (this.singleDatePicker)\r\n this.endDate = this.startDate.clone();\r\n }\r\n\r\n if (typeof options.timePicker === 'boolean')\r\n this.timePicker = options.timePicker;\r\n\r\n if (typeof options.timePickerSeconds === 'boolean')\r\n this.timePickerSeconds = options.timePickerSeconds;\r\n\r\n if (typeof options.timePickerIncrement === 'number')\r\n this.timePickerIncrement = options.timePickerIncrement;\r\n\r\n if (typeof options.timePicker24Hour === 'boolean')\r\n this.timePicker24Hour = options.timePicker24Hour;\r\n\r\n if (typeof options.autoApply === 'boolean')\r\n this.autoApply = options.autoApply;\r\n\r\n if (typeof options.autoUpdateInput === 'boolean')\r\n this.autoUpdateInput = options.autoUpdateInput;\r\n\r\n if (typeof options.linkedCalendars === 'boolean')\r\n this.linkedCalendars = options.linkedCalendars;\r\n\r\n if (typeof options.isInvalidDate === 'function')\r\n this.isInvalidDate = options.isInvalidDate;\r\n\r\n if (typeof options.isCustomDate === 'function')\r\n this.isCustomDate = options.isCustomDate;\r\n\r\n if (typeof options.alwaysShowCalendars === 'boolean')\r\n this.alwaysShowCalendars = options.alwaysShowCalendars;\r\n\r\n // update day names order to firstDay\r\n if (this.locale.firstDay != 0) {\r\n var iterator = this.locale.firstDay;\r\n while (iterator > 0) {\r\n this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\r\n iterator--;\r\n }\r\n }\r\n\r\n var start, end, range;\r\n\r\n //if no start/end dates set, check if an input element contains initial values\r\n if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\r\n if ($(this.element).is(':text')) {\r\n var val = $(this.element).val(),\r\n split = val.split(this.locale.separator);\r\n\r\n start = end = null;\r\n\r\n if (split.length == 2) {\r\n start = moment(split[0], this.locale.format);\r\n end = moment(split[1], this.locale.format);\r\n } else if (this.singleDatePicker && val !== \"\") {\r\n start = moment(val, this.locale.format);\r\n end = moment(val, this.locale.format);\r\n }\r\n if (start !== null && end !== null) {\r\n this.setStartDate(start);\r\n this.setEndDate(end);\r\n }\r\n }\r\n }\r\n\r\n if (typeof options.ranges === 'object') {\r\n for (range in options.ranges) {\r\n\r\n if (typeof options.ranges[range][0] === 'string')\r\n start = moment(options.ranges[range][0], this.locale.format);\r\n else\r\n start = moment(options.ranges[range][0]);\r\n\r\n if (typeof options.ranges[range][1] === 'string')\r\n end = moment(options.ranges[range][1], this.locale.format);\r\n else\r\n end = moment(options.ranges[range][1]);\r\n\r\n // If the start or end date exceed those allowed by the minDate or maxSpan\r\n // options, shorten the range to the allowable period.\r\n if (this.minDate && start.isBefore(this.minDate))\r\n start = this.minDate.clone();\r\n\r\n var maxDate = this.maxDate;\r\n if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))\r\n maxDate = start.clone().add(this.maxSpan);\r\n if (maxDate && end.isAfter(maxDate))\r\n end = maxDate.clone();\r\n\r\n // If the end of the range is before the minimum or the start of the range is\r\n // after the maximum, don't display this range option at all.\r\n if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))\r\n || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\r\n continue;\r\n\r\n //Support unicode chars in the range names.\r\n var elem = document.createElement('textarea');\r\n elem.innerHTML = range;\r\n var rangeHtml = elem.value;\r\n\r\n this.ranges[rangeHtml] = [start, end];\r\n }\r\n\r\n var list = '<ul>';\r\n for (range in this.ranges) {\r\n list += '<li data-range-key=\"' + range + '\">' + range + '</li>';\r\n }\r\n if (this.showCustomRangeLabel) {\r\n list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + '</li>';\r\n }\r\n list += '</ul>';\r\n this.container.find('.ranges').prepend(list);\r\n }\r\n\r\n if (typeof cb === 'function') {\r\n this.callback = cb;\r\n }\r\n\r\n if (!this.timePicker) {\r\n this.startDate = this.startDate.startOf('day');\r\n this.endDate = this.endDate.endOf('day');\r\n this.container.find('.calendar-time').hide();\r\n }\r\n\r\n //can't be used together for now\r\n if (this.timePicker && this.autoApply)\r\n this.autoApply = false;\r\n\r\n if (this.autoApply) {\r\n this.container.addClass('auto-apply');\r\n }\r\n\r\n if (typeof options.ranges === 'object')\r\n this.container.addClass('show-ranges');\r\n\r\n if (this.singleDatePicker) {\r\n this.container.addClass('single');\r\n this.container.find('.drp-calendar.left').addClass('single');\r\n this.container.find('.drp-calendar.left').show();\r\n this.container.find('.drp-calendar.right').hide();\r\n if (!this.timePicker && this.autoApply) {\r\n this.container.addClass('auto-apply');\r\n }\r\n }\r\n\r\n if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\r\n this.container.addClass('show-calendar');\r\n }\r\n\r\n this.container.addClass('opens' + this.opens);\r\n\r\n //apply CSS classes and labels to buttons\r\n this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\r\n if (this.applyButtonClasses.length)\r\n this.container.find('.applyBtn').addClass(this.applyButtonClasses);\r\n if (this.cancelButtonClasses.length)\r\n this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);\r\n this.container.find('.applyBtn').html(this.locale.applyLabel);\r\n this.container.find('.cancelBtn').html(this.locale.cancelLabel);\r\n\r\n //\r\n // event listeners\r\n //\r\n\r\n this.container.find('.drp-calendar')\r\n .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\r\n .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\r\n .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\r\n .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\r\n .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\r\n .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\r\n .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this));\r\n\r\n this.container.find('.ranges')\r\n .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this));\r\n\r\n this.container.find('.drp-buttons')\r\n .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\r\n .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this));\r\n\r\n if (this.element.is('input') || this.element.is('button')) {\r\n this.element.on({\r\n 'click.daterangepicker': $.proxy(this.show, this),\r\n 'focus.daterangepicker': $.proxy(this.show, this),\r\n 'keyup.daterangepicker': $.proxy(this.elementChanged, this),\r\n 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility\r\n });\r\n } else {\r\n this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\r\n this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));\r\n }\r\n\r\n //\r\n // if attached to a text input, set the initial value\r\n //\r\n\r\n this.updateElement();\r\n\r\n };\r\n\r\n DateRangePicker.prototype = {\r\n\r\n constructor: DateRangePicker,\r\n\r\n setStartDate: function(startDate) {\r\n if (typeof startDate === 'string')\r\n this.startDate = moment(startDate, this.locale.format);\r\n\r\n if (typeof startDate === 'object')\r\n this.startDate = moment(startDate);\r\n\r\n if (!this.timePicker)\r\n this.startDate = this.startDate.startOf('day');\r\n\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n if (this.minDate && this.startDate.isBefore(this.minDate)) {\r\n this.startDate = this.minDate.clone();\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n }\r\n\r\n if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\r\n this.startDate = this.maxDate.clone();\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n }\r\n\r\n if (!this.isShowing)\r\n this.updateElement();\r\n\r\n this.updateMonthsInView();\r\n },\r\n\r\n setEndDate: function(endDate) {\r\n if (typeof endDate === 'string')\r\n this.endDate = moment(endDate, this.locale.format);\r\n\r\n if (typeof endDate === 'object')\r\n this.endDate = moment(endDate);\r\n\r\n if (!this.timePicker)\r\n this.endDate = this.endDate.endOf('day');\r\n\r\n if (this.timePicker && this.timePickerIncrement)\r\n this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n\r\n if (this.endDate.isBefore(this.startDate))\r\n this.endDate = this.startDate.clone();\r\n\r\n if (this.maxDate && this.endDate.isAfter(this.maxDate))\r\n this.endDate = this.maxDate.clone();\r\n\r\n if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))\r\n this.endDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n this.previousRightTime = this.endDate.clone();\r\n\r\n this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n\r\n if (!this.isShowing)\r\n this.updateElement();\r\n\r\n this.updateMonthsInView();\r\n },\r\n\r\n isInvalidDate: function() {\r\n return false;\r\n },\r\n\r\n isCustomDate: function() {\r\n return false;\r\n },\r\n\r\n updateView: function() {\r\n if (this.timePicker) {\r\n this.renderTimePicker('left');\r\n this.renderTimePicker('right');\r\n if (!this.endDate) {\r\n this.container.find('.right .calendar-time select').prop('disabled', true).addClass('disabled');\r\n } else {\r\n this.container.find('.right .calendar-time select').prop('disabled', false).removeClass('disabled');\r\n }\r\n }\r\n if (this.endDate)\r\n this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\r\n this.updateMonthsInView();\r\n this.updateCalendars();\r\n this.updateFormInputs();\r\n },\r\n\r\n updateMonthsInView: function() {\r\n if (this.endDate) {\r\n\r\n //if both dates are visible already, do nothing\r\n if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\r\n (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n &&\r\n (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\r\n ) {\r\n return;\r\n }\r\n\r\n this.leftCalendar.month = this.startDate.clone().date(2);\r\n if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\r\n this.rightCalendar.month = this.endDate.clone().date(2);\r\n } else {\r\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n }\r\n\r\n } else {\r\n if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\r\n this.leftCalendar.month = this.startDate.clone().date(2);\r\n this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n }\r\n }\r\n if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\r\n this.rightCalendar.month = this.maxDate.clone().date(2);\r\n this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\r\n }\r\n },\r\n\r\n updateCalendars: function() {\r\n\r\n if (this.timePicker) {\r\n var hour, minute, second;\r\n if (this.endDate) {\r\n hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n }\r\n second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.left .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n } else {\r\n hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n }\r\n second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.right .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n }\r\n this.leftCalendar.month.hour(hour).minute(minute).second(second);\r\n this.rightCalendar.month.hour(hour).minute(minute).second(second);\r\n }\r\n\r\n this.renderCalendar('left');\r\n this.renderCalendar('right');\r\n\r\n //highlight any predefined range matching the current start and end dates\r\n this.container.find('.ranges li').removeClass('active');\r\n if (this.endDate == null) return;\r\n\r\n this.calculateChosenLabel();\r\n },\r\n\r\n renderCalendar: function(side) {\r\n\r\n //\r\n // Build the matrix of dates that will populate the calendar\r\n //\r\n\r\n var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\r\n var month = calendar.month.month();\r\n var year = calendar.month.year();\r\n var hour = calendar.month.hour();\r\n var minute = calendar.month.minute();\r\n var second = calendar.month.second();\r\n var daysInMonth = moment([year, month]).daysInMonth();\r\n var firstDay = moment([year, month, 1]);\r\n var lastDay = moment([year, month, daysInMonth]);\r\n var lastMonth = moment(firstDay).subtract(1, 'month').month();\r\n var lastYear = moment(firstDay).subtract(1, 'month').year();\r\n var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\r\n var dayOfWeek = firstDay.day();\r\n\r\n //initialize a 6 rows x 7 columns array for the calendar\r\n var calendar = [];\r\n calendar.firstDay = firstDay;\r\n calendar.lastDay = lastDay;\r\n\r\n for (var i = 0; i < 6; i++) {\r\n calendar[i] = [];\r\n }\r\n\r\n //populate the calendar with date objects\r\n var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\r\n if (startDay > daysInLastMonth)\r\n startDay -= 7;\r\n\r\n if (dayOfWeek == this.locale.firstDay)\r\n startDay = daysInLastMonth - 6;\r\n\r\n var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\r\n\r\n var col, row;\r\n for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\r\n if (i > 0 && col % 7 === 0) {\r\n col = 0;\r\n row++;\r\n }\r\n calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\r\n curDate.hour(12);\r\n\r\n if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\r\n calendar[row][col] = this.minDate.clone();\r\n }\r\n\r\n if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\r\n calendar[row][col] = this.maxDate.clone();\r\n }\r\n\r\n }\r\n\r\n //make the calendar object available to hoverDate/clickDate\r\n if (side == 'left') {\r\n this.leftCalendar.calendar = calendar;\r\n } else {\r\n this.rightCalendar.calendar = calendar;\r\n }\r\n\r\n //\r\n // Display the calendar\r\n //\r\n\r\n var minDate = side == 'left' ? this.minDate : this.startDate;\r\n var maxDate = this.maxDate;\r\n var selected = side == 'left' ? this.startDate : this.endDate;\r\n var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};\r\n\r\n var html = '<table class=\"table-condensed\">';\r\n html += '<thead>';\r\n html += '<tr>';\r\n\r\n // add empty cell for week number\r\n if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n html += '<th></th>';\r\n\r\n if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\r\n html += '<th class=\"prev available\"><span></span></th>';\r\n } else {\r\n html += '<th></th>';\r\n }\r\n\r\n var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\r\n\r\n if (this.showDropdowns) {\r\n var currentMonth = calendar[1][1].month();\r\n var currentYear = calendar[1][1].year();\r\n var maxYear = (maxDate && maxDate.year()) || (this.maxYear);\r\n var minYear = (minDate && minDate.year()) || (this.minYear);\r\n var inMinYear = currentYear == minYear;\r\n var inMaxYear = currentYear == maxYear;\r\n\r\n var monthHtml = '<select class=\"monthselect\">';\r\n for (var m = 0; m < 12; m++) {\r\n if ((!inMinYear || (minDate && m >= minDate.month())) && (!inMaxYear || (maxDate && m <= maxDate.month()))) {\r\n monthHtml += \"<option value='\" + m + \"'\" +\r\n (m === currentMonth ? \" selected='selected'\" : \"\") +\r\n \">\" + this.locale.monthNames[m] + \"</option>\";\r\n } else {\r\n monthHtml += \"<option value='\" + m + \"'\" +\r\n (m === currentMonth ? \" selected='selected'\" : \"\") +\r\n \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\r\n }\r\n }\r\n monthHtml += \"</select>\";\r\n\r\n var yearHtml = '<select class=\"yearselect\">';\r\n for (var y = minYear; y <= maxYear; y++) {\r\n yearHtml += '<option value=\"' + y + '\"' +\r\n (y === currentYear ? ' selected=\"selected\"' : '') +\r\n '>' + y + '</option>';\r\n }\r\n yearHtml += '</select>';\r\n\r\n dateHtml = monthHtml + yearHtml;\r\n }\r\n\r\n html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\r\n if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\r\n html += '<th class=\"next available\"><span></span></th>';\r\n } else {\r\n html += '<th></th>';\r\n }\r\n\r\n html += '</tr>';\r\n html += '<tr>';\r\n\r\n // add week number label\r\n if (this.showWeekNumbers || this.showISOWeekNumbers)\r\n html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\r\n\r\n $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\r\n html += '<th>' + dayOfWeek + '</th>';\r\n });\r\n\r\n html += '</tr>';\r\n html += '</thead>';\r\n html += '<tbody>';\r\n\r\n //adjust maxDate to reflect the maxSpan setting in order to\r\n //grey out end dates beyond the maxSpan\r\n if (this.endDate == null && this.maxSpan) {\r\n var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');\r\n if (!maxDate || maxLimit.isBefore(maxDate)) {\r\n maxDate = maxLimit;\r\n }\r\n }\r\n\r\n for (var row = 0; row < 6; row++) {\r\n html += '<tr>';\r\n\r\n // add week number\r\n if (this.showWeekNumbers)\r\n html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\r\n else if (this.showISOWeekNumbers)\r\n html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\r\n\r\n for (var col = 0; col < 7; col++) {\r\n\r\n var classes = [];\r\n\r\n //highlight today's date\r\n if (calendar[row][col].isSame(new Date(), \"day\"))\r\n classes.push('today');\r\n\r\n //highlight weekends\r\n if (calendar[row][col].isoWeekday() > 5)\r\n classes.push('weekend');\r\n\r\n //grey out the dates in other months displayed at beginning and end of this calendar\r\n if (calendar[row][col].month() != calendar[1][1].month())\r\n classes.push('off', 'ends');\r\n\r\n //don't allow selection of dates before the minimum date\r\n if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\r\n classes.push('off', 'disabled');\r\n\r\n //don't allow selection of dates after the maximum date\r\n if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\r\n classes.push('off', 'disabled');\r\n\r\n //don't allow selection of date if a custom function decides it's invalid\r\n if (this.isInvalidDate(calendar[row][col]))\r\n classes.push('off', 'disabled');\r\n\r\n //highlight the currently selected start date\r\n if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\r\n classes.push('active', 'start-date');\r\n\r\n //highlight the currently selected end date\r\n if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\r\n classes.push('active', 'end-date');\r\n\r\n //highlight dates in-between the selected dates\r\n if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\r\n classes.push('in-range');\r\n\r\n //apply custom classes for this date\r\n var isCustom = this.isCustomDate(calendar[row][col]);\r\n if (isCustom !== false) {\r\n if (typeof isCustom === 'string')\r\n classes.push(isCustom);\r\n else\r\n Array.prototype.push.apply(classes, isCustom);\r\n }\r\n\r\n var cname = '', disabled = false;\r\n for (var i = 0; i < classes.length; i++) {\r\n cname += classes[i] + ' ';\r\n if (classes[i] == 'disabled')\r\n disabled = true;\r\n }\r\n if (!disabled)\r\n cname += 'available';\r\n\r\n html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\r\n\r\n }\r\n html += '</tr>';\r\n }\r\n\r\n html += '</tbody>';\r\n html += '</table>';\r\n\r\n this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);\r\n\r\n },\r\n\r\n renderTimePicker: function(side) {\r\n\r\n // Don't bother updating the time picker if it's currently disabled\r\n // because an end date hasn't been clicked yet\r\n if (side == 'right' && !this.endDate) return;\r\n\r\n var html, selected, minDate, maxDate = this.maxDate;\r\n\r\n if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))\r\n maxDate = this.startDate.clone().add(this.maxSpan);\r\n\r\n if (side == 'left') {\r\n selected = this.startDate.clone();\r\n minDate = this.minDate;\r\n } else if (side == 'right') {\r\n selected = this.endDate.clone();\r\n minDate = this.startDate;\r\n\r\n //Preserve the time already selected\r\n var timeSelector = this.container.find('.drp-calendar.right .calendar-time');\r\n if (timeSelector.html() != '') {\r\n\r\n selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val());\r\n selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val());\r\n selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val());\r\n\r\n if (!this.timePicker24Hour) {\r\n var ampm = timeSelector.find('.ampmselect option:selected').val();\r\n if (ampm === 'PM' && selected.hour() < 12)\r\n selected.hour(selected.hour() + 12);\r\n if (ampm === 'AM' && selected.hour() === 12)\r\n selected.hour(0);\r\n }\r\n\r\n }\r\n\r\n if (selected.isBefore(this.startDate))\r\n selected = this.startDate.clone();\r\n\r\n if (maxDate && selected.isAfter(maxDate))\r\n selected = maxDate.clone();\r\n\r\n }\r\n\r\n //\r\n // hours\r\n //\r\n\r\n html = '<select class=\"hourselect\">';\r\n\r\n var start = this.timePicker24Hour ? 0 : 1;\r\n var end = this.timePicker24Hour ? 23 : 12;\r\n\r\n for (var i = start; i <= end; i++) {\r\n var i_in_24 = i;\r\n if (!this.timePicker24Hour)\r\n i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\r\n\r\n var time = selected.clone().hour(i_in_24);\r\n var disabled = false;\r\n if (minDate && time.minute(59).isBefore(minDate))\r\n disabled = true;\r\n if (maxDate && time.minute(0).isAfter(maxDate))\r\n disabled = true;\r\n\r\n if (i_in_24 == selected.hour() && !disabled) {\r\n html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\r\n } else if (disabled) {\r\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\r\n } else {\r\n html += '<option value=\"' + i + '\">' + i + '</option>';\r\n }\r\n }\r\n\r\n html += '</select> ';\r\n\r\n //\r\n // minutes\r\n //\r\n\r\n html += ': <select class=\"minuteselect\">';\r\n\r\n for (var i = 0; i < 60; i += this.timePickerIncrement) {\r\n var padded = i < 10 ? '0' + i : i;\r\n var time = selected.clone().minute(i);\r\n\r\n var disabled = false;\r\n if (minDate && time.second(59).isBefore(minDate))\r\n disabled = true;\r\n if (maxDate && time.second(0).isAfter(maxDate))\r\n disabled = true;\r\n\r\n if (selected.minute() == i && !disabled) {\r\n html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\r\n } else if (disabled) {\r\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\r\n } else {\r\n html += '<option value=\"' + i + '\">' + padded + '</option>';\r\n }\r\n }\r\n\r\n html += '</select> ';\r\n\r\n //\r\n // seconds\r\n //\r\n\r\n if (this.timePickerSeconds) {\r\n html += ': <select class=\"secondselect\">';\r\n\r\n for (var i = 0; i < 60; i++) {\r\n var padded = i < 10 ? '0' + i : i;\r\n var time = selected.clone().second(i);\r\n\r\n var disabled = false;\r\n if (minDate && time.isBefore(minDate))\r\n disabled = true;\r\n if (maxDate && time.isAfter(maxDate))\r\n disabled = true;\r\n\r\n if (selected.second() == i && !disabled) {\r\n html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\r\n } else if (disabled) {\r\n html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\r\n } else {\r\n html += '<option value=\"' + i + '\">' + padded + '</option>';\r\n }\r\n }\r\n\r\n html += '</select> ';\r\n }\r\n\r\n //\r\n // AM/PM\r\n //\r\n\r\n if (!this.timePicker24Hour) {\r\n html += '<select class=\"ampmselect\">';\r\n\r\n var am_html = '';\r\n var pm_html = '';\r\n\r\n if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\r\n am_html = ' disabled=\"disabled\" class=\"disabled\"';\r\n\r\n if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\r\n pm_html = ' disabled=\"disabled\" class=\"disabled\"';\r\n\r\n if (selected.hour() >= 12) {\r\n html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\r\n } else {\r\n html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\r\n }\r\n\r\n html += '</select>';\r\n }\r\n\r\n this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);\r\n\r\n },\r\n\r\n updateFormInputs: function() {\r\n\r\n if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\r\n this.container.find('button.applyBtn').prop('disabled', false);\r\n } else {\r\n this.container.find('button.applyBtn').prop('disabled', true);\r\n }\r\n\r\n },\r\n\r\n move: function() {\r\n var parentOffset = { top: 0, left: 0 },\r\n containerTop,\r\n drops = this.drops;\r\n\r\n var parentRightEdge = $(window).width();\r\n if (!this.parentEl.is('body')) {\r\n parentOffset = {\r\n top: this.parentEl.offset().top - this.parentEl.scrollTop(),\r\n left: this.parentEl.offset().left - this.parentEl.scrollLeft()\r\n };\r\n parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\r\n }\r\n\r\n switch (drops) {\r\n case 'auto':\r\n containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\r\n if (containerTop + this.container.outerHeight() >= this.parentEl[0].scrollHeight) {\r\n containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\r\n drops = 'up';\r\n }\r\n break;\r\n case 'up':\r\n containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\r\n break;\r\n default:\r\n containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\r\n break;\r\n }\r\n\r\n // Force the container to it's actual width\r\n this.container.css({\r\n top: 0,\r\n left: 0,\r\n right: 'auto'\r\n });\r\n var containerWidth = this.container.outerWidth();\r\n\r\n this.container.toggleClass('drop-up', drops == 'up');\r\n\r\n if (this.opens == 'left') {\r\n var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();\r\n if (containerWidth + containerRight > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n right: 'auto',\r\n left: 9\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n right: containerRight,\r\n left: 'auto'\r\n });\r\n }\r\n } else if (this.opens == 'center') {\r\n var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\r\n - containerWidth / 2;\r\n if (containerLeft < 0) {\r\n this.container.css({\r\n top: containerTop,\r\n right: 'auto',\r\n left: 9\r\n });\r\n } else if (containerLeft + containerWidth > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n left: 'auto',\r\n right: 0\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n left: containerLeft,\r\n right: 'auto'\r\n });\r\n }\r\n } else {\r\n var containerLeft = this.element.offset().left - parentOffset.left;\r\n if (containerLeft + containerWidth > $(window).width()) {\r\n this.container.css({\r\n top: containerTop,\r\n left: 'auto',\r\n right: 0\r\n });\r\n } else {\r\n this.container.css({\r\n top: containerTop,\r\n left: containerLeft,\r\n right: 'auto'\r\n });\r\n }\r\n }\r\n },\r\n\r\n show: function(e) {\r\n if (this.isShowing) return;\r\n\r\n // Create a click proxy that is private to this instance of datepicker, for unbinding\r\n this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\r\n\r\n // Bind global datepicker mousedown for hiding and\r\n $(document)\r\n .on('mousedown.daterangepicker', this._outsideClickProxy)\r\n // also support mobile devices\r\n .on('touchend.daterangepicker', this._outsideClickProxy)\r\n // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\r\n .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\r\n // and also close when focus changes to outside the picker (eg. tabbing between controls)\r\n .on('focusin.daterangepicker', this._outsideClickProxy);\r\n\r\n // Reposition the picker if the window is resized while it's open\r\n $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\r\n\r\n this.oldStartDate = this.startDate.clone();\r\n this.oldEndDate = this.endDate.clone();\r\n this.previousRightTime = this.endDate.clone();\r\n\r\n this.updateView();\r\n this.container.show();\r\n this.move();\r\n this.element.trigger('show.daterangepicker', this);\r\n this.isShowing = true;\r\n },\r\n\r\n hide: function(e) {\r\n if (!this.isShowing) return;\r\n\r\n //incomplete date selection, revert to last values\r\n if (!this.endDate) {\r\n this.startDate = this.oldStartDate.clone();\r\n this.endDate = this.oldEndDate.clone();\r\n }\r\n\r\n //if a new date range was selected, invoke the user callback function\r\n if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\r\n this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);\r\n\r\n //if picker is attached to a text input, update it\r\n this.updateElement();\r\n\r\n $(document).off('.daterangepicker');\r\n $(window).off('.daterangepicker');\r\n this.container.hide();\r\n this.element.trigger('hide.daterangepicker', this);\r\n this.isShowing = false;\r\n },\r\n\r\n toggle: function(e) {\r\n if (this.isShowing) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n },\r\n\r\n outsideClick: function(e) {\r\n var target = $(e.target);\r\n // if the page is clicked anywhere except within the daterangerpicker/button\r\n // itself then call this.hide()\r\n if (\r\n // ie modal dialog fix\r\n e.type == \"focusin\" ||\r\n target.closest(this.element).length ||\r\n target.closest(this.container).length ||\r\n target.closest('.calendar-table').length\r\n ) return;\r\n this.hide();\r\n this.element.trigger('outsideClick.daterangepicker', this);\r\n },\r\n\r\n showCalendars: function() {\r\n this.container.addClass('show-calendar');\r\n this.move();\r\n this.element.trigger('showCalendar.daterangepicker', this);\r\n },\r\n\r\n hideCalendars: function() {\r\n this.container.removeClass('show-calendar');\r\n this.element.trigger('hideCalendar.daterangepicker', this);\r\n },\r\n\r\n clickRange: function(e) {\r\n var label = e.target.getAttribute('data-range-key');\r\n this.chosenLabel = label;\r\n if (label == this.locale.customRangeLabel) {\r\n this.showCalendars();\r\n } else {\r\n var dates = this.ranges[label];\r\n this.startDate = dates[0];\r\n this.endDate = dates[1];\r\n\r\n if (!this.timePicker) {\r\n this.startDate.startOf('day');\r\n this.endDate.endOf('day');\r\n }\r\n\r\n if (!this.alwaysShowCalendars)\r\n this.hideCalendars();\r\n this.clickApply();\r\n }\r\n },\r\n\r\n clickPrev: function(e) {\r\n var cal = $(e.target).parents('.drp-calendar');\r\n if (cal.hasClass('left')) {\r\n this.leftCalendar.month.subtract(1, 'month');\r\n if (this.linkedCalendars)\r\n this.rightCalendar.month.subtract(1, 'month');\r\n } else {\r\n this.rightCalendar.month.subtract(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n clickNext: function(e) {\r\n var cal = $(e.target).parents('.drp-calendar');\r\n if (cal.hasClass('left')) {\r\n this.leftCalendar.month.add(1, 'month');\r\n } else {\r\n this.rightCalendar.month.add(1, 'month');\r\n if (this.linkedCalendars)\r\n this.leftCalendar.month.add(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n hoverDate: function(e) {\r\n\r\n //ignore dates that can't be selected\r\n if (!$(e.target).hasClass('available')) return;\r\n\r\n var title = $(e.target).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(e.target).parents('.drp-calendar');\r\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n //highlight the dates between the start date and the date being hovered as a potential end date\r\n var leftCalendar = this.leftCalendar;\r\n var rightCalendar = this.rightCalendar;\r\n var startDate = this.startDate;\r\n if (!this.endDate) {\r\n this.container.find('.drp-calendar tbody td').each(function(index, el) {\r\n\r\n //skip week numbers, only look at dates\r\n if ($(el).hasClass('week')) return;\r\n\r\n var title = $(el).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(el).parents('.drp-calendar');\r\n var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\r\n\r\n if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\r\n $(el).addClass('in-range');\r\n } else {\r\n $(el).removeClass('in-range');\r\n }\r\n\r\n });\r\n }\r\n\r\n },\r\n\r\n clickDate: function(e) {\r\n\r\n if (!$(e.target).hasClass('available')) return;\r\n\r\n var title = $(e.target).attr('data-title');\r\n var row = title.substr(1, 1);\r\n var col = title.substr(3, 1);\r\n var cal = $(e.target).parents('.drp-calendar');\r\n var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n //\r\n // this function needs to do a few things:\r\n // * alternate between selecting a start and end date for the range,\r\n // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\r\n // * if autoapply is enabled, and an end date was chosen, apply the selection\r\n // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\r\n // * if one of the inputs above the calendars was focused, cancel that manual input\r\n //\r\n\r\n if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\r\n if (this.timePicker) {\r\n var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.left .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\r\n date = date.clone().hour(hour).minute(minute).second(second);\r\n }\r\n this.endDate = null;\r\n this.setStartDate(date.clone());\r\n } else if (!this.endDate && date.isBefore(this.startDate)) {\r\n //special case: clicking the same date for start/end,\r\n //but the time of the end date is before the start date\r\n this.setEndDate(this.startDate.clone());\r\n } else { // picking end\r\n if (this.timePicker) {\r\n var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\r\n if (!this.timePicker24Hour) {\r\n var ampm = this.container.find('.right .ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\r\n date = date.clone().hour(hour).minute(minute).second(second);\r\n }\r\n this.setEndDate(date.clone());\r\n if (this.autoApply) {\r\n this.calculateChosenLabel();\r\n this.clickApply();\r\n }\r\n }\r\n\r\n if (this.singleDatePicker) {\r\n this.setEndDate(this.startDate);\r\n if (!this.timePicker && this.autoApply)\r\n this.clickApply();\r\n }\r\n\r\n this.updateView();\r\n\r\n //This is to cancel the blur event handler if the mouse was in one of the inputs\r\n e.stopPropagation();\r\n\r\n },\r\n\r\n calculateChosenLabel: function () {\r\n var customRange = true;\r\n var i = 0;\r\n for (var range in this.ranges) {\r\n if (this.timePicker) {\r\n var format = this.timePickerSeconds ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD HH:mm\";\r\n //ignore times when comparing dates if time picker seconds is not enabled\r\n if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\r\n customRange = false;\r\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n break;\r\n }\r\n } else {\r\n //ignore times when comparing dates if time picker is not enabled\r\n if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\r\n customRange = false;\r\n this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\r\n break;\r\n }\r\n }\r\n i++;\r\n }\r\n if (customRange) {\r\n if (this.showCustomRangeLabel) {\r\n this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');\r\n } else {\r\n this.chosenLabel = null;\r\n }\r\n this.showCalendars();\r\n }\r\n },\r\n\r\n clickApply: function(e) {\r\n this.hide();\r\n this.element.trigger('apply.daterangepicker', this);\r\n },\r\n\r\n clickCancel: function(e) {\r\n this.startDate = this.oldStartDate;\r\n this.endDate = this.oldEndDate;\r\n this.hide();\r\n this.element.trigger('cancel.daterangepicker', this);\r\n },\r\n\r\n monthOrYearChanged: function(e) {\r\n var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),\r\n leftOrRight = isLeft ? 'left' : 'right',\r\n cal = this.container.find('.drp-calendar.'+leftOrRight);\r\n\r\n // Month must be Number for new moment versions\r\n var month = parseInt(cal.find('.monthselect').val(), 10);\r\n var year = cal.find('.yearselect').val();\r\n\r\n if (!isLeft) {\r\n if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\r\n month = this.startDate.month();\r\n year = this.startDate.year();\r\n }\r\n }\r\n\r\n if (this.minDate) {\r\n if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\r\n month = this.minDate.month();\r\n year = this.minDate.year();\r\n }\r\n }\r\n\r\n if (this.maxDate) {\r\n if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\r\n month = this.maxDate.month();\r\n year = this.maxDate.year();\r\n }\r\n }\r\n\r\n if (isLeft) {\r\n this.leftCalendar.month.month(month).year(year);\r\n if (this.linkedCalendars)\r\n this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\r\n } else {\r\n this.rightCalendar.month.month(month).year(year);\r\n if (this.linkedCalendars)\r\n this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\r\n }\r\n this.updateCalendars();\r\n },\r\n\r\n timeChanged: function(e) {\r\n\r\n var cal = $(e.target).closest('.drp-calendar'),\r\n isLeft = cal.hasClass('left');\r\n\r\n var hour = parseInt(cal.find('.hourselect').val(), 10);\r\n var minute = parseInt(cal.find('.minuteselect').val(), 10);\r\n if (isNaN(minute)) {\r\n minute = parseInt(cal.find('.minuteselect option:last').val(), 10);\r\n }\r\n var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\r\n\r\n if (!this.timePicker24Hour) {\r\n var ampm = cal.find('.ampmselect').val();\r\n if (ampm === 'PM' && hour < 12)\r\n hour += 12;\r\n if (ampm === 'AM' && hour === 12)\r\n hour = 0;\r\n }\r\n\r\n if (isLeft) {\r\n var start = this.startDate.clone();\r\n start.hour(hour);\r\n start.minute(minute);\r\n start.second(second);\r\n this.setStartDate(start);\r\n if (this.singleDatePicker) {\r\n this.endDate = this.startDate.clone();\r\n } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\r\n this.setEndDate(start.clone());\r\n }\r\n } else if (this.endDate) {\r\n var end = this.endDate.clone();\r\n end.hour(hour);\r\n end.minute(minute);\r\n end.second(second);\r\n this.setEndDate(end);\r\n }\r\n\r\n //update the calendars so all clickable dates reflect the new time component\r\n this.updateCalendars();\r\n\r\n //update the form inputs above the calendars with the new time\r\n this.updateFormInputs();\r\n\r\n //re-render the time pickers because changing one selection can affect what's enabled in another\r\n this.renderTimePicker('left');\r\n this.renderTimePicker('right');\r\n\r\n },\r\n\r\n elementChanged: function() {\r\n if (!this.element.is('input')) return;\r\n if (!this.element.val().length) return;\r\n\r\n var dateString = this.element.val().split(this.locale.separator),\r\n start = null,\r\n end = null;\r\n\r\n if (dateString.length === 2) {\r\n start = moment(dateString[0], this.locale.format);\r\n end = moment(dateString[1], this.locale.format);\r\n }\r\n\r\n if (this.singleDatePicker || start === null || end === null) {\r\n start = moment(this.element.val(), this.locale.format);\r\n end = start;\r\n }\r\n\r\n if (!start.isValid() || !end.isValid()) return;\r\n\r\n this.setStartDate(start);\r\n this.setEndDate(end);\r\n this.updateView();\r\n },\r\n\r\n keydown: function(e) {\r\n //hide on tab or enter\r\n if ((e.keyCode === 9) || (e.keyCode === 13)) {\r\n this.hide();\r\n }\r\n\r\n //hide on esc and prevent propagation\r\n if (e.keyCode === 27) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.hide();\r\n }\r\n },\r\n\r\n updateElement: function() {\r\n if (this.element.is('input') && this.autoUpdateInput) {\r\n var newValue = this.startDate.format(this.locale.format);\r\n if (!this.singleDatePicker) {\r\n newValue += this.locale.separator + this.endDate.format(this.locale.format);\r\n }\r\n if (newValue !== this.element.val()) {\r\n this.element.val(newValue).trigger('change');\r\n }\r\n }\r\n },\r\n\r\n remove: function() {\r\n this.container.remove();\r\n this.element.off('.daterangepicker');\r\n this.element.removeData();\r\n }\r\n\r\n };\r\n\r\n $.fn.daterangepicker = function(options, callback) {\r\n var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\r\n this.each(function() {\r\n var el = $(this);\r\n if (el.data('daterangepicker'))\r\n el.data('daterangepicker').remove();\r\n el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));\r\n });\r\n return this;\r\n };\r\n\r\n return DateRangePicker;\r\n\r\n}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzM1LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kYXRlcmFuZ2VwaWNrZXIvZGF0ZXJhbmdlcGlja2VyLmpzPzc4NzgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogQHZlcnNpb246IDMuMVxyXG4qIEBhdXRob3I6IERhbiBHcm9zc21hbiBodHRwOi8vd3d3LmRhbmdyb3NzbWFuLmluZm8vXHJcbiogQGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTkgRGFuIEdyb3NzbWFuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4qIEBsaWNlbnNlOiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuIFNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG4qIEB3ZWJzaXRlOiBodHRwOi8vd3d3LmRhdGVyYW5nZXBpY2tlci5jb20vXHJcbiovXHJcbi8vIEZvbGxvd2luZyB0aGUgVU1EIHRlbXBsYXRlIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvdGVtcGxhdGVzL3JldHVybkV4cG9ydHNHbG9iYWwuanNcclxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgLy8gQU1ELiBNYWtlIGdsb2JhbHkgYXZhaWxhYmxlIGFzIHdlbGxcclxuICAgICAgICBkZWZpbmUoWydtb21lbnQnLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChtb21lbnQsIGpxdWVyeSkge1xyXG4gICAgICAgICAgICBpZiAoIWpxdWVyeS5mbikganF1ZXJ5LmZuID0ge307IC8vIHdlYnBhY2sgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vbWVudCAhPT0gJ2Z1bmN0aW9uJyAmJiBtb21lbnQuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSkgbW9tZW50ID0gbW9tZW50WydkZWZhdWx0J11cclxuICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkobW9tZW50LCBqcXVlcnkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgICAgIC8vIE5vZGUgLyBCcm93c2VyaWZ5XHJcbiAgICAgICAgLy9pc29tb3JwaGljIGlzc3VlXHJcbiAgICAgICAgdmFyIGpRdWVyeSA9ICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5qUXVlcnkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCFqUXVlcnkpIHtcclxuICAgICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XHJcbiAgICAgICAgICAgIGlmICghalF1ZXJ5LmZuKSBqUXVlcnkuZm4gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1vbWVudCA9ICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubW9tZW50ICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5tb21lbnQgOiByZXF1aXJlKCdtb21lbnQnKTtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50LCBqUXVlcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHNcclxuICAgICAgICByb290LmRhdGVyYW5nZXBpY2tlciA9IGZhY3Rvcnkocm9vdC5tb21lbnQsIHJvb3QualF1ZXJ5KTtcclxuICAgIH1cclxufSh0aGlzLCBmdW5jdGlvbihtb21lbnQsICQpIHtcclxuICAgIHZhciBEYXRlUmFuZ2VQaWNrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCBjYikge1xyXG5cclxuICAgICAgICAvL2RlZmF1bHQgc2V0dGluZ3MgZm9yIG9wdGlvbnNcclxuICAgICAgICB0aGlzLnBhcmVudEVsID0gJ2JvZHknO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBtb21lbnQoKS5zdGFydE9mKCdkYXknKTtcclxuICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQoKS5lbmRPZignZGF5Jyk7XHJcbiAgICAgICAgdGhpcy5taW5EYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXhTcGFuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hdXRvQXBwbHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNpbmdsZURhdGVQaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dEcm9wZG93bnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pblllYXIgPSBtb21lbnQoKS5zdWJ0cmFjdCgxMDAsICd5ZWFyJykuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICAgICAgdGhpcy5tYXhZZWFyID0gbW9tZW50KCkuYWRkKDEwMCwgJ3llYXInKS5mb3JtYXQoJ1lZWVknKTtcclxuICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VyMjRIb3VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VySW5jcmVtZW50ID0gMTtcclxuICAgICAgICB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5saW5rZWRDYWxlbmRhcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZUlucHV0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJhbmdlcyA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5zID0gJ3JpZ2h0JztcclxuICAgICAgICBpZiAodGhpcy5lbGVtZW50Lmhhc0NsYXNzKCdwdWxsLXJpZ2h0JykpXHJcbiAgICAgICAgICAgIHRoaXMub3BlbnMgPSAnbGVmdCc7XHJcblxyXG4gICAgICAgIHRoaXMuZHJvcHMgPSAnZG93bic7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oYXNDbGFzcygnZHJvcHVwJykpXHJcbiAgICAgICAgICAgIHRoaXMuZHJvcHMgPSAndXAnO1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbkNsYXNzZXMgPSAnYnRuIGJ0bi1zbSc7XHJcbiAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSAnYnRuLXByaW1hcnknO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uQ2xhc3NlcyA9ICdidG4tZGVmYXVsdCc7XHJcblxyXG4gICAgICAgIHRoaXMubG9jYWxlID0ge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsdHInLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IG1vbWVudC5sb2NhbGVEYXRhKCkubG9uZ0RhdGVGb3JtYXQoJ0wnKSxcclxuICAgICAgICAgICAgc2VwYXJhdG9yOiAnIC0gJyxcclxuICAgICAgICAgICAgYXBwbHlMYWJlbDogJ0FwcGx5JyxcclxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICdDYW5jZWwnLFxyXG4gICAgICAgICAgICB3ZWVrTGFiZWw6ICdXJyxcclxuICAgICAgICAgICAgY3VzdG9tUmFuZ2VMYWJlbDogJ0N1c3RvbSBSYW5nZScsXHJcbiAgICAgICAgICAgIGRheXNPZldlZWs6IG1vbWVudC53ZWVrZGF5c01pbigpLFxyXG4gICAgICAgICAgICBtb250aE5hbWVzOiBtb21lbnQubW9udGhzU2hvcnQoKSxcclxuICAgICAgICAgICAgZmlyc3REYXk6IG1vbWVudC5sb2NhbGVEYXRhKCkuZmlyc3REYXlPZldlZWsoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsgfTtcclxuXHJcbiAgICAgICAgLy9zb21lIHN0YXRlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgdGhpcy5pc1Nob3dpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhciA9IHt9O1xyXG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhciA9IHt9O1xyXG5cclxuICAgICAgICAvL2N1c3RvbSBvcHRpb25zIGZyb20gdXNlclxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgb3B0aW9ucyA9PT0gbnVsbClcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgICAvL2FsbG93IHNldHRpbmcgb3B0aW9ucyB3aXRoIGRhdGEgYXR0cmlidXRlc1xyXG4gICAgICAgIC8vZGF0YS1hcGkgb3B0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggY3VzdG9tIGphdmFzY3JpcHQgb3B0aW9uc1xyXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh0aGlzLmVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9odG1sIHRlbXBsYXRlIGZvciB0aGUgcGlja2VyIFVJXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMudGVtcGxhdGUgaW5zdGFuY2VvZiAkKSlcclxuICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZSA9XHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInJhbmdlc1wiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJkcnAtY2FsZW5kYXIgbGVmdFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGFibGVcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImNhbGVuZGFyLXRpbWVcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZHJwLWNhbGVuZGFyIHJpZ2h0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjYWxlbmRhci10YWJsZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGltZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJkcnAtYnV0dG9uc1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImRycC1zZWxlY3RlZFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNhbmNlbEJ0blwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImFwcGx5QnRuXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4gJyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEVsID0gKG9wdGlvbnMucGFyZW50RWwgJiYgJChvcHRpb25zLnBhcmVudEVsKS5sZW5ndGgpID8gJChvcHRpb25zLnBhcmVudEVsKSA6ICQodGhpcy5wYXJlbnRFbCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSAkKG9wdGlvbnMudGVtcGxhdGUpLmFwcGVuZFRvKHRoaXMucGFyZW50RWwpO1xyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgdGhlIHBvc3NpYmxlIG9wdGlvbnMgb3ZlcnJpZGluZyBkZWZhdWx0c1xyXG4gICAgICAgIC8vXHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgPT09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRpcmVjdGlvbiA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5kaXJlY3Rpb24gPSBvcHRpb25zLmxvY2FsZS5kaXJlY3Rpb247XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmZvcm1hdCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5mb3JtYXQgPSBvcHRpb25zLmxvY2FsZS5mb3JtYXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLnNlcGFyYXRvciA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5zZXBhcmF0b3IgPSBvcHRpb25zLmxvY2FsZS5zZXBhcmF0b3I7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRheXNPZldlZWsgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGF5c09mV2VlayA9IG9wdGlvbnMubG9jYWxlLmRheXNPZldlZWsuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUubW9udGhOYW1lcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUubW9udGhOYW1lcyA9IG9wdGlvbnMubG9jYWxlLm1vbnRoTmFtZXMuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUuZmlyc3REYXkgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLmZpcnN0RGF5ID0gb3B0aW9ucy5sb2NhbGUuZmlyc3REYXk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmFwcGx5TGFiZWwgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLmFwcGx5TGFiZWwgPSBvcHRpb25zLmxvY2FsZS5hcHBseUxhYmVsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2FsZS5jYW5jZWxMYWJlbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuY2FuY2VsTGFiZWwgPSBvcHRpb25zLmxvY2FsZS5jYW5jZWxMYWJlbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUud2Vla0xhYmVsID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsZS53ZWVrTGFiZWwgPSBvcHRpb25zLmxvY2FsZS53ZWVrTGFiZWw7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgIC8vU3VwcG9ydCB1bmljb2RlIGNoYXJzIGluIHRoZSBjdXN0b20gcmFuZ2UgbmFtZS5cclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gb3B0aW9ucy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbDtcclxuICAgICAgICAgICAgICAgIHZhciByYW5nZUh0bWwgPSBlbGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbCA9IHJhbmdlSHRtbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmxvY2FsZS5kaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RhcnREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBtb21lbnQob3B0aW9ucy5zdGFydERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbmREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KG9wdGlvbnMuZW5kRGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1pbkRhdGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBtb21lbnQob3B0aW9ucy5taW5EYXRlLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4RGF0ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG1vbWVudChvcHRpb25zLm1heERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdGFydERhdGUgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudChvcHRpb25zLnN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbmREYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KG9wdGlvbnMuZW5kRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW5EYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbW9tZW50KG9wdGlvbnMubWluRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhEYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbW9tZW50KG9wdGlvbnMubWF4RGF0ZSk7XHJcblxyXG4gICAgICAgIC8vIHNhbml0eSBjaGVjayBmb3IgYmFkIG9wdGlvbnNcclxuICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQmVmb3JlKHRoaXMubWluRGF0ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgIC8vIHNhbml0eSBjaGVjayBmb3IgYmFkIG9wdGlvbnNcclxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuZW5kRGF0ZS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXBwbHlCdXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSBvcHRpb25zLmFwcGx5QnV0dG9uQ2xhc3NlcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFwcGx5Q2xhc3MgPT09ICdzdHJpbmcnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSBvcHRpb25zLmFwcGx5Q2xhc3M7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jYW5jZWxCdXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzID0gb3B0aW9ucy5jYW5jZWxCdXR0b25DbGFzc2VzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2FuY2VsQ2xhc3MgPT09ICdzdHJpbmcnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzID0gb3B0aW9ucy5jYW5jZWxDbGFzcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heFNwYW4gPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICB0aGlzLm1heFNwYW4gPSBvcHRpb25zLm1heFNwYW47XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRlTGltaXQgPT09ICdvYmplY3QnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5tYXhTcGFuID0gb3B0aW9ucy5kYXRlTGltaXQ7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5vcGVucyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHRoaXMub3BlbnMgPSBvcHRpb25zLm9wZW5zO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZHJvcHMgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB0aGlzLmRyb3BzID0gb3B0aW9ucy5kcm9wcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNob3dXZWVrTnVtYmVycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IG9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0lTT1dlZWtOdW1iZXJzID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzID0gb3B0aW9ucy5zaG93SVNPV2Vla051bWJlcnM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5idXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGFzc2VzID0gb3B0aW9ucy5idXR0b25DbGFzc2VzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYnV0dG9uQ2xhc3NlcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ2xhc3NlcyA9IG9wdGlvbnMuYnV0dG9uQ2xhc3Nlcy5qb2luKCcgJyk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93RHJvcGRvd25zID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3ducyA9IG9wdGlvbnMuc2hvd0Ryb3Bkb3ducztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1pblllYXIgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB0aGlzLm1pblllYXIgPSBvcHRpb25zLm1pblllYXI7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhZZWFyID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAgdGhpcy5tYXhZZWFyID0gb3B0aW9ucy5tYXhZZWFyO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0N1c3RvbVJhbmdlTGFiZWwgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IG9wdGlvbnMuc2hvd0N1c3RvbVJhbmdlTGFiZWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaW5nbGVEYXRlUGlja2VyID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zaW5nbGVEYXRlUGlja2VyID0gb3B0aW9ucy5zaW5nbGVEYXRlUGlja2VyO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaW5nbGVEYXRlUGlja2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50aW1lUGlja2VyID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlciA9IG9wdGlvbnMudGltZVBpY2tlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVQaWNrZXJTZWNvbmRzID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlclNlY29uZHMgPSBvcHRpb25zLnRpbWVQaWNrZXJTZWNvbmRzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGltZVBpY2tlckluY3JlbWVudCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlckluY3JlbWVudCA9IG9wdGlvbnMudGltZVBpY2tlckluY3JlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVQaWNrZXIyNEhvdXIgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy50aW1lUGlja2VyMjRIb3VyID0gb3B0aW9ucy50aW1lUGlja2VyMjRIb3VyO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b0FwcGx5ID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0FwcGx5ID0gb3B0aW9ucy5hdXRvQXBwbHk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvVXBkYXRlSW5wdXQgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlSW5wdXQgPSBvcHRpb25zLmF1dG9VcGRhdGVJbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbmtlZENhbGVuZGFycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLmxpbmtlZENhbGVuZGFycyA9IG9wdGlvbnMubGlua2VkQ2FsZW5kYXJzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuaXNJbnZhbGlkRGF0ZSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAgdGhpcy5pc0ludmFsaWREYXRlID0gb3B0aW9ucy5pc0ludmFsaWREYXRlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuaXNDdXN0b21EYXRlID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IG9wdGlvbnMuaXNDdXN0b21EYXRlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWx3YXlzU2hvd0NhbGVuZGFycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBvcHRpb25zLmFsd2F5c1Nob3dDYWxlbmRhcnM7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBkYXkgbmFtZXMgb3JkZXIgdG8gZmlyc3REYXlcclxuICAgICAgICBpZiAodGhpcy5sb2NhbGUuZmlyc3REYXkgIT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLmxvY2FsZS5maXJzdERheTtcclxuICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGF5c09mV2Vlay5wdXNoKHRoaXMubG9jYWxlLmRheXNPZldlZWsuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICBpdGVyYXRvci0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhcnQsIGVuZCwgcmFuZ2U7XHJcblxyXG4gICAgICAgIC8vaWYgbm8gc3RhcnQvZW5kIGRhdGVzIHNldCwgY2hlY2sgaWYgYW4gaW5wdXQgZWxlbWVudCBjb250YWlucyBpbml0aWFsIHZhbHVlc1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdGFydERhdGUgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRpb25zLmVuZERhdGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMuZWxlbWVudCkuaXMoJzp0ZXh0JykpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAkKHRoaXMuZWxlbWVudCkudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB2YWwuc3BsaXQodGhpcy5sb2NhbGUuc2VwYXJhdG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQoc3BsaXRbMF0sIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbW9tZW50KHNwbGl0WzFdLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdmFsICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQodmFsLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudCh2YWwsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBmb3IgKHJhbmdlIGluIG9wdGlvbnMucmFuZ2VzKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJhbmdlc1tyYW5nZV1bMF0gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KG9wdGlvbnMucmFuZ2VzW3JhbmdlXVswXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG1vbWVudChvcHRpb25zLnJhbmdlc1tyYW5nZV1bMF0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzFdID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQob3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzFdLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudChvcHRpb25zLnJhbmdlc1tyYW5nZV1bMV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBvciBlbmQgZGF0ZSBleGNlZWQgdGhvc2UgYWxsb3dlZCBieSB0aGUgbWluRGF0ZSBvciBtYXhTcGFuXHJcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zLCBzaG9ydGVuIHRoZSByYW5nZSB0byB0aGUgYWxsb3dhYmxlIHBlcmlvZC5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgc3RhcnQuaXNCZWZvcmUodGhpcy5taW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluRGF0ZS5jbG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4U3BhbiAmJiBtYXhEYXRlICYmIHN0YXJ0LmNsb25lKCkuYWRkKHRoaXMubWF4U3BhbikuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlID0gc3RhcnQuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIGVuZC5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoZSByYW5nZSBpcyBiZWZvcmUgdGhlIG1pbmltdW0gb3IgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpc1xyXG4gICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIG1heGltdW0sIGRvbid0IGRpc3BsYXkgdGhpcyByYW5nZSBvcHRpb24gYXQgYWxsLlxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLm1pbkRhdGUgJiYgZW5kLmlzQmVmb3JlKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lcGlja2VyID8gJ21pbnV0ZScgOiAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgIHx8IChtYXhEYXRlICYmIHN0YXJ0LmlzQWZ0ZXIobWF4RGF0ZSwgdGhpcy50aW1lcGlja2VyID8gJ21pbnV0ZScgOiAnZGF5JykpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vU3VwcG9ydCB1bmljb2RlIGNoYXJzIGluIHRoZSByYW5nZSBuYW1lcy5cclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gcmFuZ2U7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VIdG1sID0gZWxlbS52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tyYW5nZUh0bWxdID0gW3N0YXJ0LCBlbmRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlzdCA9ICc8dWw+JztcclxuICAgICAgICAgICAgZm9yIChyYW5nZSBpbiB0aGlzLnJhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpIGRhdGEtcmFuZ2Uta2V5PVwiJyArIHJhbmdlICsgJ1wiPicgKyByYW5nZSArICc8L2xpPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaSBkYXRhLXJhbmdlLWtleT1cIicgKyB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsICsgJ1wiPicgKyB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsICsgJzwvbGk+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0ICs9ICc8L3VsPic7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMnKS5wcmVwZW5kKGxpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLmVuZERhdGUuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXItdGltZScpLmhpZGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY2FuJ3QgYmUgdXNlZCB0b2dldGhlciBmb3Igbm93XHJcbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlciAmJiB0aGlzLmF1dG9BcHBseSlcclxuICAgICAgICAgICAgdGhpcy5hdXRvQXBwbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0FwcGx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdhdXRvLWFwcGx5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3Nob3ctcmFuZ2VzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3NpbmdsZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLWNhbGVuZGFyLmxlZnQnKS5hZGRDbGFzcygnc2luZ2xlJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtY2FsZW5kYXIubGVmdCcpLnNob3coKTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci5yaWdodCcpLmhpZGUoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy5hdXRvQXBwbHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdhdXRvLWFwcGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5zaW5nbGVEYXRlUGlja2VyKSB8fCB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3Nob3ctY2FsZW5kYXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdvcGVucycgKyB0aGlzLm9wZW5zKTtcclxuXHJcbiAgICAgICAgLy9hcHBseSBDU1MgY2xhc3NlcyBhbmQgbGFiZWxzIHRvIGJ1dHRvbnNcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuYXBwbHlCdG4sIC5jYW5jZWxCdG4nKS5hZGRDbGFzcyh0aGlzLmJ1dHRvbkNsYXNzZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmFwcGx5QnV0dG9uQ2xhc3Nlcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5hcHBseUJ0bicpLmFkZENsYXNzKHRoaXMuYXBwbHlCdXR0b25DbGFzc2VzKTtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmNhbmNlbEJ0bicpLmFkZENsYXNzKHRoaXMuY2FuY2VsQnV0dG9uQ2xhc3Nlcyk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmFwcGx5QnRuJykuaHRtbCh0aGlzLmxvY2FsZS5hcHBseUxhYmVsKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FuY2VsQnRuJykuaHRtbCh0aGlzLmxvY2FsZS5jYW5jZWxMYWJlbCk7XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzXHJcbiAgICAgICAgLy9cclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhcicpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJy5wcmV2JywgJC5wcm94eSh0aGlzLmNsaWNrUHJldiwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJy5uZXh0JywgJC5wcm94eSh0aGlzLmNsaWNrTmV4dCwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignbW91c2Vkb3duLmRhdGVyYW5nZXBpY2tlcicsICd0ZC5hdmFpbGFibGUnLCAkLnByb3h5KHRoaXMuY2xpY2tEYXRlLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyLmRhdGVyYW5nZXBpY2tlcicsICd0ZC5hdmFpbGFibGUnLCAkLnByb3h5KHRoaXMuaG92ZXJEYXRlLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdjaGFuZ2UuZGF0ZXJhbmdlcGlja2VyJywgJ3NlbGVjdC55ZWFyc2VsZWN0JywgJC5wcm94eSh0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZCwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2hhbmdlLmRhdGVyYW5nZXBpY2tlcicsICdzZWxlY3QubW9udGhzZWxlY3QnLCAkLnByb3h5KHRoaXMubW9udGhPclllYXJDaGFuZ2VkLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdjaGFuZ2UuZGF0ZXJhbmdlcGlja2VyJywgJ3NlbGVjdC5ob3Vyc2VsZWN0LHNlbGVjdC5taW51dGVzZWxlY3Qsc2VsZWN0LnNlY29uZHNlbGVjdCxzZWxlY3QuYW1wbXNlbGVjdCcsICQucHJveHkodGhpcy50aW1lQ2hhbmdlZCwgdGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzJylcclxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnbGknLCAkLnByb3h5KHRoaXMuY2xpY2tSYW5nZSwgdGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLWJ1dHRvbnMnKVxyXG4gICAgICAgICAgICAub24oJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcicsICdidXR0b24uYXBwbHlCdG4nLCAkLnByb3h5KHRoaXMuY2xpY2tBcHBseSwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJ2J1dHRvbi5jYW5jZWxCdG4nLCAkLnByb3h5KHRoaXMuY2xpY2tDYW5jZWwsIHRoaXMpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKSB8fCB0aGlzLmVsZW1lbnQuaXMoJ2J1dHRvbicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vbih7XHJcbiAgICAgICAgICAgICAgICAnY2xpY2suZGF0ZXJhbmdlcGlja2VyJzogJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgJ2ZvY3VzLmRhdGVyYW5nZXBpY2tlcic6ICQucHJveHkodGhpcy5zaG93LCB0aGlzKSxcclxuICAgICAgICAgICAgICAgICdrZXl1cC5kYXRlcmFuZ2VwaWNrZXInOiAkLnByb3h5KHRoaXMuZWxlbWVudENoYW5nZWQsIHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgJ2tleWRvd24uZGF0ZXJhbmdlcGlja2VyJzogJC5wcm94eSh0aGlzLmtleWRvd24sIHRoaXMpIC8vSUUgMTEgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQub24oJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcicsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm9uKCdrZXlkb3duLmRhdGVyYW5nZXBpY2tlcicsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gaWYgYXR0YWNoZWQgdG8gYSB0ZXh0IGlucHV0LCBzZXQgdGhlIGluaXRpYWwgdmFsdWVcclxuICAgICAgICAvL1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIERhdGVSYW5nZVBpY2tlci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yOiBEYXRlUmFuZ2VQaWNrZXIsXHJcblxyXG4gICAgICAgIHNldFN0YXJ0RGF0ZTogZnVuY3Rpb24oc3RhcnREYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcilcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGUuc3RhcnRPZignZGF5Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLm1pbnV0ZShNYXRoLnJvdW5kKHRoaXMuc3RhcnREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQmVmb3JlKHRoaXMubWluRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5taW51dGUoTWF0aC5yb3VuZCh0aGlzLnN0YXJ0RGF0ZS5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQWZ0ZXIodGhpcy5tYXhEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy50aW1lUGlja2VySW5jcmVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLm1pbnV0ZShNYXRoLmZsb29yKHRoaXMuc3RhcnREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0RW5kRGF0ZTogZnVuY3Rpb24oZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KGVuZERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLmVuZERhdGUuZW5kT2YoJ2RheScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlciAmJiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUubWludXRlKE1hdGgucm91bmQodGhpcy5lbmREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuZW5kRGF0ZS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFNwYW4gJiYgdGhpcy5zdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKS5pc0JlZm9yZSh0aGlzLmVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNSaWdodFRpbWUgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtc2VsZWN0ZWQnKS5odG1sKHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpICsgdGhpcy5sb2NhbGUuc2VwYXJhdG9yICsgdGhpcy5lbmREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaXNJbnZhbGlkRGF0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBpc0N1c3RvbURhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlVmlldzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcignbGVmdCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmNhbGVuZGFyLXRpbWUgc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5jYWxlbmRhci10aW1lIHNlbGVjdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLXNlbGVjdGVkJykuaHRtbCh0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSArIHRoaXMubG9jYWxlLnNlcGFyYXRvciArIHRoaXMuZW5kRGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUlucHV0cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHVwZGF0ZU1vbnRoc0luVmlldzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvL2lmIGJvdGggZGF0ZXMgYXJlIHZpc2libGUgYWxyZWFkeSwgZG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpIHx8IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSlcclxuICAgICAgICAgICAgICAgICAgICAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NJykgPT0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguZm9ybWF0KCdZWVlZLU1NJykgfHwgdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSlcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzICYmICh0aGlzLmVuZERhdGUubW9udGgoKSAhPSB0aGlzLnN0YXJ0RGF0ZS5tb250aCgpIHx8IHRoaXMuZW5kRGF0ZS55ZWFyKCkgIT0gdGhpcy5zdGFydERhdGUueWVhcigpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuZGF0ZSgyKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpICE9IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSAhPSB0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5kYXRlKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuZGF0ZSgyKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB0aGlzLmxpbmtlZENhbGVuZGFycyAmJiAhdGhpcy5zaW5nbGVEYXRlUGlja2VyICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA+IHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLm1heERhdGUuY2xvbmUoKS5kYXRlKDIpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlQ2FsZW5kYXJzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBob3VyLCBtaW51dGUsIHNlY29uZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBob3VyID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5taW51dGVzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW51dGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5taW51dGVzZWxlY3Qgb3B0aW9uOmxhc3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLmFtcG1zZWxlY3QnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdQTScgJiYgaG91ciA8IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdBTScgJiYgaG91ciA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLm1pbnV0ZXNlbGVjdCBvcHRpb246bGFzdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5hbXBtc2VsZWN0JykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCdsZWZ0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoJ3JpZ2h0Jyk7XHJcblxyXG4gICAgICAgICAgICAvL2hpZ2hsaWdodCBhbnkgcHJlZGVmaW5lZCByYW5nZSBtYXRjaGluZyB0aGUgY3VycmVudCBzdGFydCBhbmQgZW5kIGRhdGVzXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMgbGknKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDaG9zZW5MYWJlbCgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJlbmRlckNhbGVuZGFyOiBmdW5jdGlvbihzaWRlKSB7XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBCdWlsZCB0aGUgbWF0cml4IG9mIGRhdGVzIHRoYXQgd2lsbCBwb3B1bGF0ZSB0aGUgY2FsZW5kYXJcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIHZhciBjYWxlbmRhciA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5sZWZ0Q2FsZW5kYXIgOiB0aGlzLnJpZ2h0Q2FsZW5kYXI7XHJcbiAgICAgICAgICAgIHZhciBtb250aCA9IGNhbGVuZGFyLm1vbnRoLm1vbnRoKCk7XHJcbiAgICAgICAgICAgIHZhciB5ZWFyID0gY2FsZW5kYXIubW9udGgueWVhcigpO1xyXG4gICAgICAgICAgICB2YXIgaG91ciA9IGNhbGVuZGFyLm1vbnRoLmhvdXIoKTtcclxuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IGNhbGVuZGFyLm1vbnRoLm1pbnV0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gY2FsZW5kYXIubW9udGguc2Vjb25kKCk7XHJcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IG1vbWVudChbeWVhciwgbW9udGhdKS5kYXlzSW5Nb250aCgpO1xyXG4gICAgICAgICAgICB2YXIgZmlyc3REYXkgPSBtb21lbnQoW3llYXIsIG1vbnRoLCAxXSk7XHJcbiAgICAgICAgICAgIHZhciBsYXN0RGF5ID0gbW9tZW50KFt5ZWFyLCBtb250aCwgZGF5c0luTW9udGhdKTtcclxuICAgICAgICAgICAgdmFyIGxhc3RNb250aCA9IG1vbWVudChmaXJzdERheSkuc3VidHJhY3QoMSwgJ21vbnRoJykubW9udGgoKTtcclxuICAgICAgICAgICAgdmFyIGxhc3RZZWFyID0gbW9tZW50KGZpcnN0RGF5KS5zdWJ0cmFjdCgxLCAnbW9udGgnKS55ZWFyKCk7XHJcbiAgICAgICAgICAgIHZhciBkYXlzSW5MYXN0TW9udGggPSBtb21lbnQoW2xhc3RZZWFyLCBsYXN0TW9udGhdKS5kYXlzSW5Nb250aCgpO1xyXG4gICAgICAgICAgICB2YXIgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XHJcblxyXG4gICAgICAgICAgICAvL2luaXRpYWxpemUgYSA2IHJvd3MgeCA3IGNvbHVtbnMgYXJyYXkgZm9yIHRoZSBjYWxlbmRhclxyXG4gICAgICAgICAgICB2YXIgY2FsZW5kYXIgPSBbXTtcclxuICAgICAgICAgICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcclxuICAgICAgICAgICAgY2FsZW5kYXIubGFzdERheSA9IGxhc3REYXk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9wb3B1bGF0ZSB0aGUgY2FsZW5kYXIgd2l0aCBkYXRlIG9iamVjdHNcclxuICAgICAgICAgICAgdmFyIHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgdGhpcy5sb2NhbGUuZmlyc3REYXkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpXHJcbiAgICAgICAgICAgICAgICBzdGFydERheSAtPSA3O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PSB0aGlzLmxvY2FsZS5maXJzdERheSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gNjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJEYXRlID0gbW9tZW50KFtsYXN0WWVhciwgbGFzdE1vbnRoLCBzdGFydERheSwgMTIsIG1pbnV0ZSwgc2Vjb25kXSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY29sLCByb3c7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBjb2wgPSAwLCByb3cgPSAwOyBpIDwgNDI7IGkrKywgY29sKyssIGN1ckRhdGUgPSBtb21lbnQoY3VyRGF0ZSkuYWRkKDI0LCAnaG91cicpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgY29sICUgNyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYWxlbmRhcltyb3ddW2NvbF0gPSBjdXJEYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIGN1ckRhdGUuaG91cigxMik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5taW5EYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0JlZm9yZSh0aGlzLm1pbkRhdGUpICYmIHNpZGUgPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5tYXhEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkgJiYgc2lkZSA9PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gdGhpcy5tYXhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL21ha2UgdGhlIGNhbGVuZGFyIG9iamVjdCBhdmFpbGFibGUgdG8gaG92ZXJEYXRlL2NsaWNrRGF0ZVxyXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLmNhbGVuZGFyID0gY2FsZW5kYXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXIgPSBjYWxlbmRhcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgLy8gRGlzcGxheSB0aGUgY2FsZW5kYXJcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIHZhciBtaW5EYXRlID0gc2lkZSA9PSAnbGVmdCcgPyB0aGlzLm1pbkRhdGUgOiB0aGlzLnN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgdmFyIG1heERhdGUgPSB0aGlzLm1heERhdGU7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5zdGFydERhdGUgOiB0aGlzLmVuZERhdGU7XHJcbiAgICAgICAgICAgIHZhciBhcnJvdyA9IHRoaXMubG9jYWxlLmRpcmVjdGlvbiA9PSAnbHRyJyA/IHtsZWZ0OiAnY2hldnJvbi1sZWZ0JywgcmlnaHQ6ICdjaGV2cm9uLXJpZ2h0J30gOiB7bGVmdDogJ2NoZXZyb24tcmlnaHQnLCByaWdodDogJ2NoZXZyb24tbGVmdCd9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGh0bWwgPSAnPHRhYmxlIGNsYXNzPVwidGFibGUtY29uZGVuc2VkXCI+JztcclxuICAgICAgICAgICAgaHRtbCArPSAnPHRoZWFkPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0cj4nO1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIGVtcHR5IGNlbGwgZm9yIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVycyB8fCB0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aD48L3RoPic7XHJcblxyXG4gICAgICAgICAgICBpZiAoKCFtaW5EYXRlIHx8IG1pbkRhdGUuaXNCZWZvcmUoY2FsZW5kYXIuZmlyc3REYXkpKSAmJiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzIHx8IHNpZGUgPT0gJ2xlZnQnKSkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNsYXNzPVwicHJldiBhdmFpbGFibGVcIj48c3Bhbj48L3NwYW4+PC90aD4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoPjwvdGg+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVIdG1sID0gdGhpcy5sb2NhbGUubW9udGhOYW1lc1tjYWxlbmRhclsxXVsxXS5tb250aCgpXSArIGNhbGVuZGFyWzFdWzFdLmZvcm1hdChcIiBZWVlZXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3ducykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRNb250aCA9IGNhbGVuZGFyWzFdWzFdLm1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF4WWVhciA9IChtYXhEYXRlICYmIG1heERhdGUueWVhcigpKSB8fCAodGhpcy5tYXhZZWFyKTtcclxuICAgICAgICAgICAgICAgIHZhciBtaW5ZZWFyID0gKG1pbkRhdGUgJiYgbWluRGF0ZS55ZWFyKCkpIHx8ICh0aGlzLm1pblllYXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluTWluWWVhciA9IGN1cnJlbnRZZWFyID09IG1pblllYXI7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5NYXhZZWFyID0gY3VycmVudFllYXIgPT0gbWF4WWVhcjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJtb250aHNlbGVjdFwiPic7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IDEyOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCFpbk1pblllYXIgfHwgKG1pbkRhdGUgJiYgbSA+PSBtaW5EYXRlLm1vbnRoKCkpKSAmJiAoIWluTWF4WWVhciB8fCAobWF4RGF0ZSAmJiBtIDw9IG1heERhdGUubW9udGgoKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSHRtbCArPSBcIjxvcHRpb24gdmFsdWU9J1wiICsgbSArIFwiJ1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID09PSBjdXJyZW50TW9udGggPyBcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCIgOiBcIlwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cIiArIHRoaXMubG9jYWxlLm1vbnRoTmFtZXNbbV0gKyBcIjwvb3B0aW9uPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSHRtbCArPSBcIjxvcHRpb24gdmFsdWU9J1wiICsgbSArIFwiJ1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID09PSBjdXJyZW50TW9udGggPyBcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCIgOiBcIlwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkaXNhYmxlZD0nZGlzYWJsZWQnPlwiICsgdGhpcy5sb2NhbGUubW9udGhOYW1lc1ttXSArIFwiPC9vcHRpb24+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbW9udGhIdG1sICs9IFwiPC9zZWxlY3Q+XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHllYXJIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJ5ZWFyc2VsZWN0XCI+JztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSBtaW5ZZWFyOyB5IDw9IG1heFllYXI7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXJIdG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHkgKyAnXCInICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHkgPT09IGN1cnJlbnRZZWFyID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJz4nICsgeSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgeWVhckh0bWwgKz0gJzwvc2VsZWN0Pic7XHJcblxyXG4gICAgICAgICAgICAgICAgZGF0ZUh0bWwgPSBtb250aEh0bWwgKyB5ZWFySHRtbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNvbHNwYW49XCI1XCIgY2xhc3M9XCJtb250aFwiPicgKyBkYXRlSHRtbCArICc8L3RoPic7XHJcbiAgICAgICAgICAgIGlmICgoIW1heERhdGUgfHwgbWF4RGF0ZS5pc0FmdGVyKGNhbGVuZGFyLmxhc3REYXkpKSAmJiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzIHx8IHNpZGUgPT0gJ3JpZ2h0JyB8fCB0aGlzLnNpbmdsZURhdGVQaWNrZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGggY2xhc3M9XCJuZXh0IGF2YWlsYWJsZVwiPjxzcGFuPjwvc3Bhbj48L3RoPic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGg+PC90aD4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodG1sICs9ICc8L3RyPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0cj4nO1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHdlZWsgbnVtYmVyIGxhYmVsXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVycyB8fCB0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aCBjbGFzcz1cIndlZWtcIj4nICsgdGhpcy5sb2NhbGUud2Vla0xhYmVsICsgJzwvdGg+JztcclxuXHJcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLmxvY2FsZS5kYXlzT2ZXZWVrLCBmdW5jdGlvbihpbmRleCwgZGF5T2ZXZWVrKSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGg+JyArIGRheU9mV2VlayArICc8L3RoPic7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaHRtbCArPSAnPC90cj4nO1xyXG4gICAgICAgICAgICBodG1sICs9ICc8L3RoZWFkPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0Ym9keT4nO1xyXG5cclxuICAgICAgICAgICAgLy9hZGp1c3QgbWF4RGF0ZSB0byByZWZsZWN0IHRoZSBtYXhTcGFuIHNldHRpbmcgaW4gb3JkZXIgdG9cclxuICAgICAgICAgICAgLy9ncmV5IG91dCBlbmQgZGF0ZXMgYmV5b25kIHRoZSBtYXhTcGFuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgPT0gbnVsbCAmJiB0aGlzLm1heFNwYW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXhMaW1pdCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMubWF4U3BhbikuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXhEYXRlIHx8IG1heExpbWl0LmlzQmVmb3JlKG1heERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4RGF0ZSA9IG1heExpbWl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCA2OyByb3crKykge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRyPic7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93V2Vla051bWJlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPVwid2Vla1wiPicgKyBjYWxlbmRhcltyb3ddWzBdLndlZWsoKSArICc8L3RkPic7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9XCJ3ZWVrXCI+JyArIGNhbGVuZGFyW3Jvd11bMF0uaXNvV2VlaygpICsgJzwvdGQ+JztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCA3OyBjb2wrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCB0b2RheSdzIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLmlzU2FtZShuZXcgRGF0ZSgpLCBcImRheVwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCB3ZWVrZW5kc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNvV2Vla2RheSgpID4gNSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd3ZWVrZW5kJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZ3JleSBvdXQgdGhlIGRhdGVzIGluIG90aGVyIG1vbnRocyBkaXNwbGF5ZWQgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhpcyBjYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0ubW9udGgoKSAhPSBjYWxlbmRhclsxXVsxXS5tb250aCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicsICdlbmRzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGJlZm9yZSB0aGUgbWluaW11bSBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlLCAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGFmdGVyIHRoZSBtYXhpbXVtIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNBZnRlcihtYXhEYXRlLCAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGUgaWYgYSBjdXN0b20gZnVuY3Rpb24gZGVjaWRlcyBpdCdzIGludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ludmFsaWREYXRlKGNhbGVuZGFyW3Jvd11bY29sXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vaGlnaGxpZ2h0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ3N0YXJ0LWRhdGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbmQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgIT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdlbmQtZGF0ZScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCBkYXRlcyBpbi1iZXR3ZWVuIHRoZSBzZWxlY3RlZCBkYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgIT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPiB0aGlzLnN0YXJ0RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPCB0aGlzLmVuZERhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaW4tcmFuZ2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9hcHBseSBjdXN0b20gY2xhc3NlcyBmb3IgdGhpcyBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ3VzdG9tID0gdGhpcy5pc0N1c3RvbURhdGUoY2FsZW5kYXJbcm93XVtjb2xdKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXN0b20gIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXNDdXN0b20gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGlzQ3VzdG9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoY2xhc3NlcywgaXNDdXN0b20pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lID0gJycsIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lICs9IGNsYXNzZXNbaV0gKyAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzW2ldID09ICdkaXNhYmxlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lICs9ICdhdmFpbGFibGUnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9XCInICsgY25hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpICsgJ1wiIGRhdGEtdGl0bGU9XCInICsgJ3InICsgcm93ICsgJ2MnICsgY29sICsgJ1wiPicgKyBjYWxlbmRhcltyb3ddW2NvbF0uZGF0ZSgpICsgJzwvdGQ+JztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8L3RyPic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzwvdGJvZHk+JztcclxuICAgICAgICAgICAgaHRtbCArPSAnPC90YWJsZT4nO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nICsgc2lkZSArICcgLmNhbGVuZGFyLXRhYmxlJykuaHRtbChodG1sKTtcclxuXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVuZGVyVGltZVBpY2tlcjogZnVuY3Rpb24oc2lkZSkge1xyXG5cclxuICAgICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSB0aW1lIHBpY2tlciBpZiBpdCdzIGN1cnJlbnRseSBkaXNhYmxlZFxyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGVuZCBkYXRlIGhhc24ndCBiZWVuIGNsaWNrZWQgeWV0XHJcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdyaWdodCcgJiYgIXRoaXMuZW5kRGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGh0bWwsIHNlbGVjdGVkLCBtaW5EYXRlLCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4U3BhbiAmJiAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmFkZCh0aGlzLm1heFNwYW4pLmlzQmVmb3JlKHRoaXMubWF4RGF0ZSkpKVxyXG4gICAgICAgICAgICAgICAgbWF4RGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMubWF4U3Bhbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lkZSA9PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vUHJlc2VydmUgdGhlIHRpbWUgYWxyZWFkeSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVTZWxlY3RvciA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtY2FsZW5kYXIucmlnaHQgLmNhbGVuZGFyLXRpbWUnKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lU2VsZWN0b3IuaHRtbCgpICE9ICcnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLmhvdXIoIWlzTmFOKHNlbGVjdGVkLmhvdXIoKSkgPyBzZWxlY3RlZC5ob3VyKCkgOiB0aW1lU2VsZWN0b3IuZmluZCgnLmhvdXJzZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLm1pbnV0ZSghaXNOYU4oc2VsZWN0ZWQubWludXRlKCkpID8gc2VsZWN0ZWQubWludXRlKCkgOiB0aW1lU2VsZWN0b3IuZmluZCgnLm1pbnV0ZXNlbGVjdCBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuc2Vjb25kKCFpc05hTihzZWxlY3RlZC5zZWNvbmQoKSkgPyBzZWxlY3RlZC5zZWNvbmQoKSA6IHRpbWVTZWxlY3Rvci5maW5kKCcuc2Vjb25kc2VsZWN0IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0aW1lU2VsZWN0b3IuZmluZCgnLmFtcG1zZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIHNlbGVjdGVkLmhvdXIoKSA8IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuaG91cihzZWxlY3RlZC5ob3VyKCkgKyAxMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIHNlbGVjdGVkLmhvdXIoKSA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZC5ob3VyKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgc2VsZWN0ZWQuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IG1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIGhvdXJzXHJcbiAgICAgICAgICAgIC8vXHJcblxyXG4gICAgICAgICAgICBodG1sID0gJzxzZWxlY3QgY2xhc3M9XCJob3Vyc2VsZWN0XCI+JztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMudGltZVBpY2tlcjI0SG91ciA/IDAgOiAxO1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy50aW1lUGlja2VyMjRIb3VyID8gMjMgOiAxMjtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlfaW5fMjQgPSBpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpXHJcbiAgICAgICAgICAgICAgICAgICAgaV9pbl8yNCA9IHNlbGVjdGVkLmhvdXIoKSA+PSAxMiA/IChpID09IDEyID8gMTIgOiBpICsgMTIpIDogKGkgPT0gMTIgPyAwIDogaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSBzZWxlY3RlZC5jbG9uZSgpLmhvdXIoaV9pbl8yNCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUubWludXRlKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLm1pbnV0ZSgwKS5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaV9pbl8yNCA9PSBzZWxlY3RlZC5ob3VyKCkgJiYgIWRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj4nICsgaSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIiBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiPicgKyBpICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgaSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4gJztcclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIG1pbnV0ZXNcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzogPHNlbGVjdCBjbGFzcz1cIm1pbnV0ZXNlbGVjdFwiPic7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDYwOyBpICs9IHRoaXMudGltZVBpY2tlckluY3JlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSBzZWxlY3RlZC5jbG9uZSgpLm1pbnV0ZShpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUuc2Vjb25kKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLnNlY29uZCgwKS5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQubWludXRlKCkgPT0gaSAmJiAhZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGNsYXNzPVwiZGlzYWJsZWRcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xyXG5cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgLy8gc2Vjb25kc1xyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlclNlY29uZHMpIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzogPHNlbGVjdCBjbGFzcz1cInNlY29uZHNlbGVjdFwiPic7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5zZWNvbmQoaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUuaXNCZWZvcmUobWluRGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLmlzQWZ0ZXIobWF4RGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLnNlY29uZCgpID09IGkgJiYgIWRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiBjbGFzcz1cImRpc2FibGVkXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBBTS9QTVxyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxzZWxlY3QgY2xhc3M9XCJhbXBtc2VsZWN0XCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYW1faHRtbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBtX2h0bWwgPSAnJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzZWxlY3RlZC5jbG9uZSgpLmhvdXIoMTIpLm1pbnV0ZSgwKS5zZWNvbmQoMCkuaXNCZWZvcmUobWluRGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgYW1faHRtbCA9ICcgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGNsYXNzPVwiZGlzYWJsZWRcIic7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCkuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBwbV9odG1sID0gJyBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQuaG91cigpID49IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIkFNXCInICsgYW1faHRtbCArICc+QU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiUE1cIiBzZWxlY3RlZD1cInNlbGVjdGVkXCInICsgcG1faHRtbCArICc+UE08L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiQU1cIiBzZWxlY3RlZD1cInNlbGVjdGVkXCInICsgYW1faHRtbCArICc+QU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiUE1cIicgKyBwbV9odG1sICsgJz5QTTwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nICsgc2lkZSArICcgLmNhbGVuZGFyLXRpbWUnKS5odG1sKGh0bWwpO1xyXG5cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB1cGRhdGVGb3JtSW5wdXRzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIgfHwgKHRoaXMuZW5kRGF0ZSAmJiAodGhpcy5zdGFydERhdGUuaXNCZWZvcmUodGhpcy5lbmREYXRlKSB8fCB0aGlzLnN0YXJ0RGF0ZS5pc1NhbWUodGhpcy5lbmREYXRlKSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdidXR0b24uYXBwbHlCdG4nKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2J1dHRvbi5hcHBseUJ0bicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgbW92ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9LFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wLFxyXG4gICAgICAgICAgICAgICAgZHJvcHMgPSB0aGlzLmRyb3BzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmVudFJpZ2h0RWRnZSA9ICQod2luZG93KS53aWR0aCgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50RWwuaXMoJ2JvZHknKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5wYXJlbnRFbC5vZmZzZXQoKS50b3AgLSB0aGlzLnBhcmVudEVsLnNjcm9sbFRvcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMucGFyZW50RWwub2Zmc2V0KCkubGVmdCAtIHRoaXMucGFyZW50RWwuc2Nyb2xsTGVmdCgpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcGFyZW50UmlnaHRFZGdlID0gdGhpcy5wYXJlbnRFbFswXS5jbGllbnRXaWR0aCArIHRoaXMucGFyZW50RWwub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChkcm9wcykge1xyXG4gICAgICAgICAgICBjYXNlICdhdXRvJzpcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lclRvcCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKS50b3AgKyB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSAtIHBhcmVudE9mZnNldC50b3A7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyVG9wICsgdGhpcy5jb250YWluZXIub3V0ZXJIZWlnaHQoKSA+PSB0aGlzLnBhcmVudEVsWzBdLnNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclRvcCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKS50b3AgLSB0aGlzLmNvbnRhaW5lci5vdXRlckhlaWdodCgpIC0gcGFyZW50T2Zmc2V0LnRvcDtcclxuICAgICAgICAgICAgICAgICAgICBkcm9wcyA9ICd1cCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndXAnOlxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLnRvcCAtIHRoaXMuY29udGFpbmVyLm91dGVySGVpZ2h0KCkgLSBwYXJlbnRPZmZzZXQudG9wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXJUb3AgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkudG9wICsgdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgLSBwYXJlbnRPZmZzZXQudG9wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBjb250YWluZXIgdG8gaXQncyBhY3R1YWwgd2lkdGhcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICByaWdodDogJ2F1dG8nXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci50b2dnbGVDbGFzcygnZHJvcC11cCcsIGRyb3BzID09ICd1cCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbnMgPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyUmlnaHQgPSBwYXJlbnRSaWdodEVkZ2UgLSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyV2lkdGggKyBjb250YWluZXJSaWdodCA+ICQod2luZG93KS53aWR0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBjb250YWluZXJSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ2F1dG8nXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVucyA9PSAnY2VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckxlZnQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0ICsgdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSAvIDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY29udGFpbmVyV2lkdGggLyAyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckxlZnQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyTGVmdCArIGNvbnRhaW5lcldpZHRoID4gJCh3aW5kb3cpLndpZHRoKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lclRvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lclRvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogY29udGFpbmVyTGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICdhdXRvJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckxlZnQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckxlZnQgKyBjb250YWluZXJXaWR0aCA+ICQod2luZG93KS53aWR0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDBcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGNvbnRhaW5lckxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bydcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNob3c6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93aW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBjbGljayBwcm94eSB0aGF0IGlzIHByaXZhdGUgdG8gdGhpcyBpbnN0YW5jZSBvZiBkYXRlcGlja2VyLCBmb3IgdW5iaW5kaW5nXHJcbiAgICAgICAgICAgIHRoaXMuX291dHNpZGVDbGlja1Byb3h5ID0gJC5wcm94eShmdW5jdGlvbihlKSB7IHRoaXMub3V0c2lkZUNsaWNrKGUpOyB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJpbmQgZ2xvYmFsIGRhdGVwaWNrZXIgbW91c2Vkb3duIGZvciBoaWRpbmcgYW5kXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpXHJcbiAgICAgICAgICAgICAgLm9uKCdtb3VzZWRvd24uZGF0ZXJhbmdlcGlja2VyJywgdGhpcy5fb3V0c2lkZUNsaWNrUHJveHkpXHJcbiAgICAgICAgICAgICAgLy8gYWxzbyBzdXBwb3J0IG1vYmlsZSBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgLm9uKCd0b3VjaGVuZC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSlcclxuICAgICAgICAgICAgICAvLyBhbHNvIGV4cGxpY2l0bHkgcGxheSBuaWNlIHdpdGggQm9vdHN0cmFwIGRyb3Bkb3ducywgd2hpY2ggc3RvcFByb3BhZ2F0aW9uIHdoZW4gY2xpY2tpbmcgdGhlbVxyXG4gICAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJ1tkYXRhLXRvZ2dsZT1kcm9wZG93bl0nLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSlcclxuICAgICAgICAgICAgICAvLyBhbmQgYWxzbyBjbG9zZSB3aGVuIGZvY3VzIGNoYW5nZXMgdG8gb3V0c2lkZSB0aGUgcGlja2VyIChlZy4gdGFiYmluZyBiZXR3ZWVuIGNvbnRyb2xzKVxyXG4gICAgICAgICAgICAgIC5vbignZm9jdXNpbi5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXBvc2l0aW9uIHRoZSBwaWNrZXIgaWYgdGhlIHdpbmRvdyBpcyByZXNpemVkIHdoaWxlIGl0J3Mgb3BlblxyXG4gICAgICAgICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZS5kYXRlcmFuZ2VwaWNrZXInLCAkLnByb3h5KGZ1bmN0aW9uKGUpIHsgdGhpcy5tb3ZlKGUpOyB9LCB0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9sZFN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkRW5kRGF0ZSA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUmlnaHRUaW1lID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc2hvdygpO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ3Nob3cuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBoaWRlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vaW5jb21wbGV0ZSBkYXRlIHNlbGVjdGlvbiwgcmV2ZXJ0IHRvIGxhc3QgdmFsdWVzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMub2xkU3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm9sZEVuZERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiBhIG5ldyBkYXRlIHJhbmdlIHdhcyBzZWxlY3RlZCwgaW52b2tlIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydERhdGUuaXNTYW1lKHRoaXMub2xkU3RhcnREYXRlKSB8fCAhdGhpcy5lbmREYXRlLmlzU2FtZSh0aGlzLm9sZEVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLCB0aGlzLmVuZERhdGUuY2xvbmUoKSwgdGhpcy5jaG9zZW5MYWJlbCk7XHJcblxyXG4gICAgICAgICAgICAvL2lmIHBpY2tlciBpcyBhdHRhY2hlZCB0byBhIHRleHQgaW5wdXQsIHVwZGF0ZSBpdFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignLmRhdGVyYW5nZXBpY2tlcicpO1xyXG4gICAgICAgICAgICAkKHdpbmRvdykub2ZmKCcuZGF0ZXJhbmdlcGlja2VyJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2hpZGUuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG91dHNpZGVDbGljazogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCk7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwYWdlIGlzIGNsaWNrZWQgYW55d2hlcmUgZXhjZXB0IHdpdGhpbiB0aGUgZGF0ZXJhbmdlcnBpY2tlci9idXR0b25cclxuICAgICAgICAgICAgLy8gaXRzZWxmIHRoZW4gY2FsbCB0aGlzLmhpZGUoKVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAvLyBpZSBtb2RhbCBkaWFsb2cgZml4XHJcbiAgICAgICAgICAgICAgICBlLnR5cGUgPT0gXCJmb2N1c2luXCIgfHxcclxuICAgICAgICAgICAgICAgIHRhcmdldC5jbG9zZXN0KHRoaXMuZWxlbWVudCkubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCh0aGlzLmNvbnRhaW5lcikubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLmNhbGVuZGFyLXRhYmxlJykubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICApIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdvdXRzaWRlQ2xpY2suZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2hvd0NhbGVuZGFyczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdzaG93LWNhbGVuZGFyJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignc2hvd0NhbGVuZGFyLmRhdGVyYW5nZXBpY2tlcicsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGhpZGVDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2hvdy1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignaGlkZUNhbGVuZGFyLmRhdGVyYW5nZXBpY2tlcicsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrUmFuZ2U6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXJhbmdlLWtleScpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gbGFiZWw7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbCA9PSB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDYWxlbmRhcnMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRlcyA9IHRoaXMucmFuZ2VzW2xhYmVsXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZXNbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlc1sxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZS5lbmRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrQXBwbHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrUHJldjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsID0gJChlLnRhcmdldCkucGFyZW50cygnLmRycC1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICBpZiAoY2FsLmhhc0NsYXNzKCdsZWZ0JykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlua2VkQ2FsZW5kYXJzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrTmV4dDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsID0gJChlLnRhcmdldCkucGFyZW50cygnLmRycC1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICBpZiAoY2FsLmhhc0NsYXNzKCdsZWZ0JykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmFkZCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saW5rZWRDYWxlbmRhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguYWRkKDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaG92ZXJEYXRlOiBmdW5jdGlvbihlKSB7XHJcblxyXG4gICAgICAgICAgICAvL2lnbm9yZSBkYXRlcyB0aGF0IGNhbid0IGJlIHNlbGVjdGVkXHJcbiAgICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2F2YWlsYWJsZScpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAkKGUudGFyZ2V0KS5hdHRyKCdkYXRhLXRpdGxlJyk7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB0aXRsZS5zdWJzdHIoMSwgMSk7XHJcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aXRsZS5zdWJzdHIoMywgMSk7XHJcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZHJwLWNhbGVuZGFyJyk7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gY2FsLmhhc0NsYXNzKCdsZWZ0JykgPyB0aGlzLmxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXJbcm93XVtjb2xdO1xyXG5cclxuICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGRhdGVzIGJldHdlZW4gdGhlIHN0YXJ0IGRhdGUgYW5kIHRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgYXMgYSBwb3RlbnRpYWwgZW5kIGRhdGVcclxuICAgICAgICAgICAgdmFyIGxlZnRDYWxlbmRhciA9IHRoaXMubGVmdENhbGVuZGFyO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHRDYWxlbmRhciA9IHRoaXMucmlnaHRDYWxlbmRhcjtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhciB0Ym9keSB0ZCcpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vc2tpcCB3ZWVrIG51bWJlcnMsIG9ubHkgbG9vayBhdCBkYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGVsKS5oYXNDbGFzcygnd2VlaycpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICQoZWwpLmF0dHIoJ2RhdGEtdGl0bGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGl0bGUuc3Vic3RyKDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2wgPSB0aXRsZS5zdWJzdHIoMywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbCA9ICQoZWwpLnBhcmVudHMoJy5kcnAtY2FsZW5kYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKSA/IGxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiByaWdodENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkdC5pc0FmdGVyKHN0YXJ0RGF0ZSkgJiYgZHQuaXNCZWZvcmUoZGF0ZSkpIHx8IGR0LmlzU2FtZShkYXRlLCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuYWRkQ2xhc3MoJ2luLXJhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkucmVtb3ZlQ2xhc3MoJ2luLXJhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrRGF0ZTogZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKCEkKGUudGFyZ2V0KS5oYXNDbGFzcygnYXZhaWxhYmxlJykpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciB0aXRsZSA9ICQoZS50YXJnZXQpLmF0dHIoJ2RhdGEtdGl0bGUnKTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRpdGxlLnN1YnN0cigxLCAxKTtcclxuICAgICAgICAgICAgdmFyIGNvbCA9IHRpdGxlLnN1YnN0cigzLCAxKTtcclxuICAgICAgICAgICAgdmFyIGNhbCA9ICQoZS50YXJnZXQpLnBhcmVudHMoJy5kcnAtY2FsZW5kYXInKTtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKSA/IHRoaXMubGVmdENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXSA6IHRoaXMucmlnaHRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF07XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGRvIGEgZmV3IHRoaW5nczpcclxuICAgICAgICAgICAgLy8gKiBhbHRlcm5hdGUgYmV0d2VlbiBzZWxlY3RpbmcgYSBzdGFydCBhbmQgZW5kIGRhdGUgZm9yIHRoZSByYW5nZSxcclxuICAgICAgICAgICAgLy8gKiBpZiB0aGUgdGltZSBwaWNrZXIgaXMgZW5hYmxlZCwgYXBwbHkgdGhlIGhvdXIvbWludXRlL3NlY29uZCBmcm9tIHRoZSBzZWxlY3QgYm94ZXMgdG8gdGhlIGNsaWNrZWQgZGF0ZVxyXG4gICAgICAgICAgICAvLyAqIGlmIGF1dG9hcHBseSBpcyBlbmFibGVkLCBhbmQgYW4gZW5kIGRhdGUgd2FzIGNob3NlbiwgYXBwbHkgdGhlIHNlbGVjdGlvblxyXG4gICAgICAgICAgICAvLyAqIGlmIHNpbmdsZSBkYXRlIHBpY2tlciBtb2RlLCBhbmQgdGltZSBwaWNrZXIgaXNuJ3QgZW5hYmxlZCwgYXBwbHkgdGhlIHNlbGVjdGlvbiBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICAvLyAqIGlmIG9uZSBvZiB0aGUgaW5wdXRzIGFib3ZlIHRoZSBjYWxlbmRhcnMgd2FzIGZvY3VzZWQsIGNhbmNlbCB0aGF0IG1hbnVhbCBpbnB1dFxyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSB8fCBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlLCAnZGF5JykpIHsgLy9waWNraW5nIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuaG91cnNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuYW1wbXNlbGVjdCcpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VyIDwgMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLm1pbnV0ZXNlbGVjdCBvcHRpb246bGFzdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXJ0RGF0ZShkYXRlLmNsb25lKCkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuZERhdGUgJiYgZGF0ZS5pc0JlZm9yZSh0aGlzLnN0YXJ0RGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vc3BlY2lhbCBjYXNlOiBjbGlja2luZyB0aGUgc2FtZSBkYXRlIGZvciBzdGFydC9lbmQsXHJcbiAgICAgICAgICAgICAgICAvL2J1dCB0aGUgdGltZSBvZiB0aGUgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHBpY2tpbmcgZW5kXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5hbXBtc2VsZWN0JykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5taW51dGVzZWxlY3Qgb3B0aW9uOmxhc3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy50aW1lUGlja2VyU2Vjb25kcyA/IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGRhdGUuY2xvbmUoKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKGRhdGUuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvQXBwbHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDaG9zZW5MYWJlbCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrQXBwbHkoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKHRoaXMuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyICYmIHRoaXMuYXV0b0FwcGx5KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tBcHBseSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuXHJcbiAgICAgICAgICAgIC8vVGhpcyBpcyB0byBjYW5jZWwgdGhlIGJsdXIgZXZlbnQgaGFuZGxlciBpZiB0aGUgbW91c2Ugd2FzIGluIG9uZSBvZiB0aGUgaW5wdXRzXHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNhbGN1bGF0ZUNob3NlbkxhYmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXN0b21SYW5nZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgcmFuZ2UgaW4gdGhpcy5yYW5nZXMpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBcIllZWVktTU0tREQgSEg6bW06c3NcIiA6IFwiWVlZWS1NTS1ERCBISDptbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vaWdub3JlIHRpbWVzIHdoZW4gY29tcGFyaW5nIGRhdGVzIGlmIHRpbWUgcGlja2VyIHNlY29uZHMgaXMgbm90IGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUuZm9ybWF0KGZvcm1hdCkgPT0gdGhpcy5yYW5nZXNbcmFuZ2VdWzBdLmZvcm1hdChmb3JtYXQpICYmIHRoaXMuZW5kRGF0ZS5mb3JtYXQoZm9ybWF0KSA9PSB0aGlzLnJhbmdlc1tyYW5nZV1bMV0uZm9ybWF0KGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tUmFuZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5MYWJlbCA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMgbGk6ZXEoJyArIGkgKyAnKScpLmFkZENsYXNzKCdhY3RpdmUnKS5hdHRyKCdkYXRhLXJhbmdlLWtleScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vaWdub3JlIHRpbWVzIHdoZW4gY29tcGFyaW5nIGRhdGVzIGlmIHRpbWUgcGlja2VyIGlzIG5vdCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHRoaXMucmFuZ2VzW3JhbmdlXVswXS5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiB0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5yYW5nZXNbcmFuZ2VdWzFdLmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVJhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzIGxpOmVxKCcgKyBpICsgJyknKS5hZGRDbGFzcygnYWN0aXZlJykuYXR0cignZGF0YS1yYW5nZS1rZXknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21SYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJhbmdlcyBsaTpsYXN0JykuYWRkQ2xhc3MoJ2FjdGl2ZScpLmF0dHIoJ2RhdGEtcmFuZ2Uta2V5Jyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjbGlja0FwcGx5OiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignYXBwbHkuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xpY2tDYW5jZWw6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm9sZFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5vbGRFbmREYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBtb250aE9yWWVhckNoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdmFyIGlzTGVmdCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5kcnAtY2FsZW5kYXInKS5oYXNDbGFzcygnbGVmdCcpLFxyXG4gICAgICAgICAgICAgICAgbGVmdE9yUmlnaHQgPSBpc0xlZnQgPyAnbGVmdCcgOiAncmlnaHQnLFxyXG4gICAgICAgICAgICAgICAgY2FsID0gdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nK2xlZnRPclJpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vbnRoIG11c3QgYmUgTnVtYmVyIGZvciBuZXcgbW9tZW50IHZlcnNpb25zXHJcbiAgICAgICAgICAgIHZhciBtb250aCA9IHBhcnNlSW50KGNhbC5maW5kKCcubW9udGhzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICB2YXIgeWVhciA9IGNhbC5maW5kKCcueWVhcnNlbGVjdCcpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5zdGFydERhdGUueWVhcigpIHx8ICh5ZWFyID09IHRoaXMuc3RhcnREYXRlLnllYXIoKSAmJiBtb250aCA8IHRoaXMuc3RhcnREYXRlLm1vbnRoKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLnN0YXJ0RGF0ZS5tb250aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLnN0YXJ0RGF0ZS55ZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5taW5EYXRlLnllYXIoKSB8fCAoeWVhciA9PSB0aGlzLm1pbkRhdGUueWVhcigpICYmIG1vbnRoIDwgdGhpcy5taW5EYXRlLm1vbnRoKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLm1pbkRhdGUubW9udGgoKTtcclxuICAgICAgICAgICAgICAgICAgICB5ZWFyID0gdGhpcy5taW5EYXRlLnllYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPiB0aGlzLm1heERhdGUueWVhcigpIHx8ICh5ZWFyID09IHRoaXMubWF4RGF0ZS55ZWFyKCkgJiYgbW9udGggPiB0aGlzLm1heERhdGUubW9udGgoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb250aCA9IHRoaXMubWF4RGF0ZS5tb250aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLm1heERhdGUueWVhcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5tb250aChtb250aCkueWVhcih5ZWFyKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5tb250aChtb250aCkueWVhcih5ZWFyKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5jbG9uZSgpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdGltZUNoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZHJwLWNhbGVuZGFyJyksXHJcbiAgICAgICAgICAgICAgICBpc0xlZnQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBob3VyID0gcGFyc2VJbnQoY2FsLmZpbmQoJy5ob3Vyc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IHBhcnNlSW50KGNhbC5maW5kKCcubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KGNhbC5maW5kKCcubWludXRlc2VsZWN0IG9wdGlvbjpsYXN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy50aW1lUGlja2VyU2Vjb25kcyA/IHBhcnNlSW50KGNhbC5maW5kKCcuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcjI0SG91cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFtcG0gPSBjYWwuZmluZCgnLmFtcG1zZWxlY3QnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdBTScgJiYgaG91ciA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5ob3VyKGhvdXIpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQubWludXRlKG1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnREYXRlKHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHN0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIHRoaXMuZW5kRGF0ZS5pc0JlZm9yZShzdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBlbmQuaG91cihob3VyKTtcclxuICAgICAgICAgICAgICAgIGVuZC5taW51dGUobWludXRlKTtcclxuICAgICAgICAgICAgICAgIGVuZC5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgY2FsZW5kYXJzIHNvIGFsbCBjbGlja2FibGUgZGF0ZXMgcmVmbGVjdCB0aGUgbmV3IHRpbWUgY29tcG9uZW50XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgZm9ybSBpbnB1dHMgYWJvdmUgdGhlIGNhbGVuZGFycyB3aXRoIHRoZSBuZXcgdGltZVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1JbnB1dHMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vcmUtcmVuZGVyIHRoZSB0aW1lIHBpY2tlcnMgYmVjYXVzZSBjaGFuZ2luZyBvbmUgc2VsZWN0aW9uIGNhbiBhZmZlY3Qgd2hhdCdzIGVuYWJsZWQgaW4gYW5vdGhlclxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoJ2xlZnQnKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xyXG5cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlbGVtZW50Q2hhbmdlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LnZhbCgpLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVTdHJpbmcgPSB0aGlzLmVsZW1lbnQudmFsKCkuc3BsaXQodGhpcy5sb2NhbGUuc2VwYXJhdG9yKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbnVsbCxcclxuICAgICAgICAgICAgICAgIGVuZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KGRhdGVTdHJpbmdbMF0sIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQoZGF0ZVN0cmluZ1sxXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlciB8fCBzdGFydCA9PT0gbnVsbCB8fCBlbmQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KHRoaXMuZWxlbWVudC52YWwoKSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXN0YXJ0LmlzVmFsaWQoKSB8fCAhZW5kLmlzVmFsaWQoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoZW5kKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAvL2hpZGUgb24gdGFiIG9yIGVudGVyXHJcbiAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09PSA5KSB8fCAoZS5rZXlDb2RlID09PSAxMykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2hpZGUgb24gZXNjIGFuZCBwcmV2ZW50IHByb3BhZ2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXMoJ2lucHV0JykgJiYgdGhpcy5hdXRvVXBkYXRlSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArPSB0aGlzLmxvY2FsZS5zZXBhcmF0b3IgKyB0aGlzLmVuZERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuZWxlbWVudC52YWwoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC52YWwobmV3VmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vZmYoJy5kYXRlcmFuZ2VwaWNrZXInKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAkLmZuLmRhdGVyYW5nZXBpY2tlciA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGltcGxlbWVudE9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJC5mbi5kYXRlcmFuZ2VwaWNrZXIuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKGVsLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpKVxyXG4gICAgICAgICAgICAgICAgZWwuZGF0YSgnZGF0ZXJhbmdlcGlja2VyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGVsLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicsIG5ldyBEYXRlUmFuZ2VQaWNrZXIoZWwsIGltcGxlbWVudE9wdGlvbnMsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBEYXRlUmFuZ2VQaWNrZXI7XHJcblxyXG59KSk7XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///335\n")},796:(module,__unused_webpack_exports,__webpack_require__)=>{eval('var ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(692);\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(160);\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___["jQuery"] === \'undefined\') ___EXPOSE_LOADER_GLOBAL_THIS___["jQuery"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___["$"] === \'undefined\') ___EXPOSE_LOADER_GLOBAL_THIS___["$"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___["jquery"] === \'undefined\') ___EXPOSE_LOADER_GLOBAL_THIS___["jquery"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk2LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS1leHBvc2VkLmpzPzY1MjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fX0VYUE9TRV9MT0FERVJfSU1QT1JUX19fID0gcmVxdWlyZShcIi0hLi9qcXVlcnkuanNcIik7XG52YXIgX19fRVhQT1NFX0xPQURFUl9HRVRfR0xPQkFMX1RISVNfX18gPSByZXF1aXJlKFwiLi4vLi4vZXhwb3NlLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0R2xvYmFsVGhpcy5qc1wiKTtcbnZhciBfX19FWFBPU0VfTE9BREVSX0dMT0JBTF9USElTX19fID0gX19fRVhQT1NFX0xPQURFUl9HRVRfR0xPQkFMX1RISVNfX187XG5pZiAodHlwZW9mIF9fX0VYUE9TRV9MT0FERVJfR0xPQkFMX1RISVNfX19bXCJqUXVlcnlcIl0gPT09ICd1bmRlZmluZWQnKSBfX19FWFBPU0VfTE9BREVSX0dMT0JBTF9USElTX19fW1wialF1ZXJ5XCJdID0gX19fRVhQT1NFX0xPQURFUl9JTVBPUlRfX187XG5pZiAodHlwZW9mIF9fX0VYUE9TRV9MT0FERVJfR0xPQkFMX1RISVNfX19bXCIkXCJdID09PSAndW5kZWZpbmVkJykgX19fRVhQT1NFX0xPQURFUl9HTE9CQUxfVEhJU19fX1tcIiRcIl0gPSBfX19FWFBPU0VfTE9BREVSX0lNUE9SVF9fXztcbmlmICh0eXBlb2YgX19fRVhQT1NFX0xPQURFUl9HTE9CQUxfVEhJU19fX1tcImpxdWVyeVwiXSA9PT0gJ3VuZGVmaW5lZCcpIF9fX0VYUE9TRV9MT0FERVJfR0xPQkFMX1RISVNfX19bXCJqcXVlcnlcIl0gPSBfX19FWFBPU0VfTE9BREVSX0lNUE9SVF9fXztcbm1vZHVsZS5leHBvcnRzID0gX19fRVhQT1NFX0xPQURFUl9JTVBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///796\n')},160:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === "object") {\n return globalThis;\n }\n var g;\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function("return this")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === "object") {\n return window;\n }\n\n // This works if the self reference is available\n if (typeof self === "object") {\n return self;\n }\n\n // This works if the global reference is available\n if (typeof __webpack_require__.g !== "undefined") {\n return __webpack_require__.g;\n }\n }\n return g;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYwLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9leHBvc2UtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRHbG9iYWxUaGlzLmpzPzYwYjgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIH1cbiAgdmFyIGc7XG4gIHRyeSB7XG4gICAgLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZyA9IHRoaXMgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuXG4gICAgLy8gVGhpcyB3b3JrcyBpZiB0aGUgc2VsZiByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHdvcmtzIGlmIHRoZSBnbG9iYWwgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXR1cm4gZ2xvYmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZztcbn0oKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n')},668:(module,exports,__webpack_require__)=>{eval('var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery UI - v1.12.1 - 2017-03-19\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( true ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(796) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === \'function\' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = "1.12.1";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, "events" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( "remove" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( "." )[ 0 ];\n\tname = name.split( "." )[ 1 ];\n\tvar fullName = namespace + "-" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without "new" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use "new" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we\'ll modify the options hash on the prototype that we\'re\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don\'t prefix for widgets that aren\'t DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We\'re essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don\'t extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === "string";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === "instance" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === "instance" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( "cannot call methods on " + name +\n\t\t\t\t\t\t\t" prior to initialization; " +\n\t\t\t\t\t\t\t"attempted to call method \'" + options + "\'" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {\n\t\t\t\t\t\treturn $.error( "no such method \'" + options + "\' for " + name +\n\t\t\t\t\t\t\t" widget instance" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: "widget",\n\twidgetEventPrefix: "",\n\tdefaultElement: "<div>",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = "." + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( "create", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( "aria-disabled" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don\'t return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === "string" ) {\n\n\t\t\t// Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( "." );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "classes" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === "disabled" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don\'t use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, "ui-state-hover" );\n\t\t\tthis._removeClass( this.focusable, null, "ui-state-focus" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t"remove": "_untrackClassesElement"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( " " );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === "boolean" ) ? add : extra;\n\t\tvar shift = ( typeof element === "string" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== "boolean" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( "ui-state-disabled" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === "string" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== "string" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === "string" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, "ui-state-hover" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, "ui-state-hover" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, "ui-state-focus" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, "ui-state-focus" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === "string" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === "number" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === "number" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( "<div " +\n\t\t\t\t"style=\'display:block;position:absolute;width:50px;height:50px;overflow:hidden;\'>" +\n\t\t\t\t"<div style=\'height:100px;width:auto;\'></div></div>" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( "body" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( "overflow", "scroll" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? "" :\n\t\t\t\twithin.element.css( "overflow-x" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? "" :\n\t\t\t\twithin.element.css( "overflow-y" ),\n\t\t\thasOverflowX = overflowX === "scroll" ||\n\t\t\t\t( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === "scroll" ||\n\t\t\t\t( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don\'t want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || "flip" ).split( " " ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = "left top";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ "my", "at" ], function() {\n\t\tvar pos = ( options[ this ] || "" ).split( " " ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ "center" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ "center" ].concat( pos ) :\n\t\t\t\t\t[ "center", "center" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === "right" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === "center" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === "bottom" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === "center" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, "marginLeft" ),\n\t\t\tmarginTop = parseCss( this, "marginTop" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === "right" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === "center" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === "bottom" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === "center" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ "left", "top" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? "left" : left > 0 ? "right" : "center",\n\t\t\t\t\t\tvertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = "center";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = "middle";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = "horizontal";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = "vertical";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === "left" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === "right" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === "left" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === "right" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === "top",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === "bottom" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === "top" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === "bottom" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ ":" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: http://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = "onselectstart" in document.createElement( "div" ) ?\n\t\t\t"selectstart" :\n\t\t\t"mousedown";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + ".ui-disableSelection", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( ".ui-disableSelection" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Focusable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: http://api.jqueryui.com/focusable-selector/\n\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( "area" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( "img[usemap=\'#" + mapName + "\']" );\n\t\treturn img.length > 0 && img.is( ":visible" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset\'s legend do not get disabled.\n\t\t\t// Since controls generally aren\'t placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( "fieldset" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( "a" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn\'t resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( "visibility" );\n\twhile ( visibility === "inherit" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( "visibility" );\n\t}\n\treturn visibility !== "hidden";\n}\n\n$.extend( $.expr[ ":" ], {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, "tabindex" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn.form = function() {\n\treturn typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: http://api.jqueryui.com/form-reset-mixin/\n\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( "ui-form-reset-instances" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element.form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( "ui-form-reset-instances" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don\'t use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( "reset.ui-form-reset", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( "ui-form-reset-instances", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( "ui-form-reset-instances" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( "ui-form-reset-instances", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( "ui-form-reset-instances" )\n\t\t\t\t.off( "reset.ui-form-reset" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.7.x 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.7 Support\n//>>group: Core\n//>>description: Support version 1.7.x of jQuery core\n\n\n\n// Support: jQuery 1.7 only\n// Not a great way to check versions, but since we only support 1.7+ and only\n// need to detect <1.8, this is a simple check that should suffice. Checking\n// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0\n// and we\'ll never reach 1.70.0 (if we do, we certainly won\'t be supporting\n// 1.7 anymore). See #11197 for why we\'re not using feature detection.\nif ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) {\n\n\t// Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()\n\t// Unlike jQuery Core 1.8+, these only support numeric values to set the\n\t// dimensions in pixels\n\t$.each( [ "Width", "Height" ], function( i, name ) {\n\t\tvar side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, "padding" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, "margin" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ "inner" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ "inner" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + "px" );\n\t\t\t} );\n\t\t};\n\n\t\t$.fn[ "outer" + name ] = function( size, margin ) {\n\t\t\tif ( typeof size !== "number" ) {\n\t\t\t\treturn orig[ "outer" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size, true, margin ) + "px" );\n\t\t\t} );\n\t\t};\n\t} );\n\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n;\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n\n\n// Internal use only\nvar escapeSelector = $.ui.escapeSelector = ( function() {\n\tvar selectorEscape = /([!"#$%&\'()*+,./:;<=>?@[\\]^`{|}~])/g;\n\treturn function( selector ) {\n\t\treturn selector.replace( selectorEscape, "\\\\$1" );\n\t};\n} )();\n\n\n/*!\n * jQuery UI Labels 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: http://api.jqueryui.com/labels/\n\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( "label" );\n\n\t// Look for the label based on the id\n\tid = this.attr( "id" );\n\tif ( id ) {\n\n\t\t// We don\'t search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = "label[for=\'" + $.ui.escapeSelector( id ) + "\']";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( "position" ),\n\t\texcludeStaticParent = position === "absolute",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( "position" ) === "static" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +\n\t\t\t\tparent.css( "overflow-x" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === "fixed" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: http://api.jqueryui.com/tabbable-selector/\n\n\n\nvar tabbable = $.extend( $.expr[ ":" ], {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, "tabindex" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId\'s\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = "ui-id-" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( "id" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( "mouseup", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( "ui.mouse", {\n\tversion: "1.12.1",\n\toptions: {\n\t\tcancel: "input, textarea, button, select, option",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( "mousedown." + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( "click." + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + ".preventClickEvent" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn\'t mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( "." + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( "mouseup." + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don\'t let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + ".preventClickEvent" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( "mousemove." + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( "mouseup." + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you\'ve moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( "mouseup." + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + ".preventClickEvent", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== "body" ) {\n\t\t$( element ).trigger( "blur" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( "ui.draggable", $.ui.mouse, {\n\tversion: "1.12.1",\n\twidgetEventPrefix: "drag",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: "parent",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: "auto",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: "original",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: "default",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: "both",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === "original" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( "ui-draggable" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === "handle" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we\'re not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( "<div>" )\n\t\t\t\t.css( "position", "absolute" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don\'t blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, "ui-draggable-dragging" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it\'s the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper\'s css position\n\t\tthis.cssPosition = this.helper.css( "position" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( "position" ) === "fixed";\n\t\t\t} ).length > 0;\n\n\t\t//The element\'s absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if "cursorAt" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( "start", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( "absolute" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( "drag", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( "mouseup", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + "px";\n\t\tthis.helper[ 0 ].style.top = this.position.top + "px";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === "invalid" && !dropped ) ||\n\t\t\t\t( this.options.revert === "valid" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( "stop", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( "stop", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( "focus" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( ".ui-draggable-dragging" ) ) {\n\t\t\tthis._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, "ui-draggable-handle" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, "ui-draggable-handle" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === "clone" ?\n\t\t\t\t\tthis.element.clone().removeAttr( "id" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( "body" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === "parent" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn\'t have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {\n\t\t\thelper.css( "position", "absolute" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = "relative";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === "string" ) {\n\t\t\tobj = obj.split( " " );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( "left" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( "right" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( "top" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( "bottom" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it\'s position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn\'t\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== "relative" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === "window" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === "document" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === "parent" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === "absolute" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won\'t check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === "y" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === "x" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, "ui-draggable-dragging" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( "absolute" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( "draggable", "connectToSortable", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( "instance" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it\'s initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( "activate", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( "position" ),\n\t\t\t\t\ttop: sortable.placeholder.css( "top" ),\n\t\t\t\t\tleft: sortable.placeholder.css( "left" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don\'t set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( "deactivate", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable\'s _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable\'s _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable\'s parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( "ui-sortable-item", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn\'t create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( "toSortable", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle "valid/invalid".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable\'s position because the draggable\'s can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn\'t intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn\'t remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable\'s mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( "out", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable\'s offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( "fromSortable", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "cursor", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( "body" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( "cursor" ) ) {\n\t\t\to._cursor = t.css( "cursor" );\n\t\t}\n\t\tt.css( "cursor", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( "body" ).css( "cursor", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "opacity", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( "opacity" ) ) {\n\t\t\to._opacity = t.css( "opacity" );\n\t\t}\n\t\tt.css( "opacity", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( "opacity", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "scroll", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {\n\t\t\tif ( !o.axis || o.axis !== "x" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== "y" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== "x" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== "y" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "snap", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== "inner" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== "outer" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( "relative", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "stack", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( "zIndex", min + i );\n\t\t} );\n\t\tthis.css( "zIndex", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( "draggable", "zIndex", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( "zIndex" ) ) {\n\t\t\to._zIndex = t.css( "zIndex" );\n\t\t}\n\t\tt.css( "zIndex", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( "zIndex", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Droppable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: http://api.jqueryui.com/droppable/\n//>>demos: http://jqueryui.com/droppable/\n\n\n\n$.widget( "ui.droppable", {\n\tversion: "1.12.1",\n\twidgetEventPrefix: "drop",\n\toptions: {\n\t\taccept: "*",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: "default",\n\t\ttolerance: "intersect",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable\'s proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable\'s proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this._addClass( "ui-droppable" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === "accept" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === "scope" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( "activate", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( "deactivate", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( "over", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( "out", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( ":data(ui-droppable)" )\n\t\t\t.not( ".ui-draggable-dragging" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( "instance" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\tintersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false; }\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( "drop", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.13 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( "ui-droppable-hover" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( "ui-droppable-hover" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( "ui-droppable-active" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( "ui-droppable-active" );\n\t}\n} );\n\nvar intersect = $.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase "fit":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase "intersect":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase "pointer":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase "touch":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { "default": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( "display" ) !== "none";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === "mousedown" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\tintersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t"isout" :\n\t\t\t\t\t( intersects && !this.isover ? "isover" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( ":data(ui-droppable)" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( "instance" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( "instance" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === "isover" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === "isover" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === "isout" ? "isover" : "isout" ] = false;\n\t\t\tthis[ c === "isover" ? "_over" : "_out" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === "isout" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( "body" ).off( "scroll.droppable" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( "ui.droppable", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: http://api.jqueryui.com/resizable/\n//>>demos: http://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.resizable", $.ui.mouse, {\n\tversion: "1.12.1",\n\twidgetEventPrefix: "resize",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: "slow",\n\t\tanimateEasing: "swing",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t"ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: "e,s,se",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( "overflow" ) === "hidden" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn\'t have the scroll set, see if it\'s possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( "ui-resizable" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( "<div class=\'ui-wrapper\' style=\'overflow: hidden;\'></div>" ).css( {\n\t\t\t\t\tposition: this.element.css( "position" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( "top" ),\n\t\t\t\t\tleft: this.element.css( "left" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t"ui-resizable", this.element.resizable( "instance" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( "marginTop" ),\n\t\t\t\tmarginRight: this.originalElement.css( "marginRight" ),\n\t\t\t\tmarginBottom: this.originalElement.css( "marginBottom" ),\n\t\t\t\tmarginLeft: this.originalElement.css( "marginLeft" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( "margin", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( "resize" );\n\t\t\tthis.originalElement.css( "resize", "none" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: "static",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: "block"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( "mouseenter", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( "ui-resizable-autohide" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( "mouseleave", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( "ui-resizable-autohide" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( "resizable" )\n\t\t\t\t\t.removeData( "ui-resizable" )\n\t\t\t\t\t.off( ".resizable" )\n\t\t\t\t\t.find( ".ui-resizable-handle" )\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( "position" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( "top" ),\n\t\t\t\tleft: wrapper.css( "left" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( "resize", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase "handles":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( ".ui-resizable-handle", this.element ).length ?\n\t\t\t\t"e,s,se" : {\n\t\t\t\t\tn: ".ui-resizable-n",\n\t\t\t\t\te: ".ui-resizable-e",\n\t\t\t\t\ts: ".ui-resizable-s",\n\t\t\t\t\tw: ".ui-resizable-w",\n\t\t\t\t\tse: ".ui-resizable-se",\n\t\t\t\t\tsw: ".ui-resizable-sw",\n\t\t\t\t\tne: ".ui-resizable-ne",\n\t\t\t\t\tnw: ".ui-resizable-nw"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === "all" ) {\n\t\t\t\tthis.handles = "n,e,s,w,se,sw,ne,nw";\n\t\t\t}\n\n\t\t\tn = this.handles.split( "," );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = $.trim( n[ i ] );\n\t\t\t\thname = "ui-resizable-" + handle;\n\t\t\t\taxis = $( "<div>" );\n\t\t\t\tthis._addClass( axis, "ui-resizable-handle " + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = ".ui-resizable-" + handle;\n\t\t\t\tthis.element.append( axis );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { "mousedown": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ "padding",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? "Top" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? "Bottom" :\n\t\t\t\t\t\t/^e$/.test( i ) ? "Right" : "Left" ].join( "" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( "mouseover", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( "ui-resizable-autohide" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._handles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( "left" ) );\n\t\tcurtop = this._num( this.helper.css( "top" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === "number" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );\n\t\t$( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );\n\n\t\tthis._addClass( "ui-resizable-resizing" );\n\t\tthis._propagate( "start", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( "resize", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( "resize", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width() - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( "left" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( "top" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( "body" ).css( "cursor", "auto" );\n\n\t\tthis._removeClass( "ui-resizable-resizing" );\n\n\t\tthis._propagate( "stop", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + "px";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + "px";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + "px";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + "px";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === "sw" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === "nw" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( "borderTopWidth" ),\n\t\t\t\telement.css( "borderRightWidth" ),\n\t\t\t\telement.css( "borderBottomWidth" ),\n\t\t\t\telement.css( "borderLeftWidth" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( "paddingTop" ),\n\t\t\t\telement.css( "paddingRight" ),\n\t\t\t\telement.css( "paddingBottom" ),\n\t\t\t\telement.css( "paddingLeft" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( "<div style=\'overflow:hidden;\'></div>" );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: "absolute",\n\t\t\t\tleft: this.elementOffset.left + "px",\n\t\t\t\ttop: this.elementOffset.top + "px",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don\'t modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( "body" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\t( n !== "resize" && this._trigger( n, event, this.ui() ) );\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( "resizable", "animate", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( "left" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( "top" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( "width" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( "height" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( "top" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( "left" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( "resize", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( "resizable", "containment", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( "padding" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( "resizable", "alsoResize", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( "instance" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( "ui-resizable-alsoresize", {\n\t\t\t\twidth: parseFloat( el.width() ), height: parseFloat( el.height() ),\n\t\t\t\tleft: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ "width", "height" ] :\n\t\t\t\t\t\t\t[ "width", "height", "top", "left" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( "ui-resizable-alsoresize" );\n\t}\n} );\n\n$.ui.plugin.add( "resizable", "ghost", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( "instance" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: "block",\n\t\t\tposition: "relative",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, "ui-resizable-ghost" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( "instance" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: "relative",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( "instance" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( "resizable", "grid", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( "instance" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: http://api.jqueryui.com/selectable/\n//>>demos: http://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\n\nvar widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {\n\tversion: "1.12.1",\n\toptions: {\n\t\tappendTo: "body",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: "*",\n\t\ttolerance: "touch",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( "ui-selectable" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, "ui-selectee" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, "selectable-item", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( "ui-selected" ),\n\t\t\t\t\tselecting: $this.hasClass( "ui-selecting" ),\n\t\t\t\t\tunselecting: $this.hasClass( "ui-unselecting" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( "<div>" );\n\t\tthis._addClass( this.helper, "ui-selectable-helper" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( "selectable-item" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( "start", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t"left": event.pageX,\n\t\t\t"top": event.pageY,\n\t\t\t"width": 0,\n\t\t\t"height": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( ".ui-selected" ).each( function() {\n\t\t\tvar selectee = $.data( this, "selectable-item" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, "ui-selected" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, "ui-unselecting" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( "unselecting", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, "selectable-item" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( "ui-selected" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( "selecting", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( "unselecting", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, "selectable-item" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left = selectee.left + that.elementPos.left;\n\t\t\toffset.right = selectee.right + that.elementPos.left;\n\t\t\toffset.top = selectee.top + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === "touch" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === "fit" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, "ui-selected" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, "ui-unselecting" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, "ui-selecting" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( "selecting", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, "ui-selecting" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, "ui-selected" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, "ui-selecting" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, "ui-unselecting" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( "unselecting", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, "ui-selected" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, "ui-unselecting" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( "unselecting", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( ".ui-unselecting", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, "selectable-item" );\n\t\t\tthat._removeClass( selectee.$element, "ui-unselecting" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( "unselected", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( ".ui-selecting", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, "selectable-item" );\n\t\t\tthat._removeClass( selectee.$element, "ui-selecting" )\n\t\t\t\t._addClass( selectee.$element, "ui-selected" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( "selected", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( "stop", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {\n\tversion: "1.12.1",\n\twidgetEventPrefix: "sort",\n\tready: false,\n\toptions: {\n\t\tappendTo: "parent",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: "auto",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: "original",\n\t\titems: "> *",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: "default",\n\t\ttolerance: "intersect",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( "float" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( "display" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( "ui-sortable" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let\'s determine the parent\'s offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We\'re ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === "handle" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t"ui-sortable-handle"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + "-item" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === "static" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + "-item" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + "-item" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it\'s the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element\'s absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper\'s position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( "position", "absolute" );\n\t\tthis.cssPosition = this.helper.css( "position" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if "cursorAt" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it\'s not playing any role during\n\t\t// the drag, won\'t cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== "auto" ) { // cursor option\n\t\t\tbody = this.document.find( "body" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( "cursor" );\n\t\t\tbody.css( "cursor", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( "opacity" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( "opacity" );\n\t\t\t}\n\t\t\tthis.helper.css( "opacity", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( "zIndex" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( "zIndex" );\n\t\t\t}\n\t\t\tthis.helper.css( "zIndex", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== "HTML" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( "start", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post "activate" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, "ui-sortable-helper" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( "absolute" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== "HTML" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( "absolute" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== "y" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + "px";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== "x" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + "px";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in "sub-sortables" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === "semi-dynamic" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? "down" : "up";\n\n\t\t\t\tif ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( "change", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( "sort", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === "x" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === "y" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( "mouseup", { target: null } ) );\n\n\t\t\tif ( this.options.helper === "original" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, "ui-sortable-helper" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( "out", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== "original" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + "[]" ) +\n\t\t\t\t\t"=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + "=" );\n\t\t}\n\n\t\treturn str.join( "&" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === "pointer" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== "pointer" &&\n\t\t\t\tthis.helperProportions[ this.floating ? "width" : "height" ] >\n\t\t\t\titem[ this.floating ? "width" : "height" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === "x" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === "y" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === "right" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === "left" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === "up" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? "down" : "up" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? "right" : "left" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( ".ui-sortable-helper" )\n\t\t\t\t\t\t\t\t.not( ".ui-sortable-placeholder" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( ".ui-sortable-helper" )\n\t\t\t\t.not( ".ui-sortable-placeholder" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn\'t be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + "-item", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent\'s position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we\'re not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( "<" + nodeName + ">", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, "ui-sortable-placeholder",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, "ui-sortable-helper" );\n\n\t\t\t\t\tif ( nodeName === "tbody" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( "tr" ).eq( 0 ),\n\t\t\t\t\t\t\t$( "<tr>", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === "tr" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === "img" ) {\n\t\t\t\t\t\telement.attr( "src", that.currentItem.attr( "src" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( "visibility", "hidden" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as \'placeholder option, we don\'t force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option \'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn\'t have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( "<td>&#160;</td>", that.document[ 0 ] )\n\t\t\t\t.attr( "colspan", $( this ).attr( "colspan" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that\'s located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we\'ve already found a container and it\'s more "inner" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn\'t intersect. trigger "out" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( "out", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it\'s not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? "left" : "top";\n\t\t\tsizeProperty = floating ? "width" : "height";\n\t\t\taxis = floating ? "pageX" : "pageY";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? "up" : "down";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( "change", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn\'t happen already\n\t\tif ( !helper.parents( "body" ).length ) {\n\t\t\t$( o.appendTo !== "parent" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( "position" ),\n\t\t\t\ttop: this.currentItem.css( "top" ),\n\t\t\t\tleft: this.currentItem.css( "left" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === "string" ) {\n\t\t\tobj = obj.split( " " );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( "left" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( "right" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( "top" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( "bottom" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it\'s position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn\'t\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === "relative" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === "parent" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === "document" || o.containment === "window" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === "document" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === "document" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( "overflow" ) !== "hidden" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === "absolute" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === "absolute" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === "absolute" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won\'t check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent\'s offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === "fixed" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get\'s higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it\'s still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don\'t do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = "";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, "ui-sortable-helper" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( "receive", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( "update", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( "remove", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( "receive", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( "update", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( "body" ).css( "cursor", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( "opacity", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( "beforeStop", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( "stop", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Accordion 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/accordion/\n//>>demos: http://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsAccordion = $.widget( "ui.accordion", {\n\tversion: "1.12.1",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t"ui-accordion-header": "ui-corner-top",\n\t\t\t"ui-accordion-header-collapsed": "ui-corner-all",\n\t\t\t"ui-accordion-content": "ui-corner-bottom"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: "click",\n\t\theader: "> li > :first-child, > :not(li):even",\n\t\theightStyle: "auto",\n\t\ticons: {\n\t\t\tactiveHeader: "ui-icon-triangle-1-s",\n\t\t\theader: "ui-icon-triangle-1-e"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: "hide",\n\t\tborderBottomWidth: "hide",\n\t\tpaddingTop: "hide",\n\t\tpaddingBottom: "hide",\n\t\theight: "hide"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: "show",\n\t\tborderBottomWidth: "show",\n\t\tpaddingTop: "show",\n\t\tpaddingBottom: "show",\n\t\theight: "show"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( "ui-accordion", "ui-widget ui-helper-reset" );\n\t\tthis.element.attr( "role", "tablist" );\n\n\t\t// Don\'t allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( "<span>" );\n\t\t\tthis._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( ".ui-accordion-header-icon" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, "ui-accordion-icons" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, "ui-accordion-icons" );\n\t\tthis.headers.children( ".ui-accordion-header-icon" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( "role" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( "display", "" )\n\t\t\t.removeAttr( "role aria-hidden aria-labelledby" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== "content" ) {\n\t\t\tcontents.css( "height", "" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "active" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === "event" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === "collapsible" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === "icons" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( "aria-disabled", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn\'t cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, "ui-state-disabled", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( "tabIndex", -1 );\n\t\t\t$( toFocus ).attr( "tabIndex", 0 );\n\t\t\t$( toFocus ).trigger( "focus" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( "focus" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header );\n\t\tthis._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed",\n\t\t\t"ui-state-default" );\n\n\t\tthis.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide();\n\t\tthis._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, "ui-accordion-header-active", "ui-state-active" )\n\t\t\t._removeClass( this.active, "ui-accordion-header-collapsed" );\n\t\tthis._addClass( this.active.next(), "ui-accordion-content-active" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( "role", "tab" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( "id" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( "id" );\n\t\t\t\theader.attr( "aria-controls", panelId );\n\t\t\t\tpanel.attr( "aria-labelledby", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( "role", "tabpanel" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t"aria-selected": "false",\n\t\t\t\t\t"aria-expanded": "false",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t"aria-hidden": "true"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( "tabIndex", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t"aria-selected": "true",\n\t\t\t\t"aria-expanded": "true",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t"aria-hidden": "false"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === "fill" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( ":visible" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( "position" );\n\n\t\t\t\tif ( position === "absolute" || position === "fixed" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( "overflow", "auto" );\n\t\t} else if ( heightStyle === "auto" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( ":visible" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === "number" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: "_keydown"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( " " ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = "_eventHandler";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: "_panelKeyDown" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( "beforeActivate", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, "ui-accordion-header-active", "ui-state-active" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( ".ui-accordion-header-icon" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, "ui-accordion-header-collapsed" )\n\t\t\t\t._addClass( clicked, "ui-accordion-header-active", "ui-state-active" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( ".ui-accordion-header-icon" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), "ui-accordion-content-active" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t"aria-hidden": "true"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t"aria-selected": "false",\n\t\t\t"aria-expanded": "false"\n\t\t} );\n\n\t\t// if we\'re switching panels, remove the old header from the tab order\n\t\t// if we\'re opening from collapsed state, remove the previous header from the tab order\n\t\t// if we\'re collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t"tabIndex": -1,\n\t\t\t\t"aria-expanded": "false"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( "tabIndex", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( "aria-hidden", "false" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t"aria-selected": "true",\n\t\t\t\t\t"aria-expanded": "true",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( "box-sizing" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === "number" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === "string" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== "height" ) {\n\t\t\t\t\t\tif ( boxSizing === "content-box" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== "content" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, "ui-accordion-content-active" );\n\t\tthis._removeClass( prev, "ui-accordion-header-active" )\n\t\t\t._addClass( prev, "ui-accordion-header-collapsed" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( "activate", null, data );\n\t}\n} );\n\n\n/*!\n * jQuery UI Menu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: http://api.jqueryui.com/menu/\n//>>demos: http://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsMenu = $.widget( "ui.menu", {\n\tversion: "1.12.1",\n\tdefaultElement: "<ul>",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: "ui-icon-caret-1-e"\n\t\t},\n\t\titems: "> *",\n\t\tmenus: "ul",\n\t\tposition: {\n\t\t\tmy: "left top",\n\t\t\tat: "right top"\n\t\t},\n\t\trole: "menu",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( "ui-menu", "ui-widget ui-widget-content" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t"mousedown .ui-menu-item": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t"click .ui-menu-item": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( ".ui-menu" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( ":focus" ) &&\n\t\t\t\t\t\t\tactive.closest( ".ui-menu" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( "focus", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t"mouseenter .ui-menu-item": function( event ) {\n\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actualTarget = $( event.target ).closest( ".ui-menu-item" ),\n\t\t\t\t\ttarget = $( event.currentTarget );\n\n\t\t\t\t// Ignore bubbled events on parent items, see #11641\n\t\t\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\tthis._removeClass( target.siblings().children( ".ui-state-active" ),\n\t\t\t\t\tnull, "ui-state-active" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: "collapseAll",\n\t\t\t"mouseleave .ui-menu": "collapseAll",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there\'s already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: "_keydown"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( ".ui-menu-item" )\n\t\t\t\t.removeAttr( "role aria-disabled" ),\n\t\t\tsubmenus = items.children( ".ui-menu-item-wrapper" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( "tabIndex role aria-haspopup" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( "aria-activedescendant" )\n\t\t\t.find( ".ui-menu" ).addBack()\n\t\t\t\t.removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " +\n\t\t\t\t\t"tabIndex" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( "ui-menu-submenu-caret" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( "first", "first", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( "last", "last", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( ".ui-state-disabled" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || "";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( ".ui-menu-item" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( ".ui-state-disabled" ) ) {\n\t\t\tif ( this.active.children( "[aria-haspopup=\'true\']" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( ":not(.ui-menu)" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t"aria-hidden": "true",\n\t\t\t\t"aria-expanded": "false"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true );\n\n\t\t\t\tthat._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( "aria-haspopup", "true" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( "aria-labelledby", item.attr( "id" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( ".ui-menu-item" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, "ui-menu-divider", "ui-widget-content" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don\'t refresh list items that are already adapted\n\t\tnewItems = items.not( ".ui-menu-item, .ui-menu-divider" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( ".ui-menu" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, "ui-menu-item" )\n\t\t\t._addClass( newWrappers, "ui-menu-item-wrapper" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: "menuitem",\n\t\t\tlistbox: "option"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "icons" ) {\n\t\t\tvar icons = this.element.find( ".ui-menu-icon" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( "aria-disabled", String( value ) );\n\t\tthis._toggleClass( null, "ui-state-disabled", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === "focus" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( ".ui-menu-item-wrapper" );\n\t\tthis._addClass( focused, null, "ui-state-active" );\n\n\t\t// Only update aria-activedescendant if there\'s a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( "aria-activedescendant", focused.attr( "id" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( ".ui-menu-item" )\n\t\t\t\t\t.children( ".ui-menu-item-wrapper" );\n\t\tthis._addClass( activeParent, null, "ui-state-active" );\n\n\t\tif ( event && event.type === "keydown" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( ".ui-menu" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( "focus", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( ".ui-menu-item-wrapper" ),\n\t\t\tnull, "ui-state-active" );\n\n\t\tthis._trigger( "blur", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don\'t open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( "aria-hidden" ) !== "true" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )\n\t\t\t.hide()\n\t\t\t.attr( "aria-hidden", "true" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( "aria-hidden" )\n\t\t\t.attr( "aria-expanded", "true" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( ".ui-menu" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus. If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( ".ui-menu" )\n\t\t\t.hide()\n\t\t\t.attr( "aria-hidden", "true" )\n\t\t\t.attr( "aria-expanded", "false" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( ".ui-menu" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( ".ui-menu-item", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( ".ui-menu " )\n\t\t\t\t\t.find( this.options.items )\n\t\t\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( "next", "first", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( "prev", "last", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( ".ui-menu-item" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( ".ui-menu-item" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === "first" || direction === "last" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + "All" ]( ".ui-menu-item" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( ".ui-menu-item" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? "first" : "last" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( ".ui-menu-item" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( "scrollHeight" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don\'t trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( ".ui-menu-item" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( ".ui-menu" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( "select", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, "\\\\$&" ),\n\t\t\tregex = new RegExp( "^" + escapedCharacter, "i" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( ".ui-menu-item" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\t$.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: http://api.jqueryui.com/autocomplete/\n//>>demos: http://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.autocomplete", {\n\tversion: "1.12.1",\n\tdefaultElement: "<input>",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: "left top",\n\t\t\tat: "left bottom",\n\t\t\tcollision: "none"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we\'ve already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === "textarea",\n\t\t\tisInput = nodeName === "input";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they\'re contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( "ui-autocomplete-input" );\n\t\tthis.element.attr( "autocomplete", "off" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( "readOnly" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( "previousPage", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( "nextPage", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( "previous", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( "next", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( ":visible" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( "previousPage", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( "nextPage", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( "previous", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( "next", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( "<ul>" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( "instance" );\n\n\t\tthis._addClass( this.menu.element, "ui-autocomplete", "ui-front" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn\'t prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\n\t\t\t\t\t// Support: IE 8 only\n\t\t\t\t\t// Right clicking a menu item or selecting text from the menu items will\n\t\t\t\t\t// result in focus moving out of the input. However, we\'ve already received\n\t\t\t\t\t// and ignored the blur event because of the cancelBlur flag set above. So\n\t\t\t\t\t// we restore focus to ensure that the menu closes properly based on the user\'s\n\t\t\t\t\t// next actions.\n\t\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\t\tthis.element.trigger( "focus" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( "mousemove", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( "ui-autocomplete-item" );\n\t\t\t\tif ( false !== this._trigger( "focus", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( "aria-label" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( "<div>" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( "ui-autocomplete-item" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( "focus" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( "select", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( "<div>", {\n\t\t\trole: "status",\n\t\t\t"aria-live": "assertive",\n\t\t\t"aria-relevant": "additions"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( "autocomplete" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( "autocomplete" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === "source" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === "appendTo" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === "disabled" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( ".ui-front, dialog" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === "string" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: "json",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( ":visible" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( "search", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( "ui-autocomplete-loading" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy( function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( "ui-autocomplete-loading" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( "response", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( "open" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don\'t cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, "mousedown" );\n\n\t\tif ( this.menu.element.is( ":visible" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( "close", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( "change", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === "string" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: "_closeOnClickOutside"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( "" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( "ui-autocomplete-item", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( "<li>" )\n\t\t\t.append( $( "<div>" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( ":visible" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( "isContentEditable" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( "contentEditable" );\n\n\t\tif ( editable === "inherit" ) {\n\t\t return this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === "true";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, "\\\\$&" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( "ui.autocomplete", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: "No search results.",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? " results are" : " result is" ) +\n\t\t\t\t\t" available, use up and down arrow keys to navigate.";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( "<div>" ).text( message ).appendTo( this.liveRegion );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: http://api.jqueryui.com/controlgroup/\n//>>demos: http://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( "ui.controlgroup", {\n\tversion: "1.12.1",\n\tdefaultElement: "<div>",\n\toptions: {\n\t\tdirection: "horizontal",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t"button": "input[type=button], input[type=submit], input[type=reset], button, a",\n\t\t\t"controlgroupLabel": ".ui-controlgroup-label",\n\t\t\t"checkboxradio": "input[type=\'checkbox\'], input[type=\'radio\']",\n\t\t\t"selectmenu": "select",\n\t\t\t"spinner": ".ui-spinner-input"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( "role", "toolbar" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( "destroy" );\n\t\tthis.childWidgets.removeData( "ui-controlgroup-data" );\n\t\tthis.element.removeAttr( "role" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( ".ui-controlgroup-label-contents" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === "controlgroupLabel" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( ".ui-controlgroup-label-contents" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( "<span class=\'ui-controlgroup-label-contents\'></span>" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can\'t determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ "_" + widget + "Options" ] ) {\n\t\t\t\toptions = that[ "_" + widget + "Options" ]( "middle" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( "instance" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === "button" && element.parent( ".ui-spinner" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn\'t exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( "instance" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( "widget" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], "ui-controlgroup-data",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( "instance" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.unique( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, "ui-controlgroup-item" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( "ui-controlgroup-data" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";\n\t\tvar add = this._buildSimpleOptions( position, "label" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === "vertical";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t"middle": "",\n\t\t\t"first": "ui-corner-" + ( direction ? "top" : "left" ),\n\t\t\t"last": "ui-corner-" + ( direction ? "bottom" : "right" ),\n\t\t\t"only": "ui-corner-all"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, "ui-spinner" );\n\n\t\toptions.classes[ "ui-spinner-up" ] = "";\n\t\toptions.classes[ "ui-spinner-down" ] = "";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, "ui-button" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, "ui-checkboxradio-label" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === "vertical";\n\t\treturn {\n\t\t\twidth: direction ? "auto" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t"ui-selectmenu-button-open": "",\n\t\t\t\t\t"ui-selectmenu-button-closed": ""\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t"ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),\n\t\t\t\t\t"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t"ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",\n\t\t\t\t\t"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t"ui-selectmenu-button-open": "ui-corner-top",\n\t\t\t\t\t"ui-selectmenu-button-closed": "ui-corner-all"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || "";\n\t\t\tcurrent = $.trim( current.replace( controlgroupCornerRegex, "" ) );\n\t\t\tresult[ key ] = ( current + " " + classes[ key ] ).replace( /\\s+/g, " " );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "direction" ) {\n\t\t\tthis._removeClass( "ui-controlgroup-" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === "disabled" ) {\n\t\t\tthis._callChildMethod( value ? "disable" : "enable" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );\n\n\t\tif ( this.options.direction === "horizontal" ) {\n\t\t\tthis._addClass( null, "ui-helper-clearfix" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( ":visible" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ "first", "last" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( "ui-controlgroup-data" );\n\n\t\t\t\tif ( instance && that[ "_" + instance.widgetName + "Options" ] ) {\n\t\t\t\t\tvar options = that[ "_" + instance.widgetName + "Options" ](\n\t\t\t\t\t\tchildren.length === 1 ? "only" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( "refresh" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: http://api.jqueryui.com/checkboxradio/\n//>>demos: http://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {\n\tversion: "1.12.1",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t"ui-checkboxradio-label": "ui-corner-all",\n\t\t\t"ui-checkboxradio-icon": "ui-corner-all"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels;\n\t\tvar that = this;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won\'t have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( "No label found for checkboxradio widget" );\n\t\t}\n\n\t\tthis.originalLabel = "";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\tthis.label.contents().not( this.element[ 0 ] ).each( function() {\n\n\t\t\t// The label contents could be text, html, or a mix. We concat each element to get a\n\t\t\t// string representation of the label, without the input as part of it.\n\t\t\tthat.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;\n\t\t} );\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( "disabled", this.options.disabled );\n\t\tthis._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" );\n\t\tthis._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" );\n\n\t\tif ( this.type === "radio" ) {\n\t\t\tthis._addClass( this.label, "ui-checkboxradio-radio-label" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );\n\t\t\tif ( this.icon ) {\n\t\t\t\tthis._addClass( this.icon, null, "ui-state-hover" );\n\t\t\t}\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: "_toggleClasses",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, "ui-state-focus ui-visual-focus" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, "ui-state-focus ui-visual-focus" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( "Can\'t create checkboxradio on element.nodeName=" + nodeName +\n\t\t\t\t" and element.type=" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = "input[name=\'" + $.ui.escapeSelector( name ) + "\']";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this ).form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );\n\n\t\tif ( this.options.icon && this.type === "checkbox" ) {\n\t\t\tthis._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )\n\t\t\t\t._toggleClass( this.icon, null, "ui-icon-blank", !checked );\n\t\t}\n\n\t\tif ( this.type === "radio" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( "instance" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t"ui-checkboxradio-checked", "ui-state-active" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don\'t allow the value to be set to nothing\n\t\tif ( key === "label" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "disabled" ) {\n\t\t\tthis._toggleClass( this.label, null, "ui-state-disabled", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don\'t refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = "ui-icon ui-icon-background ";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( "<span>" );\n\t\t\t\tthis.iconSpace = $( "<span> </span>" );\n\t\t\t\tthis._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );\n\t\t\t}\n\n\t\t\tif ( this.type === "checkbox" ) {\n\t\t\t\ttoAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );\n\t\t\t} else {\n\t\t\t\ttoAdd += "ui-icon-blank";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, "ui-checkboxradio-icon", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { "disabled": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: http://api.jqueryui.com/button/\n//>>demos: http://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.button", {\n\tversion: "1.12.1",\n\tdefaultElement: "<button>",\n\toptions: {\n\t\tclasses: {\n\t\t\t"ui-button": "ui-corner-all"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: "beginning",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( "input" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( "title" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( "ui-button", "ui-widget" );\n\t\tthis._setOption( "disabled", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( "a" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t"keyup": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( "click" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( "button" ) ) {\n\t\t\tthis.element.attr( "role", "button" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( "icon", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( "title" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( "title", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== "iconPosition",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === "top" || position === "bottom";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( "<span>" );\n\n\t\t\tthis._addClass( this.icon, "ui-button-icon", "ui-icon" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( "ui-button-icon-only" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, "ui-widget-icon-block" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( "<span> </span>" );\n\t\t\t\tthis._addClass( this.iconSpace, "ui-button-icon-space" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, "ui-wiget-icon-block" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( "role" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( "title" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "icon" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === "iconPosition" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can\'t end up with a button that has neither text nor icon\n\t\tif ( key === "showLabel" ) {\n\t\t\t\tthis._toggleClass( "ui-button-icon-only", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === "label" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "disabled" ) {\n\t\t\tthis._toggleClass( null, "ui-state-disabled", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.blur();\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( "input, button" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( "ui.button", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = "end";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === "text" ) {\n\t\t\t\tthis._super( "showLabel", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === "showLabel" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === "icon" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === "icons" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( "icon", value.primary );\n\t\t\t\t\tthis._super( "iconPosition", "beginning" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( "icon", value.secondary );\n\t\t\t\t\tthis._super( "iconPosition", "end" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function() {\n\t\t\tif ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||\n\t\t\t\t\t( this.length && this[ 0 ].tagName === "INPUT" && (\n\t\t\t\t\t\tthis.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"\n\t\t\t\t\t) ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t}\n\t\t\tif ( !$.ui.checkboxradio ) {\n\t\t\t\t$.error( "Checkboxradio widget missing" );\n\t\t\t}\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\treturn this.checkboxradio( {\n\t\t\t\t\t"icon": false\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this.checkboxradio.apply( this, arguments );\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( "Controlgroup widget missing" );\n\t\t}\n\t\tif ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], "items.button", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.extend( $.ui, { datepicker: { version: "1.12.1" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( "position" );\n\t\tif ( position === "absolute" || position === "relative" || position === "fixed" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>\n\t\t\tvalue = parseInt( elem.css( "zIndex" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n Settings for (groups of) date pickers are maintained in an instance object,\n allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a "dialog", false if not\n\tthis._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division\n\tthis._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class\n\tthis._appendClass = "ui-datepicker-append"; // The name of the append marker class\n\tthis._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class\n\tthis._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class\n\tthis._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class\n\tthis._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class\n\tthis._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class\n\tthis._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ "" ] = { // Default regional settings\n\t\tcloseText: "Done", // Display text for close link\n\t\tprevText: "Prev", // Display text for previous month link\n\t\tnextText: "Next", // Display text for next month link\n\t\tcurrentText: "Today", // Display text for current month link\n\t\tmonthNames: [ "January","February","March","April","May","June",\n\t\t\t"July","August","September","October","November","December" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting\n\t\tdayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting\n\t\tdayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting\n\t\tdayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], // Column headings for days starting at Sunday\n\t\tweekHeader: "Wk", // Column header for week of the year\n\t\tdateFormat: "mm/dd/yy", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: "" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: "focus", // "focus" for popup on focus,\n\t\t\t// "button" for trigger button, or "both" for either\n\t\tshowAnim: "fadeIn", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: "", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: "...", // Text for trigger button\n\t\tbuttonImage: "", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: "c-10:c+10", // Range of years to display in drop-down,\n\t\t\t// either relative to today\'s year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: "+10", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with "+" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: "fast", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: "", // Selector for an alternate field to store selected dates into\n\t\taltFormat: "", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ "" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ "" ] );\n\tthis.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( "<div id=\'" + this._mainDivId + "\' class=\'ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all\'></div>" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: "hasDatepicker",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to "widget" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param settings object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t * @param settings object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === "div" || nodeName === "span" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = "dp" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === "input" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, "\\\\\\\\$1" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( "<div class=\'" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all\'></div>" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ).\n\t\t\ton( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, "datepicker", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, "appendText" ),\n\t\t\tisRTL = this._get( inst, "isRTL" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( "<span class=\'" + this._appendClass + "\'>" + appendText + "</span>" );\n\t\t\tinput[ isRTL ? "before" : "after" ]( inst.append );\n\t\t}\n\n\t\tinput.off( "focus", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, "showOn" );\n\t\tif ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( "focus", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, "buttonText" );\n\t\t\tbuttonImage = this._get( inst, "buttonImage" );\n\t\t\tinst.trigger = $( this._get( inst, "buttonImageOnly" ) ?\n\t\t\t\t$( "<img/>" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( "<button type=\'button\'></button>" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( "<img/>" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? "before" : "after" ]( inst.trigger );\n\t\t\tinst.trigger.on( "click", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, "autoSize" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, "dateFormat" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t"monthNames" : "monthNamesShort" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t"dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( "size", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, "datepicker", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won\'t work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( "display", "block" );\n\t},\n\n\t/* Pop-up the date picker in a "dialog" box.\n\t * @param input element - ignored\n\t * @param date\tstring or Date - the initial date to display\n\t * @param onSelect function - the function to call when a date is selected\n\t * @param settings object - update the dialog date picker instance\'s settings (anonymous object)\n\t * @param pos int[2] - coordinates for the dialog\'s position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = "dp" + this.uuid;\n\t\t\tthis._dialogInput = $( "<input type=\'text\' id=\'" + id +\n\t\t\t\t"\' style=\'position: absolute; top: -100px; width: 0px;\'/>" );\n\t\t\tthis._dialogInput.on( "keydown", this._doKeyDown );\n\t\t\t$( "body" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], "datepicker", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], "datepicker", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, "datepicker" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, "datepicker" );\n\t\tif ( nodeName === "input" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( "focus", this._showDatepicker ).\n\t\t\t\toff( "keydown", this._doKeyDown ).\n\t\t\t\toff( "keypress", this._doKeyPress ).\n\t\t\t\toff( "keyup", this._doKeyUp );\n\t\t} else if ( nodeName === "div" || nodeName === "span" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, "datepicker" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === "input" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( "button" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( "img" ).css( { opacity: "1.0", cursor: "" } );\n\t\t} else if ( nodeName === "div" || nodeName === "span" ) {\n\t\t\tinline = $target.children( "." + this._inlineClass );\n\t\t\tinline.children().removeClass( "ui-state-disabled" );\n\t\t\tinline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).\n\t\t\t\tprop( "disabled", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, "datepicker" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === "input" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( "button" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( "img" ).css( { opacity: "0.5", cursor: "default" } );\n\t\t} else if ( nodeName === "div" || nodeName === "span" ) {\n\t\t\tinline = $target.children( "." + this._inlineClass );\n\t\t\tinline.children().addClass( "ui-state-disabled" );\n\t\t\tinline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ).\n\t\t\t\tprop( "disabled", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param target element - the target input field or division or span\n\t * @return object - the associated instance data\n\t * @throws error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, "datepicker" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow "Missing instance data for this datepicker";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t * @param name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also "all" for all instance settings or\n\t *\t\t\t\t"defaults" for all global defaults\n\t * @param value any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === "string" ) {\n\t\t\treturn ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === "all" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === "string" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, "min" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, "max" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn\'t provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( "disabled" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( ".ui-datepicker-rtl" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + ")", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, "onSelect" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don\'t submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, "stepBigMonths" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, "stepMonths" ) ), "M" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, "stepBigMonths" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, "stepMonths" ) ), "M" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, "stepBigMonths" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, "stepMonths" ) ), "M" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, "D" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, "stepBigMonths" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, "stepMonths" ) ), "M" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, "D" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, "constrainInput" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param input element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger\n\t\t\tinput = $( "input", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, "beforeShow" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = "";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( "position" ) === "fixed";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t"static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",\n\t\t\tleft: offset.left + "px", top: offset.top + "px" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, "showAnim" );\n\t\t\tduration = $.datepicker._get( inst, "duration" );\n\t\t\tinst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( "focus" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) +\n\t\t\t"Class" ]( "ui-datepicker-multi" );\n\t\tinst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) +\n\t\t\t"Class" ]( "ui-datepicker-rtl" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( "focus" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn\'t change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don\'t focus the input if it\'s already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object\'s position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, "isRTL" );\n\n\t\twhile ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? "previousSibling" : "nextSibling" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param input element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, "showAnim" );\n\t\t\tduration = this._get( inst, "duration" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" :\n\t\t\t\t\t( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, "onClose" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( "body" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( "#" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( "." + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === "M" ? this._get( inst, "showCurrentAtPos" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] =\n\t\tinst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( "a", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, "" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, "onSelect" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( "change" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== "object" ) {\n\t\t\t\tinst.input.trigger( "focus" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, "altField" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param date Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), "" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param date Date - the date to get the week for\n\t * @return number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param format string - the expected format of the date\n\t * @param value string - the date in the above format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow "Invalid arguments";\n\t\t}\n\n\t\tvalue = ( typeof value === "object" ? value.toString() : value + "" );\n\t\tif ( value === "" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === "@" ? 14 : ( match === "!" ? 20 :\n\t\t\t\t\t( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === "y" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( "^\\\\d{" + minSize + "," + size + "}" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow "Missing number at position " + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow "Unknown name at position " + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow "Unexpected literal at position " + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === "\'" && !lookAhead( "\'" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase "d":\n\t\t\t\t\t\tday = getNumber( "d" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "D":\n\t\t\t\t\t\tgetName( "D", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "o":\n\t\t\t\t\t\tdoy = getNumber( "o" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "m":\n\t\t\t\t\t\tmonth = getNumber( "m" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "M":\n\t\t\t\t\t\tmonth = getName( "M", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "y":\n\t\t\t\t\t\tyear = getNumber( "y" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "@":\n\t\t\t\t\t\tdate = new Date( getNumber( "@" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "!":\n\t\t\t\t\t\tdate = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "\'":\n\t\t\t\t\t\tif ( lookAhead( "\'" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow "Extra/unparsed characters found in date: " + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow "Invalid date"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)\n\tCOOKIE: "D, dd M yy",\n\tISO_8601: "yy-mm-dd",\n\tRFC_822: "D, d M y",\n\tRFC_850: "DD, dd-M-y",\n\tRFC_1036: "D, d M y",\n\tRFC_1123: "D, d M yy",\n\tRFC_2822: "D, d M yy",\n\tRSS: "D, d M y", // RFC 822\n\tTICKS: "!",\n\tTIMESTAMP: "@",\n\tW3C: "yy-mm-dd", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D - day name short\n\t * DD - day name long\n\t * m - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M - month name short\n\t * MM - month name long\n\t * y - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * "..." - literal text\n\t * \'\' - single quote\n\t *\n\t * @param format string - the desired format of the date\n\t * @param date Date - the date value to format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn "";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = "" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = "0" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = "",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === "\'" && !lookAhead( "\'" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase "d":\n\t\t\t\t\t\t\toutput += formatNumber( "d", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "D":\n\t\t\t\t\t\t\toutput += formatName( "D", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "o":\n\t\t\t\t\t\t\toutput += formatNumber( "o",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "m":\n\t\t\t\t\t\t\toutput += formatNumber( "m", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "M":\n\t\t\t\t\t\t\toutput += formatName( "M", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "y":\n\t\t\t\t\t\t\toutput += ( lookAhead( "y" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "@":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "!":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "\'":\n\t\t\t\t\t\t\tif ( lookAhead( "\'" ) ) {\n\t\t\t\t\t\t\t\toutput += "\'";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = "",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === "\'" && !lookAhead( "\'" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase "d": case "m": case "y": case "@":\n\t\t\t\t\t\tchars += "0123456789";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase "D": case "M":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase "\'":\n\t\t\t\t\t\tif ( lookAhead( "\'" ) ) {\n\t\t\t\t\t\t\tchars += "\'";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, "dateFormat" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? "" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || "d" ) {\n\t\t\t\t\t\tcase "d" : case "D" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase "w" : case "W" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase "m" : case "M" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase "y": case "Y" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) :\n\t\t\t\t( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param date (Date) the date to check\n\t * @return (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? "" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers. These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, "stepMonths" ),\n\t\t\tid = "#" + inst.id.replace( /\\\\\\\\/g, "\\\\" );\n\t\tinst.dpDiv.find( "[data-handler]" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, "M" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, "M" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, "M" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, "Y" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, "isRTL" ),\n\t\t\tshowButtonPanel = this._get( inst, "showButtonPanel" ),\n\t\t\thideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, "showCurrentAtPos" ),\n\t\t\tstepMonths = this._get( inst, "stepMonths" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, "min" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, "max" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, "prevText" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t"<a class=\'ui-datepicker-prev ui-corner-all\' data-handler=\'prev\' data-event=\'click\'" +\n\t\t\t" title=\'" + prevText + "\'><span class=\'ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "\'>" + prevText + "</span></a>" :\n\t\t\t( hideIfNoPrevNext ? "" : "<a class=\'ui-datepicker-prev ui-corner-all ui-state-disabled\' title=\'" + prevText + "\'><span class=\'ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w" ) + "\'>" + prevText + "</span></a>" ) );\n\n\t\tnextText = this._get( inst, "nextText" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t"<a class=\'ui-datepicker-next ui-corner-all\' data-handler=\'next\' data-event=\'click\'" +\n\t\t\t" title=\'" + nextText + "\'><span class=\'ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "\'>" + nextText + "</span></a>" :\n\t\t\t( hideIfNoPrevNext ? "" : "<a class=\'ui-datepicker-next ui-corner-all ui-state-disabled\' title=\'" + nextText + "\'><span class=\'ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e" ) + "\'>" + nextText + "</span></a>" ) );\n\n\t\tcurrentText = this._get( inst, "currentText" );\n\t\tgotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? "<button type=\'button\' class=\'ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\' data-handler=\'hide\' data-event=\'click\'>" +\n\t\t\tthis._get( inst, "closeText" ) + "</button>" : "" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? "<div class=\'ui-datepicker-buttonpane ui-widget-content\'>" + ( isRTL ? controls : "" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? "<button type=\'button\' class=\'ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\' data-handler=\'today\' data-event=\'click\'" +\n\t\t\t">" + currentText + "</button>" : "" ) + ( isRTL ? "" : controls ) + "</div>" : "";\n\n\t\tfirstDay = parseInt( this._get( inst, "firstDay" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, "showWeek" );\n\t\tdayNames = this._get( inst, "dayNames" );\n\t\tdayNamesMin = this._get( inst, "dayNamesMin" );\n\t\tmonthNames = this._get( inst, "monthNames" );\n\t\tmonthNamesShort = this._get( inst, "monthNamesShort" );\n\t\tbeforeShowDay = this._get( inst, "beforeShowDay" );\n\t\tshowOtherMonths = this._get( inst, "showOtherMonths" );\n\t\tselectOtherMonths = this._get( inst, "selectOtherMonths" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = "";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = "";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = " ui-corner-all";\n\t\t\t\tcalender = "";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += "<div class=\'ui-datepicker-group";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += " ui-datepicker-group-first";\n\t\t\t\t\t\t\t\tcornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last";\n\t\t\t\t\t\t\t\tcornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break;\n\t\t\t\t\t\t\tdefault: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += "\'>";\n\t\t\t\t}\n\t\t\t\tcalender += "<div class=\'ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "\'>" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t"</div><table class=\'ui-datepicker-calendar\'><thead>" +\n\t\t\t\t\t"<tr>";\n\t\t\t\tthead = ( showWeek ? "<th class=\'ui-datepicker-week-col\'>" + this._get( inst, "weekHeader" ) + "</th>" : "" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += "<th scope=\'col\'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class=\'ui-datepicker-week-end\'" : "" ) + ">" +\n\t\t\t\t\t\t"<span title=\'" + dayNames[ day ] + "\'>" + dayNamesMin[ day ] + "</span></th>";\n\t\t\t\t}\n\t\t\t\tcalender += thead + "</tr></thead><tbody>";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += "<tr>";\n\t\t\t\t\ttbody = ( !showWeek ? "" : "<td class=\'ui-datepicker-week-col\'>" +\n\t\t\t\t\t\tthis._get( inst, "calculateWeek" )( printDate ) + "</td>" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += "<td class=\'" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t" " + this._dayOverClass : "" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "\'" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title=\'" + daySettings[ 2 ].replace( /\'/g, "&#39;" ) + "\'" : "" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? "" : " data-handler=\'selectDay\' data-event=\'click\' data-month=\'" + printDate.getMonth() + "\' data-year=\'" + printDate.getFullYear() + "\'" ) + ">" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? "<span class=\'ui-state-default\'>" + printDate.getDate() + "</span>" : "<a class=\'ui-state-default" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t"\' href=\'#\'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + "</tr>";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += "</tbody></table>" + ( isMultiMonth ? "</div>" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class=\'ui-datepicker-row-break\'></div>" : "" ) : "" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, "changeMonth" ),\n\t\t\tchangeYear = this._get( inst, "changeYear" ),\n\t\t\tshowMonthAfterYear = this._get( inst, "showMonthAfterYear" ),\n\t\t\thtml = "<div class=\'ui-datepicker-title\'>",\n\t\t\tmonthHtml = "";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += "<span class=\'ui-datepicker-month\'>" + monthNames[ drawMonth ] + "</span>";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += "<select class=\'ui-datepicker-month\' data-handler=\'selectMonth\' data-event=\'change\'>";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += "<option value=\'" + month + "\'" +\n\t\t\t\t\t\t( month === drawMonth ? " selected=\'selected\'" : "" ) +\n\t\t\t\t\t\t">" + monthNamesShort[ month ] + "</option>";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += "</select>";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = "";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += "<span class=\'ui-datepicker-year\'>" + drawYear + "</span>";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, "yearRange" ).split( ":" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || "" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += "<select class=\'ui-datepicker-year\' data-handler=\'selectYear\' data-event=\'change\'>";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += "<option value=\'" + year + "\'" +\n\t\t\t\t\t\t( year === drawYear ? " selected=\'selected\'" : "" ) +\n\t\t\t\t\t\t">" + year + "</option>";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += "</select>";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, "yearSuffix" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? "&#xa0;" : "" ) + monthHtml;\n\t\t}\n\t\thtml += "</div>"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === "Y" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === "M" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === "M" || period === "Y" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, "min" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, "max" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, "onChangeMonthYear" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, "numberOfMonths" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + "Date" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a "next/prev" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, "min" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, "max" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, "yearRange" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( ":" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, "shortYearCutoff" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ),\n\t\t\tmonthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === "object" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";\n\treturn dpDiv.on( "mouseout", selector, function() {\n\t\t\t$( this ).removeClass( "ui-state-hover" );\n\t\t\tif ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( "ui-datepicker-prev-hover" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( "ui-datepicker-next-hover" );\n\t\t\t}\n\t\t} )\n\t\t.on( "mouseover", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" );\n\t\t$( this ).addClass( "ui-state-hover" );\n\t\tif ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) {\n\t\t\t$( this ).addClass( "ui-datepicker-prev-hover" );\n\t\t}\n\t\tif ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) {\n\t\t\t$( this ).addClass( "ui-datepicker-next-hover" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n @param options string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n @return jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn\'t passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( "mousedown", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( "#" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( "body" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) {\n\t\treturn $.datepicker[ "_" + options + "Datepicker" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) {\n\t\treturn $.datepicker[ "_" + options + "Datepicker" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === "string" ?\n\t\t\t$.datepicker[ "_" + options + "Datepicker" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = "1.12.1";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n/*!\n * jQuery UI Dialog 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: http://api.jqueryui.com/dialog/\n//>>demos: http://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.dialog", {\n\tversion: "1.12.1",\n\toptions: {\n\t\tappendTo: "body",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t"ui-dialog": "ui-corner-all",\n\t\t\t"ui-dialog-titlebar": "ui-corner-all"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: "Close",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: "auto",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: "center",\n\t\t\tat: "center",\n\t\t\tof: window,\n\t\t\tcollision: "fit",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( "top", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( "title" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can\'t be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( "title" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( "ui-dialog-content", "ui-widget-content" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || "body" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( "title", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don\'t try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {\n\n\t\t\t// Hiding a focused element doesn\'t trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( "close", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {\n\t\t\t\treturn +$( this ).css( "z-index" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {\n\t\t\tthis.uiDialog.css( "z-index", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( "focus", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn\'t move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( "focus" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( "open" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( "[autofocus]" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( ":tabbable" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( ":tabbable" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( "focus" );\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn\'t prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( "<div>" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: "dialog"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( ":tabbable" ),\n\t\t\t\t\tfirst = tabbables.filter( ":first" ),\n\t\t\t\t\tlast = tabbables.filter( ":last" );\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( "focus" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( "focus" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( "[aria-describedby]" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t"aria-describedby": this.element.uniqueId().attr( "id" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( "<div>" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t"ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don\'t prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {\n\n\t\t\t\t\t// Dialog isn\'t getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( "focus" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type="button" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( "<button type=\'button\'></button>" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( "<a>" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: "ui-icon-closethick",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, "ui-dialog-title" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t"aria-labelledby": uiDialogTitle.attr( "id" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( "&#160;" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( "<div>" );\n\t\tthis._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",\n\t\t\t"ui-widget-content ui-helper-clearfix" );\n\n\t\tthis.uiButtonSet = $( "<div>" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, "ui-dialog-buttonset" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, "ui-dialog-buttons" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: "button" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === "boolean" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( "<button></button>", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( "click", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, "ui-dialog-buttons" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: ".ui-dialog-content, .ui-dialog-titlebar-close",\n\t\t\thandle: ".ui-dialog-titlebar",\n\t\t\tcontainment: "document",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), "ui-dialog-dragging" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( "dragStart", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( "drag", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: "left top",\n\t\t\t\t\tat: "left" + ( left >= 0 ? "+" : "" ) + left + " " +\n\t\t\t\t\t\t"top" + ( top >= 0 ? "+" : "" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), "ui-dialog-dragging" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( "dragStop", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( "position" ),\n\t\t\tresizeHandles = typeof handles === "string" ?\n\t\t\t\thandles :\n\t\t\t\t"n,e,s,w,se,sw,ne,nw";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: ".ui-dialog-content",\n\t\t\tcontainment: "document",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), "ui-dialog-resizing" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( "resizeStart", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( "resize", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: "left top",\n\t\t\t\t\tat: "left" + ( left >= 0 ? "+" : "" ) + left + " " +\n\t\t\t\t\t\t"top" + ( top >= 0 ? "+" : "" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), "ui-dialog-resizing" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( "resizeStop", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( "position", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( "ui-dialog-instances" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( "ui-dialog-instances", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === "auto" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( ":visible" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( ":data(ui-resizable)" ) ) {\n\t\t\tthis.uiDialog.resizable( "option", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === "disabled" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "appendTo" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === "buttons" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === "closeText" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( "<a>" ).text( "" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === "draggable" ) {\n\t\t\tisDraggable = uiDialog.is( ":data(ui-draggable)" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( "destroy" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === "position" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === "resizable" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( ":data(ui-resizable)" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( "destroy" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === "string" ) {\n\t\t\t\tuiDialog.resizable( "option", "handles", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === "title" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: "auto",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: "none",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: "auto",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === "number" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t"none";\n\n\t\tif ( options.height === "auto" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: "auto"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( ":data(ui-resizable)" ) ) {\n\t\t\tthis.uiDialog.resizable( "option", "minHeight", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( "iframe" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( "<div>" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: "absolute",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( ".ui-dialog" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( ".ui-datepicker" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we\'re going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( "ui-dialog-overlays" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis.overlay = $( "<div>" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, "ui-widget-overlay ui-front" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: "_keepFocus"\n\t\t} );\n\t\tthis.document.data( "ui-dialog-overlays",\n\t\t\t( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( "ui-dialog-overlays" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis._off( this.document, "focusin" );\n\t\t\t\tthis.document.removeData( "ui-dialog-overlays" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( "ui-dialog-overlays", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( "ui.dialog", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: ""\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === "dialogClass" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Progressbar 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/progressbar/\n//>>demos: http://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsProgressbar = $.widget( "ui.progressbar", {\n\tversion: "1.12.1",\n\toptions: {\n\t\tclasses: {\n\t\t\t"ui-progressbar": "ui-corner-all",\n\t\t\t"ui-progressbar-value": "ui-corner-left",\n\t\t\t"ui-progressbar-complete": "ui-corner-right"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: "progressbar",\n\t\t\t"aria-valuemin": this.min\n\t\t} );\n\t\tthis._addClass( "ui-progressbar", "ui-widget ui-widget-content" );\n\n\t\tthis.valueDiv = $( "<div>" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== "number" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure "value" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "max" ) {\n\n\t\t\t// Don\'t allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( "aria-disabled", value );\n\t\tthis._toggleClass( null, "ui-state-disabled", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + "%" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, "ui-progressbar-complete", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( "aria-valuenow" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, "ui-progressbar-overlay" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t"aria-valuemax": this.options.max,\n\t\t\t\t"aria-valuenow": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( "change" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( "complete" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/selectmenu/\n//>>demos: http://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {\n\tversion: "1.12.1",\n\tdefaultElement: "<select>",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t"ui-selectmenu-button-open": "ui-corner-top",\n\t\t\t"ui-selectmenu-button-closed": "ui-corner-all"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: "ui-icon-triangle-1-s"\n\t\t},\n\t\tposition: {\n\t\t\tmy: "left top",\n\t\t\tat: "left bottom",\n\t\t\tcollision: "none"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( "id" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + "-button",\n\t\t\tmenu: selectmenuId + "-menu"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( "option:selected" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( "for", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( "<span>", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: "combobox",\n\t\t\t"aria-expanded": "false",\n\t\t\t"aria-autocomplete": "list",\n\t\t\t"aria-owns": this.ids.menu,\n\t\t\t"aria-haspopup": "true",\n\t\t\ttitle: this.element.attr( "title" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed",\n\t\t\t"ui-button ui-widget" );\n\n\t\ticon = $( "<span>" ).appendTo( this.button );\n\t\tthis._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( "focusin", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( "<ul>", {\n\t\t\t"aria-hidden": "true",\n\t\t\t"aria-labelledby": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( "<div>" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t"ui-menu": "ui-corner-bottom"\n\t\t\t\t},\n\t\t\t\trole: "listbox",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( "ui-selectmenu-item" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( "ui-selectmenu-item" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( "focus", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( "aria-activedescendant",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( "id" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( "instance" );\n\n\t\t// Don\'t close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, "mouseleave" );\n\n\t\t// Cancel the menu\'s collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( "ui-selectmenu-item" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( "option" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( "li" )\n\t\t\t.not( ".ui-selectmenu-optgroup" )\n\t\t\t\t.find( ".ui-menu-item-wrapper" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( "ui-selectmenu-item" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( "disabled", this.element.prop( "disabled" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don\'t open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( "open", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( "close", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( "<span>" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, "ui-selectmenu-text" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = "";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( "<li>", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" +\n\t\t\t\t\t( item.element.parent( "optgroup" ).prop( "disabled" ) ?\n\t\t\t\t\t\t" ui-state-disabled" :\n\t\t\t\t\t\t"" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( "ui-selectmenu-item", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( "<li>" ),\n\t\t\twrapper = $( "<div>", {\n\t\t\t\ttitle: item.element.attr( "title" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, "ui-state-disabled" );\n\t\t}\n\t\tthis._setText( wrapper, item.label );\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( "&#160;" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = ".ui-menu-item";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( "li" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );\n\t\t\tfilter += ":not(.ui-state-disabled)";\n\t\t}\n\n\t\tif ( direction === "first" || direction === "last" ) {\n\t\t\tnext = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + "All" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? "close" : "open" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn\'t kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( ".ui-selectmenu-menu, #" +\n\t\t\t\t\t$.ui.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( "prev", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( "next", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( "prev", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( "next", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( "first", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( "last", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( "li" );\n\t\tif ( !item.hasClass( "ui-state-disabled" ) ) {\n\t\t\tthis._select( item.data( "ui-selectmenu-item" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( "select", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( "change", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( "id" );\n\n\t\tthis.button.attr( {\n\t\t\t"aria-labelledby": id,\n\t\t\t"aria-activedescendant": id\n\t\t} );\n\t\tthis.menu.attr( "aria-activedescendant", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "icons" ) {\n\t\t\tvar icon = this.button.find( "span.ui-icon" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "appendTo" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === "width" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( "disabled", value );\n\t\tthis.button.attr( "aria-disabled", value );\n\t\tthis._toggleClass( this.button, null, "ui-state-disabled", value );\n\n\t\tthis.element.prop( "disabled", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( "tabindex", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( "tabindex", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( ".ui-front, dialog" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( "aria-expanded", this.isOpen );\n\n\t\t// We can\'t use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, "ui-selectmenu-button-" +\n\t\t\t( this.isOpen ? "closed" : "open" ) )\n\t\t\t._addClass( this.button, "ui-selectmenu-button-" +\n\t\t\t\t( this.isOpen ? "open" : "closed" ) )\n\t\t\t._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen );\n\n\t\tthis.menu.attr( "aria-hidden", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( "width", "" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( "" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( "disabled" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( "optgroup" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\toptgroup: optgroup.attr( "label" ) || "",\n\t\t\tdisabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( "for", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: http://api.jqueryui.com/slider/\n//>>demos: http://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {\n\tversion: "1.12.1",\n\twidgetEventPrefix: "slide",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t"ui-slider": "ui-corner-all",\n\t\t\t"ui-slider-handle": "ui-corner-all",\n\n\t\t\t// Note: ui-widget-header isn\'t the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t"ui-slider-range": "ui-corner-all ui-widget-header"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: "horizontal",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( "ui-slider ui-slider-" + this.orientation,\n\t\t\t"ui-widget ui-widget-content" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( ".ui-slider-handle" ),\n\t\t\thandle = "<span tabindex=\'0\'></span>",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, "ui-slider-handle", "ui-state-default" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( "ui-slider-handle-index", i )\n\t\t\t\t.attr( "tabIndex", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( "<div>" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, "ui-slider-range" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t"left": "",\n\t\t\t\t\t"bottom": ""\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === "min" || options.range === "max" ) {\n\t\t\t\tthis._addClass( this.range, "ui-slider-range-" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, "ui-state-active" );\n\t\tclosestHandle.trigger( "focus" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( "ui-state-hover" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, "ui-state-active" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === "horizontal" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === "vertical" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( "start", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( "stop", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( "change", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === "range" && this.options.range === true ) {\n\t\t\tif ( value === "min" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === "max" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase "orientation":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( "ui-slider-horizontal ui-slider-vertical" )\n\t\t\t\t\t._addClass( "ui-slider-" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === "horizontal" ? "bottom" : "left", "" );\n\t\t\t\tbreak;\n\t\t\tcase "value":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase "values":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase "step":\n\t\t\tcase "min":\n\t\t\tcase "max":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase "range":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, "ui-state-disabled", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( "." );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === "vertical" ) {\n\t\t\tthis.range.css( { "width": "", "left": "" } );\n\t\t}\n\t\tif ( orientation === "horizontal" ) {\n\t\t\tthis.range.css( { "height": "", "bottom": "" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === "horizontal" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + "%"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? "animate" : "css" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + "%"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + "%"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? "animate" : "css" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + "%"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );\n\n\t\t\tif ( oRange === "min" && this.orientation === "horizontal" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\twidth: valPercent + "%"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === "max" && this.orientation === "horizontal" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + "%"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === "min" && this.orientation === "vertical" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\theight: valPercent + "%"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === "max" && this.orientation === "vertical" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + "%"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( "ui-slider-handle-index" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, "ui-state-active" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( "ui-slider-handle-index" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, "ui-state-active" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Spinner 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: http://api.jqueryui.com/spinner/\n//>>demos: http://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nfunction spinnerModifer( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( "change" );\n\t\t}\n\t};\n}\n\n$.widget( "ui.spinner", {\n\tversion: "1.12.1",\n\tdefaultElement: "<input>",\n\twidgetEventPrefix: "spin",\n\toptions: {\n\t\tclasses: {\n\t\t\t"ui-spinner": "ui-corner-all",\n\t\t\t"ui-spinner-down": "ui-corner-br",\n\t\t\t"ui-spinner-up": "ui-corner-tr"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: "ui-icon-triangle-1-s",\n\t\t\tup: "ui-icon-triangle-1-n"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( "max", this.options.max );\n\t\tthis._setOption( "min", this.options.min );\n\t\tthis._setOption( "step", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== "" ) {\n\n\t\t\t// Format the value, but don\'t constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( "autocomplete" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ "min", "max", "step" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: "_stop",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( "change", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t"mousedown .ui-spinner-button": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( "focus" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn\'t prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( "ui-spinner-up" ) ? 1 : -1, event );\n\t\t},\n\t\t"mouseup .ui-spinner-button": "_stop",\n\t\t"mouseenter .ui-spinner-button": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( "ui-spinner-up" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn\'t we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t"mouseleave .ui-spinner-button": "_stop"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( "autocomplete", "off" )\n\t\t\t.wrap( "<span>" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t"<a></a><a></a>"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" );\n\t\tthis._addClass( "ui-spinner-input" );\n\n\t\tthis.element.attr( "role", "spinbutton" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( "a" )\n\t\t\t.attr( "tabIndex", -1 )\n\t\t\t.attr( "aria-hidden", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t"ui-button": ""\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, "ui-corner-all" );\n\n\t\tthis._addClass( this.buttons.first(), "ui-spinner-button ui-spinner-up" );\n\t\tthis._addClass( this.buttons.last(), "ui-spinner-button ui-spinner-down" );\n\t\tthis.buttons.first().button( {\n\t\t\t"icon": this.options.icons.up,\n\t\t\t"showLabel": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t"icon": this.options.icons.down,\n\t\t\t"showLabel": false\n\t\t} );\n\n\t\t// IE 6 doesn\'t understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( "start", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( "." );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we\'re at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( "stop", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === "culture" || key === "numberFormat" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === "max" || key === "min" || key === "step" ) {\n\t\t\tif ( typeof value === "string" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === "icons" ) {\n\t\t\tfirst = this.buttons.first().find( ".ui-icon" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( ".ui-icon" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value );\n\t\tthis.element.prop( "disabled", !!value );\n\t\tthis.buttons.button( value ? "disable" : "enable" );\n\t},\n\n\t_setOptions: spinnerModifer( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === "string" && val !== "" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === "" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === "" ) {\n\t\t\treturn "";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t"aria-valuemin": this.options.min,\n\t\t\t"aria-valuemax": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can\'t be parsed?\n\t\t\t"aria-valuenow": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it\'s invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== "" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( "disabled", false )\n\t\t\t.removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifer( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifer( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifer( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifer( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifer( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( "ui.spinner", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( "autocomplete", "off" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn "<span>";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn "<a></a><a></a>";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: http://api.jqueryui.com/tabs/\n//>>demos: http://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.tabs", {\n\tversion: "1.12.1",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t"ui-tabs": "ui-corner-all",\n\t\t\t"ui-tabs-nav": "ui-corner-all",\n\t\t\t"ui-tabs-panel": "ui-corner-bottom",\n\t\t\t"ui-tabs-tab": "ui-corner-top"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: "click",\n\t\theightStyle: "content",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, "" );\n\t\t\tlocationUrl = location.href.replace( rhash, "" );\n\n\t\t\t// Decoding may throw an error if the URL isn\'t UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( "ui-tabs", "ui-widget ui-widget-content" );\n\t\tthis._toggleClass( "ui-tabs-collapsible", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( "aria-controls" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don\'t allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( "aria-selected", "false" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( "active", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( "focus" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( "focus" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === "active" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "collapsible" ) {\n\t\t\tthis._toggleClass( "ui-tabs-collapsible", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === "event" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === "heightStyle" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!"$%&\'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, "\\\\$&" ) : "";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( ":has(a[href])" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t"aria-selected": "false",\n\t\t\t"aria-expanded": "false",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t"aria-hidden": "true"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( "tabIndex", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t"aria-selected": "true",\n\t\t\t\t\t"aria-expanded": "true",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, "ui-tabs-active", "ui-state-active" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t"aria-hidden": "false"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( "role", "tablist" );\n\t\tthis._addClass( this.tablist, "ui-tabs-nav",\n\t\t\t"ui-helper-reset ui-helper-clearfix ui-widget-header" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( "mousedown" + this.eventNamespace, "> li", function( event ) {\n\t\t\t\tif ( $( this ).is( ".ui-state-disabled" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn\'t prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don\'t have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() {\n\t\t\t\tif ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( "> li:has(a[href])" )\n\t\t\t.attr( {\n\t\t\t\trole: "tab",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( "a", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\trole: "presentation",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, "ui-tabs-anchor" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( "id" ),\n\t\t\t\ttab = $( anchor ).closest( "li" ),\n\t\t\t\toriginalAriaControls = tab.attr( "aria-controls" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn\'t already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = "#" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( "aria-live", "polite" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( "ui-tabs-aria-controls", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t"aria-controls": panelId,\n\t\t\t\t"aria-labelledby": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( "aria-labelledby", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( "role", "tabpanel" );\n\t\tthis._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( "ol, ul" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( "<div>" )\n\t\t\t.attr( "id", id )\n\t\t\t.data( "ui-tabs-destroy", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( "aria-disabled", "true" );\n\t\t\t\tthis._addClass( currentItem, null, "ui-state-disabled" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( "aria-disabled" );\n\t\t\t\tthis._removeClass( currentItem, null, "ui-state-disabled" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + "-disabled", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( " " ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = "_eventHandler";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: "_tabKeydown" } );\n\t\tthis._on( this.panels, { keydown: "_panelKeydown" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === "fill" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( ":visible" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( "position" );\n\n\t\t\t\tif ( position === "absolute" || position === "fixed" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( "overflow", "auto" );\n\t\t} else if ( heightStyle === "auto" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( "li" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( "ui-state-disabled" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( "ui-tabs-loading" ) ||\n\n\t\t\t\t// can\'t switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( "beforeActivate", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( "jQuery UI Tabs: Mismatching fragment identifier." );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( "activate", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( "li" ),\n\t\t\t\t\t"ui-tabs-active", "ui-state-active" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( "li" ),\n\t\t\t\t"ui-tabs-active", "ui-state-active" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( "aria-hidden", "true" );\n\t\teventData.oldTab.attr( {\n\t\t\t"aria-selected": "false",\n\t\t\t"aria-expanded": "false"\n\t\t} );\n\n\t\t// If we\'re switching tabs, remove the old tab from the tab order.\n\t\t// If we\'re opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we\'re collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( "tabIndex", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( "tabIndex" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( "tabIndex", -1 );\n\t\t}\n\n\t\ttoShow.attr( "aria-hidden", "false" );\n\t\teventData.newTab.attr( {\n\t\t\t"aria-selected": "true",\n\t\t\t"aria-expanded": "true",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( ".ui-tabs-anchor" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === "string" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( "[href$=\'" +\n\t\t\t\t$.ui.escapeSelector( index ) + "\']" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( "role" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( "role tabIndex" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, "ui-tabs-destroy" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( "role tabIndex " +\n\t\t\t\t\t"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( "ui-tabs-aria-controls" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( "aria-controls", prev )\n\t\t\t\t\t.removeData( "ui-tabs-aria-controls" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( "aria-controls" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== "content" ) {\n\t\t\tthis.panels.css( "height", "" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( ".ui-tabs-anchor" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === "abort" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, "ui-tabs-loading" );\n\t\t\t\tpanel.removeAttr( "aria-busy" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== "canceled" ) {\n\t\t\tthis._addClass( tab, "ui-tabs-loading" );\n\t\t\tpanel.attr( "aria-busy", "true" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( "load", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( "href" ).replace( /#.*$/, "" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( "beforeLoad", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( "aria-controls" );\n\t\treturn this.element.find( this._sanitizeSelector( "#" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( "ui.tabs", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, "ui-tab" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: http://api.jqueryui.com/tooltip/\n//>>demos: http://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( "ui.tooltip", {\n\tversion: "1.12.1",\n\toptions: {\n\t\tclasses: {\n\t\t\t"ui-tooltip": "ui-corner-all ui-widget-shadow"\n\t\t},\n\t\tcontent: function() {\n\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can\'t accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( "title" ) || "";\n\n\t\t\t// Escape title, since we\'re going from an attribute to raw HTML\n\t\t\treturn $( "<a>" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: "[title]:not([disabled])",\n\t\tposition: {\n\t\t\tmy: "left top+15",\n\t\t\tat: "left bottom",\n\t\t\tcollision: "flipfit flip"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( "ui-tooltip-id", id )\n\t\t\t.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( "ui-tooltip-id" ),\n\t\t\tdescribedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( "ui-tooltip-id" );\n\t\tdescribedby = $.trim( describedby.join( " " ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( "aria-describedby", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( "aria-describedby" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: "open",\n\t\t\tfocusin: "open"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( "<div>" )\n\t\t\t.attr( {\n\t\t\t\trole: "log",\n\t\t\t\t"aria-live": "assertive",\n\t\t\t\t"aria-relevant": "additions"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === "content" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? "_disable" : "_enable" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( "blur" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( "[title]" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( "ui-tooltip-title", element.attr( "title" ) )\n\t\t\t\t\t\t\t.removeAttr( "title" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( "ui-tooltip-title" ) ) {\n\t\t\t\telement.attr( "title", element.data( "ui-tooltip-title" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( "ui-tooltip-id" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( "title" ) ) {\n\t\t\ttarget.data( "ui-tooltip-title", target.attr( "title" ) );\n\t\t}\n\n\t\ttarget.data( "ui-tooltip-open", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === "mouseover" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( "ui-tooltip-open" ) ) {\n\t\t\t\t\tblurEvent = $.Event( "blur" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( "title" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( "title" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( "title", "" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === "string" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( "ui-tooltip-open" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn\'t\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can\'t\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don\'t want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( "[title]" ) ) {\n\t\t\tif ( event && event.type === "mouseover" ) {\n\t\t\t\ttarget.attr( "title", "" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( "title" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( "id" ) );\n\t\ttooltip.find( ".ui-tooltip-content" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant="additions"\n\t\t// Voiceover will sometimes re-read the entire log region\'s contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() );\n\t\ta11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" );\n\t\ta11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( ":hidden" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( ":visible" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( "open", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === "mouseover" ) {\n\t\t\tevents.mouseleave = "close";\n\t\t}\n\t\tif ( !event || event.type === "focusin" ) {\n\t\t\tevents.focusout = "close";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there\'s actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn\'t have full data, we always remove ui-tooltip-open in case we\'re in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( "ui-tooltip-open" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we\'re closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don\'t restore\n\t\tif ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {\n\t\t\ttarget.attr( "title", target.data( "ui-tooltip-title" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( "ui-tooltip-open" );\n\t\tthis._off( target, "mouseleave focusout keyup" );\n\n\t\t// Remove \'remove\' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, "remove" );\n\t\t}\n\t\tthis._off( this.document, "mousemove" );\n\n\t\tif ( event && event.type === "mouseleave" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( "title", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( "close", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( "<div>" ).attr( "role", "tooltip" ),\n\t\t\tcontent = $( "<div>" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( "id" );\n\n\t\tthis._addClass( content, "ui-tooltip-content" );\n\t\tthis._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( "ui-tooltip-id" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( "id" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( ".ui-front, dialog" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( "blur" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn\'t use the\n\t\t\t// hide animation\n\t\t\t$( "#" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( "ui-tooltip-title" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don\'t restore\n\t\t\t\tif ( !element.attr( "title" ) ) {\n\t\t\t\t\telement.attr( "title", element.data( "ui-tooltip-title" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( "ui-tooltip-title" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( "ui.tooltip", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n/*!\n * jQuery UI Effects 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/category/effects-core/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar dataSpace = "ui-effects-",\n\tdataSpaceStyle = "ui-effects-style",\n\tdataSpaceAnimated = "ui-effects-animated",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n( function( jQuery, undefined ) {\n\n\tvar stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " +\n\t\t"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",\n\n\t// Plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// A set of RE\'s that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it\'s compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it\'s compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: "hsla",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// JQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: "byte"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: "byte"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: "byte"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: "degrees"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: "percent"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: "percent"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t"byte": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t"percent": {\n\t\t\tmax: 1\n\t\t},\n\t\t"degrees": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// Element for support tests\n\tsupportElem = jQuery( "<p>" )[ 0 ],\n\n\t// Colors = jQuery.Color.names\n\tcolors,\n\n\t// Local aliases of functions called often\n\teach = jQuery.each;\n\n// Determine rgba support immediately\nsupportElem.style.cssText = "background-color:rgba(1,1,1,.5)";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;\n\n// Define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = "_" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: "percent",\n\t\tdef: 1\n\t};\n} );\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// We add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// For now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || "rgba";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// If this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// Exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// If this came from a parsed string, force "transparent" when alpha is 0\n\t\t// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === "0,0,0,0" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// Named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = "array";\n\t\t}\n\n\t\tif ( type === "string" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === "array" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === "object" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// If the cache doesn\'t exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// If the value was null, we don\'t need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don\'t need to copy it either\n\t\t\t\t\t\t\tif ( key === "alpha" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] &&\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// Use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( "transparent" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// If null, don\'t override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// If we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = "rgba(",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = "rgb(";\n\t\t}\n\n\t\treturn prefix + rgba.join() + ")";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = "hsla(",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// Catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + "%";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = "hsl(";\n\t\t}\n\t\treturn prefix + hsla.join() + ")";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn "#" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// Default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? "0" + v : v;\n\t\t} ).join( "" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// Hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// Makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// Generate a cache for this space if it doesn\'t exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === "array" || type === "object" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === "object" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// Alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === "undefined" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === "function" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === "string" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// Add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( " " );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = "";\n\n\t\t\t\tif ( value !== "transparent" && ( jQuery.type( value ) !== "string" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === "backgroundColor" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === "" || backgroundColor === "transparent" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, "backgroundColor" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== "transparent" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t"_default" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on "invalid" values like\n\t\t\t\t\t// \'auto\' or \'inherit\'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {\n\t\t\texpanded[ "border" + part + "Color" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: "#00ffff",\n\tblack: "#000000",\n\tblue: "#0000ff",\n\tfuchsia: "#ff00ff",\n\tgray: "#808080",\n\tgreen: "#008000",\n\tlime: "#00ff00",\n\tmaroon: "#800000",\n\tnavy: "#000080",\n\tolive: "#808000",\n\tpurple: "#800080",\n\tred: "#ff0000",\n\tsilver: "#c0c0c0",\n\tteal: "#008080",\n\twhite: "#ffffff",\n\tyellow: "#ffff00",\n\n\t// 4.2.3. "transparent" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: "#ffffff"\n};\n\n} )( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ "add", "remove", "toggle" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === "string" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === "string" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( "class" ) || "",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( "*" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + "Class" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( "class", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, "" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === "boolean" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\n\t$.expr.filters.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.filters.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === "toggle" ) {\n\t\t\t\tmode = el.is( ":hidden" ) ? "show" : "hide";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( ".ui-effects-wrapper" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t"float": element.css( "float" )\n\t\t\t\t},\n\t\t\t\twrapper = $( "<div></div>" )\n\t\t\t\t\t.addClass( "ui-effects-wrapper" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: "100%",\n\t\t\t\t\t\tbackground: "transparent",\n\t\t\t\t\t\tborder: "none",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( "focus" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( "position" ) === "static" ) {\n\t\t\t\twrapper.css( { position: "relative" } );\n\t\t\t\telement.css( { position: "relative" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( "position" ),\n\t\t\t\t\tzIndex: element.css( "z-index" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ "top", "left", "bottom", "right" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = "auto";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: "relative",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: "auto",\n\t\t\t\t\tbottom: "auto"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( ".ui-effects-wrapper" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( "focus" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: "1.12.1",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = "effect";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after "inprogress")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || "";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( ":hidden" );\n\n\t\tif ( mode === "toggle" ) {\n\t\t\tmode = hidden ? "show" : "hide";\n\t\t}\n\t\tif ( hidden ? mode === "hide" : mode === "show" ) {\n\t\t\tmode = "none";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase "top":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase "middle":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase "bottom":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase "left":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase "center":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase "right":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( "position" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( "marginTop" ),\n\t\t\tmarginBottom: element.css( "marginBottom" ),\n\t\t\tmarginLeft: element.css( "marginLeft" ),\n\t\t\tmarginRight: element.css( "marginRight" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = "absolute";\n\n\t\t\tplaceholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( "display" ) ) ?\n\t\t\t\t\t"inline-block" :\n\t\t\t\t\t"block",\n\t\t\t\tvisibility: "hidden",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( "marginTop" ),\n\t\t\t\tmarginBottom: element.css( "marginBottom" ),\n\t\t\t\tmarginLeft: element.css( "marginLeft" ),\n\t\t\t\tmarginRight: element.css( "marginRight" ),\n\t\t\t\t"float": element.css( "float" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( "ui-effects-placeholder" );\n\n\t\t\telement.data( dataSpace + "placeholder", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + "placeholder",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === "number" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === "number" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as "normal" speed\n\tif ( typeof option === "string" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === "object" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn\'t match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || "fx",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can\'t just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\n\t\t\t\tif ( defaultMode && ( normalizedMode === "show" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== "none" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === "hide" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {\n\n\t\t\t\t\t// Call the core method to track "olddisplay" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === "none" ) {\n\n\t\t\t\t\t// Call the core method to track "olddisplay" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = "show";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = "hide";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === "boolean" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = "toggle";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " +\n\t\t\t\tclipObj.bottom + "px " + clipObj.left + "px)" );\n\t\t}\n\t\treturn parseClip( this.css( "clip" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( "position" ) === "fixed",\n\t\t\tbody = $( "body" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( "<div class=\'ui-effects-transfer\'></div>" )\n\t\t\t\t.appendTo( "body" )\n\t\t\t\t.addClass( options.className )\n\t\t\t\t.css( {\n\t\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\t\theight: element.innerHeight(),\n\t\t\t\t\twidth: element.innerWidth(),\n\t\t\t\t\tposition: targetFixed ? "fixed" : "absolute"\n\t\t\t\t} )\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\tif ( $.isFunction( done ) ) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === "string" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ "easeIn" + name ] = easeIn;\n\t$.easing[ "easeOut" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ "easeInOut" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: http://api.jqueryui.com/blind-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ "bottom", "top" ],\n\t\t\tvertical: [ "bottom", "top" ],\n\t\t\tdown: [ "top", "bottom" ],\n\t\t\tleft: [ "right", "left" ],\n\t\t\thorizontal: [ "right", "left" ],\n\t\t\tright: [ "left", "right" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || "up",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === "show" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/bounce-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBounce = $.effects.define( "bounce", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === "hide",\n\t\tshow = mode === "show",\n\t\tdirection = options.direction || "up",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === "up" || direction === "down" ) ? "top" : "left",\n\t\tmotion = ( direction === "up" || direction === "left" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the "first" animation\n\t\telement\n\t\t\t.css( "opacity", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: http://api.jqueryui.com/clip-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || "vertical",\n\t\tboth = direction === "both",\n\t\thorizontal = both || direction === "horizontal",\n\t\tvertical = both || direction === "vertical";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === "show" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: http://api.jqueryui.com/drop-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === "show",\n\t\tdirection = options.direction || "left",\n\t\tref = ( direction === "up" || direction === "down" ) ? "top" : "left",\n\t\tmotion = ( direction === "up" || direction === "left" ) ? "-=" : "+=",\n\t\toppositeMotion = ( motion === "+=" ) ? "-=" : "+=",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/explode-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === "show",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( "visibility", "hidden" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( "body" )\n\t\t\t\t.wrap( "<div></div>" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: "absolute",\n\t\t\t\t\tvisibility: "visible",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( "ui-effects-explode" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: "absolute",\n\t\t\t\t\t\toverflow: "hidden",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: "visible"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: http://api.jqueryui.com/fade-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) {\n\tvar show = options.mode === "show";\n\n\t$( this )\n\t\t.css( "opacity", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: http://api.jqueryui.com/fold-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === "show",\n\t\thide = mode === "hide",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: http://api.jqueryui.com/highlight-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( "backgroundColor" )\n\t\t};\n\n\tif ( options.mode === "hide" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: "none",\n\t\t\tbackgroundColor: options.color || "#ffff99"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: http://api.jqueryui.com/size-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSize = $.effects.define( "size", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ "fontSize" ],\n\t\tvProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],\n\t\thProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== "effect",\n\t\tscale = options.scale || "both",\n\t\torigin = options.origin || [ "middle", "center" ],\n\t\tposition = element.css( "position" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === "show" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === "box" || scale === "both" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === "content" || scale === "both" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === "content" || scale === "both" ) {\n\n\t\tvProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ "marginLeft", "marginRight" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( "*[width]" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( "opacity", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( "position", position === "static" ? "relative" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn\'t restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: http://api.jqueryui.com/scale-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectScale = $.effects.define( "scale", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || "both" ),\n\t\t\torigin: options.origin || [ "middle", "center" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: http://api.jqueryui.com/puff-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: http://api.jqueryui.com/pulsate-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === "show",\n\t\thide = mode === "hide",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the "last" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( ":visible" ) ) {\n\t\telement.css( "opacity", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity "toggles"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/shake-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectShake = $.effects.define( "shake", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || "left",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === "up" || direction === "down" ) ? "top" : "left",\n\t\tpositiveMotion = ( direction === "up" || direction === "left" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: http://api.jqueryui.com/slide-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ "bottom", "top" ],\n\t\t\tdown: [ "top", "bottom" ],\n\t\t\tleft: [ "right", "left" ],\n\t\t\tright: [ "left", "right" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || "left",\n\t\tref = ( direction === "up" || direction === "down" ) ? "top" : "left",\n\t\tpositiveMotion = ( direction === "up" || direction === "left" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we\'re showing\n\tif ( mode === "show" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: http://api.jqueryui.com/transfer-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( "transfer", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnktdWktYnVuZGxlL2pxdWVyeS11aS5qcz9lMzI5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qISBqUXVlcnkgVUkgLSB2MS4xMi4xIC0gMjAxNy0wMy0xOVxuKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4qIEluY2x1ZGVzOiB3aWRnZXQuanMsIHBvc2l0aW9uLmpzLCBkYXRhLmpzLCBkaXNhYmxlLXNlbGVjdGlvbi5qcywgZm9jdXNhYmxlLmpzLCBmb3JtLXJlc2V0LW1peGluLmpzLCBqcXVlcnktMS03LmpzLCBrZXljb2RlLmpzLCBsYWJlbHMuanMsIHNjcm9sbC1wYXJlbnQuanMsIHRhYmJhYmxlLmpzLCB1bmlxdWUtaWQuanMsIHdpZGdldHMvZHJhZ2dhYmxlLmpzLCB3aWRnZXRzL2Ryb3BwYWJsZS5qcywgd2lkZ2V0cy9yZXNpemFibGUuanMsIHdpZGdldHMvc2VsZWN0YWJsZS5qcywgd2lkZ2V0cy9zb3J0YWJsZS5qcywgd2lkZ2V0cy9hY2NvcmRpb24uanMsIHdpZGdldHMvYXV0b2NvbXBsZXRlLmpzLCB3aWRnZXRzL2J1dHRvbi5qcywgd2lkZ2V0cy9jaGVja2JveHJhZGlvLmpzLCB3aWRnZXRzL2NvbnRyb2xncm91cC5qcywgd2lkZ2V0cy9kYXRlcGlja2VyLmpzLCB3aWRnZXRzL2RpYWxvZy5qcywgd2lkZ2V0cy9tZW51LmpzLCB3aWRnZXRzL21vdXNlLmpzLCB3aWRnZXRzL3Byb2dyZXNzYmFyLmpzLCB3aWRnZXRzL3NlbGVjdG1lbnUuanMsIHdpZGdldHMvc2xpZGVyLmpzLCB3aWRnZXRzL3NwaW5uZXIuanMsIHdpZGdldHMvdGFicy5qcywgd2lkZ2V0cy90b29sdGlwLmpzLCBlZmZlY3QuanMsIGVmZmVjdHMvZWZmZWN0LWJsaW5kLmpzLCBlZmZlY3RzL2VmZmVjdC1ib3VuY2UuanMsIGVmZmVjdHMvZWZmZWN0LWNsaXAuanMsIGVmZmVjdHMvZWZmZWN0LWRyb3AuanMsIGVmZmVjdHMvZWZmZWN0LWV4cGxvZGUuanMsIGVmZmVjdHMvZWZmZWN0LWZhZGUuanMsIGVmZmVjdHMvZWZmZWN0LWZvbGQuanMsIGVmZmVjdHMvZWZmZWN0LWhpZ2hsaWdodC5qcywgZWZmZWN0cy9lZmZlY3QtcHVmZi5qcywgZWZmZWN0cy9lZmZlY3QtcHVsc2F0ZS5qcywgZWZmZWN0cy9lZmZlY3Qtc2NhbGUuanMsIGVmZmVjdHMvZWZmZWN0LXNoYWtlLmpzLCBlZmZlY3RzL2VmZmVjdC1zaXplLmpzLCBlZmZlY3RzL2VmZmVjdC1zbGlkZS5qcywgZWZmZWN0cy9lZmZlY3QtdHJhbnNmZXIuanNcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xuXG4oZnVuY3Rpb24oIGZhY3RvcnkgKSB7XG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cblx0XHQvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFsgXCJqcXVlcnlcIiBdLCBmYWN0b3J5ICk7XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBCcm93c2VyIGdsb2JhbHNcblx0XHRmYWN0b3J5KCBqUXVlcnkgKTtcblx0fVxufShmdW5jdGlvbiggJCApIHtcblxuJC51aSA9ICQudWkgfHwge307XG5cbnZhciB2ZXJzaW9uID0gJC51aS52ZXJzaW9uID0gXCIxLjEyLjFcIjtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBXaWRnZXQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFdpZGdldFxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IFByb3ZpZGVzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgc3RhdGVmdWwgd2lkZ2V0cyB3aXRoIGEgY29tbW9uIEFQSS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9qUXVlcnkud2lkZ2V0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3dpZGdldC9cblxuXG5cbnZhciB3aWRnZXRVdWlkID0gMDtcbnZhciB3aWRnZXRTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuJC5jbGVhbkRhdGEgPSAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBldmVudHMsIGVsZW0sIGk7XG5cdFx0Zm9yICggaSA9IDA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHR0cnkge1xuXG5cdFx0XHRcdC8vIE9ubHkgdHJpZ2dlciByZW1vdmUgd2hlbiBuZWNlc3NhcnkgdG8gc2F2ZSB0aW1lXG5cdFx0XHRcdGV2ZW50cyA9ICQuX2RhdGEoIGVsZW0sIFwiZXZlbnRzXCIgKTtcblx0XHRcdFx0aWYgKCBldmVudHMgJiYgZXZlbnRzLnJlbW92ZSApIHtcblx0XHRcdFx0XHQkKCBlbGVtICkudHJpZ2dlckhhbmRsZXIoIFwicmVtb3ZlXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIdHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC84MjM1XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0fVxuXHRcdG9yaWcoIGVsZW1zICk7XG5cdH07XG59ICkoICQuY2xlYW5EYXRhICk7XG5cbiQud2lkZ2V0ID0gZnVuY3Rpb24oIG5hbWUsIGJhc2UsIHByb3RvdHlwZSApIHtcblx0dmFyIGV4aXN0aW5nQ29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBiYXNlUHJvdG90eXBlO1xuXG5cdC8vIFByb3hpZWRQcm90b3R5cGUgYWxsb3dzIHRoZSBwcm92aWRlZCBwcm90b3R5cGUgdG8gcmVtYWluIHVubW9kaWZpZWRcblx0Ly8gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBhIG1peGluIGZvciBtdWx0aXBsZSB3aWRnZXRzICgjODg3Nilcblx0dmFyIHByb3hpZWRQcm90b3R5cGUgPSB7fTtcblxuXHR2YXIgbmFtZXNwYWNlID0gbmFtZS5zcGxpdCggXCIuXCIgKVsgMCBdO1xuXHRuYW1lID0gbmFtZS5zcGxpdCggXCIuXCIgKVsgMSBdO1xuXHR2YXIgZnVsbE5hbWUgPSBuYW1lc3BhY2UgKyBcIi1cIiArIG5hbWU7XG5cblx0aWYgKCAhcHJvdG90eXBlICkge1xuXHRcdHByb3RvdHlwZSA9IGJhc2U7XG5cdFx0YmFzZSA9ICQuV2lkZ2V0O1xuXHR9XG5cblx0aWYgKCAkLmlzQXJyYXkoIHByb3RvdHlwZSApICkge1xuXHRcdHByb3RvdHlwZSA9ICQuZXh0ZW5kLmFwcGx5KCBudWxsLCBbIHt9IF0uY29uY2F0KCBwcm90b3R5cGUgKSApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIHNlbGVjdG9yIGZvciBwbHVnaW5cblx0JC5leHByWyBcIjpcIiBdWyBmdWxsTmFtZS50b0xvd2VyQ2FzZSgpIF0gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gISEkLmRhdGEoIGVsZW0sIGZ1bGxOYW1lICk7XG5cdH07XG5cblx0JFsgbmFtZXNwYWNlIF0gPSAkWyBuYW1lc3BhY2UgXSB8fCB7fTtcblx0ZXhpc3RpbmdDb25zdHJ1Y3RvciA9ICRbIG5hbWVzcGFjZSBdWyBuYW1lIF07XG5cdGNvbnN0cnVjdG9yID0gJFsgbmFtZXNwYWNlIF1bIG5hbWUgXSA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkge1xuXG5cdFx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IFwibmV3XCIga2V5d29yZFxuXHRcdGlmICggIXRoaXMuX2NyZWF0ZVdpZGdldCApIHtcblx0XHRcdHJldHVybiBuZXcgY29uc3RydWN0b3IoIG9wdGlvbnMsIGVsZW1lbnQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZvciBzaW1wbGUgaW5oZXJpdGFuY2Vcblx0XHQvLyBtdXN0IHVzZSBcIm5ld1wiIGtleXdvcmQgKHRoZSBjb2RlIGFib3ZlIGFsd2F5cyBwYXNzZXMgYXJncylcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLl9jcmVhdGVXaWRnZXQoIG9wdGlvbnMsIGVsZW1lbnQgKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gRXh0ZW5kIHdpdGggdGhlIGV4aXN0aW5nIGNvbnN0cnVjdG9yIHRvIGNhcnJ5IG92ZXIgYW55IHN0YXRpYyBwcm9wZXJ0aWVzXG5cdCQuZXh0ZW5kKCBjb25zdHJ1Y3RvciwgZXhpc3RpbmdDb25zdHJ1Y3Rvciwge1xuXHRcdHZlcnNpb246IHByb3RvdHlwZS52ZXJzaW9uLFxuXG5cdFx0Ly8gQ29weSB0aGUgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoZSBwcm90b3R5cGUgaW4gY2FzZSB3ZSBuZWVkIHRvXG5cdFx0Ly8gcmVkZWZpbmUgdGhlIHdpZGdldCBsYXRlclxuXHRcdF9wcm90bzogJC5leHRlbmQoIHt9LCBwcm90b3R5cGUgKSxcblxuXHRcdC8vIFRyYWNrIHdpZGdldHMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyB3aWRnZXQgaW4gY2FzZSB0aGlzIHdpZGdldCBpc1xuXHRcdC8vIHJlZGVmaW5lZCBhZnRlciBhIHdpZGdldCBpbmhlcml0cyBmcm9tIGl0XG5cdFx0X2NoaWxkQ29uc3RydWN0b3JzOiBbXVxuXHR9ICk7XG5cblx0YmFzZVByb3RvdHlwZSA9IG5ldyBiYXNlKCk7XG5cblx0Ly8gV2UgbmVlZCB0byBtYWtlIHRoZSBvcHRpb25zIGhhc2ggYSBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgbmV3IGluc3RhbmNlXG5cdC8vIG90aGVyd2lzZSB3ZSdsbCBtb2RpZnkgdGhlIG9wdGlvbnMgaGFzaCBvbiB0aGUgcHJvdG90eXBlIHRoYXQgd2UncmVcblx0Ly8gaW5oZXJpdGluZyBmcm9tXG5cdGJhc2VQcm90b3R5cGUub3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZCgge30sIGJhc2VQcm90b3R5cGUub3B0aW9ucyApO1xuXHQkLmVhY2goIHByb3RvdHlwZSwgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdGlmICggISQuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHByb3hpZWRQcm90b3R5cGVbIHByb3AgXSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwcm94aWVkUHJvdG90eXBlWyBwcm9wIF0gPSAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZnVuY3Rpb24gX3N1cGVyKCkge1xuXHRcdFx0XHRyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIF9zdXBlckFwcGx5KCBhcmdzICkge1xuXHRcdFx0XHRyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBfX3N1cGVyID0gdGhpcy5fc3VwZXI7XG5cdFx0XHRcdHZhciBfX3N1cGVyQXBwbHkgPSB0aGlzLl9zdXBlckFwcGx5O1xuXHRcdFx0XHR2YXIgcmV0dXJuVmFsdWU7XG5cblx0XHRcdFx0dGhpcy5fc3VwZXIgPSBfc3VwZXI7XG5cdFx0XHRcdHRoaXMuX3N1cGVyQXBwbHkgPSBfc3VwZXJBcHBseTtcblxuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IHZhbHVlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHR0aGlzLl9zdXBlciA9IF9fc3VwZXI7XG5cdFx0XHRcdHRoaXMuX3N1cGVyQXBwbHkgPSBfX3N1cGVyQXBwbHk7XG5cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9ICkoKTtcblx0fSApO1xuXHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLndpZGdldC5leHRlbmQoIGJhc2VQcm90b3R5cGUsIHtcblxuXHRcdC8vIFRPRE86IHJlbW92ZSBzdXBwb3J0IGZvciB3aWRnZXRFdmVudFByZWZpeFxuXHRcdC8vIGFsd2F5cyB1c2UgdGhlIG5hbWUgKyBhIGNvbG9uIGFzIHRoZSBwcmVmaXgsIGUuZy4sIGRyYWdnYWJsZTpzdGFydFxuXHRcdC8vIGRvbid0IHByZWZpeCBmb3Igd2lkZ2V0cyB0aGF0IGFyZW4ndCBET00tYmFzZWRcblx0XHR3aWRnZXRFdmVudFByZWZpeDogZXhpc3RpbmdDb25zdHJ1Y3RvciA/ICggYmFzZVByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeCB8fCBuYW1lICkgOiBuYW1lXG5cdH0sIHByb3hpZWRQcm90b3R5cGUsIHtcblx0XHRjb25zdHJ1Y3RvcjogY29uc3RydWN0b3IsXG5cdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2UsXG5cdFx0d2lkZ2V0TmFtZTogbmFtZSxcblx0XHR3aWRnZXRGdWxsTmFtZTogZnVsbE5hbWVcblx0fSApO1xuXG5cdC8vIElmIHRoaXMgd2lkZ2V0IGlzIGJlaW5nIHJlZGVmaW5lZCB0aGVuIHdlIG5lZWQgdG8gZmluZCBhbGwgd2lkZ2V0cyB0aGF0XG5cdC8vIGFyZSBpbmhlcml0aW5nIGZyb20gaXQgYW5kIHJlZGVmaW5lIGFsbCBvZiB0aGVtIHNvIHRoYXQgdGhleSBpbmhlcml0IGZyb21cblx0Ly8gdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgd2lkZ2V0LiBXZSdyZSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gcmVwbGFjZSBvbmVcblx0Ly8gbGV2ZWwgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi5cblx0aWYgKCBleGlzdGluZ0NvbnN0cnVjdG9yICkge1xuXHRcdCQuZWFjaCggZXhpc3RpbmdDb25zdHJ1Y3Rvci5fY2hpbGRDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uKCBpLCBjaGlsZCApIHtcblx0XHRcdHZhciBjaGlsZFByb3RvdHlwZSA9IGNoaWxkLnByb3RvdHlwZTtcblxuXHRcdFx0Ly8gUmVkZWZpbmUgdGhlIGNoaWxkIHdpZGdldCB1c2luZyB0aGUgc2FtZSBwcm90b3R5cGUgdGhhdCB3YXNcblx0XHRcdC8vIG9yaWdpbmFsbHkgdXNlZCwgYnV0IGluaGVyaXQgZnJvbSB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGJhc2Vcblx0XHRcdCQud2lkZ2V0KCBjaGlsZFByb3RvdHlwZS5uYW1lc3BhY2UgKyBcIi5cIiArIGNoaWxkUHJvdG90eXBlLndpZGdldE5hbWUsIGNvbnN0cnVjdG9yLFxuXHRcdFx0XHRjaGlsZC5fcHJvdG8gKTtcblx0XHR9ICk7XG5cblx0XHQvLyBSZW1vdmUgdGhlIGxpc3Qgb2YgZXhpc3RpbmcgY2hpbGQgY29uc3RydWN0b3JzIGZyb20gdGhlIG9sZCBjb25zdHJ1Y3RvclxuXHRcdC8vIHNvIHRoZSBvbGQgY2hpbGQgY29uc3RydWN0b3JzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZFxuXHRcdGRlbGV0ZSBleGlzdGluZ0NvbnN0cnVjdG9yLl9jaGlsZENvbnN0cnVjdG9ycztcblx0fSBlbHNlIHtcblx0XHRiYXNlLl9jaGlsZENvbnN0cnVjdG9ycy5wdXNoKCBjb25zdHJ1Y3RvciApO1xuXHR9XG5cblx0JC53aWRnZXQuYnJpZGdlKCBuYW1lLCBjb25zdHJ1Y3RvciApO1xuXG5cdHJldHVybiBjb25zdHJ1Y3Rvcjtcbn07XG5cbiQud2lkZ2V0LmV4dGVuZCA9IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdHZhciBpbnB1dCA9IHdpZGdldFNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHR2YXIgaW5wdXRJbmRleCA9IDA7XG5cdHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0dmFyIGtleTtcblx0dmFyIHZhbHVlO1xuXG5cdGZvciAoIDsgaW5wdXRJbmRleCA8IGlucHV0TGVuZ3RoOyBpbnB1dEluZGV4KysgKSB7XG5cdFx0Zm9yICgga2V5IGluIGlucHV0WyBpbnB1dEluZGV4IF0gKSB7XG5cdFx0XHR2YWx1ZSA9IGlucHV0WyBpbnB1dEluZGV4IF1bIGtleSBdO1xuXHRcdFx0aWYgKCBpbnB1dFsgaW5wdXRJbmRleCBdLmhhc093blByb3BlcnR5KCBrZXkgKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIENsb25lIG9iamVjdHNcblx0XHRcdFx0aWYgKCAkLmlzUGxhaW5PYmplY3QoIHZhbHVlICkgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBrZXkgXSA9ICQuaXNQbGFpbk9iamVjdCggdGFyZ2V0WyBrZXkgXSApID9cblx0XHRcdFx0XHRcdCQud2lkZ2V0LmV4dGVuZCgge30sIHRhcmdldFsga2V5IF0sIHZhbHVlICkgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBleHRlbmQgc3RyaW5ncywgYXJyYXlzLCBldGMuIHdpdGggb2JqZWN0c1xuXHRcdFx0XHRcdFx0JC53aWRnZXQuZXh0ZW5kKCB7fSwgdmFsdWUgKTtcblxuXHRcdFx0XHQvLyBDb3B5IGV2ZXJ5dGhpbmcgZWxzZSBieSByZWZlcmVuY2Vcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXRbIGtleSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbiQud2lkZ2V0LmJyaWRnZSA9IGZ1bmN0aW9uKCBuYW1lLCBvYmplY3QgKSB7XG5cdHZhciBmdWxsTmFtZSA9IG9iamVjdC5wcm90b3R5cGUud2lkZ2V0RnVsbE5hbWUgfHwgbmFtZTtcblx0JC5mblsgbmFtZSBdID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIGlzTWV0aG9kQ2FsbCA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiO1xuXHRcdHZhciBhcmdzID0gd2lkZ2V0U2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICk7XG5cdFx0dmFyIHJldHVyblZhbHVlID0gdGhpcztcblxuXHRcdGlmICggaXNNZXRob2RDYWxsICkge1xuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGVtcHR5IGNvbGxlY3Rpb24sIHdlIG5lZWQgdG8gaGF2ZSB0aGUgaW5zdGFuY2UgbWV0aG9kXG5cdFx0XHQvLyByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIGpRdWVyeSBpbnN0YW5jZVxuXHRcdFx0aWYgKCAhdGhpcy5sZW5ndGggJiYgb3B0aW9ucyA9PT0gXCJpbnN0YW5jZVwiICkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG1ldGhvZFZhbHVlO1xuXHRcdFx0XHRcdHZhciBpbnN0YW5jZSA9ICQuZGF0YSggdGhpcywgZnVsbE5hbWUgKTtcblxuXHRcdFx0XHRcdGlmICggb3B0aW9ucyA9PT0gXCJpbnN0YW5jZVwiICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBpbnN0YW5jZTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICFpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiAkLmVycm9yKCBcImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gXCIgKyBuYW1lICtcblx0XHRcdFx0XHRcdFx0XCIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb247IFwiICtcblx0XHRcdFx0XHRcdFx0XCJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiICsgb3B0aW9ucyArIFwiJ1wiICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhJC5pc0Z1bmN0aW9uKCBpbnN0YW5jZVsgb3B0aW9ucyBdICkgfHwgb3B0aW9ucy5jaGFyQXQoIDAgKSA9PT0gXCJfXCIgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gJC5lcnJvciggXCJubyBzdWNoIG1ldGhvZCAnXCIgKyBvcHRpb25zICsgXCInIGZvciBcIiArIG5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcIiB3aWRnZXQgaW5zdGFuY2VcIiApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1ldGhvZFZhbHVlID0gaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggbWV0aG9kVmFsdWUgIT09IGluc3RhbmNlICYmIG1ldGhvZFZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IG1ldGhvZFZhbHVlICYmIG1ldGhvZFZhbHVlLmpxdWVyeSA/XG5cdFx0XHRcdFx0XHRcdHJldHVyblZhbHVlLnB1c2hTdGFjayggbWV0aG9kVmFsdWUuZ2V0KCkgKSA6XG5cdFx0XHRcdFx0XHRcdG1ldGhvZFZhbHVlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEFsbG93IG11bHRpcGxlIGhhc2hlcyB0byBiZSBwYXNzZWQgb24gaW5pdFxuXHRcdFx0aWYgKCBhcmdzLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZC5hcHBseSggbnVsbCwgWyBvcHRpb25zIF0uY29uY2F0KCBhcmdzICkgKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGluc3RhbmNlID0gJC5kYXRhKCB0aGlzLCBmdWxsTmFtZSApO1xuXHRcdFx0XHRpZiAoIGluc3RhbmNlICkge1xuXHRcdFx0XHRcdGluc3RhbmNlLm9wdGlvbiggb3B0aW9ucyB8fCB7fSApO1xuXHRcdFx0XHRcdGlmICggaW5zdGFuY2UuX2luaXQgKSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5faW5pdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lLCBuZXcgb2JqZWN0KCBvcHRpb25zLCB0aGlzICkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fTtcbn07XG5cbiQuV2lkZ2V0ID0gZnVuY3Rpb24oIC8qIG9wdGlvbnMsIGVsZW1lbnQgKi8gKSB7fTtcbiQuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycyA9IFtdO1xuXG4kLldpZGdldC5wcm90b3R5cGUgPSB7XG5cdHdpZGdldE5hbWU6IFwid2lkZ2V0XCIsXG5cdHdpZGdldEV2ZW50UHJlZml4OiBcIlwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8ZGl2PlwiLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRjbGFzc2VzOiB7fSxcblx0XHRkaXNhYmxlZDogZmFsc2UsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjcmVhdGU6IG51bGxcblx0fSxcblxuXHRfY3JlYXRlV2lkZ2V0OiBmdW5jdGlvbiggb3B0aW9ucywgZWxlbWVudCApIHtcblx0XHRlbGVtZW50ID0gJCggZWxlbWVudCB8fCB0aGlzLmRlZmF1bHRFbGVtZW50IHx8IHRoaXMgKVsgMCBdO1xuXHRcdHRoaXMuZWxlbWVudCA9ICQoIGVsZW1lbnQgKTtcblx0XHR0aGlzLnV1aWQgPSB3aWRnZXRVdWlkKys7XG5cdFx0dGhpcy5ldmVudE5hbWVzcGFjZSA9IFwiLlwiICsgdGhpcy53aWRnZXROYW1lICsgdGhpcy51dWlkO1xuXG5cdFx0dGhpcy5iaW5kaW5ncyA9ICQoKTtcblx0XHR0aGlzLmhvdmVyYWJsZSA9ICQoKTtcblx0XHR0aGlzLmZvY3VzYWJsZSA9ICQoKTtcblx0XHR0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwID0ge307XG5cblx0XHRpZiAoIGVsZW1lbnQgIT09IHRoaXMgKSB7XG5cdFx0XHQkLmRhdGEoIGVsZW1lbnQsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMgKTtcblx0XHRcdHRoaXMuX29uKCB0cnVlLCB0aGlzLmVsZW1lbnQsIHtcblx0XHRcdFx0cmVtb3ZlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCBldmVudC50YXJnZXQgPT09IGVsZW1lbnQgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHRcdHRoaXMuZG9jdW1lbnQgPSAkKCBlbGVtZW50LnN0eWxlID9cblxuXHRcdFx0XHQvLyBFbGVtZW50IHdpdGhpbiB0aGUgZG9jdW1lbnRcblx0XHRcdFx0ZWxlbWVudC5vd25lckRvY3VtZW50IDpcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIHdpbmRvdyBvciBkb2N1bWVudFxuXHRcdFx0XHRlbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQgKTtcblx0XHRcdHRoaXMud2luZG93ID0gJCggdGhpcy5kb2N1bWVudFsgMCBdLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jdW1lbnRbIDAgXS5wYXJlbnRXaW5kb3cgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMgPSAkLndpZGdldC5leHRlbmQoIHt9LFxuXHRcdFx0dGhpcy5vcHRpb25zLFxuXHRcdFx0dGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLFxuXHRcdFx0b3B0aW9ucyApO1xuXG5cdFx0dGhpcy5fY3JlYXRlKCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKTtcblx0XHR9XG5cblx0XHR0aGlzLl90cmlnZ2VyKCBcImNyZWF0ZVwiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSApO1xuXHRcdHRoaXMuX2luaXQoKTtcblx0fSxcblxuXHRfZ2V0Q3JlYXRlT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9LFxuXG5cdF9nZXRDcmVhdGVFdmVudERhdGE6ICQubm9vcCxcblxuXHRfY3JlYXRlOiAkLm5vb3AsXG5cblx0X2luaXQ6ICQubm9vcCxcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLl9kZXN0cm95KCk7XG5cdFx0JC5lYWNoKCB0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwLCBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCB2YWx1ZSwga2V5ICk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gV2UgY2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgdW5iaW5kIGNhbGxzIGluIDIuMFxuXHRcdC8vIGFsbCBldmVudCBiaW5kaW5ncyBzaG91bGQgZ28gdGhyb3VnaCB0aGlzLl9vbigpXG5cdFx0dGhpcy5lbGVtZW50XG5cdFx0XHQub2ZmKCB0aGlzLmV2ZW50TmFtZXNwYWNlIClcblx0XHRcdC5yZW1vdmVEYXRhKCB0aGlzLndpZGdldEZ1bGxOYW1lICk7XG5cdFx0dGhpcy53aWRnZXQoKVxuXHRcdFx0Lm9mZiggdGhpcy5ldmVudE5hbWVzcGFjZSApXG5cdFx0XHQucmVtb3ZlQXR0ciggXCJhcmlhLWRpc2FibGVkXCIgKTtcblxuXHRcdC8vIENsZWFuIHVwIGV2ZW50cyBhbmQgc3RhdGVzXG5cdFx0dGhpcy5iaW5kaW5ncy5vZmYoIHRoaXMuZXZlbnROYW1lc3BhY2UgKTtcblx0fSxcblxuXHRfZGVzdHJveTogJC5ub29wLFxuXG5cdHdpZGdldDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWxlbWVudDtcblx0fSxcblxuXHRvcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBvcHRpb25zID0ga2V5O1xuXHRcdHZhciBwYXJ0cztcblx0XHR2YXIgY3VyT3B0aW9uO1xuXHRcdHZhciBpO1xuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAwICkge1xuXG5cdFx0XHQvLyBEb24ndCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIGhhc2hcblx0XHRcdHJldHVybiAkLndpZGdldC5leHRlbmQoIHt9LCB0aGlzLm9wdGlvbnMgKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vIEhhbmRsZSBuZXN0ZWQga2V5cywgZS5nLiwgXCJmb28uYmFyXCIgPT4geyBmb286IHsgYmFyOiBfX18gfSB9XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0XHRwYXJ0cyA9IGtleS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoIHBhcnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y3VyT3B0aW9uID0gb3B0aW9uc1sga2V5IF0gPSAkLndpZGdldC5leHRlbmQoIHt9LCB0aGlzLm9wdGlvbnNbIGtleSBdICk7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrICkge1xuXHRcdFx0XHRcdGN1ck9wdGlvblsgcGFydHNbIGkgXSBdID0gY3VyT3B0aW9uWyBwYXJ0c1sgaSBdIF0gfHwge307XG5cdFx0XHRcdFx0Y3VyT3B0aW9uID0gY3VyT3B0aW9uWyBwYXJ0c1sgaSBdIF07XG5cdFx0XHRcdH1cblx0XHRcdFx0a2V5ID0gcGFydHMucG9wKCk7XG5cdFx0XHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gY3VyT3B0aW9uWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGN1ck9wdGlvblsga2V5IF07XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VyT3B0aW9uWyBrZXkgXSA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnNbIGtleSBdID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5vcHRpb25zWyBrZXkgXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcHRpb25zWyBrZXkgXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX3NldE9wdGlvbnMoIG9wdGlvbnMgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0Zm9yICgga2V5IGluIG9wdGlvbnMgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb24oIGtleSwgb3B0aW9uc1sga2V5IF0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJjbGFzc2VzXCIgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25DbGFzc2VzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9uc1sga2V5IF0gPSB2YWx1ZTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfc2V0T3B0aW9uQ2xhc3NlczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc0tleSwgZWxlbWVudHMsIGN1cnJlbnRFbGVtZW50cztcblxuXHRcdGZvciAoIGNsYXNzS2V5IGluIHZhbHVlICkge1xuXHRcdFx0Y3VycmVudEVsZW1lbnRzID0gdGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cFsgY2xhc3NLZXkgXTtcblx0XHRcdGlmICggdmFsdWVbIGNsYXNzS2V5IF0gPT09IHRoaXMub3B0aW9ucy5jbGFzc2VzWyBjbGFzc0tleSBdIHx8XG5cdFx0XHRcdFx0IWN1cnJlbnRFbGVtZW50cyB8fFxuXHRcdFx0XHRcdCFjdXJyZW50RWxlbWVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UgYXJlIGRvaW5nIHRoaXMgdG8gY3JlYXRlIGEgbmV3IGpRdWVyeSBvYmplY3QgYmVjYXVzZSB0aGUgX3JlbW92ZUNsYXNzKCkgY2FsbFxuXHRcdFx0Ly8gb24gdGhlIG5leHQgbGluZSBpcyBnb2luZyB0byBkZXN0cm95IHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZWxlbWVudHMgYmVpbmdcblx0XHRcdC8vIHRyYWNrZWQuIFdlIG5lZWQgdG8gc2F2ZSBhIGNvcHkgb2YgdGhpcyBjb2xsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCB0aGUgbmV3IGNsYXNzZXNcblx0XHRcdC8vIGJlbG93LlxuXHRcdFx0ZWxlbWVudHMgPSAkKCBjdXJyZW50RWxlbWVudHMuZ2V0KCkgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBjdXJyZW50RWxlbWVudHMsIGNsYXNzS2V5ICk7XG5cblx0XHRcdC8vIFdlIGRvbid0IHVzZSBfYWRkQ2xhc3MoKSBoZXJlLCBiZWNhdXNlIHRoYXQgdXNlcyB0aGlzLm9wdGlvbnMuY2xhc3Nlc1xuXHRcdFx0Ly8gZm9yIGdlbmVyYXRpbmcgdGhlIHN0cmluZyBvZiBjbGFzc2VzLiBXZSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgcGFzc2VkIGluIGZyb21cblx0XHRcdC8vIF9zZXRPcHRpb24oKSwgdGhpcyBpcyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjbGFzc2VzIG9wdGlvbiB3aGljaCB3YXMgcGFzc2VkIHRvXG5cdFx0XHQvLyBfc2V0T3B0aW9uKCkuIFdlIHBhc3MgdGhpcyB2YWx1ZSBkaXJlY3RseSB0byBfY2xhc3NlcygpLlxuXHRcdFx0ZWxlbWVudHMuYWRkQ2xhc3MoIHRoaXMuX2NsYXNzZXMoIHtcblx0XHRcdFx0ZWxlbWVudDogZWxlbWVudHMsXG5cdFx0XHRcdGtleXM6IGNsYXNzS2V5LFxuXHRcdFx0XHRjbGFzc2VzOiB2YWx1ZSxcblx0XHRcdFx0YWRkOiB0cnVlXG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMud2lkZ2V0KCksIHRoaXMud2lkZ2V0RnVsbE5hbWUgKyBcIi1kaXNhYmxlZFwiLCBudWxsLCAhIXZhbHVlICk7XG5cblx0XHQvLyBJZiB0aGUgd2lkZ2V0IGlzIGJlY29taW5nIGRpc2FibGVkLCB0aGVuIG5vdGhpbmcgaXMgaW50ZXJhY3RpdmVcblx0XHRpZiAoIHZhbHVlICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaG92ZXJhYmxlLCBudWxsLCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmZvY3VzYWJsZSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGVuYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoIHsgZGlzYWJsZWQ6IGZhbHNlIH0gKTtcblx0fSxcblxuXHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyggeyBkaXNhYmxlZDogdHJ1ZSB9ICk7XG5cdH0sXG5cblx0X2NsYXNzZXM6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBmdWxsID0gW107XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXG5cdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKCB7XG5cdFx0XHRlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG5cdFx0XHRjbGFzc2VzOiB0aGlzLm9wdGlvbnMuY2xhc3NlcyB8fCB7fVxuXHRcdH0sIG9wdGlvbnMgKTtcblxuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDbGFzc1N0cmluZyggY2xhc3NlcywgY2hlY2tPcHRpb24gKSB7XG5cdFx0XHR2YXIgY3VycmVudCwgaTtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0Y3VycmVudCA9IHRoYXQuY2xhc3Nlc0VsZW1lbnRMb29rdXBbIGNsYXNzZXNbIGkgXSBdIHx8ICQoKTtcblx0XHRcdFx0aWYgKCBvcHRpb25zLmFkZCApIHtcblx0XHRcdFx0XHRjdXJyZW50ID0gJCggJC51bmlxdWUoIGN1cnJlbnQuZ2V0KCkuY29uY2F0KCBvcHRpb25zLmVsZW1lbnQuZ2V0KCkgKSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudCA9ICQoIGN1cnJlbnQubm90KCBvcHRpb25zLmVsZW1lbnQgKS5nZXQoKSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoYXQuY2xhc3Nlc0VsZW1lbnRMb29rdXBbIGNsYXNzZXNbIGkgXSBdID0gY3VycmVudDtcblx0XHRcdFx0ZnVsbC5wdXNoKCBjbGFzc2VzWyBpIF0gKTtcblx0XHRcdFx0aWYgKCBjaGVja09wdGlvbiAmJiBvcHRpb25zLmNsYXNzZXNbIGNsYXNzZXNbIGkgXSBdICkge1xuXHRcdFx0XHRcdGZ1bGwucHVzaCggb3B0aW9ucy5jbGFzc2VzWyBjbGFzc2VzWyBpIF0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fb24oIG9wdGlvbnMuZWxlbWVudCwge1xuXHRcdFx0XCJyZW1vdmVcIjogXCJfdW50cmFja0NsYXNzZXNFbGVtZW50XCJcblx0XHR9ICk7XG5cblx0XHRpZiAoIG9wdGlvbnMua2V5cyApIHtcblx0XHRcdHByb2Nlc3NDbGFzc1N0cmluZyggb3B0aW9ucy5rZXlzLm1hdGNoKCAvXFxTKy9nICkgfHwgW10sIHRydWUgKTtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmV4dHJhICkge1xuXHRcdFx0cHJvY2Vzc0NsYXNzU3RyaW5nKCBvcHRpb25zLmV4dHJhLm1hdGNoKCAvXFxTKy9nICkgfHwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZnVsbC5qb2luKCBcIiBcIiApO1xuXHR9LFxuXG5cdF91bnRyYWNrQ2xhc3Nlc0VsZW1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0JC5lYWNoKCB0aGF0LmNsYXNzZXNFbGVtZW50TG9va3VwLCBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRcdGlmICggJC5pbkFycmF5KCBldmVudC50YXJnZXQsIHZhbHVlICkgIT09IC0xICkge1xuXHRcdFx0XHR0aGF0LmNsYXNzZXNFbGVtZW50TG9va3VwWyBrZXkgXSA9ICQoIHZhbHVlLm5vdCggZXZlbnQudGFyZ2V0ICkuZ2V0KCkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X3JlbW92ZUNsYXNzOiBmdW5jdGlvbiggZWxlbWVudCwga2V5cywgZXh0cmEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKCBlbGVtZW50LCBrZXlzLCBleHRyYSwgZmFsc2UgKTtcblx0fSxcblxuXHRfYWRkQ2xhc3M6IGZ1bmN0aW9uKCBlbGVtZW50LCBrZXlzLCBleHRyYSApIHtcblx0XHRyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3MoIGVsZW1lbnQsIGtleXMsIGV4dHJhLCB0cnVlICk7XG5cdH0sXG5cblx0X3RvZ2dsZUNsYXNzOiBmdW5jdGlvbiggZWxlbWVudCwga2V5cywgZXh0cmEsIGFkZCApIHtcblx0XHRhZGQgPSAoIHR5cGVvZiBhZGQgPT09IFwiYm9vbGVhblwiICkgPyBhZGQgOiBleHRyYTtcblx0XHR2YXIgc2hpZnQgPSAoIHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiIHx8IGVsZW1lbnQgPT09IG51bGwgKSxcblx0XHRcdG9wdGlvbnMgPSB7XG5cdFx0XHRcdGV4dHJhOiBzaGlmdCA/IGtleXMgOiBleHRyYSxcblx0XHRcdFx0a2V5czogc2hpZnQgPyBlbGVtZW50IDoga2V5cyxcblx0XHRcdFx0ZWxlbWVudDogc2hpZnQgPyB0aGlzLmVsZW1lbnQgOiBlbGVtZW50LFxuXHRcdFx0XHRhZGQ6IGFkZFxuXHRcdFx0fTtcblx0XHRvcHRpb25zLmVsZW1lbnQudG9nZ2xlQ2xhc3MoIHRoaXMuX2NsYXNzZXMoIG9wdGlvbnMgKSwgYWRkICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0X29uOiBmdW5jdGlvbiggc3VwcHJlc3NEaXNhYmxlZENoZWNrLCBlbGVtZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgZGVsZWdhdGVFbGVtZW50O1xuXHRcdHZhciBpbnN0YW5jZSA9IHRoaXM7XG5cblx0XHQvLyBObyBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgZmxhZywgc2h1ZmZsZSBhcmd1bWVudHNcblx0XHRpZiAoIHR5cGVvZiBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgIT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0aGFuZGxlcnMgPSBlbGVtZW50O1xuXHRcdFx0ZWxlbWVudCA9IHN1cHByZXNzRGlzYWJsZWRDaGVjaztcblx0XHRcdHN1cHByZXNzRGlzYWJsZWRDaGVjayA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIE5vIGVsZW1lbnQgYXJndW1lbnQsIHNodWZmbGUgYW5kIHVzZSB0aGlzLmVsZW1lbnRcblx0XHRpZiAoICFoYW5kbGVycyApIHtcblx0XHRcdGhhbmRsZXJzID0gZWxlbWVudDtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG5cdFx0XHRkZWxlZ2F0ZUVsZW1lbnQgPSB0aGlzLndpZGdldCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50ID0gZGVsZWdhdGVFbGVtZW50ID0gJCggZWxlbWVudCApO1xuXHRcdFx0dGhpcy5iaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuYWRkKCBlbGVtZW50ICk7XG5cdFx0fVxuXG5cdFx0JC5lYWNoKCBoYW5kbGVycywgZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVyICkge1xuXHRcdFx0ZnVuY3Rpb24gaGFuZGxlclByb3h5KCkge1xuXG5cdFx0XHRcdC8vIEFsbG93IHdpZGdldHMgdG8gY3VzdG9taXplIHRoZSBkaXNhYmxlZCBoYW5kbGluZ1xuXHRcdFx0XHQvLyAtIGRpc2FibGVkIGFzIGFuIGFycmF5IGluc3RlYWQgb2YgYm9vbGVhblxuXHRcdFx0XHQvLyAtIGRpc2FibGVkIGNsYXNzIGFzIG1ldGhvZCBmb3IgZGlzYWJsaW5nIGluZGl2aWR1YWwgcGFydHNcblx0XHRcdFx0aWYgKCAhc3VwcHJlc3NEaXNhYmxlZENoZWNrICYmXG5cdFx0XHRcdFx0XHQoIGluc3RhbmNlLm9wdGlvbnMuZGlzYWJsZWQgPT09IHRydWUgfHxcblx0XHRcdFx0XHRcdCQoIHRoaXMgKS5oYXNDbGFzcyggXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09IFwic3RyaW5nXCIgPyBpbnN0YW5jZVsgaGFuZGxlciBdIDogaGFuZGxlciApXG5cdFx0XHRcdFx0LmFwcGx5KCBpbnN0YW5jZSwgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvcHkgdGhlIGd1aWQgc28gZGlyZWN0IHVuYmluZGluZyB3b3Jrc1xuXHRcdFx0aWYgKCB0eXBlb2YgaGFuZGxlciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0aGFuZGxlclByb3h5Lmd1aWQgPSBoYW5kbGVyLmd1aWQgPVxuXHRcdFx0XHRcdGhhbmRsZXIuZ3VpZCB8fCBoYW5kbGVyUHJveHkuZ3VpZCB8fCAkLmd1aWQrKztcblx0XHRcdH1cblxuXHRcdFx0dmFyIG1hdGNoID0gZXZlbnQubWF0Y2goIC9eKFtcXHc6LV0qKVxccyooLiopJC8gKTtcblx0XHRcdHZhciBldmVudE5hbWUgPSBtYXRjaFsgMSBdICsgaW5zdGFuY2UuZXZlbnROYW1lc3BhY2U7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRkZWxlZ2F0ZUVsZW1lbnQub24oIGV2ZW50TmFtZSwgc2VsZWN0b3IsIGhhbmRsZXJQcm94eSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5vbiggZXZlbnROYW1lLCBoYW5kbGVyUHJveHkgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X29mZjogZnVuY3Rpb24oIGVsZW1lbnQsIGV2ZW50TmFtZSApIHtcblx0XHRldmVudE5hbWUgPSAoIGV2ZW50TmFtZSB8fCBcIlwiICkuc3BsaXQoIFwiIFwiICkuam9pbiggdGhpcy5ldmVudE5hbWVzcGFjZSArIFwiIFwiICkgK1xuXHRcdFx0dGhpcy5ldmVudE5hbWVzcGFjZTtcblx0XHRlbGVtZW50Lm9mZiggZXZlbnROYW1lICkub2ZmKCBldmVudE5hbWUgKTtcblxuXHRcdC8vIENsZWFyIHRoZSBzdGFjayB0byBhdm9pZCBtZW1vcnkgbGVha3MgKCMxMDA1Nilcblx0XHR0aGlzLmJpbmRpbmdzID0gJCggdGhpcy5iaW5kaW5ncy5ub3QoIGVsZW1lbnQgKS5nZXQoKSApO1xuXHRcdHRoaXMuZm9jdXNhYmxlID0gJCggdGhpcy5mb2N1c2FibGUubm90KCBlbGVtZW50ICkuZ2V0KCkgKTtcblx0XHR0aGlzLmhvdmVyYWJsZSA9ICQoIHRoaXMuaG92ZXJhYmxlLm5vdCggZWxlbWVudCApLmdldCgpICk7XG5cdH0sXG5cblx0X2RlbGF5OiBmdW5jdGlvbiggaGFuZGxlciwgZGVsYXkgKSB7XG5cdFx0ZnVuY3Rpb24gaGFuZGxlclByb3h5KCkge1xuXHRcdFx0cmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09IFwic3RyaW5nXCIgPyBpbnN0YW5jZVsgaGFuZGxlciBdIDogaGFuZGxlciApXG5cdFx0XHRcdC5hcHBseSggaW5zdGFuY2UsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0XHR2YXIgaW5zdGFuY2UgPSB0aGlzO1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KCBoYW5kbGVyUHJveHksIGRlbGF5IHx8IDAgKTtcblx0fSxcblxuXHRfaG92ZXJhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHR0aGlzLmhvdmVyYWJsZSA9IHRoaXMuaG92ZXJhYmxlLmFkZCggZWxlbWVudCApO1xuXHRcdHRoaXMuX29uKCBlbGVtZW50LCB7XG5cdFx0XHRtb3VzZWVudGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICksIG51bGwsIFwidWktc3RhdGUtaG92ZXJcIiApO1xuXHRcdFx0fSxcblx0XHRcdG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1ob3ZlclwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9mb2N1c2FibGU6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHRoaXMuZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUuYWRkKCBlbGVtZW50ICk7XG5cdFx0dGhpcy5fb24oIGVsZW1lbnQsIHtcblx0XHRcdGZvY3VzaW46IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0XHR9LFxuXHRcdFx0Zm9jdXNvdXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoICQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1mb2N1c1wiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF90cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZXZlbnQsIGRhdGEgKSB7XG5cdFx0dmFyIHByb3AsIG9yaWc7XG5cdFx0dmFyIGNhbGxiYWNrID0gdGhpcy5vcHRpb25zWyB0eXBlIF07XG5cblx0XHRkYXRhID0gZGF0YSB8fCB7fTtcblx0XHRldmVudCA9ICQuRXZlbnQoIGV2ZW50ICk7XG5cdFx0ZXZlbnQudHlwZSA9ICggdHlwZSA9PT0gdGhpcy53aWRnZXRFdmVudFByZWZpeCA/XG5cdFx0XHR0eXBlIDpcblx0XHRcdHRoaXMud2lkZ2V0RXZlbnRQcmVmaXggKyB0eXBlICkudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIFRoZSBvcmlnaW5hbCBldmVudCBtYXkgY29tZSBmcm9tIGFueSBlbGVtZW50XG5cdFx0Ly8gc28gd2UgbmVlZCB0byByZXNldCB0aGUgdGFyZ2V0IG9uIHRoZSBuZXcgZXZlbnRcblx0XHRldmVudC50YXJnZXQgPSB0aGlzLmVsZW1lbnRbIDAgXTtcblxuXHRcdC8vIENvcHkgb3JpZ2luYWwgZXZlbnQgcHJvcGVydGllcyBvdmVyIHRvIHRoZSBuZXcgZXZlbnRcblx0XHRvcmlnID0gZXZlbnQub3JpZ2luYWxFdmVudDtcblx0XHRpZiAoIG9yaWcgKSB7XG5cdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdGlmICggISggcHJvcCBpbiBldmVudCApICkge1xuXHRcdFx0XHRcdGV2ZW50WyBwcm9wIF0gPSBvcmlnWyBwcm9wIF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggZXZlbnQsIGRhdGEgKTtcblx0XHRyZXR1cm4gISggJC5pc0Z1bmN0aW9uKCBjYWxsYmFjayApICYmXG5cdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcy5lbGVtZW50WyAwIF0sIFsgZXZlbnQgXS5jb25jYXQoIGRhdGEgKSApID09PSBmYWxzZSB8fFxuXHRcdFx0ZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKTtcblx0fVxufTtcblxuJC5lYWNoKCB7IHNob3c6IFwiZmFkZUluXCIsIGhpZGU6IFwiZmFkZU91dFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIGRlZmF1bHRFZmZlY3QgKSB7XG5cdCQuV2lkZ2V0LnByb3RvdHlwZVsgXCJfXCIgKyBtZXRob2QgXSA9IGZ1bmN0aW9uKCBlbGVtZW50LCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b3B0aW9ucyA9IHsgZWZmZWN0OiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0dmFyIGhhc09wdGlvbnM7XG5cdFx0dmFyIGVmZmVjdE5hbWUgPSAhb3B0aW9ucyA/XG5cdFx0XHRtZXRob2QgOlxuXHRcdFx0b3B0aW9ucyA9PT0gdHJ1ZSB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIiA/XG5cdFx0XHRcdGRlZmF1bHRFZmZlY3QgOlxuXHRcdFx0XHRvcHRpb25zLmVmZmVjdCB8fCBkZWZhdWx0RWZmZWN0O1xuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0aWYgKCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB7IGR1cmF0aW9uOiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0aGFzT3B0aW9ucyA9ICEkLmlzRW1wdHlPYmplY3QoIG9wdGlvbnMgKTtcblx0XHRvcHRpb25zLmNvbXBsZXRlID0gY2FsbGJhY2s7XG5cblx0XHRpZiAoIG9wdGlvbnMuZGVsYXkgKSB7XG5cdFx0XHRlbGVtZW50LmRlbGF5KCBvcHRpb25zLmRlbGF5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBoYXNPcHRpb25zICYmICQuZWZmZWN0cyAmJiAkLmVmZmVjdHMuZWZmZWN0WyBlZmZlY3ROYW1lIF0gKSB7XG5cdFx0XHRlbGVtZW50WyBtZXRob2QgXSggb3B0aW9ucyApO1xuXHRcdH0gZWxzZSBpZiAoIGVmZmVjdE5hbWUgIT09IG1ldGhvZCAmJiBlbGVtZW50WyBlZmZlY3ROYW1lIF0gKSB7XG5cdFx0XHRlbGVtZW50WyBlZmZlY3ROYW1lIF0oIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50LnF1ZXVlKCBmdW5jdGlvbiggbmV4dCApIHtcblx0XHRcdFx0JCggdGhpcyApWyBtZXRob2QgXSgpO1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGVsZW1lbnRbIDAgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbnZhciB3aWRnZXQgPSAkLndpZGdldDtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBQb3NpdGlvbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3Bvc2l0aW9uL1xuICovXG5cbi8vPj5sYWJlbDogUG9zaXRpb25cbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBQb3NpdGlvbnMgZWxlbWVudHMgcmVsYXRpdmUgdG8gb3RoZXIgZWxlbWVudHMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcG9zaXRpb24vXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vcG9zaXRpb24vXG5cblxuKCBmdW5jdGlvbigpIHtcbnZhciBjYWNoZWRTY3JvbGxiYXJXaWR0aCxcblx0bWF4ID0gTWF0aC5tYXgsXG5cdGFicyA9IE1hdGguYWJzLFxuXHRyaG9yaXpvbnRhbCA9IC9sZWZ0fGNlbnRlcnxyaWdodC8sXG5cdHJ2ZXJ0aWNhbCA9IC90b3B8Y2VudGVyfGJvdHRvbS8sXG5cdHJvZmZzZXQgPSAvW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLFxuXHRycG9zaXRpb24gPSAvXlxcdysvLFxuXHRycGVyY2VudCA9IC8lJC8sXG5cdF9wb3NpdGlvbiA9ICQuZm4ucG9zaXRpb247XG5cbmZ1bmN0aW9uIGdldE9mZnNldHMoIG9mZnNldHMsIHdpZHRoLCBoZWlnaHQgKSB7XG5cdHJldHVybiBbXG5cdFx0cGFyc2VGbG9hdCggb2Zmc2V0c1sgMCBdICkgKiAoIHJwZXJjZW50LnRlc3QoIG9mZnNldHNbIDAgXSApID8gd2lkdGggLyAxMDAgOiAxICksXG5cdFx0cGFyc2VGbG9hdCggb2Zmc2V0c1sgMSBdICkgKiAoIHJwZXJjZW50LnRlc3QoIG9mZnNldHNbIDEgXSApID8gaGVpZ2h0IC8gMTAwIDogMSApXG5cdF07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ3NzKCBlbGVtZW50LCBwcm9wZXJ0eSApIHtcblx0cmV0dXJuIHBhcnNlSW50KCAkLmNzcyggZWxlbWVudCwgcHJvcGVydHkgKSwgMTAgKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKCBlbGVtICkge1xuXHR2YXIgcmF3ID0gZWxlbVsgMCBdO1xuXHRpZiAoIHJhdy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGVsZW0ud2lkdGgoKSxcblx0XHRcdGhlaWdodDogZWxlbS5oZWlnaHQoKSxcblx0XHRcdG9mZnNldDogeyB0b3A6IDAsIGxlZnQ6IDAgfVxuXHRcdH07XG5cdH1cblx0aWYgKCAkLmlzV2luZG93KCByYXcgKSApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGVsZW0ud2lkdGgoKSxcblx0XHRcdGhlaWdodDogZWxlbS5oZWlnaHQoKSxcblx0XHRcdG9mZnNldDogeyB0b3A6IGVsZW0uc2Nyb2xsVG9wKCksIGxlZnQ6IGVsZW0uc2Nyb2xsTGVmdCgpIH1cblx0XHR9O1xuXHR9XG5cdGlmICggcmF3LnByZXZlbnREZWZhdWx0ICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogMCxcblx0XHRcdGhlaWdodDogMCxcblx0XHRcdG9mZnNldDogeyB0b3A6IHJhdy5wYWdlWSwgbGVmdDogcmF3LnBhZ2VYIH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiB7XG5cdFx0d2lkdGg6IGVsZW0ub3V0ZXJXaWR0aCgpLFxuXHRcdGhlaWdodDogZWxlbS5vdXRlckhlaWdodCgpLFxuXHRcdG9mZnNldDogZWxlbS5vZmZzZXQoKVxuXHR9O1xufVxuXG4kLnBvc2l0aW9uID0ge1xuXHRzY3JvbGxiYXJXaWR0aDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBjYWNoZWRTY3JvbGxiYXJXaWR0aCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuIGNhY2hlZFNjcm9sbGJhcldpZHRoO1xuXHRcdH1cblx0XHR2YXIgdzEsIHcyLFxuXHRcdFx0ZGl2ID0gJCggXCI8ZGl2IFwiICtcblx0XHRcdFx0XCJzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPlwiICtcblx0XHRcdFx0XCI8ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiICksXG5cdFx0XHRpbm5lckRpdiA9IGRpdi5jaGlsZHJlbigpWyAwIF07XG5cblx0XHQkKCBcImJvZHlcIiApLmFwcGVuZCggZGl2ICk7XG5cdFx0dzEgPSBpbm5lckRpdi5vZmZzZXRXaWR0aDtcblx0XHRkaXYuY3NzKCBcIm92ZXJmbG93XCIsIFwic2Nyb2xsXCIgKTtcblxuXHRcdHcyID0gaW5uZXJEaXYub2Zmc2V0V2lkdGg7XG5cblx0XHRpZiAoIHcxID09PSB3MiApIHtcblx0XHRcdHcyID0gZGl2WyAwIF0uY2xpZW50V2lkdGg7XG5cdFx0fVxuXG5cdFx0ZGl2LnJlbW92ZSgpO1xuXG5cdFx0cmV0dXJuICggY2FjaGVkU2Nyb2xsYmFyV2lkdGggPSB3MSAtIHcyICk7XG5cdH0sXG5cdGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCB3aXRoaW4gKSB7XG5cdFx0dmFyIG92ZXJmbG93WCA9IHdpdGhpbi5pc1dpbmRvdyB8fCB3aXRoaW4uaXNEb2N1bWVudCA/IFwiXCIgOlxuXHRcdFx0XHR3aXRoaW4uZWxlbWVudC5jc3MoIFwib3ZlcmZsb3cteFwiICksXG5cdFx0XHRvdmVyZmxvd1kgPSB3aXRoaW4uaXNXaW5kb3cgfHwgd2l0aGluLmlzRG9jdW1lbnQgPyBcIlwiIDpcblx0XHRcdFx0d2l0aGluLmVsZW1lbnQuY3NzKCBcIm92ZXJmbG93LXlcIiApLFxuXHRcdFx0aGFzT3ZlcmZsb3dYID0gb3ZlcmZsb3dYID09PSBcInNjcm9sbFwiIHx8XG5cdFx0XHRcdCggb3ZlcmZsb3dYID09PSBcImF1dG9cIiAmJiB3aXRoaW4ud2lkdGggPCB3aXRoaW4uZWxlbWVudFsgMCBdLnNjcm9sbFdpZHRoICksXG5cdFx0XHRoYXNPdmVyZmxvd1kgPSBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHxcblx0XHRcdFx0KCBvdmVyZmxvd1kgPT09IFwiYXV0b1wiICYmIHdpdGhpbi5oZWlnaHQgPCB3aXRoaW4uZWxlbWVudFsgMCBdLnNjcm9sbEhlaWdodCApO1xuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogaGFzT3ZlcmZsb3dZID8gJC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMCxcblx0XHRcdGhlaWdodDogaGFzT3ZlcmZsb3dYID8gJC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpIDogMFxuXHRcdH07XG5cdH0sXG5cdGdldFdpdGhpbkluZm86IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciB3aXRoaW5FbGVtZW50ID0gJCggZWxlbWVudCB8fCB3aW5kb3cgKSxcblx0XHRcdGlzV2luZG93ID0gJC5pc1dpbmRvdyggd2l0aGluRWxlbWVudFsgMCBdICksXG5cdFx0XHRpc0RvY3VtZW50ID0gISF3aXRoaW5FbGVtZW50WyAwIF0gJiYgd2l0aGluRWxlbWVudFsgMCBdLm5vZGVUeXBlID09PSA5LFxuXHRcdFx0aGFzT2Zmc2V0ID0gIWlzV2luZG93ICYmICFpc0RvY3VtZW50O1xuXHRcdHJldHVybiB7XG5cdFx0XHRlbGVtZW50OiB3aXRoaW5FbGVtZW50LFxuXHRcdFx0aXNXaW5kb3c6IGlzV2luZG93LFxuXHRcdFx0aXNEb2N1bWVudDogaXNEb2N1bWVudCxcblx0XHRcdG9mZnNldDogaGFzT2Zmc2V0ID8gJCggZWxlbWVudCApLm9mZnNldCgpIDogeyBsZWZ0OiAwLCB0b3A6IDAgfSxcblx0XHRcdHNjcm9sbExlZnQ6IHdpdGhpbkVsZW1lbnQuc2Nyb2xsTGVmdCgpLFxuXHRcdFx0c2Nyb2xsVG9wOiB3aXRoaW5FbGVtZW50LnNjcm9sbFRvcCgpLFxuXHRcdFx0d2lkdGg6IHdpdGhpbkVsZW1lbnQub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB3aXRoaW5FbGVtZW50Lm91dGVySGVpZ2h0KClcblx0XHR9O1xuXHR9XG59O1xuXG4kLmZuLnBvc2l0aW9uID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdGlmICggIW9wdGlvbnMgfHwgIW9wdGlvbnMub2YgKSB7XG5cdFx0cmV0dXJuIF9wb3NpdGlvbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cblxuXHQvLyBNYWtlIGEgY29weSwgd2UgZG9uJ3Qgd2FudCB0byBtb2RpZnkgYXJndW1lbnRzXG5cdG9wdGlvbnMgPSAkLmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgYXRPZmZzZXQsIHRhcmdldFdpZHRoLCB0YXJnZXRIZWlnaHQsIHRhcmdldE9mZnNldCwgYmFzZVBvc2l0aW9uLCBkaW1lbnNpb25zLFxuXHRcdHRhcmdldCA9ICQoIG9wdGlvbnMub2YgKSxcblx0XHR3aXRoaW4gPSAkLnBvc2l0aW9uLmdldFdpdGhpbkluZm8oIG9wdGlvbnMud2l0aGluICksXG5cdFx0c2Nyb2xsSW5mbyA9ICQucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyggd2l0aGluICksXG5cdFx0Y29sbGlzaW9uID0gKCBvcHRpb25zLmNvbGxpc2lvbiB8fCBcImZsaXBcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRcdG9mZnNldHMgPSB7fTtcblxuXHRkaW1lbnNpb25zID0gZ2V0RGltZW5zaW9ucyggdGFyZ2V0ICk7XG5cdGlmICggdGFyZ2V0WyAwIF0ucHJldmVudERlZmF1bHQgKSB7XG5cblx0XHQvLyBGb3JjZSBsZWZ0IHRvcCB0byBhbGxvdyBmbGlwcGluZ1xuXHRcdG9wdGlvbnMuYXQgPSBcImxlZnQgdG9wXCI7XG5cdH1cblx0dGFyZ2V0V2lkdGggPSBkaW1lbnNpb25zLndpZHRoO1xuXHR0YXJnZXRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodDtcblx0dGFyZ2V0T2Zmc2V0ID0gZGltZW5zaW9ucy5vZmZzZXQ7XG5cblx0Ly8gQ2xvbmUgdG8gcmV1c2Ugb3JpZ2luYWwgdGFyZ2V0T2Zmc2V0IGxhdGVyXG5cdGJhc2VQb3NpdGlvbiA9ICQuZXh0ZW5kKCB7fSwgdGFyZ2V0T2Zmc2V0ICk7XG5cblx0Ly8gRm9yY2UgbXkgYW5kIGF0IHRvIGhhdmUgdmFsaWQgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcG9zaXRpb25zXG5cdC8vIGlmIGEgdmFsdWUgaXMgbWlzc2luZyBvciBpbnZhbGlkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBjZW50ZXJcblx0JC5lYWNoKCBbIFwibXlcIiwgXCJhdFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwb3MgPSAoIG9wdGlvbnNbIHRoaXMgXSB8fCBcIlwiICkuc3BsaXQoIFwiIFwiICksXG5cdFx0XHRob3Jpem9udGFsT2Zmc2V0LFxuXHRcdFx0dmVydGljYWxPZmZzZXQ7XG5cblx0XHRpZiAoIHBvcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRwb3MgPSByaG9yaXpvbnRhbC50ZXN0KCBwb3NbIDAgXSApID9cblx0XHRcdFx0cG9zLmNvbmNhdCggWyBcImNlbnRlclwiIF0gKSA6XG5cdFx0XHRcdHJ2ZXJ0aWNhbC50ZXN0KCBwb3NbIDAgXSApID9cblx0XHRcdFx0XHRbIFwiY2VudGVyXCIgXS5jb25jYXQoIHBvcyApIDpcblx0XHRcdFx0XHRbIFwiY2VudGVyXCIsIFwiY2VudGVyXCIgXTtcblx0XHR9XG5cdFx0cG9zWyAwIF0gPSByaG9yaXpvbnRhbC50ZXN0KCBwb3NbIDAgXSApID8gcG9zWyAwIF0gOiBcImNlbnRlclwiO1xuXHRcdHBvc1sgMSBdID0gcnZlcnRpY2FsLnRlc3QoIHBvc1sgMSBdICkgPyBwb3NbIDEgXSA6IFwiY2VudGVyXCI7XG5cblx0XHQvLyBDYWxjdWxhdGUgb2Zmc2V0c1xuXHRcdGhvcml6b250YWxPZmZzZXQgPSByb2Zmc2V0LmV4ZWMoIHBvc1sgMCBdICk7XG5cdFx0dmVydGljYWxPZmZzZXQgPSByb2Zmc2V0LmV4ZWMoIHBvc1sgMSBdICk7XG5cdFx0b2Zmc2V0c1sgdGhpcyBdID0gW1xuXHRcdFx0aG9yaXpvbnRhbE9mZnNldCA/IGhvcml6b250YWxPZmZzZXRbIDAgXSA6IDAsXG5cdFx0XHR2ZXJ0aWNhbE9mZnNldCA/IHZlcnRpY2FsT2Zmc2V0WyAwIF0gOiAwXG5cdFx0XTtcblxuXHRcdC8vIFJlZHVjZSB0byBqdXN0IHRoZSBwb3NpdGlvbnMgd2l0aG91dCB0aGUgb2Zmc2V0c1xuXHRcdG9wdGlvbnNbIHRoaXMgXSA9IFtcblx0XHRcdHJwb3NpdGlvbi5leGVjKCBwb3NbIDAgXSApWyAwIF0sXG5cdFx0XHRycG9zaXRpb24uZXhlYyggcG9zWyAxIF0gKVsgMCBdXG5cdFx0XTtcblx0fSApO1xuXG5cdC8vIE5vcm1hbGl6ZSBjb2xsaXNpb24gb3B0aW9uXG5cdGlmICggY29sbGlzaW9uLmxlbmd0aCA9PT0gMSApIHtcblx0XHRjb2xsaXNpb25bIDEgXSA9IGNvbGxpc2lvblsgMCBdO1xuXHR9XG5cblx0aWYgKCBvcHRpb25zLmF0WyAwIF0gPT09IFwicmlnaHRcIiApIHtcblx0XHRiYXNlUG9zaXRpb24ubGVmdCArPSB0YXJnZXRXaWR0aDtcblx0fSBlbHNlIGlmICggb3B0aW9ucy5hdFsgMCBdID09PSBcImNlbnRlclwiICkge1xuXHRcdGJhc2VQb3NpdGlvbi5sZWZ0ICs9IHRhcmdldFdpZHRoIC8gMjtcblx0fVxuXG5cdGlmICggb3B0aW9ucy5hdFsgMSBdID09PSBcImJvdHRvbVwiICkge1xuXHRcdGJhc2VQb3NpdGlvbi50b3AgKz0gdGFyZ2V0SGVpZ2h0O1xuXHR9IGVsc2UgaWYgKCBvcHRpb25zLmF0WyAxIF0gPT09IFwiY2VudGVyXCIgKSB7XG5cdFx0YmFzZVBvc2l0aW9uLnRvcCArPSB0YXJnZXRIZWlnaHQgLyAyO1xuXHR9XG5cblx0YXRPZmZzZXQgPSBnZXRPZmZzZXRzKCBvZmZzZXRzLmF0LCB0YXJnZXRXaWR0aCwgdGFyZ2V0SGVpZ2h0ICk7XG5cdGJhc2VQb3NpdGlvbi5sZWZ0ICs9IGF0T2Zmc2V0WyAwIF07XG5cdGJhc2VQb3NpdGlvbi50b3AgKz0gYXRPZmZzZXRbIDEgXTtcblxuXHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29sbGlzaW9uUG9zaXRpb24sIHVzaW5nLFxuXHRcdFx0ZWxlbSA9ICQoIHRoaXMgKSxcblx0XHRcdGVsZW1XaWR0aCA9IGVsZW0ub3V0ZXJXaWR0aCgpLFxuXHRcdFx0ZWxlbUhlaWdodCA9IGVsZW0ub3V0ZXJIZWlnaHQoKSxcblx0XHRcdG1hcmdpbkxlZnQgPSBwYXJzZUNzcyggdGhpcywgXCJtYXJnaW5MZWZ0XCIgKSxcblx0XHRcdG1hcmdpblRvcCA9IHBhcnNlQ3NzKCB0aGlzLCBcIm1hcmdpblRvcFwiICksXG5cdFx0XHRjb2xsaXNpb25XaWR0aCA9IGVsZW1XaWR0aCArIG1hcmdpbkxlZnQgKyBwYXJzZUNzcyggdGhpcywgXCJtYXJnaW5SaWdodFwiICkgK1xuXHRcdFx0XHRzY3JvbGxJbmZvLndpZHRoLFxuXHRcdFx0Y29sbGlzaW9uSGVpZ2h0ID0gZWxlbUhlaWdodCArIG1hcmdpblRvcCArIHBhcnNlQ3NzKCB0aGlzLCBcIm1hcmdpbkJvdHRvbVwiICkgK1xuXHRcdFx0XHRzY3JvbGxJbmZvLmhlaWdodCxcblx0XHRcdHBvc2l0aW9uID0gJC5leHRlbmQoIHt9LCBiYXNlUG9zaXRpb24gKSxcblx0XHRcdG15T2Zmc2V0ID0gZ2V0T2Zmc2V0cyggb2Zmc2V0cy5teSwgZWxlbS5vdXRlcldpZHRoKCksIGVsZW0ub3V0ZXJIZWlnaHQoKSApO1xuXG5cdFx0aWYgKCBvcHRpb25zLm15WyAwIF0gPT09IFwicmlnaHRcIiApIHtcblx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gZWxlbVdpZHRoO1xuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMubXlbIDAgXSA9PT0gXCJjZW50ZXJcIiApIHtcblx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gZWxlbVdpZHRoIC8gMjtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMubXlbIDEgXSA9PT0gXCJib3R0b21cIiApIHtcblx0XHRcdHBvc2l0aW9uLnRvcCAtPSBlbGVtSGVpZ2h0O1xuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMubXlbIDEgXSA9PT0gXCJjZW50ZXJcIiApIHtcblx0XHRcdHBvc2l0aW9uLnRvcCAtPSBlbGVtSGVpZ2h0IC8gMjtcblx0XHR9XG5cblx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0WyAwIF07XG5cdFx0cG9zaXRpb24udG9wICs9IG15T2Zmc2V0WyAxIF07XG5cblx0XHRjb2xsaXNpb25Qb3NpdGlvbiA9IHtcblx0XHRcdG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnQsXG5cdFx0XHRtYXJnaW5Ub3A6IG1hcmdpblRvcFxuXHRcdH07XG5cblx0XHQkLmVhY2goIFsgXCJsZWZ0XCIsIFwidG9wXCIgXSwgZnVuY3Rpb24oIGksIGRpciApIHtcblx0XHRcdGlmICggJC51aS5wb3NpdGlvblsgY29sbGlzaW9uWyBpIF0gXSApIHtcblx0XHRcdFx0JC51aS5wb3NpdGlvblsgY29sbGlzaW9uWyBpIF0gXVsgZGlyIF0oIHBvc2l0aW9uLCB7XG5cdFx0XHRcdFx0dGFyZ2V0V2lkdGg6IHRhcmdldFdpZHRoLFxuXHRcdFx0XHRcdHRhcmdldEhlaWdodDogdGFyZ2V0SGVpZ2h0LFxuXHRcdFx0XHRcdGVsZW1XaWR0aDogZWxlbVdpZHRoLFxuXHRcdFx0XHRcdGVsZW1IZWlnaHQ6IGVsZW1IZWlnaHQsXG5cdFx0XHRcdFx0Y29sbGlzaW9uUG9zaXRpb246IGNvbGxpc2lvblBvc2l0aW9uLFxuXHRcdFx0XHRcdGNvbGxpc2lvbldpZHRoOiBjb2xsaXNpb25XaWR0aCxcblx0XHRcdFx0XHRjb2xsaXNpb25IZWlnaHQ6IGNvbGxpc2lvbkhlaWdodCxcblx0XHRcdFx0XHRvZmZzZXQ6IFsgYXRPZmZzZXRbIDAgXSArIG15T2Zmc2V0WyAwIF0sIGF0T2Zmc2V0IFsgMSBdICsgbXlPZmZzZXRbIDEgXSBdLFxuXHRcdFx0XHRcdG15OiBvcHRpb25zLm15LFxuXHRcdFx0XHRcdGF0OiBvcHRpb25zLmF0LFxuXHRcdFx0XHRcdHdpdGhpbjogd2l0aGluLFxuXHRcdFx0XHRcdGVsZW06IGVsZW1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggb3B0aW9ucy51c2luZyApIHtcblxuXHRcdFx0Ly8gQWRkcyBmZWVkYmFjayBhcyBzZWNvbmQgYXJndW1lbnQgdG8gdXNpbmcgY2FsbGJhY2ssIGlmIHByZXNlbnRcblx0XHRcdHVzaW5nID0gZnVuY3Rpb24oIHByb3BzICkge1xuXHRcdFx0XHR2YXIgbGVmdCA9IHRhcmdldE9mZnNldC5sZWZ0IC0gcG9zaXRpb24ubGVmdCxcblx0XHRcdFx0XHRyaWdodCA9IGxlZnQgKyB0YXJnZXRXaWR0aCAtIGVsZW1XaWR0aCxcblx0XHRcdFx0XHR0b3AgPSB0YXJnZXRPZmZzZXQudG9wIC0gcG9zaXRpb24udG9wLFxuXHRcdFx0XHRcdGJvdHRvbSA9IHRvcCArIHRhcmdldEhlaWdodCAtIGVsZW1IZWlnaHQsXG5cdFx0XHRcdFx0ZmVlZGJhY2sgPSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudDogdGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiB0YXJnZXRPZmZzZXQubGVmdCxcblx0XHRcdFx0XHRcdFx0dG9wOiB0YXJnZXRPZmZzZXQudG9wLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogdGFyZ2V0V2lkdGgsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogdGFyZ2V0SGVpZ2h0XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZWxlbWVudDoge1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBlbGVtLFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuXHRcdFx0XHRcdFx0XHR0b3A6IHBvc2l0aW9uLnRvcCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGVsZW1XaWR0aCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBlbGVtSGVpZ2h0XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aG9yaXpvbnRhbDogcmlnaHQgPCAwID8gXCJsZWZ0XCIgOiBsZWZ0ID4gMCA/IFwicmlnaHRcIiA6IFwiY2VudGVyXCIsXG5cdFx0XHRcdFx0XHR2ZXJ0aWNhbDogYm90dG9tIDwgMCA/IFwidG9wXCIgOiB0b3AgPiAwID8gXCJib3R0b21cIiA6IFwibWlkZGxlXCJcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoIHRhcmdldFdpZHRoIDwgZWxlbVdpZHRoICYmIGFicyggbGVmdCArIHJpZ2h0ICkgPCB0YXJnZXRXaWR0aCApIHtcblx0XHRcdFx0XHRmZWVkYmFjay5ob3Jpem9udGFsID0gXCJjZW50ZXJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHRhcmdldEhlaWdodCA8IGVsZW1IZWlnaHQgJiYgYWJzKCB0b3AgKyBib3R0b20gKSA8IHRhcmdldEhlaWdodCApIHtcblx0XHRcdFx0XHRmZWVkYmFjay52ZXJ0aWNhbCA9IFwibWlkZGxlXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBtYXgoIGFicyggbGVmdCApLCBhYnMoIHJpZ2h0ICkgKSA+IG1heCggYWJzKCB0b3AgKSwgYWJzKCBib3R0b20gKSApICkge1xuXHRcdFx0XHRcdGZlZWRiYWNrLmltcG9ydGFudCA9IFwiaG9yaXpvbnRhbFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZlZWRiYWNrLmltcG9ydGFudCA9IFwidmVydGljYWxcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIHRoaXMsIHByb3BzLCBmZWVkYmFjayApO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRlbGVtLm9mZnNldCggJC5leHRlbmQoIHBvc2l0aW9uLCB7IHVzaW5nOiB1c2luZyB9ICkgKTtcblx0fSApO1xufTtcblxuJC51aS5wb3NpdGlvbiA9IHtcblx0Zml0OiB7XG5cdFx0bGVmdDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsTGVmdCA6IHdpdGhpbi5vZmZzZXQubGVmdCxcblx0XHRcdFx0b3V0ZXJXaWR0aCA9IHdpdGhpbi53aWR0aCxcblx0XHRcdFx0Y29sbGlzaW9uUG9zTGVmdCA9IHBvc2l0aW9uLmxlZnQgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsXG5cdFx0XHRcdG92ZXJMZWZ0ID0gd2l0aGluT2Zmc2V0IC0gY29sbGlzaW9uUG9zTGVmdCxcblx0XHRcdFx0b3ZlclJpZ2h0ID0gY29sbGlzaW9uUG9zTGVmdCArIGRhdGEuY29sbGlzaW9uV2lkdGggLSBvdXRlcldpZHRoIC0gd2l0aGluT2Zmc2V0LFxuXHRcdFx0XHRuZXdPdmVyUmlnaHQ7XG5cblx0XHRcdC8vIEVsZW1lbnQgaXMgd2lkZXIgdGhhbiB3aXRoaW5cblx0XHRcdGlmICggZGF0YS5jb2xsaXNpb25XaWR0aCA+IG91dGVyV2lkdGggKSB7XG5cblx0XHRcdFx0Ly8gRWxlbWVudCBpcyBpbml0aWFsbHkgb3ZlciB0aGUgbGVmdCBzaWRlIG9mIHdpdGhpblxuXHRcdFx0XHRpZiAoIG92ZXJMZWZ0ID4gMCAmJiBvdmVyUmlnaHQgPD0gMCApIHtcblx0XHRcdFx0XHRuZXdPdmVyUmlnaHQgPSBwb3NpdGlvbi5sZWZ0ICsgb3ZlckxlZnQgKyBkYXRhLmNvbGxpc2lvbldpZHRoIC0gb3V0ZXJXaWR0aCAtXG5cdFx0XHRcdFx0XHR3aXRoaW5PZmZzZXQ7XG5cdFx0XHRcdFx0cG9zaXRpb24ubGVmdCArPSBvdmVyTGVmdCAtIG5ld092ZXJSaWdodDtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIHJpZ2h0IHNpZGUgb2Ygd2l0aGluXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgJiYgb3ZlckxlZnQgPD0gMCApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ID0gd2l0aGluT2Zmc2V0O1xuXG5cdFx0XHRcdC8vIEVsZW1lbnQgaXMgaW5pdGlhbGx5IG92ZXIgYm90aCBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB3aXRoaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIG92ZXJMZWZ0ID4gb3ZlclJpZ2h0ICkge1xuXHRcdFx0XHRcdFx0cG9zaXRpb24ubGVmdCA9IHdpdGhpbk9mZnNldCArIG91dGVyV2lkdGggLSBkYXRhLmNvbGxpc2lvbldpZHRoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ID0gd2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb28gZmFyIGxlZnQgLT4gYWxpZ24gd2l0aCBsZWZ0IGVkZ2Vcblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJMZWZ0ID4gMCApIHtcblx0XHRcdFx0cG9zaXRpb24ubGVmdCArPSBvdmVyTGVmdDtcblxuXHRcdFx0Ly8gVG9vIGZhciByaWdodCAtPiBhbGlnbiB3aXRoIHJpZ2h0IGVkZ2Vcblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLmxlZnQgLT0gb3ZlclJpZ2h0O1xuXG5cdFx0XHQvLyBBZGp1c3QgYmFzZWQgb24gcG9zaXRpb24gYW5kIG1hcmdpblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9zaXRpb24ubGVmdCA9IG1heCggcG9zaXRpb24ubGVmdCAtIGNvbGxpc2lvblBvc0xlZnQsIHBvc2l0aW9uLmxlZnQgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRvcDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsVG9wIDogd2l0aGluLm9mZnNldC50b3AsXG5cdFx0XHRcdG91dGVySGVpZ2h0ID0gZGF0YS53aXRoaW4uaGVpZ2h0LFxuXHRcdFx0XHRjb2xsaXNpb25Qb3NUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxcblx0XHRcdFx0b3ZlclRvcCA9IHdpdGhpbk9mZnNldCAtIGNvbGxpc2lvblBvc1RvcCxcblx0XHRcdFx0b3ZlckJvdHRvbSA9IGNvbGxpc2lvblBvc1RvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLSB3aXRoaW5PZmZzZXQsXG5cdFx0XHRcdG5ld092ZXJCb3R0b207XG5cblx0XHRcdC8vIEVsZW1lbnQgaXMgdGFsbGVyIHRoYW4gd2l0aGluXG5cdFx0XHRpZiAoIGRhdGEuY29sbGlzaW9uSGVpZ2h0ID4gb3V0ZXJIZWlnaHQgKSB7XG5cblx0XHRcdFx0Ly8gRWxlbWVudCBpcyBpbml0aWFsbHkgb3ZlciB0aGUgdG9wIG9mIHdpdGhpblxuXHRcdFx0XHRpZiAoIG92ZXJUb3AgPiAwICYmIG92ZXJCb3R0b20gPD0gMCApIHtcblx0XHRcdFx0XHRuZXdPdmVyQm90dG9tID0gcG9zaXRpb24udG9wICsgb3ZlclRvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLVxuXHRcdFx0XHRcdFx0d2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRcdHBvc2l0aW9uLnRvcCArPSBvdmVyVG9wIC0gbmV3T3ZlckJvdHRvbTtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIGJvdHRvbSBvZiB3aXRoaW5cblx0XHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgJiYgb3ZlclRvcCA8PSAwICkge1xuXHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldDtcblxuXHRcdFx0XHQvLyBFbGVtZW50IGlzIGluaXRpYWxseSBvdmVyIGJvdGggdG9wIGFuZCBib3R0b20gb2Ygd2l0aGluXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCBvdmVyVG9wID4gb3ZlckJvdHRvbSApIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldCArIG91dGVySGVpZ2h0IC0gZGF0YS5jb2xsaXNpb25IZWlnaHQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uLnRvcCA9IHdpdGhpbk9mZnNldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9vIGZhciB1cCAtPiBhbGlnbiB3aXRoIHRvcFxuXHRcdFx0fSBlbHNlIGlmICggb3ZlclRvcCA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLnRvcCArPSBvdmVyVG9wO1xuXG5cdFx0XHQvLyBUb28gZmFyIGRvd24gLT4gYWxpZ24gd2l0aCBib3R0b20gZWRnZVxuXHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgKSB7XG5cdFx0XHRcdHBvc2l0aW9uLnRvcCAtPSBvdmVyQm90dG9tO1xuXG5cdFx0XHQvLyBBZGp1c3QgYmFzZWQgb24gcG9zaXRpb24gYW5kIG1hcmdpblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cG9zaXRpb24udG9wID0gbWF4KCBwb3NpdGlvbi50b3AgLSBjb2xsaXNpb25Qb3NUb3AsIHBvc2l0aW9uLnRvcCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZmxpcDoge1xuXHRcdGxlZnQ6IGZ1bmN0aW9uKCBwb3NpdGlvbiwgZGF0YSApIHtcblx0XHRcdHZhciB3aXRoaW4gPSBkYXRhLndpdGhpbixcblx0XHRcdFx0d2l0aGluT2Zmc2V0ID0gd2l0aGluLm9mZnNldC5sZWZ0ICsgd2l0aGluLnNjcm9sbExlZnQsXG5cdFx0XHRcdG91dGVyV2lkdGggPSB3aXRoaW4ud2lkdGgsXG5cdFx0XHRcdG9mZnNldExlZnQgPSB3aXRoaW4uaXNXaW5kb3cgPyB3aXRoaW4uc2Nyb2xsTGVmdCA6IHdpdGhpbi5vZmZzZXQubGVmdCxcblx0XHRcdFx0Y29sbGlzaW9uUG9zTGVmdCA9IHBvc2l0aW9uLmxlZnQgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsXG5cdFx0XHRcdG92ZXJMZWZ0ID0gY29sbGlzaW9uUG9zTGVmdCAtIG9mZnNldExlZnQsXG5cdFx0XHRcdG92ZXJSaWdodCA9IGNvbGxpc2lvblBvc0xlZnQgKyBkYXRhLmNvbGxpc2lvbldpZHRoIC0gb3V0ZXJXaWR0aCAtIG9mZnNldExlZnQsXG5cdFx0XHRcdG15T2Zmc2V0ID0gZGF0YS5teVsgMCBdID09PSBcImxlZnRcIiA/XG5cdFx0XHRcdFx0LWRhdGEuZWxlbVdpZHRoIDpcblx0XHRcdFx0XHRkYXRhLm15WyAwIF0gPT09IFwicmlnaHRcIiA/XG5cdFx0XHRcdFx0XHRkYXRhLmVsZW1XaWR0aCA6XG5cdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRhdE9mZnNldCA9IGRhdGEuYXRbIDAgXSA9PT0gXCJsZWZ0XCIgP1xuXHRcdFx0XHRcdGRhdGEudGFyZ2V0V2lkdGggOlxuXHRcdFx0XHRcdGRhdGEuYXRbIDAgXSA9PT0gXCJyaWdodFwiID9cblx0XHRcdFx0XHRcdC1kYXRhLnRhcmdldFdpZHRoIDpcblx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdG9mZnNldCA9IC0yICogZGF0YS5vZmZzZXRbIDAgXSxcblx0XHRcdFx0bmV3T3ZlclJpZ2h0LFxuXHRcdFx0XHRuZXdPdmVyTGVmdDtcblxuXHRcdFx0aWYgKCBvdmVyTGVmdCA8IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJSaWdodCA9IHBvc2l0aW9uLmxlZnQgKyBteU9mZnNldCArIGF0T2Zmc2V0ICsgb2Zmc2V0ICsgZGF0YS5jb2xsaXNpb25XaWR0aCAtXG5cdFx0XHRcdFx0b3V0ZXJXaWR0aCAtIHdpdGhpbk9mZnNldDtcblx0XHRcdFx0aWYgKCBuZXdPdmVyUmlnaHQgPCAwIHx8IG5ld092ZXJSaWdodCA8IGFicyggb3ZlckxlZnQgKSApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIG92ZXJSaWdodCA+IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJMZWZ0ID0gcG9zaXRpb24ubGVmdCAtIGRhdGEuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCArIG15T2Zmc2V0ICtcblx0XHRcdFx0XHRhdE9mZnNldCArIG9mZnNldCAtIG9mZnNldExlZnQ7XG5cdFx0XHRcdGlmICggbmV3T3ZlckxlZnQgPiAwIHx8IGFicyggbmV3T3ZlckxlZnQgKSA8IG92ZXJSaWdodCApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi5sZWZ0ICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHRvcDogZnVuY3Rpb24oIHBvc2l0aW9uLCBkYXRhICkge1xuXHRcdFx0dmFyIHdpdGhpbiA9IGRhdGEud2l0aGluLFxuXHRcdFx0XHR3aXRoaW5PZmZzZXQgPSB3aXRoaW4ub2Zmc2V0LnRvcCArIHdpdGhpbi5zY3JvbGxUb3AsXG5cdFx0XHRcdG91dGVySGVpZ2h0ID0gd2l0aGluLmhlaWdodCxcblx0XHRcdFx0b2Zmc2V0VG9wID0gd2l0aGluLmlzV2luZG93ID8gd2l0aGluLnNjcm9sbFRvcCA6IHdpdGhpbi5vZmZzZXQudG9wLFxuXHRcdFx0XHRjb2xsaXNpb25Qb3NUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxcblx0XHRcdFx0b3ZlclRvcCA9IGNvbGxpc2lvblBvc1RvcCAtIG9mZnNldFRvcCxcblx0XHRcdFx0b3ZlckJvdHRvbSA9IGNvbGxpc2lvblBvc1RvcCArIGRhdGEuY29sbGlzaW9uSGVpZ2h0IC0gb3V0ZXJIZWlnaHQgLSBvZmZzZXRUb3AsXG5cdFx0XHRcdHRvcCA9IGRhdGEubXlbIDEgXSA9PT0gXCJ0b3BcIixcblx0XHRcdFx0bXlPZmZzZXQgPSB0b3AgP1xuXHRcdFx0XHRcdC1kYXRhLmVsZW1IZWlnaHQgOlxuXHRcdFx0XHRcdGRhdGEubXlbIDEgXSA9PT0gXCJib3R0b21cIiA/XG5cdFx0XHRcdFx0XHRkYXRhLmVsZW1IZWlnaHQgOlxuXHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0YXRPZmZzZXQgPSBkYXRhLmF0WyAxIF0gPT09IFwidG9wXCIgP1xuXHRcdFx0XHRcdGRhdGEudGFyZ2V0SGVpZ2h0IDpcblx0XHRcdFx0XHRkYXRhLmF0WyAxIF0gPT09IFwiYm90dG9tXCIgP1xuXHRcdFx0XHRcdFx0LWRhdGEudGFyZ2V0SGVpZ2h0IDpcblx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdG9mZnNldCA9IC0yICogZGF0YS5vZmZzZXRbIDEgXSxcblx0XHRcdFx0bmV3T3ZlclRvcCxcblx0XHRcdFx0bmV3T3ZlckJvdHRvbTtcblx0XHRcdGlmICggb3ZlclRvcCA8IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJCb3R0b20gPSBwb3NpdGlvbi50b3AgKyBteU9mZnNldCArIGF0T2Zmc2V0ICsgb2Zmc2V0ICsgZGF0YS5jb2xsaXNpb25IZWlnaHQgLVxuXHRcdFx0XHRcdG91dGVySGVpZ2h0IC0gd2l0aGluT2Zmc2V0O1xuXHRcdFx0XHRpZiAoIG5ld092ZXJCb3R0b20gPCAwIHx8IG5ld092ZXJCb3R0b20gPCBhYnMoIG92ZXJUb3AgKSApIHtcblx0XHRcdFx0XHRwb3NpdGlvbi50b3AgKz0gbXlPZmZzZXQgKyBhdE9mZnNldCArIG9mZnNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICggb3ZlckJvdHRvbSA+IDAgKSB7XG5cdFx0XHRcdG5ld092ZXJUb3AgPSBwb3NpdGlvbi50b3AgLSBkYXRhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCArIG15T2Zmc2V0ICsgYXRPZmZzZXQgK1xuXHRcdFx0XHRcdG9mZnNldCAtIG9mZnNldFRvcDtcblx0XHRcdFx0aWYgKCBuZXdPdmVyVG9wID4gMCB8fCBhYnMoIG5ld092ZXJUb3AgKSA8IG92ZXJCb3R0b20gKSB7XG5cdFx0XHRcdFx0cG9zaXRpb24udG9wICs9IG15T2Zmc2V0ICsgYXRPZmZzZXQgKyBvZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGZsaXBmaXQ6IHtcblx0XHRsZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdCQudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdCQudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH0sXG5cdFx0dG9wOiBmdW5jdGlvbigpIHtcblx0XHRcdCQudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0JC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbn0gKSgpO1xuXG52YXIgcG9zaXRpb24gPSAkLnVpLnBvc2l0aW9uO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIDpkYXRhIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiA6ZGF0YSBTZWxlY3RvclxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IFNlbGVjdHMgZWxlbWVudHMgd2hpY2ggaGF2ZSBkYXRhIHN0b3JlZCB1bmRlciB0aGUgc3BlY2lmaWVkIGtleS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9kYXRhLXNlbGVjdG9yL1xuXG5cbnZhciBkYXRhID0gJC5leHRlbmQoICQuZXhwclsgXCI6XCIgXSwge1xuXHRkYXRhOiAkLmV4cHIuY3JlYXRlUHNldWRvID9cblx0XHQkLmV4cHIuY3JlYXRlUHNldWRvKCBmdW5jdGlvbiggZGF0YU5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAhISQuZGF0YSggZWxlbSwgZGF0YU5hbWUgKTtcblx0XHRcdH07XG5cdFx0fSApIDpcblxuXHRcdC8vIFN1cHBvcnQ6IGpRdWVyeSA8MS44XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkge1xuXHRcdFx0cmV0dXJuICEhJC5kYXRhKCBlbGVtLCBtYXRjaFsgMyBdICk7XG5cdFx0fVxufSApO1xuXG4vKiFcbiAqIGpRdWVyeSBVSSBEaXNhYmxlIFNlbGVjdGlvbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogZGlzYWJsZVNlbGVjdGlvblxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IERpc2FibGUgc2VsZWN0aW9uIG9mIHRleHQgY29udGVudCB3aXRoaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2Rpc2FibGVTZWxlY3Rpb24vXG5cbi8vIFRoaXMgZmlsZSBpcyBkZXByZWNhdGVkXG5cblxudmFyIGRpc2FibGVTZWxlY3Rpb24gPSAkLmZuLmV4dGVuZCgge1xuXHRkaXNhYmxlU2VsZWN0aW9uOiAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBldmVudFR5cGUgPSBcIm9uc2VsZWN0c3RhcnRcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgP1xuXHRcdFx0XCJzZWxlY3RzdGFydFwiIDpcblx0XHRcdFwibW91c2Vkb3duXCI7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vbiggZXZlbnRUeXBlICsgXCIudWktZGlzYWJsZVNlbGVjdGlvblwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9ICk7XG5cdFx0fTtcblx0fSApKCksXG5cblx0ZW5hYmxlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIFwiLnVpLWRpc2FibGVTZWxlY3Rpb25cIiApO1xuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRm9jdXNhYmxlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiA6Zm9jdXNhYmxlIFNlbGVjdG9yXG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogU2VsZWN0cyBlbGVtZW50cyB3aGljaCBjYW4gYmUgZm9jdXNlZC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9mb2N1c2FibGUtc2VsZWN0b3IvXG5cblxuXG4vLyBTZWxlY3RvcnNcbiQudWkuZm9jdXNhYmxlID0gZnVuY3Rpb24oIGVsZW1lbnQsIGhhc1RhYmluZGV4ICkge1xuXHR2YXIgbWFwLCBtYXBOYW1lLCBpbWcsIGZvY3VzYWJsZUlmVmlzaWJsZSwgZmllbGRzZXQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0aWYgKCBcImFyZWFcIiA9PT0gbm9kZU5hbWUgKSB7XG5cdFx0bWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdG1hcE5hbWUgPSBtYXAubmFtZTtcblx0XHRpZiAoICFlbGVtZW50LmhyZWYgfHwgIW1hcE5hbWUgfHwgbWFwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwibWFwXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGltZyA9ICQoIFwiaW1nW3VzZW1hcD0nI1wiICsgbWFwTmFtZSArIFwiJ11cIiApO1xuXHRcdHJldHVybiBpbWcubGVuZ3RoID4gMCAmJiBpbWcuaXMoIFwiOnZpc2libGVcIiApO1xuXHR9XG5cblx0aWYgKCAvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KCBub2RlTmFtZSApICkge1xuXHRcdGZvY3VzYWJsZUlmVmlzaWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuXG5cdFx0aWYgKCBmb2N1c2FibGVJZlZpc2libGUgKSB7XG5cblx0XHRcdC8vIEZvcm0gY29udHJvbHMgd2l0aGluIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIGRpc2FibGVkLlxuXHRcdFx0Ly8gSG93ZXZlciwgY29udHJvbHMgd2l0aGluIHRoZSBmaWVsZHNldCdzIGxlZ2VuZCBkbyBub3QgZ2V0IGRpc2FibGVkLlxuXHRcdFx0Ly8gU2luY2UgY29udHJvbHMgZ2VuZXJhbGx5IGFyZW4ndCBwbGFjZWQgaW5zaWRlIGxlZ2VuZHMsIHdlIHNraXBcblx0XHRcdC8vIHRoaXMgcG9ydGlvbiBvZiB0aGUgY2hlY2suXG5cdFx0XHRmaWVsZHNldCA9ICQoIGVsZW1lbnQgKS5jbG9zZXN0KCBcImZpZWxkc2V0XCIgKVsgMCBdO1xuXHRcdFx0aWYgKCBmaWVsZHNldCApIHtcblx0XHRcdFx0Zm9jdXNhYmxlSWZWaXNpYmxlID0gIWZpZWxkc2V0LmRpc2FibGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggXCJhXCIgPT09IG5vZGVOYW1lICkge1xuXHRcdGZvY3VzYWJsZUlmVmlzaWJsZSA9IGVsZW1lbnQuaHJlZiB8fCBoYXNUYWJpbmRleDtcblx0fSBlbHNlIHtcblx0XHRmb2N1c2FibGVJZlZpc2libGUgPSBoYXNUYWJpbmRleDtcblx0fVxuXG5cdHJldHVybiBmb2N1c2FibGVJZlZpc2libGUgJiYgJCggZWxlbWVudCApLmlzKCBcIjp2aXNpYmxlXCIgKSAmJiB2aXNpYmxlKCAkKCBlbGVtZW50ICkgKTtcbn07XG5cbi8vIFN1cHBvcnQ6IElFIDggb25seVxuLy8gSUUgOCBkb2Vzbid0IHJlc29sdmUgaW5oZXJpdCB0byB2aXNpYmxlL2hpZGRlbiBmb3IgY29tcHV0ZWQgdmFsdWVzXG5mdW5jdGlvbiB2aXNpYmxlKCBlbGVtZW50ICkge1xuXHR2YXIgdmlzaWJpbGl0eSA9IGVsZW1lbnQuY3NzKCBcInZpc2liaWxpdHlcIiApO1xuXHR3aGlsZSAoIHZpc2liaWxpdHkgPT09IFwiaW5oZXJpdFwiICkge1xuXHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCgpO1xuXHRcdHZpc2liaWxpdHkgPSBlbGVtZW50LmNzcyggXCJ2aXNpYmlsaXR5XCIgKTtcblx0fVxuXHRyZXR1cm4gdmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIjtcbn1cblxuJC5leHRlbmQoICQuZXhwclsgXCI6XCIgXSwge1xuXHRmb2N1c2FibGU6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHJldHVybiAkLnVpLmZvY3VzYWJsZSggZWxlbWVudCwgJC5hdHRyKCBlbGVtZW50LCBcInRhYmluZGV4XCIgKSAhPSBudWxsICk7XG5cdH1cbn0gKTtcblxudmFyIGZvY3VzYWJsZSA9ICQudWkuZm9jdXNhYmxlO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBJRTggT25seVxuLy8gSUU4IGRvZXMgbm90IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGFuZCB3aGVuIGl0IGlzIHN1cHBsaWVkLiBJdCBvdmVyd3JpdGVzIHRoZSBmb3JtIHByb3Bcbi8vIHdpdGggYSBzdHJpbmcsIHNvIHdlIG5lZWQgdG8gZmluZCB0aGUgcHJvcGVyIGZvcm0uXG52YXIgZm9ybSA9ICQuZm4uZm9ybSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdHlwZW9mIHRoaXNbIDAgXS5mb3JtID09PSBcInN0cmluZ1wiID8gdGhpcy5jbG9zZXN0KCBcImZvcm1cIiApIDogJCggdGhpc1sgMCBdLmZvcm0gKTtcbn07XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRm9ybSBSZXNldCBNaXhpbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRm9ybSBSZXNldCBNaXhpblxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IFJlZnJlc2ggaW5wdXQgd2lkZ2V0cyB3aGVuIHRoZWlyIGZvcm0gaXMgcmVzZXRcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9mb3JtLXJlc2V0LW1peGluL1xuXG5cblxudmFyIGZvcm1SZXNldE1peGluID0gJC51aS5mb3JtUmVzZXRNaXhpbiA9IHtcblx0X2Zvcm1SZXNldEhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmb3JtID0gJCggdGhpcyApO1xuXG5cdFx0Ly8gV2FpdCBmb3IgdGhlIGZvcm0gcmVzZXQgdG8gYWN0dWFsbHkgaGFwcGVuIGJlZm9yZSByZWZyZXNoaW5nXG5cdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5zdGFuY2VzID0gZm9ybS5kYXRhKCBcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIgKTtcblx0XHRcdCQuZWFjaCggaW5zdGFuY2VzLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9iaW5kRm9ybVJlc2V0SGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mb3JtID0gdGhpcy5lbGVtZW50LmZvcm0oKTtcblx0XHRpZiAoICF0aGlzLmZvcm0ubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbnN0YW5jZXMgPSB0aGlzLmZvcm0uZGF0YSggXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiICkgfHwgW107XG5cdFx0aWYgKCAhaW5zdGFuY2VzLmxlbmd0aCApIHtcblxuXHRcdFx0Ly8gV2UgZG9uJ3QgdXNlIF9vbigpIGhlcmUgYmVjYXVzZSB3ZSB1c2UgYSBzaW5nbGUgZXZlbnQgaGFuZGxlciBwZXIgZm9ybVxuXHRcdFx0dGhpcy5mb3JtLm9uKCBcInJlc2V0LnVpLWZvcm0tcmVzZXRcIiwgdGhpcy5fZm9ybVJlc2V0SGFuZGxlciApO1xuXHRcdH1cblx0XHRpbnN0YW5jZXMucHVzaCggdGhpcyApO1xuXHRcdHRoaXMuZm9ybS5kYXRhKCBcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIsIGluc3RhbmNlcyApO1xuXHR9LFxuXG5cdF91bmJpbmRGb3JtUmVzZXRIYW5kbGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzLmZvcm0ubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbnN0YW5jZXMgPSB0aGlzLmZvcm0uZGF0YSggXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiICk7XG5cdFx0aW5zdGFuY2VzLnNwbGljZSggJC5pbkFycmF5KCB0aGlzLCBpbnN0YW5jZXMgKSwgMSApO1xuXHRcdGlmICggaW5zdGFuY2VzLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuZm9ybS5kYXRhKCBcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIsIGluc3RhbmNlcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvcm1cblx0XHRcdFx0LnJlbW92ZURhdGEoIFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIiApXG5cdFx0XHRcdC5vZmYoIFwicmVzZXQudWktZm9ybS1yZXNldFwiICk7XG5cdFx0fVxuXHR9XG59O1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFN1cHBvcnQgZm9yIGpRdWVyeSBjb3JlIDEuNy54IDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICovXG5cbi8vPj5sYWJlbDogalF1ZXJ5IDEuNyBTdXBwb3J0XG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogU3VwcG9ydCB2ZXJzaW9uIDEuNy54IG9mIGpRdWVyeSBjb3JlXG5cblxuXG4vLyBTdXBwb3J0OiBqUXVlcnkgMS43IG9ubHlcbi8vIE5vdCBhIGdyZWF0IHdheSB0byBjaGVjayB2ZXJzaW9ucywgYnV0IHNpbmNlIHdlIG9ubHkgc3VwcG9ydCAxLjcrIGFuZCBvbmx5XG4vLyBuZWVkIHRvIGRldGVjdCA8MS44LCB0aGlzIGlzIGEgc2ltcGxlIGNoZWNrIHRoYXQgc2hvdWxkIHN1ZmZpY2UuIENoZWNraW5nXG4vLyBmb3IgXCIxLjcuXCIgd291bGQgYmUgYSBiaXQgc2FmZXIsIGJ1dCB0aGUgdmVyc2lvbiBzdHJpbmcgaXMgMS43LCBub3QgMS43LjBcbi8vIGFuZCB3ZSdsbCBuZXZlciByZWFjaCAxLjcwLjAgKGlmIHdlIGRvLCB3ZSBjZXJ0YWlubHkgd29uJ3QgYmUgc3VwcG9ydGluZ1xuLy8gMS43IGFueW1vcmUpLiBTZWUgIzExMTk3IGZvciB3aHkgd2UncmUgbm90IHVzaW5nIGZlYXR1cmUgZGV0ZWN0aW9uLlxuaWYgKCAkLmZuLmpxdWVyeS5zdWJzdHJpbmcoIDAsIDMgKSA9PT0gXCIxLjdcIiApIHtcblxuXHQvLyBTZXR0ZXJzIGZvciAuaW5uZXJXaWR0aCgpLCAuaW5uZXJIZWlnaHQoKSwgLm91dGVyV2lkdGgoKSwgLm91dGVySGVpZ2h0KClcblx0Ly8gVW5saWtlIGpRdWVyeSBDb3JlIDEuOCssIHRoZXNlIG9ubHkgc3VwcG9ydCBudW1lcmljIHZhbHVlcyB0byBzZXQgdGhlXG5cdC8vIGRpbWVuc2lvbnMgaW4gcGl4ZWxzXG5cdCQuZWFjaCggWyBcIldpZHRoXCIsIFwiSGVpZ2h0XCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdFx0dmFyIHNpZGUgPSBuYW1lID09PSBcIldpZHRoXCIgPyBbIFwiTGVmdFwiLCBcIlJpZ2h0XCIgXSA6IFsgXCJUb3BcIiwgXCJCb3R0b21cIiBdLFxuXHRcdFx0dHlwZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdG9yaWcgPSB7XG5cdFx0XHRcdGlubmVyV2lkdGg6ICQuZm4uaW5uZXJXaWR0aCxcblx0XHRcdFx0aW5uZXJIZWlnaHQ6ICQuZm4uaW5uZXJIZWlnaHQsXG5cdFx0XHRcdG91dGVyV2lkdGg6ICQuZm4ub3V0ZXJXaWR0aCxcblx0XHRcdFx0b3V0ZXJIZWlnaHQ6ICQuZm4ub3V0ZXJIZWlnaHRcblx0XHRcdH07XG5cblx0XHRmdW5jdGlvbiByZWR1Y2UoIGVsZW0sIHNpemUsIGJvcmRlciwgbWFyZ2luICkge1xuXHRcdFx0JC5lYWNoKCBzaWRlLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2l6ZSAtPSBwYXJzZUZsb2F0KCAkLmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyB0aGlzICkgKSB8fCAwO1xuXHRcdFx0XHRpZiAoIGJvcmRlciApIHtcblx0XHRcdFx0XHRzaXplIC09IHBhcnNlRmxvYXQoICQuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgdGhpcyArIFwiV2lkdGhcIiApICkgfHwgMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG1hcmdpbiApIHtcblx0XHRcdFx0XHRzaXplIC09IHBhcnNlRmxvYXQoICQuY3NzKCBlbGVtLCBcIm1hcmdpblwiICsgdGhpcyApICkgfHwgMDtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdFx0cmV0dXJuIHNpemU7XG5cdFx0fVxuXG5cdFx0JC5mblsgXCJpbm5lclwiICsgbmFtZSBdID0gZnVuY3Rpb24oIHNpemUgKSB7XG5cdFx0XHRpZiAoIHNpemUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIG9yaWdbIFwiaW5uZXJcIiArIG5hbWUgXS5jYWxsKCB0aGlzICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkuY3NzKCB0eXBlLCByZWR1Y2UoIHRoaXMsIHNpemUgKSArIFwicHhcIiApO1xuXHRcdFx0fSApO1xuXHRcdH07XG5cblx0XHQkLmZuWyBcIm91dGVyXCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggc2l6ZSwgbWFyZ2luICkge1xuXHRcdFx0aWYgKCB0eXBlb2Ygc2l6ZSAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cmV0dXJuIG9yaWdbIFwib3V0ZXJcIiArIG5hbWUgXS5jYWxsKCB0aGlzLCBzaXplICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkuY3NzKCB0eXBlLCByZWR1Y2UoIHRoaXMsIHNpemUsIHRydWUsIG1hcmdpbiApICsgXCJweFwiICk7XG5cdFx0XHR9ICk7XG5cdFx0fTtcblx0fSApO1xuXG5cdCQuZm4uYWRkQmFjayA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH07XG59XG5cbjtcbi8qIVxuICogalF1ZXJ5IFVJIEtleWNvZGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEtleWNvZGVcbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBQcm92aWRlIGtleWNvZGVzIGFzIGtleW5hbWVzXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20valF1ZXJ5LnVpLmtleUNvZGUvXG5cblxudmFyIGtleWNvZGUgPSAkLnVpLmtleUNvZGUgPSB7XG5cdEJBQ0tTUEFDRTogOCxcblx0Q09NTUE6IDE4OCxcblx0REVMRVRFOiA0Nixcblx0RE9XTjogNDAsXG5cdEVORDogMzUsXG5cdEVOVEVSOiAxMyxcblx0RVNDQVBFOiAyNyxcblx0SE9NRTogMzYsXG5cdExFRlQ6IDM3LFxuXHRQQUdFX0RPV046IDM0LFxuXHRQQUdFX1VQOiAzMyxcblx0UEVSSU9EOiAxOTAsXG5cdFJJR0hUOiAzOSxcblx0U1BBQ0U6IDMyLFxuXHRUQUI6IDksXG5cdFVQOiAzOFxufTtcblxuXG5cblxuLy8gSW50ZXJuYWwgdXNlIG9ubHlcbnZhciBlc2NhcGVTZWxlY3RvciA9ICQudWkuZXNjYXBlU2VsZWN0b3IgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VsZWN0b3JFc2NhcGUgPSAvKFshXCIjJCUmJygpKissLi86Ozw9Pj9AW1xcXV5ge3x9fl0pL2c7XG5cdHJldHVybiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yLnJlcGxhY2UoIHNlbGVjdG9yRXNjYXBlLCBcIlxcXFwkMVwiICk7XG5cdH07XG59ICkoKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBMYWJlbHMgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IGxhYmVsc1xuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IEZpbmQgYWxsIHRoZSBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaW5wdXRcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9sYWJlbHMvXG5cblxuXG52YXIgbGFiZWxzID0gJC5mbi5sYWJlbHMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGFuY2VzdG9yLCBzZWxlY3RvciwgaWQsIGxhYmVscywgYW5jZXN0b3JzO1xuXG5cdC8vIENoZWNrIGNvbnRyb2wubGFiZWxzIGZpcnN0XG5cdGlmICggdGhpc1sgMCBdLmxhYmVscyAmJiB0aGlzWyAwIF0ubGFiZWxzLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHRoaXNbIDAgXS5sYWJlbHMgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9IDExLCBGRiA8PSAzNywgQW5kcm9pZCA8PSAyLjMgb25seVxuXHQvLyBBYm92ZSBicm93c2VycyBkbyBub3Qgc3VwcG9ydCBjb250cm9sLmxhYmVscy4gRXZlcnl0aGluZyBiZWxvdyBpcyB0byBzdXBwb3J0IHRoZW1cblx0Ly8gYXMgd2VsbCBhcyBkb2N1bWVudCBmcmFnbWVudHMuIGNvbnRyb2wubGFiZWxzIGRvZXMgbm90IHdvcmsgb24gZG9jdW1lbnQgZnJhZ21lbnRzXG5cdGxhYmVscyA9IHRoaXMuZXEoIDAgKS5wYXJlbnRzKCBcImxhYmVsXCIgKTtcblxuXHQvLyBMb29rIGZvciB0aGUgbGFiZWwgYmFzZWQgb24gdGhlIGlkXG5cdGlkID0gdGhpcy5hdHRyKCBcImlkXCIgKTtcblx0aWYgKCBpZCApIHtcblxuXHRcdC8vIFdlIGRvbid0IHNlYXJjaCBhZ2FpbnN0IHRoZSBkb2N1bWVudCBpbiBjYXNlIHRoZSBlbGVtZW50XG5cdFx0Ly8gaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIERPTVxuXHRcdGFuY2VzdG9yID0gdGhpcy5lcSggMCApLnBhcmVudHMoKS5sYXN0KCk7XG5cblx0XHQvLyBHZXQgYSBmdWxsIHNldCBvZiB0b3AgbGV2ZWwgYW5jZXN0b3JzXG5cdFx0YW5jZXN0b3JzID0gYW5jZXN0b3IuYWRkKCBhbmNlc3Rvci5sZW5ndGggPyBhbmNlc3Rvci5zaWJsaW5ncygpIDogdGhpcy5zaWJsaW5ncygpICk7XG5cblx0XHQvLyBDcmVhdGUgYSBzZWxlY3RvciBmb3IgdGhlIGxhYmVsIGJhc2VkIG9uIHRoZSBpZFxuXHRcdHNlbGVjdG9yID0gXCJsYWJlbFtmb3I9J1wiICsgJC51aS5lc2NhcGVTZWxlY3RvciggaWQgKSArIFwiJ11cIjtcblxuXHRcdGxhYmVscyA9IGxhYmVscy5hZGQoIGFuY2VzdG9ycy5maW5kKCBzZWxlY3RvciApLmFkZEJhY2soIHNlbGVjdG9yICkgKTtcblxuXHR9XG5cblx0Ly8gUmV0dXJuIHdoYXRldmVyIHdlIGhhdmUgZm91bmQgZm9yIGxhYmVsc1xuXHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGxhYmVscyApO1xufTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBTY3JvbGwgUGFyZW50IDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBzY3JvbGxQYXJlbnRcbi8vPj5ncm91cDogQ29yZVxuLy8+PmRlc2NyaXB0aW9uOiBHZXQgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgZWxlbWVudCB0aGF0IGlzIHNjcm9sbGFibGUuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2Nyb2xsUGFyZW50L1xuXG5cblxudmFyIHNjcm9sbFBhcmVudCA9ICQuZm4uc2Nyb2xsUGFyZW50ID0gZnVuY3Rpb24oIGluY2x1ZGVIaWRkZW4gKSB7XG5cdHZhciBwb3NpdGlvbiA9IHRoaXMuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRleGNsdWRlU3RhdGljUGFyZW50ID0gcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblx0XHRvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS8sXG5cdFx0c2Nyb2xsUGFyZW50ID0gdGhpcy5wYXJlbnRzKCkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwYXJlbnQgPSAkKCB0aGlzICk7XG5cdFx0XHRpZiAoIGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgcGFyZW50LmNzcyggXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdmVyZmxvd1JlZ2V4LnRlc3QoIHBhcmVudC5jc3MoIFwib3ZlcmZsb3dcIiApICsgcGFyZW50LmNzcyggXCJvdmVyZmxvdy15XCIgKSArXG5cdFx0XHRcdHBhcmVudC5jc3MoIFwib3ZlcmZsb3cteFwiICkgKTtcblx0XHR9ICkuZXEoIDAgKTtcblxuXHRyZXR1cm4gcG9zaXRpb24gPT09IFwiZml4ZWRcIiB8fCAhc2Nyb2xsUGFyZW50Lmxlbmd0aCA/XG5cdFx0JCggdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSA6XG5cdFx0c2Nyb2xsUGFyZW50O1xufTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBUYWJiYWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogOnRhYmJhYmxlIFNlbGVjdG9yXG4vLz4+Z3JvdXA6IENvcmVcbi8vPj5kZXNjcmlwdGlvbjogU2VsZWN0cyBlbGVtZW50cyB3aGljaCBjYW4gYmUgdGFiYmVkIHRvLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3RhYmJhYmxlLXNlbGVjdG9yL1xuXG5cblxudmFyIHRhYmJhYmxlID0gJC5leHRlbmQoICQuZXhwclsgXCI6XCIgXSwge1xuXHR0YWJiYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0dmFyIHRhYkluZGV4ID0gJC5hdHRyKCBlbGVtZW50LCBcInRhYmluZGV4XCIgKSxcblx0XHRcdGhhc1RhYmluZGV4ID0gdGFiSW5kZXggIT0gbnVsbDtcblx0XHRyZXR1cm4gKCAhaGFzVGFiaW5kZXggfHwgdGFiSW5kZXggPj0gMCApICYmICQudWkuZm9jdXNhYmxlKCBlbGVtZW50LCBoYXNUYWJpbmRleCApO1xuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgVW5pcXVlIElEIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiB1bmlxdWVJZFxuLy8+Pmdyb3VwOiBDb3JlXG4vLz4+ZGVzY3JpcHRpb246IEZ1bmN0aW9ucyB0byBnZW5lcmF0ZSBhbmQgcmVtb3ZlIHVuaXF1ZUlkJ3Ncbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS91bmlxdWVJZC9cblxuXG5cbnZhciB1bmlxdWVJZCA9ICQuZm4uZXh0ZW5kKCB7XG5cdHVuaXF1ZUlkOiAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1dWlkID0gMDtcblxuXHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICF0aGlzLmlkICkge1xuXHRcdFx0XHRcdHRoaXMuaWQgPSBcInVpLWlkLVwiICsgKCArK3V1aWQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH07XG5cdH0gKSgpLFxuXG5cdHJlbW92ZVVuaXF1ZUlkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggL151aS1pZC1cXGQrJC8udGVzdCggdGhpcy5pZCApICkge1xuXHRcdFx0XHQkKCB0aGlzICkucmVtb3ZlQXR0ciggXCJpZFwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFRoaXMgZmlsZSBpcyBkZXByZWNhdGVkXG52YXIgaWUgPSAkLnVpLmllID0gISEvbXNpZSBbXFx3Ll0rLy5leGVjKCBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkgKTtcblxuLyohXG4gKiBqUXVlcnkgVUkgTW91c2UgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IE1vdXNlXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogQWJzdHJhY3RzIG1vdXNlLWJhc2VkIGludGVyYWN0aW9ucyB0byBhc3Npc3QgaW4gY3JlYXRpbmcgY2VydGFpbiB3aWRnZXRzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL21vdXNlL1xuXG5cblxudmFyIG1vdXNlSGFuZGxlZCA9IGZhbHNlO1xuJCggZG9jdW1lbnQgKS5vbiggXCJtb3VzZXVwXCIsIGZ1bmN0aW9uKCkge1xuXHRtb3VzZUhhbmRsZWQgPSBmYWxzZTtcbn0gKTtcblxudmFyIHdpZGdldHNNb3VzZSA9ICQud2lkZ2V0KCBcInVpLm1vdXNlXCIsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0b3B0aW9uczoge1xuXHRcdGNhbmNlbDogXCJpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbiwgc2VsZWN0LCBvcHRpb25cIixcblx0XHRkaXN0YW5jZTogMSxcblx0XHRkZWxheTogMFxuXHR9LFxuXHRfbW91c2VJbml0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5vbiggXCJtb3VzZWRvd24uXCIgKyB0aGlzLndpZGdldE5hbWUsIGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIHRoYXQuX21vdXNlRG93biggZXZlbnQgKTtcblx0XHRcdH0gKVxuXHRcdFx0Lm9uKCBcImNsaWNrLlwiICsgdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdHJ1ZSA9PT0gJC5kYXRhKCBldmVudC50YXJnZXQsIHRoYXQud2lkZ2V0TmFtZSArIFwiLnByZXZlbnRDbGlja0V2ZW50XCIgKSApIHtcblx0XHRcdFx0XHQkLnJlbW92ZURhdGEoIGV2ZW50LnRhcmdldCwgdGhhdC53aWRnZXROYW1lICsgXCIucHJldmVudENsaWNrRXZlbnRcIiApO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXG5cdFx0dGhpcy5zdGFydGVkID0gZmFsc2U7XG5cdH0sXG5cblx0Ly8gVE9ETzogbWFrZSBzdXJlIGRlc3Ryb3lpbmcgb25lIGluc3RhbmNlIG9mIG1vdXNlIGRvZXNuJ3QgbWVzcyB3aXRoXG5cdC8vIG90aGVyIGluc3RhbmNlcyBvZiBtb3VzZVxuXHRfbW91c2VEZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQub2ZmKCBcIi5cIiArIHRoaXMud2lkZ2V0TmFtZSApO1xuXHRcdGlmICggdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUgKSB7XG5cdFx0XHR0aGlzLmRvY3VtZW50XG5cdFx0XHRcdC5vZmYoIFwibW91c2Vtb3ZlLlwiICsgdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSApXG5cdFx0XHRcdC5vZmYoIFwibW91c2V1cC5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9tb3VzZURvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdC8vIGRvbid0IGxldCBtb3JlIHRoYW4gb25lIHdpZGdldCBoYW5kbGUgbW91c2VTdGFydFxuXHRcdGlmICggbW91c2VIYW5kbGVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX21vdXNlTW92ZWQgPSBmYWxzZTtcblxuXHRcdC8vIFdlIG1heSBoYXZlIG1pc3NlZCBtb3VzZXVwIChvdXQgb2Ygd2luZG93KVxuXHRcdCggdGhpcy5fbW91c2VTdGFydGVkICYmIHRoaXMuX21vdXNlVXAoIGV2ZW50ICkgKTtcblxuXHRcdHRoaXMuX21vdXNlRG93bkV2ZW50ID0gZXZlbnQ7XG5cblx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRidG5Jc0xlZnQgPSAoIGV2ZW50LndoaWNoID09PSAxICksXG5cblx0XHRcdC8vIGV2ZW50LnRhcmdldC5ub2RlTmFtZSB3b3JrcyBhcm91bmQgYSBidWcgaW4gSUUgOCB3aXRoXG5cdFx0XHQvLyBkaXNhYmxlZCBpbnB1dHMgKCM3NjIwKVxuXHRcdFx0ZWxJc0NhbmNlbCA9ICggdHlwZW9mIHRoaXMub3B0aW9ucy5jYW5jZWwgPT09IFwic3RyaW5nXCIgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lID9cblx0XHRcdFx0JCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggdGhpcy5vcHRpb25zLmNhbmNlbCApLmxlbmd0aCA6IGZhbHNlICk7XG5cdFx0aWYgKCAhYnRuSXNMZWZ0IHx8IGVsSXNDYW5jZWwgfHwgIXRoaXMuX21vdXNlQ2FwdHVyZSggZXZlbnQgKSApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHRoaXMubW91c2VEZWxheU1ldCA9ICF0aGlzLm9wdGlvbnMuZGVsYXk7XG5cdFx0aWYgKCAhdGhpcy5tb3VzZURlbGF5TWV0ICkge1xuXHRcdFx0dGhpcy5fbW91c2VEZWxheVRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoYXQubW91c2VEZWxheU1ldCA9IHRydWU7XG5cdFx0XHR9LCB0aGlzLm9wdGlvbnMuZGVsYXkgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoIGV2ZW50ICkgJiYgdGhpcy5fbW91c2VEZWxheU1ldCggZXZlbnQgKSApIHtcblx0XHRcdHRoaXMuX21vdXNlU3RhcnRlZCA9ICggdGhpcy5fbW91c2VTdGFydCggZXZlbnQgKSAhPT0gZmFsc2UgKTtcblx0XHRcdGlmICggIXRoaXMuX21vdXNlU3RhcnRlZCApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2xpY2sgZXZlbnQgbWF5IG5ldmVyIGhhdmUgZmlyZWQgKEdlY2tvICYgT3BlcmEpXG5cdFx0aWYgKCB0cnVlID09PSAkLmRhdGEoIGV2ZW50LnRhcmdldCwgdGhpcy53aWRnZXROYW1lICsgXCIucHJldmVudENsaWNrRXZlbnRcIiApICkge1xuXHRcdFx0JC5yZW1vdmVEYXRhKCBldmVudC50YXJnZXQsIHRoaXMud2lkZ2V0TmFtZSArIFwiLnByZXZlbnRDbGlja0V2ZW50XCIgKTtcblx0XHR9XG5cblx0XHQvLyBUaGVzZSBkZWxlZ2F0ZXMgYXJlIHJlcXVpcmVkIHRvIGtlZXAgY29udGV4dFxuXHRcdHRoaXMuX21vdXNlTW92ZURlbGVnYXRlID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIHRoYXQuX21vdXNlTW92ZSggZXZlbnQgKTtcblx0XHR9O1xuXHRcdHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHJldHVybiB0aGF0Ll9tb3VzZVVwKCBldmVudCApO1xuXHRcdH07XG5cblx0XHR0aGlzLmRvY3VtZW50XG5cdFx0XHQub24oIFwibW91c2Vtb3ZlLlwiICsgdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSApXG5cdFx0XHQub24oIFwibW91c2V1cC5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlICk7XG5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0bW91c2VIYW5kbGVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRfbW91c2VNb3ZlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHQvLyBPbmx5IGNoZWNrIGZvciBtb3VzZXVwcyBvdXRzaWRlIHRoZSBkb2N1bWVudCBpZiB5b3UndmUgbW92ZWQgaW5zaWRlIHRoZSBkb2N1bWVudFxuXHRcdC8vIGF0IGxlYXN0IG9uY2UuIFRoaXMgcHJldmVudHMgdGhlIGZpcmluZyBvZiBtb3VzZXVwIGluIHRoZSBjYXNlIG9mIElFPDksIHdoaWNoIHdpbGxcblx0XHQvLyBmaXJlIGEgbW91c2Vtb3ZlIGV2ZW50IGlmIGNvbnRlbnQgaXMgcGxhY2VkIHVuZGVyIHRoZSBjdXJzb3IuIFNlZSAjNzc3OFxuXHRcdC8vIFN1cHBvcnQ6IElFIDw5XG5cdFx0aWYgKCB0aGlzLl9tb3VzZU1vdmVkICkge1xuXG5cdFx0XHQvLyBJRSBtb3VzZXVwIGNoZWNrIC0gbW91c2V1cCBoYXBwZW5lZCB3aGVuIG1vdXNlIHdhcyBvdXQgb2Ygd2luZG93XG5cdFx0XHRpZiAoICQudWkuaWUgJiYgKCAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkgKSAmJlxuXHRcdFx0XHRcdCFldmVudC5idXR0b24gKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tb3VzZVVwKCBldmVudCApO1xuXG5cdFx0XHQvLyBJZnJhbWUgbW91c2V1cCBjaGVjayAtIG1vdXNldXAgb2NjdXJyZWQgaW4gYW5vdGhlciBkb2N1bWVudFxuXHRcdFx0fSBlbHNlIGlmICggIWV2ZW50LndoaWNoICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTggLSA5XG5cdFx0XHRcdC8vIFNhZmFyaSBzZXRzIHdoaWNoIHRvIDAgaWYgeW91IHByZXNzIGFueSBvZiB0aGUgZm9sbG93aW5nIGtleXNcblx0XHRcdFx0Ly8gZHVyaW5nIGEgZHJhZyAoIzE0NDYxKVxuXHRcdFx0XHRpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY3RybEtleSB8fFxuXHRcdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5tZXRhS2V5IHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgKSB7XG5cdFx0XHRcdFx0dGhpcy5pZ25vcmVNaXNzaW5nV2hpY2ggPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAhdGhpcy5pZ25vcmVNaXNzaW5nV2hpY2ggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuX21vdXNlVXAoIGV2ZW50ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGV2ZW50LndoaWNoIHx8IGV2ZW50LmJ1dHRvbiApIHtcblx0XHRcdHRoaXMuX21vdXNlTW92ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5fbW91c2VTdGFydGVkICkge1xuXHRcdFx0dGhpcy5fbW91c2VEcmFnKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9tb3VzZURpc3RhbmNlTWV0KCBldmVudCApICYmIHRoaXMuX21vdXNlRGVsYXlNZXQoIGV2ZW50ICkgKSB7XG5cdFx0XHR0aGlzLl9tb3VzZVN0YXJ0ZWQgPVxuXHRcdFx0XHQoIHRoaXMuX21vdXNlU3RhcnQoIHRoaXMuX21vdXNlRG93bkV2ZW50LCBldmVudCApICE9PSBmYWxzZSApO1xuXHRcdFx0KCB0aGlzLl9tb3VzZVN0YXJ0ZWQgPyB0aGlzLl9tb3VzZURyYWcoIGV2ZW50ICkgOiB0aGlzLl9tb3VzZVVwKCBldmVudCApICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICF0aGlzLl9tb3VzZVN0YXJ0ZWQ7XG5cdH0sXG5cblx0X21vdXNlVXA6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR0aGlzLmRvY3VtZW50XG5cdFx0XHQub2ZmKCBcIm1vdXNlbW92ZS5cIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUgKVxuXHRcdFx0Lm9mZiggXCJtb3VzZXVwLlwiICsgdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3VzZVVwRGVsZWdhdGUgKTtcblxuXHRcdGlmICggdGhpcy5fbW91c2VTdGFydGVkICkge1xuXHRcdFx0dGhpcy5fbW91c2VTdGFydGVkID0gZmFsc2U7XG5cblx0XHRcdGlmICggZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQgKSB7XG5cdFx0XHRcdCQuZGF0YSggZXZlbnQudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyBcIi5wcmV2ZW50Q2xpY2tFdmVudFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX21vdXNlU3RvcCggZXZlbnQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuX21vdXNlRGVsYXlUaW1lciApIHtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5fbW91c2VEZWxheVRpbWVyICk7XG5cdFx0XHRkZWxldGUgdGhpcy5fbW91c2VEZWxheVRpbWVyO1xuXHRcdH1cblxuXHRcdHRoaXMuaWdub3JlTWlzc2luZ1doaWNoID0gZmFsc2U7XG5cdFx0bW91c2VIYW5kbGVkID0gZmFsc2U7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fSxcblxuXHRfbW91c2VEaXN0YW5jZU1ldDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHJldHVybiAoIE1hdGgubWF4KFxuXHRcdFx0XHRNYXRoLmFicyggdGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVggLSBldmVudC5wYWdlWCApLFxuXHRcdFx0XHRNYXRoLmFicyggdGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVkgLSBldmVudC5wYWdlWSApXG5cdFx0XHQpID49IHRoaXMub3B0aW9ucy5kaXN0YW5jZVxuXHRcdCk7XG5cdH0sXG5cblx0X21vdXNlRGVsYXlNZXQ6IGZ1bmN0aW9uKCAvKiBldmVudCAqLyApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0O1xuXHR9LFxuXG5cdC8vIFRoZXNlIGFyZSBwbGFjZWhvbGRlciBtZXRob2RzLCB0byBiZSBvdmVycmlkZW4gYnkgZXh0ZW5kaW5nIHBsdWdpblxuXHRfbW91c2VTdGFydDogZnVuY3Rpb24oIC8qIGV2ZW50ICovICkge30sXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCAvKiBldmVudCAqLyApIHt9LFxuXHRfbW91c2VTdG9wOiBmdW5jdGlvbiggLyogZXZlbnQgKi8gKSB7fSxcblx0X21vdXNlQ2FwdHVyZTogZnVuY3Rpb24oIC8qIGV2ZW50ICovICkgeyByZXR1cm4gdHJ1ZTsgfVxufSApO1xuXG5cblxuXG4vLyAkLnVpLnBsdWdpbiBpcyBkZXByZWNhdGVkLiBVc2UgJC53aWRnZXQoKSBleHRlbnNpb25zIGluc3RlYWQuXG52YXIgcGx1Z2luID0gJC51aS5wbHVnaW4gPSB7XG5cdGFkZDogZnVuY3Rpb24oIG1vZHVsZSwgb3B0aW9uLCBzZXQgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRwcm90byA9ICQudWlbIG1vZHVsZSBdLnByb3RvdHlwZTtcblx0XHRmb3IgKCBpIGluIHNldCApIHtcblx0XHRcdHByb3RvLnBsdWdpbnNbIGkgXSA9IHByb3RvLnBsdWdpbnNbIGkgXSB8fCBbXTtcblx0XHRcdHByb3RvLnBsdWdpbnNbIGkgXS5wdXNoKCBbIG9wdGlvbiwgc2V0WyBpIF0gXSApO1xuXHRcdH1cblx0fSxcblx0Y2FsbDogZnVuY3Rpb24oIGluc3RhbmNlLCBuYW1lLCBhcmdzLCBhbGxvd0Rpc2Nvbm5lY3RlZCApIHtcblx0XHR2YXIgaSxcblx0XHRcdHNldCA9IGluc3RhbmNlLnBsdWdpbnNbIG5hbWUgXTtcblxuXHRcdGlmICggIXNldCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoICFhbGxvd0Rpc2Nvbm5lY3RlZCAmJiAoICFpbnN0YW5jZS5lbGVtZW50WyAwIF0ucGFyZW50Tm9kZSB8fFxuXHRcdFx0XHRpbnN0YW5jZS5lbGVtZW50WyAwIF0ucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTEgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGlmICggaW5zdGFuY2Uub3B0aW9uc1sgc2V0WyBpIF1bIDAgXSBdICkge1xuXHRcdFx0XHRzZXRbIGkgXVsgMSBdLmFwcGx5KCBpbnN0YW5jZS5lbGVtZW50LCBhcmdzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5cblxudmFyIHNhZmVBY3RpdmVFbGVtZW50ID0gJC51aS5zYWZlQWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uKCBkb2N1bWVudCApIHtcblx0dmFyIGFjdGl2ZUVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdC8vIElFOSB0aHJvd3MgYW4gXCJVbnNwZWNpZmllZCBlcnJvclwiIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGZyb20gYW4gPGlmcmFtZT5cblx0dHJ5IHtcblx0XHRhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgbWF5IHJldHVybiBudWxsIGluc3RlYWQgb2YgYW4gZWxlbWVudFxuXHQvLyBJbnRlcmVzdGluZ2x5LCB0aGlzIG9ubHkgc2VlbXMgdG8gb2NjdXIgd2hlbiBOT1QgaW4gYW4gaWZyYW1lXG5cdGlmICggIWFjdGl2ZUVsZW1lbnQgKSB7XG5cdFx0YWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdC8vIElFMTEgcmV0dXJucyBhIHNlZW1pbmdseSBlbXB0eSBvYmplY3QgaW4gc29tZSBjYXNlcyB3aGVuIGFjY2Vzc2luZ1xuXHQvLyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGZyb20gYW4gPGlmcmFtZT5cblx0aWYgKCAhYWN0aXZlRWxlbWVudC5ub2RlTmFtZSApIHtcblx0XHRhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcblx0fVxuXG5cdHJldHVybiBhY3RpdmVFbGVtZW50O1xufTtcblxuXG5cbnZhciBzYWZlQmx1ciA9ICQudWkuc2FmZUJsdXIgPSBmdW5jdGlvbiggZWxlbWVudCApIHtcblxuXHQvLyBTdXBwb3J0OiBJRTkgLSAxMCBvbmx5XG5cdC8vIElmIHRoZSA8Ym9keT4gaXMgYmx1cnJlZCwgSUUgd2lsbCBzd2l0Y2ggd2luZG93cywgc2VlICM5NDIwXG5cdGlmICggZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiYm9keVwiICkge1xuXHRcdCQoIGVsZW1lbnQgKS50cmlnZ2VyKCBcImJsdXJcIiApO1xuXHR9XG59O1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIERyYWdnYWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRHJhZ2dhYmxlXG4vLz4+Z3JvdXA6IEludGVyYWN0aW9uc1xuLy8+PmRlc2NyaXB0aW9uOiBFbmFibGVzIGRyYWdnaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGFueSBlbGVtZW50LlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2RyYWdnYWJsZS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kcmFnZ2FibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvZHJhZ2dhYmxlLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkuZHJhZ2dhYmxlXCIsICQudWkubW91c2UsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwiZHJhZ1wiLFxuXHRvcHRpb25zOiB7XG5cdFx0YWRkQ2xhc3NlczogdHJ1ZSxcblx0XHRhcHBlbmRUbzogXCJwYXJlbnRcIixcblx0XHRheGlzOiBmYWxzZSxcblx0XHRjb25uZWN0VG9Tb3J0YWJsZTogZmFsc2UsXG5cdFx0Y29udGFpbm1lbnQ6IGZhbHNlLFxuXHRcdGN1cnNvcjogXCJhdXRvXCIsXG5cdFx0Y3Vyc29yQXQ6IGZhbHNlLFxuXHRcdGdyaWQ6IGZhbHNlLFxuXHRcdGhhbmRsZTogZmFsc2UsXG5cdFx0aGVscGVyOiBcIm9yaWdpbmFsXCIsXG5cdFx0aWZyYW1lRml4OiBmYWxzZSxcblx0XHRvcGFjaXR5OiBmYWxzZSxcblx0XHRyZWZyZXNoUG9zaXRpb25zOiBmYWxzZSxcblx0XHRyZXZlcnQ6IGZhbHNlLFxuXHRcdHJldmVydER1cmF0aW9uOiA1MDAsXG5cdFx0c2NvcGU6IFwiZGVmYXVsdFwiLFxuXHRcdHNjcm9sbDogdHJ1ZSxcblx0XHRzY3JvbGxTZW5zaXRpdml0eTogMjAsXG5cdFx0c2Nyb2xsU3BlZWQ6IDIwLFxuXHRcdHNuYXA6IGZhbHNlLFxuXHRcdHNuYXBNb2RlOiBcImJvdGhcIixcblx0XHRzbmFwVG9sZXJhbmNlOiAyMCxcblx0XHRzdGFjazogZmFsc2UsXG5cdFx0ekluZGV4OiBmYWxzZSxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGRyYWc6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmhlbHBlciA9PT0gXCJvcmlnaW5hbFwiICkge1xuXHRcdFx0dGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktZHJhZ2dhYmxlXCIgKTtcblx0XHR9XG5cdFx0dGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCk7XG5cblx0XHR0aGlzLl9tb3VzZUluaXQoKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXHRcdGlmICgga2V5ID09PSBcImhhbmRsZVwiICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCk7XG5cdFx0XHR0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKTtcblx0XHR9XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggKCB0aGlzLmhlbHBlciB8fCB0aGlzLmVsZW1lbnQgKS5pcyggXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIgKSApIHtcblx0XHRcdHRoaXMuZGVzdHJveU9uQ2xlYXIgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKTtcblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblx0fSxcblxuXHRfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHQvLyBBbW9uZyBvdGhlcnMsIHByZXZlbnQgYSBkcmFnIG9uIGEgcmVzaXphYmxlLWhhbmRsZVxuXHRcdGlmICggdGhpcy5oZWxwZXIgfHwgby5kaXNhYmxlZCB8fFxuXHRcdFx0XHQkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1yZXNpemFibGUtaGFuZGxlXCIgKS5sZW5ndGggPiAwICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vUXVpdCBpZiB3ZSdyZSBub3Qgb24gYSB2YWxpZCBoYW5kbGVcblx0XHR0aGlzLmhhbmRsZSA9IHRoaXMuX2dldEhhbmRsZSggZXZlbnQgKTtcblx0XHRpZiAoICF0aGlzLmhhbmRsZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLl9ibHVyQWN0aXZlRWxlbWVudCggZXZlbnQgKTtcblxuXHRcdHRoaXMuX2Jsb2NrRnJhbWVzKCBvLmlmcmFtZUZpeCA9PT0gdHJ1ZSA/IFwiaWZyYW1lXCIgOiBvLmlmcmFtZUZpeCApO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fSxcblxuXHRfYmxvY2tGcmFtZXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLmlmcmFtZUJsb2NrcyA9IHRoaXMuZG9jdW1lbnQuZmluZCggc2VsZWN0b3IgKS5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGlmcmFtZSA9ICQoIHRoaXMgKTtcblxuXHRcdFx0cmV0dXJuICQoIFwiPGRpdj5cIiApXG5cdFx0XHRcdC5jc3MoIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiIClcblx0XHRcdFx0LmFwcGVuZFRvKCBpZnJhbWUucGFyZW50KCkgKVxuXHRcdFx0XHQub3V0ZXJXaWR0aCggaWZyYW1lLm91dGVyV2lkdGgoKSApXG5cdFx0XHRcdC5vdXRlckhlaWdodCggaWZyYW1lLm91dGVySGVpZ2h0KCkgKVxuXHRcdFx0XHQub2Zmc2V0KCBpZnJhbWUub2Zmc2V0KCkgKVsgMCBdO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfdW5ibG9ja0ZyYW1lczogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLmlmcmFtZUJsb2NrcyApIHtcblx0XHRcdHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpO1xuXHRcdFx0ZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzO1xuXHRcdH1cblx0fSxcblxuXHRfYmx1ckFjdGl2ZUVsZW1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYWN0aXZlRWxlbWVudCA9ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApLFxuXHRcdFx0dGFyZ2V0ID0gJCggZXZlbnQudGFyZ2V0ICk7XG5cblx0XHQvLyBEb24ndCBibHVyIGlmIHRoZSBldmVudCBvY2N1cnJlZCBvbiBhbiBlbGVtZW50IHRoYXQgaXMgd2l0aGluXG5cdFx0Ly8gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcblx0XHQvLyBTZWUgIzEwNTI3LCAjMTI0NzJcblx0XHRpZiAoIHRhcmdldC5jbG9zZXN0KCBhY3RpdmVFbGVtZW50ICkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEJsdXIgYW55IGVsZW1lbnQgdGhhdCBjdXJyZW50bHkgaGFzIGZvY3VzLCBzZWUgIzQyNjFcblx0XHQkLnVpLnNhZmVCbHVyKCBhY3RpdmVFbGVtZW50ICk7XG5cdH0sXG5cblx0X21vdXNlU3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBvID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0Ly9DcmVhdGUgYW5kIGFwcGVuZCB0aGUgdmlzaWJsZSBoZWxwZXJcblx0XHR0aGlzLmhlbHBlciA9IHRoaXMuX2NyZWF0ZUhlbHBlciggZXZlbnQgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlbHBlciwgXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiApO1xuXG5cdFx0Ly9DYWNoZSB0aGUgaGVscGVyIHNpemVcblx0XHR0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7XG5cblx0XHQvL0lmIGRkbWFuYWdlciBpcyB1c2VkIGZvciBkcm9wcGFibGVzLCBzZXQgdGhlIGdsb2JhbCBkcmFnZ2FibGVcblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXM7XG5cdFx0fVxuXG5cdFx0Lypcblx0XHQgKiAtIFBvc2l0aW9uIGdlbmVyYXRpb24gLVxuXHRcdCAqIFRoaXMgYmxvY2sgZ2VuZXJhdGVzIGV2ZXJ5dGhpbmcgcG9zaXRpb24gcmVsYXRlZCAtIGl0J3MgdGhlIGNvcmUgb2YgZHJhZ2dhYmxlcy5cblx0XHQgKi9cblxuXHRcdC8vQ2FjaGUgdGhlIG1hcmdpbnMgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnRcblx0XHR0aGlzLl9jYWNoZU1hcmdpbnMoKTtcblxuXHRcdC8vU3RvcmUgdGhlIGhlbHBlcidzIGNzcyBwb3NpdGlvblxuXHRcdHRoaXMuY3NzUG9zaXRpb24gPSB0aGlzLmhlbHBlci5jc3MoIFwicG9zaXRpb25cIiApO1xuXHRcdHRoaXMuc2Nyb2xsUGFyZW50ID0gdGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCB0cnVlICk7XG5cdFx0dGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTtcblx0XHR0aGlzLmhhc0ZpeGVkQW5jZXN0b3IgPSB0aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5jc3MoIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCI7XG5cdFx0XHR9ICkubGVuZ3RoID4gMDtcblxuXHRcdC8vVGhlIGVsZW1lbnQncyBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBtaW51cyBtYXJnaW5zXG5cdFx0dGhpcy5wb3NpdGlvbkFicyA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcblx0XHR0aGlzLl9yZWZyZXNoT2Zmc2V0cyggZXZlbnQgKTtcblxuXHRcdC8vR2VuZXJhdGUgdGhlIG9yaWdpbmFsIHBvc2l0aW9uXG5cdFx0dGhpcy5vcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oIGV2ZW50LCBmYWxzZSApO1xuXHRcdHRoaXMub3JpZ2luYWxQYWdlWCA9IGV2ZW50LnBhZ2VYO1xuXHRcdHRoaXMub3JpZ2luYWxQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuXG5cdFx0Ly9BZGp1c3QgdGhlIG1vdXNlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgaGVscGVyIGlmIFwiY3Vyc29yQXRcIiBpcyBzdXBwbGllZFxuXHRcdCggby5jdXJzb3JBdCAmJiB0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKCBvLmN1cnNvckF0ICkgKTtcblxuXHRcdC8vU2V0IGEgY29udGFpbm1lbnQgaWYgZ2l2ZW4gaW4gdGhlIG9wdGlvbnNcblx0XHR0aGlzLl9zZXRDb250YWlubWVudCgpO1xuXG5cdFx0Ly9UcmlnZ2VyIGV2ZW50ICsgY2FsbGJhY2tzXG5cdFx0aWYgKCB0aGlzLl90cmlnZ2VyKCBcInN0YXJ0XCIsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5fY2xlYXIoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvL1JlY2FjaGUgdGhlIGhlbHBlciBzaXplXG5cdFx0dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpO1xuXG5cdFx0Ly9QcmVwYXJlIHRoZSBkcm9wcGFibGUgb2Zmc2V0c1xuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgJiYgIW8uZHJvcEJlaGF2aW91ciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdC8vIEV4ZWN1dGUgdGhlIGRyYWcgb25jZSAtIHRoaXMgY2F1c2VzIHRoZSBoZWxwZXIgbm90IHRvIGJlIHZpc2libGUgYmVmb3JlIGdldHRpbmcgaXRzXG5cdFx0Ly8gY29ycmVjdCBwb3NpdGlvblxuXHRcdHRoaXMuX21vdXNlRHJhZyggZXZlbnQsIHRydWUgKTtcblxuXHRcdC8vIElmIHRoZSBkZG1hbmFnZXIgaXMgdXNlZCBmb3IgZHJvcHBhYmxlcywgaW5mb3JtIHRoZSBtYW5hZ2VyIHRoYXQgZHJhZ2dpbmcgaGFzIHN0YXJ0ZWRcblx0XHQvLyAoc2VlICM1MDAzKVxuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgKSB7XG5cdFx0XHQkLnVpLmRkbWFuYWdlci5kcmFnU3RhcnQoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X3JlZnJlc2hPZmZzZXRzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5vZmZzZXQgPSB7XG5cdFx0XHR0b3A6IHRoaXMucG9zaXRpb25BYnMudG9wIC0gdGhpcy5tYXJnaW5zLnRvcCxcblx0XHRcdGxlZnQ6IHRoaXMucG9zaXRpb25BYnMubGVmdCAtIHRoaXMubWFyZ2lucy5sZWZ0LFxuXHRcdFx0c2Nyb2xsOiBmYWxzZSxcblx0XHRcdHBhcmVudDogdGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCksXG5cdFx0XHRyZWxhdGl2ZTogdGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKVxuXHRcdH07XG5cblx0XHR0aGlzLm9mZnNldC5jbGljayA9IHtcblx0XHRcdGxlZnQ6IGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQubGVmdCxcblx0XHRcdHRvcDogZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC50b3Bcblx0XHR9O1xuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCwgbm9Qcm9wYWdhdGlvbiApIHtcblxuXHRcdC8vIHJlc2V0IGFueSBuZWNlc3NhcnkgY2FjaGVkIHByb3BlcnRpZXMgKHNlZSAjNTAwOSlcblx0XHRpZiAoIHRoaXMuaGFzRml4ZWRBbmNlc3RvciApIHtcblx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudCA9IHRoaXMuX2dldFBhcmVudE9mZnNldCgpO1xuXHRcdH1cblxuXHRcdC8vQ29tcHV0ZSB0aGUgaGVscGVycyBwb3NpdGlvblxuXHRcdHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKCBldmVudCwgdHJ1ZSApO1xuXHRcdHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbyggXCJhYnNvbHV0ZVwiICk7XG5cblx0XHQvL0NhbGwgcGx1Z2lucyBhbmQgY2FsbGJhY2tzIGFuZCB1c2UgdGhlIHJlc3VsdGluZyBwb3NpdGlvbiBpZiBzb21ldGhpbmcgaXMgcmV0dXJuZWRcblx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0dmFyIHVpID0gdGhpcy5fdWlIYXNoKCk7XG5cdFx0XHRpZiAoIHRoaXMuX3RyaWdnZXIoIFwiZHJhZ1wiLCBldmVudCwgdWkgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHRoaXMuX21vdXNlVXAoIG5ldyAkLkV2ZW50KCBcIm1vdXNldXBcIiwgZXZlbnQgKSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnBvc2l0aW9uID0gdWkucG9zaXRpb247XG5cdFx0fVxuXG5cdFx0dGhpcy5oZWxwZXJbIDAgXS5zdHlsZS5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgXCJweFwiO1xuXHRcdHRoaXMuaGVscGVyWyAwIF0uc3R5bGUudG9wID0gdGhpcy5wb3NpdGlvbi50b3AgKyBcInB4XCI7XG5cblx0XHRpZiAoICQudWkuZGRtYW5hZ2VyICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIuZHJhZyggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly9JZiB3ZSBhcmUgdXNpbmcgZHJvcHBhYmxlcywgaW5mb3JtIHRoZSBtYW5hZ2VyIGFib3V0IHRoZSBkcm9wXG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0ZHJvcHBlZCA9IGZhbHNlO1xuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgJiYgIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyICkge1xuXHRcdFx0ZHJvcHBlZCA9ICQudWkuZGRtYW5hZ2VyLmRyb3AoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly9pZiBhIGRyb3AgY29tZXMgZnJvbSBvdXRzaWRlIChhIHNvcnRhYmxlKVxuXHRcdGlmICggdGhpcy5kcm9wcGVkICkge1xuXHRcdFx0ZHJvcHBlZCA9IHRoaXMuZHJvcHBlZDtcblx0XHRcdHRoaXMuZHJvcHBlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICggKCB0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSBcImludmFsaWRcIiAmJiAhZHJvcHBlZCApIHx8XG5cdFx0XHRcdCggdGhpcy5vcHRpb25zLnJldmVydCA9PT0gXCJ2YWxpZFwiICYmIGRyb3BwZWQgKSB8fFxuXHRcdFx0XHR0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSB0cnVlIHx8ICggJC5pc0Z1bmN0aW9uKCB0aGlzLm9wdGlvbnMucmV2ZXJ0ICkgJiZcblx0XHRcdFx0dGhpcy5vcHRpb25zLnJldmVydC5jYWxsKCB0aGlzLmVsZW1lbnQsIGRyb3BwZWQgKSApXG5cdFx0KSB7XG5cdFx0XHQkKCB0aGlzLmhlbHBlciApLmFuaW1hdGUoXG5cdFx0XHRcdHRoaXMub3JpZ2luYWxQb3NpdGlvbixcblx0XHRcdFx0cGFyc2VJbnQoIHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwgMTAgKSxcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGF0Ll90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKSAhPT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9jbGVhcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCB0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKSAhPT0gZmFsc2UgKSB7XG5cdFx0XHRcdHRoaXMuX2NsZWFyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdF9tb3VzZVVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5fdW5ibG9ja0ZyYW1lcygpO1xuXG5cdFx0Ly8gSWYgdGhlIGRkbWFuYWdlciBpcyB1c2VkIGZvciBkcm9wcGFibGVzLCBpbmZvcm0gdGhlIG1hbmFnZXIgdGhhdCBkcmFnZ2luZyBoYXMgc3RvcHBlZFxuXHRcdC8vIChzZWUgIzUwMDMpXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdC8vIE9ubHkgbmVlZCB0byBmb2N1cyBpZiB0aGUgZXZlbnQgb2NjdXJyZWQgb24gdGhlIGRyYWdnYWJsZSBpdHNlbGYsIHNlZSAjMTA1Mjdcblx0XHRpZiAoIHRoaXMuaGFuZGxlRWxlbWVudC5pcyggZXZlbnQudGFyZ2V0ICkgKSB7XG5cblx0XHRcdC8vIFRoZSBpbnRlcmFjdGlvbiBpcyBvdmVyOyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpY2sgcmVzdWx0ZWQgaW4gYSBkcmFnLFxuXHRcdFx0Ly8gZm9jdXMgdGhlIGVsZW1lbnRcblx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJC51aS5tb3VzZS5wcm90b3R5cGUuX21vdXNlVXAuY2FsbCggdGhpcywgZXZlbnQgKTtcblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYgKCB0aGlzLmhlbHBlci5pcyggXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIgKSApIHtcblx0XHRcdHRoaXMuX21vdXNlVXAoIG5ldyAkLkV2ZW50KCBcIm1vdXNldXBcIiwgeyB0YXJnZXQ6IHRoaXMuZWxlbWVudFsgMCBdIH0gKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jbGVhcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0X2dldEhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuaGFuZGxlID9cblx0XHRcdCEhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggdGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5oYW5kbGUgKSApLmxlbmd0aCA6XG5cdFx0XHR0cnVlO1xuXHR9LFxuXG5cdF9zZXRIYW5kbGVDbGFzc05hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGFuZGxlRWxlbWVudCA9IHRoaXMub3B0aW9ucy5oYW5kbGUgP1xuXHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5oYW5kbGUgKSA6IHRoaXMuZWxlbWVudDtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5oYW5kbGVFbGVtZW50LCBcInVpLWRyYWdnYWJsZS1oYW5kbGVcIiApO1xuXHR9LFxuXG5cdF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmhhbmRsZUVsZW1lbnQsIFwidWktZHJhZ2dhYmxlLWhhbmRsZVwiICk7XG5cdH0sXG5cblx0X2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRoZWxwZXJJc0Z1bmN0aW9uID0gJC5pc0Z1bmN0aW9uKCBvLmhlbHBlciApLFxuXHRcdFx0aGVscGVyID0gaGVscGVySXNGdW5jdGlvbiA/XG5cdFx0XHRcdCQoIG8uaGVscGVyLmFwcGx5KCB0aGlzLmVsZW1lbnRbIDAgXSwgWyBldmVudCBdICkgKSA6XG5cdFx0XHRcdCggby5oZWxwZXIgPT09IFwiY2xvbmVcIiA/XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0ciggXCJpZFwiICkgOlxuXHRcdFx0XHRcdHRoaXMuZWxlbWVudCApO1xuXG5cdFx0aWYgKCAhaGVscGVyLnBhcmVudHMoIFwiYm9keVwiICkubGVuZ3RoICkge1xuXHRcdFx0aGVscGVyLmFwcGVuZFRvKCAoIG8uYXBwZW5kVG8gPT09IFwicGFyZW50XCIgP1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5wYXJlbnROb2RlIDpcblx0XHRcdFx0by5hcHBlbmRUbyApICk7XG5cdFx0fVxuXG5cdFx0Ly8gSHR0cDovL2J1Z3MuanF1ZXJ5dWkuY29tL3RpY2tldC85NDQ2XG5cdFx0Ly8gYSBoZWxwZXIgZnVuY3Rpb24gY2FuIHJldHVybiB0aGUgb3JpZ2luYWwgZWxlbWVudFxuXHRcdC8vIHdoaWNoIHdvdWxkbid0IGhhdmUgYmVlbiBzZXQgdG8gcmVsYXRpdmUgaW4gX2NyZWF0ZVxuXHRcdGlmICggaGVscGVySXNGdW5jdGlvbiAmJiBoZWxwZXJbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHR0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBoZWxwZXJbIDAgXSAhPT0gdGhpcy5lbGVtZW50WyAwIF0gJiZcblx0XHRcdFx0ISggLyhmaXhlZHxhYnNvbHV0ZSkvICkudGVzdCggaGVscGVyLmNzcyggXCJwb3NpdGlvblwiICkgKSApIHtcblx0XHRcdGhlbHBlci5jc3MoIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhlbHBlcjtcblxuXHR9LFxuXG5cdF9zZXRQb3NpdGlvblJlbGF0aXZlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEoIC9eKD86cnxhfGYpLyApLnRlc3QoIHRoaXMuZWxlbWVudC5jc3MoIFwicG9zaXRpb25cIiApICkgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cdH0sXG5cblx0X2FkanVzdE9mZnNldEZyb21IZWxwZXI6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gb2JqLnNwbGl0KCBcIiBcIiApO1xuXHRcdH1cblx0XHRpZiAoICQuaXNBcnJheSggb2JqICkgKSB7XG5cdFx0XHRvYmogPSB7IGxlZnQ6ICtvYmpbIDAgXSwgdG9wOiArb2JqWyAxIF0gfHwgMCB9O1xuXHRcdH1cblx0XHRpZiAoIFwibGVmdFwiIGluIG9iaiApIHtcblx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPSBvYmoubGVmdCArIHRoaXMubWFyZ2lucy5sZWZ0O1xuXHRcdH1cblx0XHRpZiAoIFwicmlnaHRcIiBpbiBvYmogKSB7XG5cdFx0XHR0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIG9iai5yaWdodCArIHRoaXMubWFyZ2lucy5sZWZ0O1xuXHRcdH1cblx0XHRpZiAoIFwidG9wXCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sudG9wID0gb2JqLnRvcCArIHRoaXMubWFyZ2lucy50b3A7XG5cdFx0fVxuXHRcdGlmICggXCJib3R0b21cIiBpbiBvYmogKSB7XG5cdFx0XHR0aGlzLm9mZnNldC5jbGljay50b3AgPSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIG9iai5ib3R0b20gKyB0aGlzLm1hcmdpbnMudG9wO1xuXHRcdH1cblx0fSxcblxuXHRfaXNSb290Tm9kZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuICggLyhodG1sfGJvZHkpL2kgKS50ZXN0KCBlbGVtZW50LnRhZ05hbWUgKSB8fCBlbGVtZW50ID09PSB0aGlzLmRvY3VtZW50WyAwIF07XG5cdH0sXG5cblx0X2dldFBhcmVudE9mZnNldDogZnVuY3Rpb24oKSB7XG5cblx0XHQvL0dldCB0aGUgb2Zmc2V0UGFyZW50IGFuZCBjYWNoZSBpdHMgcG9zaXRpb25cblx0XHR2YXIgcG8gPSB0aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKSxcblx0XHRcdGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFsgMCBdO1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1vZGlmeSBhIG9mZnNldCBjYWxjdWxhdGVkIG9uIHN0YXJ0LCBzaW5jZSB0aGVcblx0XHQvLyBmb2xsb3dpbmcgaGFwcGVuZWQ6XG5cdFx0Ly8gMS4gVGhlIHBvc2l0aW9uIG9mIHRoZSBoZWxwZXIgaXMgYWJzb2x1dGUsIHNvIGl0J3MgcG9zaXRpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGVcblx0XHQvLyBuZXh0IHBvc2l0aW9uZWQgcGFyZW50XG5cdFx0Ly8gMi4gVGhlIGFjdHVhbCBvZmZzZXQgcGFyZW50IGlzIGEgY2hpbGQgb2YgdGhlIHNjcm9sbCBwYXJlbnQsIGFuZCB0aGUgc2Nyb2xsIHBhcmVudCBpc24ndFxuXHRcdC8vIHRoZSBkb2N1bWVudCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc2Nyb2xsIGlzIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIG9mIHRoZVxuXHRcdC8vIG9mZnNldCBvZiB0aGUgcGFyZW50LCBhbmQgbmV2ZXIgcmVjYWxjdWxhdGVkIHVwb24gZHJhZ1xuXHRcdGlmICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiICYmIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gIT09IGRvY3VtZW50ICYmXG5cdFx0XHRcdCQuY29udGFpbnMoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0sIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gKSApIHtcblx0XHRcdHBvLmxlZnQgKz0gdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpO1xuXHRcdFx0cG8udG9wICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5faXNSb290Tm9kZSggdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSApICkge1xuXHRcdFx0cG8gPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHBvLnRvcCArICggcGFyc2VJbnQoIHRoaXMub2Zmc2V0UGFyZW50LmNzcyggXCJib3JkZXJUb3BXaWR0aFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0bGVmdDogcG8ubGVmdCArICggcGFyc2VJbnQoIHRoaXMub2Zmc2V0UGFyZW50LmNzcyggXCJib3JkZXJMZWZ0V2lkdGhcIiApLCAxMCApIHx8IDAgKVxuXHRcdH07XG5cblx0fSxcblxuXHRfZ2V0UmVsYXRpdmVPZmZzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5jc3NQb3NpdGlvbiAhPT0gXCJyZWxhdGl2ZVwiICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0dmFyIHAgPSB0aGlzLmVsZW1lbnQucG9zaXRpb24oKSxcblx0XHRcdHNjcm9sbElzUm9vdE5vZGUgPSB0aGlzLl9pc1Jvb3ROb2RlKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBwLnRvcCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJ0b3BcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdCggIXNjcm9sbElzUm9vdE5vZGUgPyB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSA6IDAgKSxcblx0XHRcdGxlZnQ6IHAubGVmdCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJsZWZ0XCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHQoICFzY3JvbGxJc1Jvb3ROb2RlID8gdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIDogMCApXG5cdFx0fTtcblxuXHR9LFxuXG5cdF9jYWNoZU1hcmdpbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubWFyZ2lucyA9IHtcblx0XHRcdGxlZnQ6ICggcGFyc2VJbnQoIHRoaXMuZWxlbWVudC5jc3MoIFwibWFyZ2luTGVmdFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0dG9wOiAoIHBhcnNlSW50KCB0aGlzLmVsZW1lbnQuY3NzKCBcIm1hcmdpblRvcFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0cmlnaHQ6ICggcGFyc2VJbnQoIHRoaXMuZWxlbWVudC5jc3MoIFwibWFyZ2luUmlnaHRcIiApLCAxMCApIHx8IDAgKSxcblx0XHRcdGJvdHRvbTogKCBwYXJzZUludCggdGhpcy5lbGVtZW50LmNzcyggXCJtYXJnaW5Cb3R0b21cIiApLCAxMCApIHx8IDAgKVxuXHRcdH07XG5cdH0sXG5cblx0X2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpXG5cdFx0fTtcblx0fSxcblxuXHRfc2V0Q29udGFpbm1lbnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIGlzVXNlclNjcm9sbGFibGUsIGMsIGNlLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFsgMCBdO1xuXG5cdFx0dGhpcy5yZWxhdGl2ZUNvbnRhaW5lciA9IG51bGw7XG5cblx0XHRpZiAoICFvLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0dGhpcy5jb250YWlubWVudCA9IG51bGw7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcIndpbmRvd1wiICkge1xuXHRcdFx0dGhpcy5jb250YWlubWVudCA9IFtcblx0XHRcdFx0JCggd2luZG93ICkuc2Nyb2xsTGVmdCgpIC0gdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LFxuXHRcdFx0XHQkKCB3aW5kb3cgKS5zY3JvbGxUb3AoKSAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AsXG5cdFx0XHRcdCQoIHdpbmRvdyApLnNjcm9sbExlZnQoKSArICQoIHdpbmRvdyApLndpZHRoKCkgLVxuXHRcdFx0XHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCxcblx0XHRcdFx0JCggd2luZG93ICkuc2Nyb2xsVG9wKCkgK1xuXHRcdFx0XHRcdCggJCggd2luZG93ICkuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCApIC1cblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3Bcblx0XHRcdF07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgKSB7XG5cdFx0XHR0aGlzLmNvbnRhaW5tZW50ID0gW1xuXHRcdFx0XHQwLFxuXHRcdFx0XHQwLFxuXHRcdFx0XHQkKCBkb2N1bWVudCApLndpZHRoKCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsXG5cdFx0XHRcdCggJCggZG9jdW1lbnQgKS5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0ICkgLVxuXHRcdFx0XHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcFxuXHRcdFx0XTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG8uY29udGFpbm1lbnQuY29uc3RydWN0b3IgPT09IEFycmF5ICkge1xuXHRcdFx0dGhpcy5jb250YWlubWVudCA9IG8uY29udGFpbm1lbnQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcInBhcmVudFwiICkge1xuXHRcdFx0by5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWyAwIF0ucGFyZW50Tm9kZTtcblx0XHR9XG5cblx0XHRjID0gJCggby5jb250YWlubWVudCApO1xuXHRcdGNlID0gY1sgMCBdO1xuXG5cdFx0aWYgKCAhY2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aXNVc2VyU2Nyb2xsYWJsZSA9IC8oc2Nyb2xsfGF1dG8pLy50ZXN0KCBjLmNzcyggXCJvdmVyZmxvd1wiICkgKTtcblxuXHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJib3JkZXJMZWZ0V2lkdGhcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdCggcGFyc2VJbnQoIGMuY3NzKCBcInBhZGRpbmdMZWZ0XCIgKSwgMTAgKSB8fCAwICksXG5cdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJib3JkZXJUb3BXaWR0aFwiICksIDEwICkgfHwgMCApICtcblx0XHRcdFx0KCBwYXJzZUludCggYy5jc3MoIFwicGFkZGluZ1RvcFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0KCBpc1VzZXJTY3JvbGxhYmxlID8gTWF0aC5tYXgoIGNlLnNjcm9sbFdpZHRoLCBjZS5vZmZzZXRXaWR0aCApIDogY2Uub2Zmc2V0V2lkdGggKSAtXG5cdFx0XHRcdCggcGFyc2VJbnQoIGMuY3NzKCBcImJvcmRlclJpZ2h0V2lkdGhcIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdCggcGFyc2VJbnQoIGMuY3NzKCBcInBhZGRpbmdSaWdodFwiICksIDEwICkgfHwgMCApIC1cblx0XHRcdFx0dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtXG5cdFx0XHRcdHRoaXMubWFyZ2lucy5sZWZ0IC1cblx0XHRcdFx0dGhpcy5tYXJnaW5zLnJpZ2h0LFxuXHRcdFx0KCBpc1VzZXJTY3JvbGxhYmxlID8gTWF0aC5tYXgoIGNlLnNjcm9sbEhlaWdodCwgY2Uub2Zmc2V0SGVpZ2h0ICkgOiBjZS5vZmZzZXRIZWlnaHQgKSAtXG5cdFx0XHRcdCggcGFyc2VJbnQoIGMuY3NzKCBcImJvcmRlckJvdHRvbVdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHQoIHBhcnNlSW50KCBjLmNzcyggXCJwYWRkaW5nQm90dG9tXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtXG5cdFx0XHRcdHRoaXMubWFyZ2lucy50b3AgLVxuXHRcdFx0XHR0aGlzLm1hcmdpbnMuYm90dG9tXG5cdFx0XTtcblx0XHR0aGlzLnJlbGF0aXZlQ29udGFpbmVyID0gYztcblx0fSxcblxuXHRfY29udmVydFBvc2l0aW9uVG86IGZ1bmN0aW9uKCBkLCBwb3MgKSB7XG5cblx0XHRpZiAoICFwb3MgKSB7XG5cdFx0XHRwb3MgPSB0aGlzLnBvc2l0aW9uO1xuXHRcdH1cblxuXHRcdHZhciBtb2QgPSBkID09PSBcImFic29sdXRlXCIgPyAxIDogLTEsXG5cdFx0XHRzY3JvbGxJc1Jvb3ROb2RlID0gdGhpcy5faXNSb290Tm9kZSggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSApO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogKFxuXG5cdFx0XHRcdC8vIFRoZSBhYnNvbHV0ZSBtb3VzZSBwb3NpdGlvblxuXHRcdFx0XHRwb3MudG9wXHQrXG5cblx0XHRcdFx0Ly8gT25seSBmb3IgcmVsYXRpdmUgcG9zaXRpb25lZCBub2RlczogUmVsYXRpdmUgb2Zmc2V0IGZyb20gZWxlbWVudCB0byBvZmZzZXQgcGFyZW50XG5cdFx0XHRcdHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAqIG1vZCArXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LnRvcCAqIG1vZCAtXG5cdFx0XHRcdCggKCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLm9mZnNldC5zY3JvbGwudG9wIDpcblx0XHRcdFx0XHQoIHNjcm9sbElzUm9vdE5vZGUgPyAwIDogdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCApICkgKiBtb2QgKVxuXHRcdFx0KSxcblx0XHRcdGxlZnQ6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cG9zLmxlZnQgK1xuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0ICogbW9kICtcblxuXHRcdFx0XHQvLyBUaGUgb2Zmc2V0UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKVxuXHRcdFx0XHR0aGlzLm9mZnNldC5wYXJlbnQubGVmdCAqIG1vZFx0LVxuXHRcdFx0XHQoICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJmaXhlZFwiID9cblx0XHRcdFx0XHQtdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQgOlxuXHRcdFx0XHRcdCggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiB0aGlzLm9mZnNldC5zY3JvbGwubGVmdCApICkgKiBtb2QgKVxuXHRcdFx0KVxuXHRcdH07XG5cblx0fSxcblxuXHRfZ2VuZXJhdGVQb3NpdGlvbjogZnVuY3Rpb24oIGV2ZW50LCBjb25zdHJhaW5Qb3NpdGlvbiApIHtcblxuXHRcdHZhciBjb250YWlubWVudCwgY28sIHRvcCwgbGVmdCxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRzY3JvbGxJc1Jvb3ROb2RlID0gdGhpcy5faXNSb290Tm9kZSggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSApLFxuXHRcdFx0cGFnZVggPSBldmVudC5wYWdlWCxcblx0XHRcdHBhZ2VZID0gZXZlbnQucGFnZVk7XG5cblx0XHQvLyBDYWNoZSB0aGUgc2Nyb2xsXG5cdFx0aWYgKCAhc2Nyb2xsSXNSb290Tm9kZSB8fCAhdGhpcy5vZmZzZXQuc2Nyb2xsICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuc2Nyb2xsID0ge1xuXHRcdFx0XHR0b3A6IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLFxuXHRcdFx0XHRsZWZ0OiB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Lypcblx0XHQgKiAtIFBvc2l0aW9uIGNvbnN0cmFpbmluZyAtXG5cdFx0ICogQ29uc3RyYWluIHRoZSBwb3NpdGlvbiB0byBhIG1peCBvZiBncmlkLCBjb250YWlubWVudC5cblx0XHQgKi9cblxuXHRcdC8vIElmIHdlIGFyZSBub3QgZHJhZ2dpbmcgeWV0LCB3ZSB3b24ndCBjaGVjayBmb3Igb3B0aW9uc1xuXHRcdGlmICggY29uc3RyYWluUG9zaXRpb24gKSB7XG5cdFx0XHRpZiAoIHRoaXMuY29udGFpbm1lbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5yZWxhdGl2ZUNvbnRhaW5lciApIHtcblx0XHRcdFx0XHRjbyA9IHRoaXMucmVsYXRpdmVDb250YWluZXIub2Zmc2V0KCk7XG5cdFx0XHRcdFx0Y29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRhaW5tZW50WyAwIF0gKyBjby5sZWZ0LFxuXHRcdFx0XHRcdFx0dGhpcy5jb250YWlubWVudFsgMSBdICsgY28udG9wLFxuXHRcdFx0XHRcdFx0dGhpcy5jb250YWlubWVudFsgMiBdICsgY28ubGVmdCxcblx0XHRcdFx0XHRcdHRoaXMuY29udGFpbm1lbnRbIDMgXSArIGNvLnRvcFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGFpbm1lbnQgPSB0aGlzLmNvbnRhaW5tZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPCBjb250YWlubWVudFsgMCBdICkge1xuXHRcdFx0XHRcdHBhZ2VYID0gY29udGFpbm1lbnRbIDAgXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IGNvbnRhaW5tZW50WyAxIF0gKSB7XG5cdFx0XHRcdFx0cGFnZVkgPSBjb250YWlubWVudFsgMSBdICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVggLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0ID4gY29udGFpbm1lbnRbIDIgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IGNvbnRhaW5tZW50WyAyIF0gKyB0aGlzLm9mZnNldC5jbGljay5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVkgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPiBjb250YWlubWVudFsgMyBdICkge1xuXHRcdFx0XHRcdHBhZ2VZID0gY29udGFpbm1lbnRbIDMgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG8uZ3JpZCApIHtcblxuXHRcdFx0XHQvL0NoZWNrIGZvciBncmlkIGVsZW1lbnRzIHNldCB0byAwIHRvIHByZXZlbnQgZGl2aWRlIGJ5IDAgZXJyb3IgY2F1c2luZyBpbnZhbGlkXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGVycm9ycyBpbiBJRSAoc2VlIHRpY2tldCAjNjk1MClcblx0XHRcdFx0dG9wID0gby5ncmlkWyAxIF0gPyB0aGlzLm9yaWdpbmFsUGFnZVkgKyBNYXRoLnJvdW5kKCAoIHBhZ2VZIC1cblx0XHRcdFx0XHR0aGlzLm9yaWdpbmFsUGFnZVkgKSAvIG8uZ3JpZFsgMSBdICkgKiBvLmdyaWRbIDEgXSA6IHRoaXMub3JpZ2luYWxQYWdlWTtcblx0XHRcdFx0cGFnZVkgPSBjb250YWlubWVudCA/ICggKCB0b3AgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gY29udGFpbm1lbnRbIDEgXSB8fFxuXHRcdFx0XHRcdHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+IGNvbnRhaW5tZW50WyAzIF0gKSA/XG5cdFx0XHRcdFx0XHR0b3AgOlxuXHRcdFx0XHRcdFx0KCAoIHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+PSBjb250YWlubWVudFsgMSBdICkgP1xuXHRcdFx0XHRcdFx0XHR0b3AgLSBvLmdyaWRbIDEgXSA6IHRvcCArIG8uZ3JpZFsgMSBdICkgKSA6IHRvcDtcblxuXHRcdFx0XHRsZWZ0ID0gby5ncmlkWyAwIF0gPyB0aGlzLm9yaWdpbmFsUGFnZVggK1xuXHRcdFx0XHRcdE1hdGgucm91bmQoICggcGFnZVggLSB0aGlzLm9yaWdpbmFsUGFnZVggKSAvIG8uZ3JpZFsgMCBdICkgKiBvLmdyaWRbIDAgXSA6XG5cdFx0XHRcdFx0dGhpcy5vcmlnaW5hbFBhZ2VYO1xuXHRcdFx0XHRwYWdlWCA9IGNvbnRhaW5tZW50ID8gKCAoIGxlZnQgLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0ID49IGNvbnRhaW5tZW50WyAwIF0gfHxcblx0XHRcdFx0XHRsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IGNvbnRhaW5tZW50WyAyIF0gKSA/XG5cdFx0XHRcdFx0XHRsZWZ0IDpcblx0XHRcdFx0XHRcdCggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSBjb250YWlubWVudFsgMCBdICkgP1xuXHRcdFx0XHRcdFx0XHRsZWZ0IC0gby5ncmlkWyAwIF0gOiBsZWZ0ICsgby5ncmlkWyAwIF0gKSApIDogbGVmdDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLmF4aXMgPT09IFwieVwiICkge1xuXHRcdFx0XHRwYWdlWCA9IHRoaXMub3JpZ2luYWxQYWdlWDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLmF4aXMgPT09IFwieFwiICkge1xuXHRcdFx0XHRwYWdlWSA9IHRoaXMub3JpZ2luYWxQYWdlWTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiAoXG5cblx0XHRcdFx0Ly8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uXG5cdFx0XHRcdHBhZ2VZIC1cblxuXHRcdFx0XHQvLyBDbGljayBvZmZzZXQgKHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50KVxuXHRcdFx0XHR0aGlzLm9mZnNldC5jbGljay50b3AgLVxuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLVxuXG5cdFx0XHRcdC8vIFRoZSBvZmZzZXRQYXJlbnQncyBvZmZzZXQgd2l0aG91dCBib3JkZXJzIChvZmZzZXQgKyBib3JkZXIpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudC50b3AgK1xuXHRcdFx0XHQoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiZml4ZWRcIiA/XG5cdFx0XHRcdFx0LXRoaXMub2Zmc2V0LnNjcm9sbC50b3AgOlxuXHRcdFx0XHRcdCggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiB0aGlzLm9mZnNldC5zY3JvbGwudG9wICkgKVxuXHRcdFx0KSxcblx0XHRcdGxlZnQ6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cGFnZVggLVxuXG5cdFx0XHRcdC8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgLVxuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC1cblxuXHRcdFx0XHQvLyBUaGUgb2Zmc2V0UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKVxuXHRcdFx0XHR0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArXG5cdFx0XHRcdCggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJmaXhlZFwiID9cblx0XHRcdFx0XHQtdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQgOlxuXHRcdFx0XHRcdCggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiB0aGlzLm9mZnNldC5zY3JvbGwubGVmdCApIClcblx0XHRcdClcblx0XHR9O1xuXG5cdH0sXG5cblx0X2NsZWFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5oZWxwZXIsIFwidWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIgKTtcblx0XHRpZiAoIHRoaXMuaGVscGVyWyAwIF0gIT09IHRoaXMuZWxlbWVudFsgMCBdICYmICF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwgKSB7XG5cdFx0XHR0aGlzLmhlbHBlci5yZW1vdmUoKTtcblx0XHR9XG5cdFx0dGhpcy5oZWxwZXIgPSBudWxsO1xuXHRcdHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbCA9IGZhbHNlO1xuXHRcdGlmICggdGhpcy5kZXN0cm95T25DbGVhciApIHtcblx0XHRcdHRoaXMuZGVzdHJveSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBGcm9tIG5vdyBvbiBidWxrIHN0dWZmIC0gbWFpbmx5IGhlbHBlcnNcblxuXHRfdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGV2ZW50LCB1aSApIHtcblx0XHR1aSA9IHVpIHx8IHRoaXMuX3VpSGFzaCgpO1xuXHRcdCQudWkucGx1Z2luLmNhbGwoIHRoaXMsIHR5cGUsIFsgZXZlbnQsIHVpLCB0aGlzIF0sIHRydWUgKTtcblxuXHRcdC8vIEFic29sdXRlIHBvc2l0aW9uIGFuZCBvZmZzZXQgKHNlZSAjNjg4NCApIGhhdmUgdG8gYmUgcmVjYWxjdWxhdGVkIGFmdGVyIHBsdWdpbnNcblx0XHRpZiAoIC9eKGRyYWd8c3RhcnR8c3RvcCkvLnRlc3QoIHR5cGUgKSApIHtcblx0XHRcdHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbyggXCJhYnNvbHV0ZVwiICk7XG5cdFx0XHR1aS5vZmZzZXQgPSB0aGlzLnBvc2l0aW9uQWJzO1xuXHRcdH1cblx0XHRyZXR1cm4gJC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmNhbGwoIHRoaXMsIHR5cGUsIGV2ZW50LCB1aSApO1xuXHR9LFxuXG5cdHBsdWdpbnM6IHt9LFxuXG5cdF91aUhhc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRoZWxwZXI6IHRoaXMuaGVscGVyLFxuXHRcdFx0cG9zaXRpb246IHRoaXMucG9zaXRpb24sXG5cdFx0XHRvcmlnaW5hbFBvc2l0aW9uOiB0aGlzLm9yaWdpbmFsUG9zaXRpb24sXG5cdFx0XHRvZmZzZXQ6IHRoaXMucG9zaXRpb25BYnNcblx0XHR9O1xuXHR9XG5cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcImNvbm5lY3RUb1NvcnRhYmxlXCIsIHtcblx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWksIGRyYWdnYWJsZSApIHtcblx0XHR2YXIgdWlTb3J0YWJsZSA9ICQuZXh0ZW5kKCB7fSwgdWksIHtcblx0XHRcdGl0ZW06IGRyYWdnYWJsZS5lbGVtZW50XG5cdFx0fSApO1xuXG5cdFx0ZHJhZ2dhYmxlLnNvcnRhYmxlcyA9IFtdO1xuXHRcdCQoIGRyYWdnYWJsZS5vcHRpb25zLmNvbm5lY3RUb1NvcnRhYmxlICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc29ydGFibGUgPSAkKCB0aGlzICkuc29ydGFibGUoIFwiaW5zdGFuY2VcIiApO1xuXG5cdFx0XHRpZiAoIHNvcnRhYmxlICYmICFzb3J0YWJsZS5vcHRpb25zLmRpc2FibGVkICkge1xuXHRcdFx0XHRkcmFnZ2FibGUuc29ydGFibGVzLnB1c2goIHNvcnRhYmxlICk7XG5cblx0XHRcdFx0Ly8gUmVmcmVzaFBvc2l0aW9ucyBpcyBjYWxsZWQgYXQgZHJhZyBzdGFydCB0byByZWZyZXNoIHRoZSBjb250YWluZXJDYWNoZVxuXHRcdFx0XHQvLyB3aGljaCBpcyB1c2VkIGluIGRyYWcuIFRoaXMgZW5zdXJlcyBpdCdzIGluaXRpYWxpemVkIGFuZCBzeW5jaHJvbml6ZWRcblx0XHRcdFx0Ly8gd2l0aCBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IGhhdmUgaGFwcGVuZWQgb24gdGhlIHBhZ2Ugc2luY2UgaW5pdGlhbGl6YXRpb24uXG5cdFx0XHRcdHNvcnRhYmxlLnJlZnJlc2hQb3NpdGlvbnMoKTtcblx0XHRcdFx0c29ydGFibGUuX3RyaWdnZXIoIFwiYWN0aXZhdGVcIiwgZXZlbnQsIHVpU29ydGFibGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCBldmVudCwgdWksIGRyYWdnYWJsZSApIHtcblx0XHR2YXIgdWlTb3J0YWJsZSA9ICQuZXh0ZW5kKCB7fSwgdWksIHtcblx0XHRcdGl0ZW06IGRyYWdnYWJsZS5lbGVtZW50XG5cdFx0fSApO1xuXG5cdFx0ZHJhZ2dhYmxlLmNhbmNlbEhlbHBlclJlbW92YWwgPSBmYWxzZTtcblxuXHRcdCQuZWFjaCggZHJhZ2dhYmxlLnNvcnRhYmxlcywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc29ydGFibGUgPSB0aGlzO1xuXG5cdFx0XHRpZiAoIHNvcnRhYmxlLmlzT3ZlciApIHtcblx0XHRcdFx0c29ydGFibGUuaXNPdmVyID0gMDtcblxuXHRcdFx0XHQvLyBBbGxvdyB0aGlzIHNvcnRhYmxlIHRvIGhhbmRsZSByZW1vdmluZyB0aGUgaGVscGVyXG5cdFx0XHRcdGRyYWdnYWJsZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gdHJ1ZTtcblx0XHRcdFx0c29ydGFibGUuY2FuY2VsSGVscGVyUmVtb3ZhbCA9IGZhbHNlO1xuXG5cdFx0XHRcdC8vIFVzZSBfc3RvcmVkQ1NTIFRvIHJlc3RvcmUgcHJvcGVydGllcyBpbiB0aGUgc29ydGFibGUsXG5cdFx0XHRcdC8vIGFzIHRoaXMgYWxzbyBoYW5kbGVzIHJldmVydCAoIzk2NzUpIHNpbmNlIHRoZSBkcmFnZ2FibGVcblx0XHRcdFx0Ly8gbWF5IGhhdmUgbW9kaWZpZWQgdGhlbSBpbiB1bmV4cGVjdGVkIHdheXMgKCM4ODA5KVxuXHRcdFx0XHRzb3J0YWJsZS5fc3RvcmVkQ1NTID0ge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBzb3J0YWJsZS5wbGFjZWhvbGRlci5jc3MoIFwicG9zaXRpb25cIiApLFxuXHRcdFx0XHRcdHRvcDogc29ydGFibGUucGxhY2Vob2xkZXIuY3NzKCBcInRvcFwiICksXG5cdFx0XHRcdFx0bGVmdDogc29ydGFibGUucGxhY2Vob2xkZXIuY3NzKCBcImxlZnRcIiApXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0c29ydGFibGUuX21vdXNlU3RvcCggZXZlbnQgKTtcblxuXHRcdFx0XHQvLyBPbmNlIGRyYWcgaGFzIGVuZGVkLCB0aGUgc29ydGFibGUgc2hvdWxkIHJldHVybiB0byB1c2luZ1xuXHRcdFx0XHQvLyBpdHMgb3JpZ2luYWwgaGVscGVyLCBub3QgdGhlIHNoYXJlZCBoZWxwZXIgZnJvbSBkcmFnZ2FibGVcblx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5oZWxwZXIgPSBzb3J0YWJsZS5vcHRpb25zLl9oZWxwZXI7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgdGhpcyBTb3J0YWJsZSBmcm9tIHJlbW92aW5nIHRoZSBoZWxwZXIuXG5cdFx0XHRcdC8vIEhvd2V2ZXIsIGRvbid0IHNldCB0aGUgZHJhZ2dhYmxlIHRvIHJlbW92ZSB0aGUgaGVscGVyXG5cdFx0XHRcdC8vIGVpdGhlciBhcyBhbm90aGVyIGNvbm5lY3RlZCBTb3J0YWJsZSBtYXkgeWV0IGhhbmRsZSB0aGUgcmVtb3ZhbC5cblx0XHRcdFx0c29ydGFibGUuY2FuY2VsSGVscGVyUmVtb3ZhbCA9IHRydWU7XG5cblx0XHRcdFx0c29ydGFibGUuX3RyaWdnZXIoIFwiZGVhY3RpdmF0ZVwiLCBldmVudCwgdWlTb3J0YWJsZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZHJhZzogZnVuY3Rpb24oIGV2ZW50LCB1aSwgZHJhZ2dhYmxlICkge1xuXHRcdCQuZWFjaCggZHJhZ2dhYmxlLnNvcnRhYmxlcywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5uZXJtb3N0SW50ZXJzZWN0aW5nID0gZmFsc2UsXG5cdFx0XHRcdHNvcnRhYmxlID0gdGhpcztcblxuXHRcdFx0Ly8gQ29weSBvdmVyIHZhcmlhYmxlcyB0aGF0IHNvcnRhYmxlJ3MgX2ludGVyc2VjdHNXaXRoIHVzZXNcblx0XHRcdHNvcnRhYmxlLnBvc2l0aW9uQWJzID0gZHJhZ2dhYmxlLnBvc2l0aW9uQWJzO1xuXHRcdFx0c29ydGFibGUuaGVscGVyUHJvcG9ydGlvbnMgPSBkcmFnZ2FibGUuaGVscGVyUHJvcG9ydGlvbnM7XG5cdFx0XHRzb3J0YWJsZS5vZmZzZXQuY2xpY2sgPSBkcmFnZ2FibGUub2Zmc2V0LmNsaWNrO1xuXG5cdFx0XHRpZiAoIHNvcnRhYmxlLl9pbnRlcnNlY3RzV2l0aCggc29ydGFibGUuY29udGFpbmVyQ2FjaGUgKSApIHtcblx0XHRcdFx0aW5uZXJtb3N0SW50ZXJzZWN0aW5nID0gdHJ1ZTtcblxuXHRcdFx0XHQkLmVhY2goIGRyYWdnYWJsZS5zb3J0YWJsZXMsIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0Ly8gQ29weSBvdmVyIHZhcmlhYmxlcyB0aGF0IHNvcnRhYmxlJ3MgX2ludGVyc2VjdHNXaXRoIHVzZXNcblx0XHRcdFx0XHR0aGlzLnBvc2l0aW9uQWJzID0gZHJhZ2dhYmxlLnBvc2l0aW9uQWJzO1xuXHRcdFx0XHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSBkcmFnZ2FibGUuaGVscGVyUHJvcG9ydGlvbnM7XG5cdFx0XHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sgPSBkcmFnZ2FibGUub2Zmc2V0LmNsaWNrO1xuXG5cdFx0XHRcdFx0aWYgKCB0aGlzICE9PSBzb3J0YWJsZSAmJlxuXHRcdFx0XHRcdFx0XHR0aGlzLl9pbnRlcnNlY3RzV2l0aCggdGhpcy5jb250YWluZXJDYWNoZSApICYmXG5cdFx0XHRcdFx0XHRcdCQuY29udGFpbnMoIHNvcnRhYmxlLmVsZW1lbnRbIDAgXSwgdGhpcy5lbGVtZW50WyAwIF0gKSApIHtcblx0XHRcdFx0XHRcdGlubmVybW9zdEludGVyc2VjdGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBpbm5lcm1vc3RJbnRlcnNlY3Rpbmc7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpbm5lcm1vc3RJbnRlcnNlY3RpbmcgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaW50ZXJzZWN0cywgd2UgdXNlIGEgbGl0dGxlIGlzT3ZlciB2YXJpYWJsZSBhbmQgc2V0IGl0IG9uY2UsXG5cdFx0XHRcdC8vIHNvIHRoYXQgdGhlIG1vdmUtaW4gc3R1ZmYgZ2V0cyBmaXJlZCBvbmx5IG9uY2UuXG5cdFx0XHRcdGlmICggIXNvcnRhYmxlLmlzT3ZlciApIHtcblx0XHRcdFx0XHRzb3J0YWJsZS5pc092ZXIgPSAxO1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgZHJhZ2dhYmxlJ3MgcGFyZW50IGluIGNhc2Ugd2UgbmVlZCB0byByZWFwcGVuZCB0byBpdCBsYXRlci5cblx0XHRcdFx0XHRkcmFnZ2FibGUuX3BhcmVudCA9IHVpLmhlbHBlci5wYXJlbnQoKTtcblxuXHRcdFx0XHRcdHNvcnRhYmxlLmN1cnJlbnRJdGVtID0gdWkuaGVscGVyXG5cdFx0XHRcdFx0XHQuYXBwZW5kVG8oIHNvcnRhYmxlLmVsZW1lbnQgKVxuXHRcdFx0XHRcdFx0LmRhdGEoIFwidWktc29ydGFibGUtaXRlbVwiLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBoZWxwZXIgb3B0aW9uIHRvIGxhdGVyIHJlc3RvcmUgaXRcblx0XHRcdFx0XHRzb3J0YWJsZS5vcHRpb25zLl9oZWxwZXIgPSBzb3J0YWJsZS5vcHRpb25zLmhlbHBlcjtcblxuXHRcdFx0XHRcdHNvcnRhYmxlLm9wdGlvbnMuaGVscGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdWkuaGVscGVyWyAwIF07XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdC8vIEZpcmUgdGhlIHN0YXJ0IGV2ZW50cyBvZiB0aGUgc29ydGFibGUgd2l0aCBvdXIgcGFzc2VkIGJyb3dzZXIgZXZlbnQsXG5cdFx0XHRcdFx0Ly8gYW5kIG91ciBvd24gaGVscGVyIChzbyBpdCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBvbmUpXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0ID0gc29ydGFibGUuY3VycmVudEl0ZW1bIDAgXTtcblx0XHRcdFx0XHRzb3J0YWJsZS5fbW91c2VDYXB0dXJlKCBldmVudCwgdHJ1ZSApO1xuXHRcdFx0XHRcdHNvcnRhYmxlLl9tb3VzZVN0YXJ0KCBldmVudCwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gQmVjYXVzZSB0aGUgYnJvd3NlciBldmVudCBpcyB3YXkgb2ZmIHRoZSBuZXcgYXBwZW5kZWQgcG9ydGxldCxcblx0XHRcdFx0XHQvLyBtb2RpZnkgbmVjZXNzYXJ5IHZhcmlhYmxlcyB0byByZWZsZWN0IHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0c29ydGFibGUub2Zmc2V0LmNsaWNrLnRvcCA9IGRyYWdnYWJsZS5vZmZzZXQuY2xpY2sudG9wO1xuXHRcdFx0XHRcdHNvcnRhYmxlLm9mZnNldC5jbGljay5sZWZ0ID0gZHJhZ2dhYmxlLm9mZnNldC5jbGljay5sZWZ0O1xuXHRcdFx0XHRcdHNvcnRhYmxlLm9mZnNldC5wYXJlbnQubGVmdCAtPSBkcmFnZ2FibGUub2Zmc2V0LnBhcmVudC5sZWZ0IC1cblx0XHRcdFx0XHRcdHNvcnRhYmxlLm9mZnNldC5wYXJlbnQubGVmdDtcblx0XHRcdFx0XHRzb3J0YWJsZS5vZmZzZXQucGFyZW50LnRvcCAtPSBkcmFnZ2FibGUub2Zmc2V0LnBhcmVudC50b3AgLVxuXHRcdFx0XHRcdFx0c29ydGFibGUub2Zmc2V0LnBhcmVudC50b3A7XG5cblx0XHRcdFx0XHRkcmFnZ2FibGUuX3RyaWdnZXIoIFwidG9Tb3J0YWJsZVwiLCBldmVudCApO1xuXG5cdFx0XHRcdFx0Ly8gSW5mb3JtIGRyYWdnYWJsZSB0aGF0IHRoZSBoZWxwZXIgaXMgaW4gYSB2YWxpZCBkcm9wIHpvbmUsXG5cdFx0XHRcdFx0Ly8gdXNlZCBzb2xlbHkgaW4gdGhlIHJldmVydCBvcHRpb24gdG8gaGFuZGxlIFwidmFsaWQvaW52YWxpZFwiLlxuXHRcdFx0XHRcdGRyYWdnYWJsZS5kcm9wcGVkID0gc29ydGFibGUuZWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIE5lZWQgdG8gcmVmcmVzaFBvc2l0aW9ucyBvZiBhbGwgc29ydGFibGVzIGluIHRoZSBjYXNlIHRoYXRcblx0XHRcdFx0XHQvLyBhZGRpbmcgdG8gb25lIHNvcnRhYmxlIGNoYW5nZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBvdGhlciBzb3J0YWJsZXMgKCM5Njc1KVxuXHRcdFx0XHRcdCQuZWFjaCggZHJhZ2dhYmxlLnNvcnRhYmxlcywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKTtcblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHQvLyBIYWNrIHNvIHJlY2VpdmUvdXBkYXRlIGNhbGxiYWNrcyB3b3JrIChtb3N0bHkpXG5cdFx0XHRcdFx0ZHJhZ2dhYmxlLmN1cnJlbnRJdGVtID0gZHJhZ2dhYmxlLmVsZW1lbnQ7XG5cdFx0XHRcdFx0c29ydGFibGUuZnJvbU91dHNpZGUgPSBkcmFnZ2FibGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNvcnRhYmxlLmN1cnJlbnRJdGVtICkge1xuXHRcdFx0XHRcdHNvcnRhYmxlLl9tb3VzZURyYWcoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHQvLyBDb3B5IHRoZSBzb3J0YWJsZSdzIHBvc2l0aW9uIGJlY2F1c2UgdGhlIGRyYWdnYWJsZSdzIGNhbiBwb3RlbnRpYWxseSByZWZsZWN0XG5cdFx0XHRcdFx0Ly8gYSByZWxhdGl2ZSBwb3NpdGlvbiwgd2hpbGUgc29ydGFibGUgaXMgYWx3YXlzIGFic29sdXRlLCB3aGljaCB0aGUgZHJhZ2dlZFxuXHRcdFx0XHRcdC8vIGVsZW1lbnQgaGFzIG5vdyBiZWNvbWUuICgjODgwOSlcblx0XHRcdFx0XHR1aS5wb3NpdGlvbiA9IHNvcnRhYmxlLnBvc2l0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIElmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvcnRhYmxlLCBhbmQgaXQgaW50ZXJzZWN0ZWQgYmVmb3JlLFxuXHRcdFx0XHQvLyB3ZSBmYWtlIHRoZSBkcmFnIHN0b3Agb2YgdGhlIHNvcnRhYmxlLCBidXQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgcmVtb3ZlXG5cdFx0XHRcdC8vIHRoZSBoZWxwZXIgYnkgdXNpbmcgY2FuY2VsSGVscGVyUmVtb3ZhbC5cblx0XHRcdFx0aWYgKCBzb3J0YWJsZS5pc092ZXIgKSB7XG5cblx0XHRcdFx0XHRzb3J0YWJsZS5pc092ZXIgPSAwO1xuXHRcdFx0XHRcdHNvcnRhYmxlLmNhbmNlbEhlbHBlclJlbW92YWwgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly8gQ2FsbGluZyBzb3J0YWJsZSdzIG1vdXNlU3RvcCB3b3VsZCB0cmlnZ2VyIGEgcmV2ZXJ0LFxuXHRcdFx0XHRcdC8vIHNvIHJldmVydCBtdXN0IGJlIHRlbXBvcmFyaWx5IGZhbHNlIHVudGlsIGFmdGVyIG1vdXNlU3RvcCBpcyBjYWxsZWQuXG5cdFx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5fcmV2ZXJ0ID0gc29ydGFibGUub3B0aW9ucy5yZXZlcnQ7XG5cdFx0XHRcdFx0c29ydGFibGUub3B0aW9ucy5yZXZlcnQgPSBmYWxzZTtcblxuXHRcdFx0XHRcdHNvcnRhYmxlLl90cmlnZ2VyKCBcIm91dFwiLCBldmVudCwgc29ydGFibGUuX3VpSGFzaCggc29ydGFibGUgKSApO1xuXHRcdFx0XHRcdHNvcnRhYmxlLl9tb3VzZVN0b3AoIGV2ZW50LCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBSZXN0b3JlIHNvcnRhYmxlIGJlaGF2aW9ycyB0aGF0IHdlcmUgbW9kZmllZFxuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIGRyYWdnYWJsZSBlbnRlcmVkIHRoZSBzb3J0YWJsZSBhcmVhICgjOTQ4MSlcblx0XHRcdFx0XHRzb3J0YWJsZS5vcHRpb25zLnJldmVydCA9IHNvcnRhYmxlLm9wdGlvbnMuX3JldmVydDtcblx0XHRcdFx0XHRzb3J0YWJsZS5vcHRpb25zLmhlbHBlciA9IHNvcnRhYmxlLm9wdGlvbnMuX2hlbHBlcjtcblxuXHRcdFx0XHRcdGlmICggc29ydGFibGUucGxhY2Vob2xkZXIgKSB7XG5cdFx0XHRcdFx0XHRzb3J0YWJsZS5wbGFjZWhvbGRlci5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBSZXN0b3JlIGFuZCByZWNhbGN1bGF0ZSB0aGUgZHJhZ2dhYmxlJ3Mgb2Zmc2V0IGNvbnNpZGVyaW5nIHRoZSBzb3J0YWJsZVxuXHRcdFx0XHRcdC8vIG1heSBoYXZlIG1vZGlmaWVkIHRoZW0gaW4gdW5leHBlY3RlZCB3YXlzLiAoIzg4MDksICMxMDY2OSlcblx0XHRcdFx0XHR1aS5oZWxwZXIuYXBwZW5kVG8oIGRyYWdnYWJsZS5fcGFyZW50ICk7XG5cdFx0XHRcdFx0ZHJhZ2dhYmxlLl9yZWZyZXNoT2Zmc2V0cyggZXZlbnQgKTtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbiA9IGRyYWdnYWJsZS5fZ2VuZXJhdGVQb3NpdGlvbiggZXZlbnQsIHRydWUgKTtcblxuXHRcdFx0XHRcdGRyYWdnYWJsZS5fdHJpZ2dlciggXCJmcm9tU29ydGFibGVcIiwgZXZlbnQgKTtcblxuXHRcdFx0XHRcdC8vIEluZm9ybSBkcmFnZ2FibGUgdGhhdCB0aGUgaGVscGVyIGlzIG5vIGxvbmdlciBpbiBhIHZhbGlkIGRyb3Agem9uZVxuXHRcdFx0XHRcdGRyYWdnYWJsZS5kcm9wcGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZWVkIHRvIHJlZnJlc2hQb3NpdGlvbnMgb2YgYWxsIHNvcnRhYmxlcyBqdXN0IGluIGNhc2UgcmVtb3Zpbmdcblx0XHRcdFx0XHQvLyBmcm9tIG9uZSBzb3J0YWJsZSBjaGFuZ2VzIHRoZSBsb2NhdGlvbiBvZiBvdGhlciBzb3J0YWJsZXMgKCM5Njc1KVxuXHRcdFx0XHRcdCQuZWFjaCggZHJhZ2dhYmxlLnNvcnRhYmxlcywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcImN1cnNvclwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgdCA9ICQoIFwiYm9keVwiICksXG5cdFx0XHRvID0gaW5zdGFuY2Uub3B0aW9ucztcblxuXHRcdGlmICggdC5jc3MoIFwiY3Vyc29yXCIgKSApIHtcblx0XHRcdG8uX2N1cnNvciA9IHQuY3NzKCBcImN1cnNvclwiICk7XG5cdFx0fVxuXHRcdHQuY3NzKCBcImN1cnNvclwiLCBvLmN1cnNvciApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgbyA9IGluc3RhbmNlLm9wdGlvbnM7XG5cdFx0aWYgKCBvLl9jdXJzb3IgKSB7XG5cdFx0XHQkKCBcImJvZHlcIiApLmNzcyggXCJjdXJzb3JcIiwgby5fY3Vyc29yICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJkcmFnZ2FibGVcIiwgXCJvcGFjaXR5XCIsIHtcblx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWksIGluc3RhbmNlICkge1xuXHRcdHZhciB0ID0gJCggdWkuaGVscGVyICksXG5cdFx0XHRvID0gaW5zdGFuY2Uub3B0aW9ucztcblx0XHRpZiAoIHQuY3NzKCBcIm9wYWNpdHlcIiApICkge1xuXHRcdFx0by5fb3BhY2l0eSA9IHQuY3NzKCBcIm9wYWNpdHlcIiApO1xuXHRcdH1cblx0XHR0LmNzcyggXCJvcGFjaXR5XCIsIG8ub3BhY2l0eSApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgbyA9IGluc3RhbmNlLm9wdGlvbnM7XG5cdFx0aWYgKCBvLl9vcGFjaXR5ICkge1xuXHRcdFx0JCggdWkuaGVscGVyICkuY3NzKCBcIm9wYWNpdHlcIiwgby5fb3BhY2l0eSApO1xuXHRcdH1cblx0fVxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwiZHJhZ2dhYmxlXCIsIFwic2Nyb2xsXCIsIHtcblx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWksIGkgKSB7XG5cdFx0aWYgKCAhaS5zY3JvbGxQYXJlbnROb3RIaWRkZW4gKSB7XG5cdFx0XHRpLnNjcm9sbFBhcmVudE5vdEhpZGRlbiA9IGkuaGVscGVyLnNjcm9sbFBhcmVudCggZmFsc2UgKTtcblx0XHR9XG5cblx0XHRpZiAoIGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWyAwIF0gIT09IGkuZG9jdW1lbnRbIDAgXSAmJlxuXHRcdFx0XHRpLnNjcm9sbFBhcmVudE5vdEhpZGRlblsgMCBdLnRhZ05hbWUgIT09IFwiSFRNTFwiICkge1xuXHRcdFx0aS5vdmVyZmxvd09mZnNldCA9IGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuLm9mZnNldCgpO1xuXHRcdH1cblx0fSxcblx0ZHJhZzogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaSAgKSB7XG5cblx0XHR2YXIgbyA9IGkub3B0aW9ucyxcblx0XHRcdHNjcm9sbGVkID0gZmFsc2UsXG5cdFx0XHRzY3JvbGxQYXJlbnQgPSBpLnNjcm9sbFBhcmVudE5vdEhpZGRlblsgMCBdLFxuXHRcdFx0ZG9jdW1lbnQgPSBpLmRvY3VtZW50WyAwIF07XG5cblx0XHRpZiAoIHNjcm9sbFBhcmVudCAhPT0gZG9jdW1lbnQgJiYgc2Nyb2xsUGFyZW50LnRhZ05hbWUgIT09IFwiSFRNTFwiICkge1xuXHRcdFx0aWYgKCAhby5heGlzIHx8IG8uYXhpcyAhPT0gXCJ4XCIgKSB7XG5cdFx0XHRcdGlmICggKCBpLm92ZXJmbG93T2Zmc2V0LnRvcCArIHNjcm9sbFBhcmVudC5vZmZzZXRIZWlnaHQgKSAtIGV2ZW50LnBhZ2VZIDxcblx0XHRcdFx0XHRcdG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50LnNjcm9sbFRvcCA9IHNjcm9sbGVkID0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCArIG8uc2Nyb2xsU3BlZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LnBhZ2VZIC0gaS5vdmVyZmxvd09mZnNldC50b3AgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgPSBzY3JvbGxlZCA9IHNjcm9sbFBhcmVudC5zY3JvbGxUb3AgLSBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIW8uYXhpcyB8fCBvLmF4aXMgIT09IFwieVwiICkge1xuXHRcdFx0XHRpZiAoICggaS5vdmVyZmxvd09mZnNldC5sZWZ0ICsgc2Nyb2xsUGFyZW50Lm9mZnNldFdpZHRoICkgLSBldmVudC5wYWdlWCA8XG5cdFx0XHRcdFx0XHRvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsZWQgPSBzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCArIG8uc2Nyb2xsU3BlZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LnBhZ2VYIC0gaS5vdmVyZmxvd09mZnNldC5sZWZ0IDwgby5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbGVkID0gc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQgLSBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRpZiAoICFvLmF4aXMgfHwgby5heGlzICE9PSBcInhcIiApIHtcblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gJCggZG9jdW1lbnQgKS5zY3JvbGxUb3AoICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgLSBvLnNjcm9sbFNwZWVkICk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoICQoIHdpbmRvdyApLmhlaWdodCgpIC0gKCBldmVudC5wYWdlWSAtICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgKSA8XG5cdFx0XHRcdFx0XHRvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gJCggZG9jdW1lbnQgKS5zY3JvbGxUb3AoICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgKyBvLnNjcm9sbFNwZWVkICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhby5heGlzIHx8IG8uYXhpcyAhPT0gXCJ5XCIgKSB7XG5cdFx0XHRcdGlmICggZXZlbnQucGFnZVggLSAkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoKSA8IG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSAkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoXG5cdFx0XHRcdFx0XHQkKCBkb2N1bWVudCApLnNjcm9sbExlZnQoKSAtIG8uc2Nyb2xsU3BlZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAkKCB3aW5kb3cgKS53aWR0aCgpIC0gKCBldmVudC5wYWdlWCAtICQoIGRvY3VtZW50ICkuc2Nyb2xsTGVmdCgpICkgPFxuXHRcdFx0XHRcdFx0by5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHRzY3JvbGxlZCA9ICQoIGRvY3VtZW50ICkuc2Nyb2xsTGVmdChcblx0XHRcdFx0XHRcdCQoIGRvY3VtZW50ICkuc2Nyb2xsTGVmdCgpICsgby5zY3JvbGxTcGVlZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggc2Nyb2xsZWQgIT09IGZhbHNlICYmICQudWkuZGRtYW5hZ2VyICYmICFvLmRyb3BCZWhhdmlvdXIgKSB7XG5cdFx0XHQkLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyggaSwgZXZlbnQgKTtcblx0XHR9XG5cblx0fVxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwiZHJhZ2dhYmxlXCIsIFwic25hcFwiLCB7XG5cdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpICkge1xuXG5cdFx0dmFyIG8gPSBpLm9wdGlvbnM7XG5cblx0XHRpLnNuYXBFbGVtZW50cyA9IFtdO1xuXG5cdFx0JCggby5zbmFwLmNvbnN0cnVjdG9yICE9PSBTdHJpbmcgPyAoIG8uc25hcC5pdGVtcyB8fCBcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIiApIDogby5zbmFwIClcblx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyICR0ID0gJCggdGhpcyApLFxuXHRcdFx0XHRcdCRvID0gJHQub2Zmc2V0KCk7XG5cdFx0XHRcdGlmICggdGhpcyAhPT0gaS5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRcdFx0aS5zbmFwRWxlbWVudHMucHVzaCgge1xuXHRcdFx0XHRcdFx0aXRlbTogdGhpcyxcblx0XHRcdFx0XHRcdHdpZHRoOiAkdC5vdXRlcldpZHRoKCksIGhlaWdodDogJHQub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0XHRcdHRvcDogJG8udG9wLCBsZWZ0OiAkby5sZWZ0XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0fSxcblx0ZHJhZzogZnVuY3Rpb24oIGV2ZW50LCB1aSwgaW5zdCApIHtcblxuXHRcdHZhciB0cywgYnMsIGxzLCBycywgbCwgciwgdCwgYiwgaSwgZmlyc3QsXG5cdFx0XHRvID0gaW5zdC5vcHRpb25zLFxuXHRcdFx0ZCA9IG8uc25hcFRvbGVyYW5jZSxcblx0XHRcdHgxID0gdWkub2Zmc2V0LmxlZnQsIHgyID0geDEgKyBpbnN0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLFxuXHRcdFx0eTEgPSB1aS5vZmZzZXQudG9wLCB5MiA9IHkxICsgaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7XG5cblx0XHRmb3IgKCBpID0gaW5zdC5zbmFwRWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cblx0XHRcdGwgPSBpbnN0LnNuYXBFbGVtZW50c1sgaSBdLmxlZnQgLSBpbnN0Lm1hcmdpbnMubGVmdDtcblx0XHRcdHIgPSBsICsgaW5zdC5zbmFwRWxlbWVudHNbIGkgXS53aWR0aDtcblx0XHRcdHQgPSBpbnN0LnNuYXBFbGVtZW50c1sgaSBdLnRvcCAtIGluc3QubWFyZ2lucy50b3A7XG5cdFx0XHRiID0gdCArIGluc3Quc25hcEVsZW1lbnRzWyBpIF0uaGVpZ2h0O1xuXG5cdFx0XHRpZiAoIHgyIDwgbCAtIGQgfHwgeDEgPiByICsgZCB8fCB5MiA8IHQgLSBkIHx8IHkxID4gYiArIGQgfHxcblx0XHRcdFx0XHQhJC5jb250YWlucyggaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5pdGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0XHRcdFx0aW5zdC5zbmFwRWxlbWVudHNbIGkgXS5pdGVtICkgKSB7XG5cdFx0XHRcdGlmICggaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5zbmFwcGluZyApIHtcblx0XHRcdFx0XHQoIGluc3Qub3B0aW9ucy5zbmFwLnJlbGVhc2UgJiZcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zbmFwLnJlbGVhc2UuY2FsbChcblx0XHRcdFx0XHRcdFx0aW5zdC5lbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0JC5leHRlbmQoIGluc3QuX3VpSGFzaCgpLCB7IHNuYXBJdGVtOiBpbnN0LnNuYXBFbGVtZW50c1sgaSBdLml0ZW0gfSApXG5cdFx0XHRcdFx0XHQpICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC5zbmFwRWxlbWVudHNbIGkgXS5zbmFwcGluZyA9IGZhbHNlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBvLnNuYXBNb2RlICE9PSBcImlubmVyXCIgKSB7XG5cdFx0XHRcdHRzID0gTWF0aC5hYnMoIHQgLSB5MiApIDw9IGQ7XG5cdFx0XHRcdGJzID0gTWF0aC5hYnMoIGIgLSB5MSApIDw9IGQ7XG5cdFx0XHRcdGxzID0gTWF0aC5hYnMoIGwgLSB4MiApIDw9IGQ7XG5cdFx0XHRcdHJzID0gTWF0aC5hYnMoIHIgLSB4MSApIDw9IGQ7XG5cdFx0XHRcdGlmICggdHMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24udG9wID0gaW5zdC5fY29udmVydFBvc2l0aW9uVG8oIFwicmVsYXRpdmVcIiwge1xuXHRcdFx0XHRcdFx0dG9wOiB0IC0gaW5zdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsXG5cdFx0XHRcdFx0XHRsZWZ0OiAwXG5cdFx0XHRcdFx0fSApLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGJzICkge1xuXHRcdFx0XHRcdHVpLnBvc2l0aW9uLnRvcCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogYixcblx0XHRcdFx0XHRcdGxlZnQ6IDBcblx0XHRcdFx0XHR9ICkudG9wO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggbHMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24ubGVmdCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGxlZnQ6IGwgLSBpbnN0LmhlbHBlclByb3BvcnRpb25zLndpZHRoXG5cdFx0XHRcdFx0fSApLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBycyApIHtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbi5sZWZ0ID0gaW5zdC5fY29udmVydFBvc2l0aW9uVG8oIFwicmVsYXRpdmVcIiwge1xuXHRcdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdFx0bGVmdDogclxuXHRcdFx0XHRcdH0gKS5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZpcnN0ID0gKCB0cyB8fCBicyB8fCBscyB8fCBycyApO1xuXG5cdFx0XHRpZiAoIG8uc25hcE1vZGUgIT09IFwib3V0ZXJcIiApIHtcblx0XHRcdFx0dHMgPSBNYXRoLmFicyggdCAtIHkxICkgPD0gZDtcblx0XHRcdFx0YnMgPSBNYXRoLmFicyggYiAtIHkyICkgPD0gZDtcblx0XHRcdFx0bHMgPSBNYXRoLmFicyggbCAtIHgxICkgPD0gZDtcblx0XHRcdFx0cnMgPSBNYXRoLmFicyggciAtIHgyICkgPD0gZDtcblx0XHRcdFx0aWYgKCB0cyApIHtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbi50b3AgPSBpbnN0Ll9jb252ZXJ0UG9zaXRpb25UbyggXCJyZWxhdGl2ZVwiLCB7XG5cdFx0XHRcdFx0XHR0b3A6IHQsXG5cdFx0XHRcdFx0XHRsZWZ0OiAwXG5cdFx0XHRcdFx0fSApLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGJzICkge1xuXHRcdFx0XHRcdHVpLnBvc2l0aW9uLnRvcCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogYiAtIGluc3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LFxuXHRcdFx0XHRcdFx0bGVmdDogMFxuXHRcdFx0XHRcdH0gKS50b3A7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBscyApIHtcblx0XHRcdFx0XHR1aS5wb3NpdGlvbi5sZWZ0ID0gaW5zdC5fY29udmVydFBvc2l0aW9uVG8oIFwicmVsYXRpdmVcIiwge1xuXHRcdFx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHRcdFx0bGVmdDogbFxuXHRcdFx0XHRcdH0gKS5sZWZ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggcnMgKSB7XG5cdFx0XHRcdFx0dWkucG9zaXRpb24ubGVmdCA9IGluc3QuX2NvbnZlcnRQb3NpdGlvblRvKCBcInJlbGF0aXZlXCIsIHtcblx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdGxlZnQ6IHIgLSBpbnN0LmhlbHBlclByb3BvcnRpb25zLndpZHRoXG5cdFx0XHRcdFx0fSApLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhaW5zdC5zbmFwRWxlbWVudHNbIGkgXS5zbmFwcGluZyAmJiAoIHRzIHx8IGJzIHx8IGxzIHx8IHJzIHx8IGZpcnN0ICkgKSB7XG5cdFx0XHRcdCggaW5zdC5vcHRpb25zLnNuYXAuc25hcCAmJlxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChcblx0XHRcdFx0XHRcdGluc3QuZWxlbWVudCxcblx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0JC5leHRlbmQoIGluc3QuX3VpSGFzaCgpLCB7XG5cdFx0XHRcdFx0XHRcdHNuYXBJdGVtOiBpbnN0LnNuYXBFbGVtZW50c1sgaSBdLml0ZW1cblx0XHRcdFx0XHRcdH0gKSApICk7XG5cdFx0XHR9XG5cdFx0XHRpbnN0LnNuYXBFbGVtZW50c1sgaSBdLnNuYXBwaW5nID0gKCB0cyB8fCBicyB8fCBscyB8fCBycyB8fCBmaXJzdCApO1xuXG5cdFx0fVxuXG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcImRyYWdnYWJsZVwiLCBcInN0YWNrXCIsIHtcblx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWksIGluc3RhbmNlICkge1xuXHRcdHZhciBtaW4sXG5cdFx0XHRvID0gaW5zdGFuY2Uub3B0aW9ucyxcblx0XHRcdGdyb3VwID0gJC5tYWtlQXJyYXkoICQoIG8uc3RhY2sgKSApLnNvcnQoIGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0XHRyZXR1cm4gKCBwYXJzZUludCggJCggYSApLmNzcyggXCJ6SW5kZXhcIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdFx0KCBwYXJzZUludCggJCggYiApLmNzcyggXCJ6SW5kZXhcIiApLCAxMCApIHx8IDAgKTtcblx0XHRcdH0gKTtcblxuXHRcdGlmICggIWdyb3VwLmxlbmd0aCApIHsgcmV0dXJuOyB9XG5cblx0XHRtaW4gPSBwYXJzZUludCggJCggZ3JvdXBbIDAgXSApLmNzcyggXCJ6SW5kZXhcIiApLCAxMCApIHx8IDA7XG5cdFx0JCggZ3JvdXAgKS5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdCQoIHRoaXMgKS5jc3MoIFwiekluZGV4XCIsIG1pbiArIGkgKTtcblx0XHR9ICk7XG5cdFx0dGhpcy5jc3MoIFwiekluZGV4XCIsICggbWluICsgZ3JvdXAubGVuZ3RoICkgKTtcblx0fVxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwiZHJhZ2dhYmxlXCIsIFwiekluZGV4XCIsIHtcblx0c3RhcnQ6IGZ1bmN0aW9uKCBldmVudCwgdWksIGluc3RhbmNlICkge1xuXHRcdHZhciB0ID0gJCggdWkuaGVscGVyICksXG5cdFx0XHRvID0gaW5zdGFuY2Uub3B0aW9ucztcblxuXHRcdGlmICggdC5jc3MoIFwiekluZGV4XCIgKSApIHtcblx0XHRcdG8uX3pJbmRleCA9IHQuY3NzKCBcInpJbmRleFwiICk7XG5cdFx0fVxuXHRcdHQuY3NzKCBcInpJbmRleFwiLCBvLnpJbmRleCApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggZXZlbnQsIHVpLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgbyA9IGluc3RhbmNlLm9wdGlvbnM7XG5cblx0XHRpZiAoIG8uX3pJbmRleCApIHtcblx0XHRcdCQoIHVpLmhlbHBlciApLmNzcyggXCJ6SW5kZXhcIiwgby5fekluZGV4ICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbnZhciB3aWRnZXRzRHJhZ2dhYmxlID0gJC51aS5kcmFnZ2FibGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRHJvcHBhYmxlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBEcm9wcGFibGVcbi8vPj5ncm91cDogSW50ZXJhY3Rpb25zXG4vLz4+ZGVzY3JpcHRpb246IEVuYWJsZXMgZHJvcCB0YXJnZXRzIGZvciBkcmFnZ2FibGUgZWxlbWVudHMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZHJvcHBhYmxlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2Ryb3BwYWJsZS9cblxuXG5cbiQud2lkZ2V0KCBcInVpLmRyb3BwYWJsZVwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdHdpZGdldEV2ZW50UHJlZml4OiBcImRyb3BcIixcblx0b3B0aW9uczoge1xuXHRcdGFjY2VwdDogXCIqXCIsXG5cdFx0YWRkQ2xhc3NlczogdHJ1ZSxcblx0XHRncmVlZHk6IGZhbHNlLFxuXHRcdHNjb3BlOiBcImRlZmF1bHRcIixcblx0XHR0b2xlcmFuY2U6IFwiaW50ZXJzZWN0XCIsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRhY3RpdmF0ZTogbnVsbCxcblx0XHRkZWFjdGl2YXRlOiBudWxsLFxuXHRcdGRyb3A6IG51bGwsXG5cdFx0b3V0OiBudWxsLFxuXHRcdG92ZXI6IG51bGxcblx0fSxcblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgcHJvcG9ydGlvbnMsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0YWNjZXB0ID0gby5hY2NlcHQ7XG5cblx0XHR0aGlzLmlzb3ZlciA9IGZhbHNlO1xuXHRcdHRoaXMuaXNvdXQgPSB0cnVlO1xuXG5cdFx0dGhpcy5hY2NlcHQgPSAkLmlzRnVuY3Rpb24oIGFjY2VwdCApID8gYWNjZXB0IDogZnVuY3Rpb24oIGQgKSB7XG5cdFx0XHRyZXR1cm4gZC5pcyggYWNjZXB0ICk7XG5cdFx0fTtcblxuXHRcdHRoaXMucHJvcG9ydGlvbnMgPSBmdW5jdGlvbiggLyogdmFsdWVUb1dyaXRlICovICkge1xuXHRcdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIFN0b3JlIHRoZSBkcm9wcGFibGUncyBwcm9wb3J0aW9uc1xuXHRcdFx0XHRwcm9wb3J0aW9ucyA9IGFyZ3VtZW50c1sgMCBdO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBSZXRyaWV2ZSBvciBkZXJpdmUgdGhlIGRyb3BwYWJsZSdzIHByb3BvcnRpb25zXG5cdFx0XHRcdHJldHVybiBwcm9wb3J0aW9ucyA/XG5cdFx0XHRcdFx0cHJvcG9ydGlvbnMgOlxuXHRcdFx0XHRcdHByb3BvcnRpb25zID0ge1xuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMuZWxlbWVudFsgMCBdLm9mZnNldFdpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmVsZW1lbnRbIDAgXS5vZmZzZXRIZWlnaHRcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLl9hZGRUb01hbmFnZXIoIG8uc2NvcGUgKTtcblxuXHRcdG8uYWRkQ2xhc3NlcyAmJiB0aGlzLl9hZGRDbGFzcyggXCJ1aS1kcm9wcGFibGVcIiApO1xuXG5cdH0sXG5cblx0X2FkZFRvTWFuYWdlcjogZnVuY3Rpb24oIHNjb3BlICkge1xuXG5cdFx0Ly8gQWRkIHRoZSByZWZlcmVuY2UgYW5kIHBvc2l0aW9ucyB0byB0aGUgbWFuYWdlclxuXHRcdCQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHNjb3BlIF0gPSAkLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzWyBzY29wZSBdIHx8IFtdO1xuXHRcdCQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHNjb3BlIF0ucHVzaCggdGhpcyApO1xuXHR9LFxuXG5cdF9zcGxpY2U6IGZ1bmN0aW9uKCBkcm9wICkge1xuXHRcdHZhciBpID0gMDtcblx0XHRmb3IgKCA7IGkgPCBkcm9wLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0aWYgKCBkcm9wWyBpIF0gPT09IHRoaXMgKSB7XG5cdFx0XHRcdGRyb3Auc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZHJvcCA9ICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHRoaXMub3B0aW9ucy5zY29wZSBdO1xuXG5cdFx0dGhpcy5fc3BsaWNlKCBkcm9wICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJhY2NlcHRcIiApIHtcblx0XHRcdHRoaXMuYWNjZXB0ID0gJC5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUgOiBmdW5jdGlvbiggZCApIHtcblx0XHRcdFx0cmV0dXJuIGQuaXMoIHZhbHVlICk7XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoIGtleSA9PT0gXCJzY29wZVwiICkge1xuXHRcdFx0dmFyIGRyb3AgPSAkLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzWyB0aGlzLm9wdGlvbnMuc2NvcGUgXTtcblxuXHRcdFx0dGhpcy5fc3BsaWNlKCBkcm9wICk7XG5cdFx0XHR0aGlzLl9hZGRUb01hbmFnZXIoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0fSxcblxuXHRfYWN0aXZhdGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgZHJhZ2dhYmxlID0gJC51aS5kZG1hbmFnZXIuY3VycmVudDtcblxuXHRcdHRoaXMuX2FkZEFjdGl2ZUNsYXNzKCk7XG5cdFx0aWYgKCBkcmFnZ2FibGUgKSB7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdH1cblx0fSxcblxuXHRfZGVhY3RpdmF0ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKTtcblx0XHRpZiAoIGRyYWdnYWJsZSApIHtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiZGVhY3RpdmF0ZVwiLCBldmVudCwgdGhpcy51aSggZHJhZ2dhYmxlICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X292ZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0Ly8gQmFpbCBpZiBkcmFnZ2FibGUgYW5kIGRyb3BwYWJsZSBhcmUgc2FtZSBlbGVtZW50XG5cdFx0aWYgKCAhZHJhZ2dhYmxlIHx8ICggZHJhZ2dhYmxlLmN1cnJlbnRJdGVtIHx8XG5cdFx0XHRcdGRyYWdnYWJsZS5lbGVtZW50IClbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fYWRkSG92ZXJDbGFzcygpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJvdmVyXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9vdXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBkcmFnZ2FibGUgPSAkLnVpLmRkbWFuYWdlci5jdXJyZW50O1xuXG5cdFx0Ly8gQmFpbCBpZiBkcmFnZ2FibGUgYW5kIGRyb3BwYWJsZSBhcmUgc2FtZSBlbGVtZW50XG5cdFx0aWYgKCAhZHJhZ2dhYmxlIHx8ICggZHJhZ2dhYmxlLmN1cnJlbnRJdGVtIHx8XG5cdFx0XHRcdGRyYWdnYWJsZS5lbGVtZW50IClbIDAgXSA9PT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJvdXRcIiwgZXZlbnQsIHRoaXMudWkoIGRyYWdnYWJsZSApICk7XG5cdFx0fVxuXG5cdH0sXG5cblx0X2Ryb3A6IGZ1bmN0aW9uKCBldmVudCwgY3VzdG9tICkge1xuXG5cdFx0dmFyIGRyYWdnYWJsZSA9IGN1c3RvbSB8fCAkLnVpLmRkbWFuYWdlci5jdXJyZW50LFxuXHRcdFx0Y2hpbGRyZW5JbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuXHRcdC8vIEJhaWwgaWYgZHJhZ2dhYmxlIGFuZCBkcm9wcGFibGUgYXJlIHNhbWUgZWxlbWVudFxuXHRcdGlmICggIWRyYWdnYWJsZSB8fCAoIGRyYWdnYWJsZS5jdXJyZW50SXRlbSB8fFxuXHRcdFx0XHRkcmFnZ2FibGUuZWxlbWVudCApWyAwIF0gPT09IHRoaXMuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0LmZpbmQoIFwiOmRhdGEodWktZHJvcHBhYmxlKVwiIClcblx0XHRcdC5ub3QoIFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiIClcblx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGluc3QgPSAkKCB0aGlzICkuZHJvcHBhYmxlKCBcImluc3RhbmNlXCIgKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5ncmVlZHkgJiZcblx0XHRcdFx0XHQhaW5zdC5vcHRpb25zLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnNjb3BlID09PSBkcmFnZ2FibGUub3B0aW9ucy5zY29wZSAmJlxuXHRcdFx0XHRcdGluc3QuYWNjZXB0LmNhbGwoXG5cdFx0XHRcdFx0XHRpbnN0LmVsZW1lbnRbIDAgXSwgKCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHwgZHJhZ2dhYmxlLmVsZW1lbnQgKVxuXHRcdFx0XHRcdCkgJiZcblx0XHRcdFx0XHRpbnRlcnNlY3QoXG5cdFx0XHRcdFx0XHRkcmFnZ2FibGUsXG5cdFx0XHRcdFx0XHQkLmV4dGVuZCggaW5zdCwgeyBvZmZzZXQ6IGluc3QuZWxlbWVudC5vZmZzZXQoKSB9ICksXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMudG9sZXJhbmNlLCBldmVudFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y2hpbGRyZW5JbnRlcnNlY3Rpb24gPSB0cnVlO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTsgfVxuXHRcdFx0fSApO1xuXHRcdGlmICggY2hpbGRyZW5JbnRlcnNlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0KCBkcmFnZ2FibGUuY3VycmVudEl0ZW0gfHwgZHJhZ2dhYmxlLmVsZW1lbnQgKSApICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKTtcblx0XHRcdHRoaXMuX3JlbW92ZUhvdmVyQ2xhc3MoKTtcblxuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJkcm9wXCIsIGV2ZW50LCB0aGlzLnVpKCBkcmFnZ2FibGUgKSApO1xuXHRcdFx0cmV0dXJuIHRoaXMuZWxlbWVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSxcblxuXHR1aTogZnVuY3Rpb24oIGMgKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRyYWdnYWJsZTogKCBjLmN1cnJlbnRJdGVtIHx8IGMuZWxlbWVudCApLFxuXHRcdFx0aGVscGVyOiBjLmhlbHBlcixcblx0XHRcdHBvc2l0aW9uOiBjLnBvc2l0aW9uLFxuXHRcdFx0b2Zmc2V0OiBjLnBvc2l0aW9uQWJzXG5cdFx0fTtcblx0fSxcblxuXHQvLyBFeHRlbnNpb24gcG9pbnRzIGp1c3QgdG8gbWFrZSBiYWNrY29tcGF0IHNhbmUgYW5kIGF2b2lkIGR1cGxpY2F0aW5nIGxvZ2ljXG5cdC8vIFRPRE86IFJlbW92ZSBpbiAxLjEzIGFsb25nIHdpdGggY2FsbCB0byBpdCBiZWxvd1xuXHRfYWRkSG92ZXJDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktZHJvcHBhYmxlLWhvdmVyXCIgKTtcblx0fSxcblxuXHRfcmVtb3ZlSG92ZXJDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktZHJvcHBhYmxlLWhvdmVyXCIgKTtcblx0fSxcblxuXHRfYWRkQWN0aXZlQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWRyb3BwYWJsZS1hY3RpdmVcIiApO1xuXHR9LFxuXG5cdF9yZW1vdmVBY3RpdmVDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktZHJvcHBhYmxlLWFjdGl2ZVwiICk7XG5cdH1cbn0gKTtcblxudmFyIGludGVyc2VjdCA9ICQudWkuaW50ZXJzZWN0ID0gKCBmdW5jdGlvbigpIHtcblx0ZnVuY3Rpb24gaXNPdmVyQXhpcyggeCwgcmVmZXJlbmNlLCBzaXplICkge1xuXHRcdHJldHVybiAoIHggPj0gcmVmZXJlbmNlICkgJiYgKCB4IDwgKCByZWZlcmVuY2UgKyBzaXplICkgKTtcblx0fVxuXG5cdHJldHVybiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBkcm9wcGFibGUsIHRvbGVyYW5jZU1vZGUsIGV2ZW50ICkge1xuXG5cdFx0aWYgKCAhZHJvcHBhYmxlLm9mZnNldCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgeDEgPSAoIGRyYWdnYWJsZS5wb3NpdGlvbkFicyB8fFxuXHRcdFx0XHRkcmFnZ2FibGUucG9zaXRpb24uYWJzb2x1dGUgKS5sZWZ0ICsgZHJhZ2dhYmxlLm1hcmdpbnMubGVmdCxcblx0XHRcdHkxID0gKCBkcmFnZ2FibGUucG9zaXRpb25BYnMgfHxcblx0XHRcdFx0ZHJhZ2dhYmxlLnBvc2l0aW9uLmFic29sdXRlICkudG9wICsgZHJhZ2dhYmxlLm1hcmdpbnMudG9wLFxuXHRcdFx0eDIgPSB4MSArIGRyYWdnYWJsZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxcblx0XHRcdHkyID0geTEgKyBkcmFnZ2FibGUuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LFxuXHRcdFx0bCA9IGRyb3BwYWJsZS5vZmZzZXQubGVmdCxcblx0XHRcdHQgPSBkcm9wcGFibGUub2Zmc2V0LnRvcCxcblx0XHRcdHIgPSBsICsgZHJvcHBhYmxlLnByb3BvcnRpb25zKCkud2lkdGgsXG5cdFx0XHRiID0gdCArIGRyb3BwYWJsZS5wcm9wb3J0aW9ucygpLmhlaWdodDtcblxuXHRcdHN3aXRjaCAoIHRvbGVyYW5jZU1vZGUgKSB7XG5cdFx0Y2FzZSBcImZpdFwiOlxuXHRcdFx0cmV0dXJuICggbCA8PSB4MSAmJiB4MiA8PSByICYmIHQgPD0geTEgJiYgeTIgPD0gYiApO1xuXHRcdGNhc2UgXCJpbnRlcnNlY3RcIjpcblx0XHRcdHJldHVybiAoIGwgPCB4MSArICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC8gMiApICYmIC8vIFJpZ2h0IEhhbGZcblx0XHRcdFx0eDIgLSAoIGRyYWdnYWJsZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAvIDIgKSA8IHIgJiYgLy8gTGVmdCBIYWxmXG5cdFx0XHRcdHQgPCB5MSArICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgKSAmJiAvLyBCb3R0b20gSGFsZlxuXHRcdFx0XHR5MiAtICggZHJhZ2dhYmxlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgKSA8IGIgKTsgLy8gVG9wIEhhbGZcblx0XHRjYXNlIFwicG9pbnRlclwiOlxuXHRcdFx0cmV0dXJuIGlzT3ZlckF4aXMoIGV2ZW50LnBhZ2VZLCB0LCBkcm9wcGFibGUucHJvcG9ydGlvbnMoKS5oZWlnaHQgKSAmJlxuXHRcdFx0XHRpc092ZXJBeGlzKCBldmVudC5wYWdlWCwgbCwgZHJvcHBhYmxlLnByb3BvcnRpb25zKCkud2lkdGggKTtcblx0XHRjYXNlIFwidG91Y2hcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCggeTEgPj0gdCAmJiB5MSA8PSBiICkgfHwgLy8gVG9wIGVkZ2UgdG91Y2hpbmdcblx0XHRcdFx0KCB5MiA+PSB0ICYmIHkyIDw9IGIgKSB8fCAvLyBCb3R0b20gZWRnZSB0b3VjaGluZ1xuXHRcdFx0XHQoIHkxIDwgdCAmJiB5MiA+IGIgKSAvLyBTdXJyb3VuZGVkIHZlcnRpY2FsbHlcblx0XHRcdCkgJiYgKFxuXHRcdFx0XHQoIHgxID49IGwgJiYgeDEgPD0gciApIHx8IC8vIExlZnQgZWRnZSB0b3VjaGluZ1xuXHRcdFx0XHQoIHgyID49IGwgJiYgeDIgPD0gciApIHx8IC8vIFJpZ2h0IGVkZ2UgdG91Y2hpbmdcblx0XHRcdFx0KCB4MSA8IGwgJiYgeDIgPiByICkgLy8gU3Vycm91bmRlZCBob3Jpem9udGFsbHlcblx0XHRcdCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH07XG59ICkoKTtcblxuLypcblx0VGhpcyBtYW5hZ2VyIHRyYWNrcyBvZmZzZXRzIG9mIGRyYWdnYWJsZXMgYW5kIGRyb3BwYWJsZXNcbiovXG4kLnVpLmRkbWFuYWdlciA9IHtcblx0Y3VycmVudDogbnVsbCxcblx0ZHJvcHBhYmxlczogeyBcImRlZmF1bHRcIjogW10gfSxcblx0cHJlcGFyZU9mZnNldHM6IGZ1bmN0aW9uKCB0LCBldmVudCApIHtcblxuXHRcdHZhciBpLCBqLFxuXHRcdFx0bSA9ICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIHQub3B0aW9ucy5zY29wZSBdIHx8IFtdLFxuXHRcdFx0dHlwZSA9IGV2ZW50ID8gZXZlbnQudHlwZSA6IG51bGwsIC8vIHdvcmthcm91bmQgZm9yICMyMzE3XG5cdFx0XHRsaXN0ID0gKCB0LmN1cnJlbnRJdGVtIHx8IHQuZWxlbWVudCApLmZpbmQoIFwiOmRhdGEodWktZHJvcHBhYmxlKVwiICkuYWRkQmFjaygpO1xuXG5cdFx0ZHJvcHBhYmxlc0xvb3A6IGZvciAoIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKyApIHtcblxuXHRcdFx0Ly8gTm8gZGlzYWJsZWQgYW5kIG5vbi1hY2NlcHRlZFxuXHRcdFx0aWYgKCBtWyBpIF0ub3B0aW9ucy5kaXNhYmxlZCB8fCAoIHQgJiYgIW1bIGkgXS5hY2NlcHQuY2FsbCggbVsgaSBdLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0XHQoIHQuY3VycmVudEl0ZW0gfHwgdC5lbGVtZW50ICkgKSApICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkcmFnZ2VkIGl0ZW1cblx0XHRcdGZvciAoIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKyApIHtcblx0XHRcdFx0aWYgKCBsaXN0WyBqIF0gPT09IG1bIGkgXS5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRcdFx0bVsgaSBdLnByb3BvcnRpb25zKCkuaGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRjb250aW51ZSBkcm9wcGFibGVzTG9vcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRtWyBpIF0udmlzaWJsZSA9IG1bIGkgXS5lbGVtZW50LmNzcyggXCJkaXNwbGF5XCIgKSAhPT0gXCJub25lXCI7XG5cdFx0XHRpZiAoICFtWyBpIF0udmlzaWJsZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjdGl2YXRlIHRoZSBkcm9wcGFibGUgaWYgdXNlZCBkaXJlY3RseSBmcm9tIGRyYWdnYWJsZXNcblx0XHRcdGlmICggdHlwZSA9PT0gXCJtb3VzZWRvd25cIiApIHtcblx0XHRcdFx0bVsgaSBdLl9hY3RpdmF0ZS5jYWxsKCBtWyBpIF0sIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdG1bIGkgXS5vZmZzZXQgPSBtWyBpIF0uZWxlbWVudC5vZmZzZXQoKTtcblx0XHRcdG1bIGkgXS5wcm9wb3J0aW9ucygge1xuXHRcdFx0XHR3aWR0aDogbVsgaSBdLmVsZW1lbnRbIDAgXS5vZmZzZXRXaWR0aCxcblx0XHRcdFx0aGVpZ2h0OiBtWyBpIF0uZWxlbWVudFsgMCBdLm9mZnNldEhlaWdodFxuXHRcdFx0fSApO1xuXG5cdFx0fVxuXG5cdH0sXG5cdGRyb3A6IGZ1bmN0aW9uKCBkcmFnZ2FibGUsIGV2ZW50ICkge1xuXG5cdFx0dmFyIGRyb3BwZWQgPSBmYWxzZTtcblxuXHRcdC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGRyb3BwYWJsZXMgaW4gY2FzZSB0aGUgbGlzdCBjaGFuZ2VzIGR1cmluZyB0aGUgZHJvcCAoIzkxMTYpXG5cdFx0JC5lYWNoKCAoICQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbIGRyYWdnYWJsZS5vcHRpb25zLnNjb3BlIF0gfHwgW10gKS5zbGljZSgpLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0aWYgKCAhdGhpcy5vcHRpb25zICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdGhpcy52aXNpYmxlICYmXG5cdFx0XHRcdFx0aW50ZXJzZWN0KCBkcmFnZ2FibGUsIHRoaXMsIHRoaXMub3B0aW9ucy50b2xlcmFuY2UsIGV2ZW50ICkgKSB7XG5cdFx0XHRcdGRyb3BwZWQgPSB0aGlzLl9kcm9wLmNhbGwoIHRoaXMsIGV2ZW50ICkgfHwgZHJvcHBlZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMudmlzaWJsZSAmJiB0aGlzLmFjY2VwdC5jYWxsKCB0aGlzLmVsZW1lbnRbIDAgXSxcblx0XHRcdFx0XHQoIGRyYWdnYWJsZS5jdXJyZW50SXRlbSB8fCBkcmFnZ2FibGUuZWxlbWVudCApICkgKSB7XG5cdFx0XHRcdHRoaXMuaXNvdXQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmlzb3ZlciA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9kZWFjdGl2YXRlLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHR9ICk7XG5cdFx0cmV0dXJuIGRyb3BwZWQ7XG5cblx0fSxcblx0ZHJhZ1N0YXJ0OiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBldmVudCApIHtcblxuXHRcdC8vIExpc3RlbiBmb3Igc2Nyb2xsaW5nIHNvIHRoYXQgaWYgdGhlIGRyYWdnaW5nIGNhdXNlcyBzY3JvbGxpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZVxuXHRcdC8vIGRyb3BwYWJsZXMgY2FuIGJlIHJlY2FsY3VsYXRlZCAoc2VlICM1MDAzKVxuXHRcdGRyYWdnYWJsZS5lbGVtZW50LnBhcmVudHNVbnRpbCggXCJib2R5XCIgKS5vbiggXCJzY3JvbGwuZHJvcHBhYmxlXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhZHJhZ2dhYmxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyApIHtcblx0XHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIGRyYWdnYWJsZSwgZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGRyYWc6IGZ1bmN0aW9uKCBkcmFnZ2FibGUsIGV2ZW50ICkge1xuXG5cdFx0Ly8gSWYgeW91IGhhdmUgYSBoaWdobHkgZHluYW1pYyBwYWdlLCB5b3UgbWlnaHQgdHJ5IHRoaXMgb3B0aW9uLiBJdCByZW5kZXJzIHBvc2l0aW9uc1xuXHRcdC8vIGV2ZXJ5IHRpbWUgeW91IG1vdmUgdGhlIG1vdXNlLlxuXHRcdGlmICggZHJhZ2dhYmxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKCBkcmFnZ2FibGUsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUnVuIHRocm91Z2ggYWxsIGRyb3BwYWJsZXMgYW5kIGNoZWNrIHRoZWlyIHBvc2l0aW9ucyBiYXNlZCBvbiBzcGVjaWZpYyB0b2xlcmFuY2Ugb3B0aW9uc1xuXHRcdCQuZWFjaCggJC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1sgZHJhZ2dhYmxlLm9wdGlvbnMuc2NvcGUgXSB8fCBbXSwgZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkIHx8IHRoaXMuZ3JlZWR5Q2hpbGQgfHwgIXRoaXMudmlzaWJsZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcGFyZW50SW5zdGFuY2UsIHNjb3BlLCBwYXJlbnQsXG5cdFx0XHRcdGludGVyc2VjdHMgPSBpbnRlcnNlY3QoIGRyYWdnYWJsZSwgdGhpcywgdGhpcy5vcHRpb25zLnRvbGVyYW5jZSwgZXZlbnQgKSxcblx0XHRcdFx0YyA9ICFpbnRlcnNlY3RzICYmIHRoaXMuaXNvdmVyID9cblx0XHRcdFx0XHRcImlzb3V0XCIgOlxuXHRcdFx0XHRcdCggaW50ZXJzZWN0cyAmJiAhdGhpcy5pc292ZXIgPyBcImlzb3ZlclwiIDogbnVsbCApO1xuXHRcdFx0aWYgKCAhYyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy5ncmVlZHkgKSB7XG5cblx0XHRcdFx0Ly8gZmluZCBkcm9wcGFibGUgcGFyZW50cyB3aXRoIHNhbWUgc2NvcGVcblx0XHRcdFx0c2NvcGUgPSB0aGlzLm9wdGlvbnMuc2NvcGU7XG5cdFx0XHRcdHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnRzKCBcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIiApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5kcm9wcGFibGUoIFwiaW5zdGFuY2VcIiApLm9wdGlvbnMuc2NvcGUgPT09IHNjb3BlO1xuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQubGVuZ3RoICkge1xuXHRcdFx0XHRcdHBhcmVudEluc3RhbmNlID0gJCggcGFyZW50WyAwIF0gKS5kcm9wcGFibGUoIFwiaW5zdGFuY2VcIiApO1xuXHRcdFx0XHRcdHBhcmVudEluc3RhbmNlLmdyZWVkeUNoaWxkID0gKCBjID09PSBcImlzb3ZlclwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UganVzdCBtb3ZlZCBpbnRvIGEgZ3JlZWR5IGNoaWxkXG5cdFx0XHRpZiAoIHBhcmVudEluc3RhbmNlICYmIGMgPT09IFwiaXNvdmVyXCIgKSB7XG5cdFx0XHRcdHBhcmVudEluc3RhbmNlLmlzb3ZlciA9IGZhbHNlO1xuXHRcdFx0XHRwYXJlbnRJbnN0YW5jZS5pc291dCA9IHRydWU7XG5cdFx0XHRcdHBhcmVudEluc3RhbmNlLl9vdXQuY2FsbCggcGFyZW50SW5zdGFuY2UsIGV2ZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbIGMgXSA9IHRydWU7XG5cdFx0XHR0aGlzWyBjID09PSBcImlzb3V0XCIgPyBcImlzb3ZlclwiIDogXCJpc291dFwiIF0gPSBmYWxzZTtcblx0XHRcdHRoaXNbIGMgPT09IFwiaXNvdmVyXCIgPyBcIl9vdmVyXCIgOiBcIl9vdXRcIiBdLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cblx0XHRcdC8vIFdlIGp1c3QgbW92ZWQgb3V0IG9mIGEgZ3JlZWR5IGNoaWxkXG5cdFx0XHRpZiAoIHBhcmVudEluc3RhbmNlICYmIGMgPT09IFwiaXNvdXRcIiApIHtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuaXNvdXQgPSBmYWxzZTtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuaXNvdmVyID0gdHJ1ZTtcblx0XHRcdFx0cGFyZW50SW5zdGFuY2UuX292ZXIuY2FsbCggcGFyZW50SW5zdGFuY2UsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0sXG5cdGRyYWdTdG9wOiBmdW5jdGlvbiggZHJhZ2dhYmxlLCBldmVudCApIHtcblx0XHRkcmFnZ2FibGUuZWxlbWVudC5wYXJlbnRzVW50aWwoIFwiYm9keVwiICkub2ZmKCBcInNjcm9sbC5kcm9wcGFibGVcIiApO1xuXG5cdFx0Ly8gQ2FsbCBwcmVwYXJlT2Zmc2V0cyBvbmUgZmluYWwgdGltZSBzaW5jZSBJRSBkb2VzIG5vdCBmaXJlIHJldHVybiBzY3JvbGwgZXZlbnRzIHdoZW5cblx0XHQvLyBvdmVyZmxvdyB3YXMgY2F1c2VkIGJ5IGRyYWcgKHNlZSAjNTAwMylcblx0XHRpZiAoICFkcmFnZ2FibGUub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zICkge1xuXHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIGRyYWdnYWJsZSwgZXZlbnQgKTtcblx0XHR9XG5cdH1cbn07XG5cbi8vIERFUFJFQ0FURURcbi8vIFRPRE86IHN3aXRjaCByZXR1cm4gYmFjayB0byB3aWRnZXQgZGVjbGFyYXRpb24gYXQgdG9wIG9mIGZpbGUgd2hlbiB0aGlzIGlzIHJlbW92ZWRcbmlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICkge1xuXG5cdC8vIEJhY2tjb21wYXQgZm9yIGFjdGl2ZUNsYXNzIGFuZCBob3ZlckNsYXNzIG9wdGlvbnNcblx0JC53aWRnZXQoIFwidWkuZHJvcHBhYmxlXCIsICQudWkuZHJvcHBhYmxlLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0aG92ZXJDbGFzczogZmFsc2UsXG5cdFx0XHRhY3RpdmVDbGFzczogZmFsc2Vcblx0XHR9LFxuXHRcdF9hZGRBY3RpdmVDbGFzczogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfcmVtb3ZlQWN0aXZlQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoIHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X2FkZEhvdmVyQ2xhc3M6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9yZW1vdmVIb3ZlckNsYXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoIHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbnZhciB3aWRnZXRzRHJvcHBhYmxlID0gJC51aS5kcm9wcGFibGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgUmVzaXphYmxlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBSZXNpemFibGVcbi8vPj5ncm91cDogSW50ZXJhY3Rpb25zXG4vLz4+ZGVzY3JpcHRpb246IEVuYWJsZXMgcmVzaXplIGZ1bmN0aW9uYWxpdHkgZm9yIGFueSBlbGVtZW50LlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3Jlc2l6YWJsZS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9yZXNpemFibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9yZXNpemFibGUuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbiQud2lkZ2V0KCBcInVpLnJlc2l6YWJsZVwiLCAkLnVpLm1vdXNlLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdHdpZGdldEV2ZW50UHJlZml4OiBcInJlc2l6ZVwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YWxzb1Jlc2l6ZTogZmFsc2UsXG5cdFx0YW5pbWF0ZTogZmFsc2UsXG5cdFx0YW5pbWF0ZUR1cmF0aW9uOiBcInNsb3dcIixcblx0XHRhbmltYXRlRWFzaW5nOiBcInN3aW5nXCIsXG5cdFx0YXNwZWN0UmF0aW86IGZhbHNlLFxuXHRcdGF1dG9IaWRlOiBmYWxzZSxcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXJlc2l6YWJsZS1zZVwiOiBcInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2VcIlxuXHRcdH0sXG5cdFx0Y29udGFpbm1lbnQ6IGZhbHNlLFxuXHRcdGdob3N0OiBmYWxzZSxcblx0XHRncmlkOiBmYWxzZSxcblx0XHRoYW5kbGVzOiBcImUscyxzZVwiLFxuXHRcdGhlbHBlcjogZmFsc2UsXG5cdFx0bWF4SGVpZ2h0OiBudWxsLFxuXHRcdG1heFdpZHRoOiBudWxsLFxuXHRcdG1pbkhlaWdodDogMTAsXG5cdFx0bWluV2lkdGg6IDEwLFxuXG5cdFx0Ly8gU2VlICM3OTYwXG5cdFx0ekluZGV4OiA5MCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdHJlc2l6ZTogbnVsbCxcblx0XHRzdGFydDogbnVsbCxcblx0XHRzdG9wOiBudWxsXG5cdH0sXG5cblx0X251bTogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KCB2YWx1ZSApIHx8IDA7XG5cdH0sXG5cblx0X2lzTnVtYmVyOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuICFpc05hTiggcGFyc2VGbG9hdCggdmFsdWUgKSApO1xuXHR9LFxuXG5cdF9oYXNTY3JvbGw6IGZ1bmN0aW9uKCBlbCwgYSApIHtcblxuXHRcdGlmICggJCggZWwgKS5jc3MoIFwib3ZlcmZsb3dcIiApID09PSBcImhpZGRlblwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHZhciBzY3JvbGwgPSAoIGEgJiYgYSA9PT0gXCJsZWZ0XCIgKSA/IFwic2Nyb2xsTGVmdFwiIDogXCJzY3JvbGxUb3BcIixcblx0XHRcdGhhcyA9IGZhbHNlO1xuXG5cdFx0aWYgKCBlbFsgc2Nyb2xsIF0gPiAwICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gVE9ETzogZGV0ZXJtaW5lIHdoaWNoIGNhc2VzIGFjdHVhbGx5IGNhdXNlIHRoaXMgdG8gaGFwcGVuXG5cdFx0Ly8gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIHRoZSBzY3JvbGwgc2V0LCBzZWUgaWYgaXQncyBwb3NzaWJsZSB0b1xuXHRcdC8vIHNldCB0aGUgc2Nyb2xsXG5cdFx0ZWxbIHNjcm9sbCBdID0gMTtcblx0XHRoYXMgPSAoIGVsWyBzY3JvbGwgXSA+IDAgKTtcblx0XHRlbFsgc2Nyb2xsIF0gPSAwO1xuXHRcdHJldHVybiBoYXM7XG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgbWFyZ2lucyxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHR0aGF0ID0gdGhpcztcblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1yZXNpemFibGVcIiApO1xuXG5cdFx0JC5leHRlbmQoIHRoaXMsIHtcblx0XHRcdF9hc3BlY3RSYXRpbzogISEoIG8uYXNwZWN0UmF0aW8gKSxcblx0XHRcdGFzcGVjdFJhdGlvOiBvLmFzcGVjdFJhdGlvLFxuXHRcdFx0b3JpZ2luYWxFbGVtZW50OiB0aGlzLmVsZW1lbnQsXG5cdFx0XHRfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czogW10sXG5cdFx0XHRfaGVscGVyOiBvLmhlbHBlciB8fCBvLmdob3N0IHx8IG8uYW5pbWF0ZSA/IG8uaGVscGVyIHx8IFwidWktcmVzaXphYmxlLWhlbHBlclwiIDogbnVsbFxuXHRcdH0gKTtcblxuXHRcdC8vIFdyYXAgdGhlIGVsZW1lbnQgaWYgaXQgY2Fubm90IGhvbGQgY2hpbGQgbm9kZXNcblx0XHRpZiAoIHRoaXMuZWxlbWVudFsgMCBdLm5vZGVOYW1lLm1hdGNoKCAvXihjYW52YXN8dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbnxpbWcpJC9pICkgKSB7XG5cblx0XHRcdHRoaXMuZWxlbWVudC53cmFwKFxuXHRcdFx0XHQkKCBcIjxkaXYgY2xhc3M9J3VpLXdyYXBwZXInIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+PC9kaXY+XCIgKS5jc3MoIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogdGhpcy5lbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRcdFx0d2lkdGg6IHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksXG5cdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0XHR0b3A6IHRoaXMuZWxlbWVudC5jc3MoIFwidG9wXCIgKSxcblx0XHRcdFx0XHRsZWZ0OiB0aGlzLmVsZW1lbnQuY3NzKCBcImxlZnRcIiApXG5cdFx0XHRcdH0gKVxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5lbGVtZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoXG5cdFx0XHRcdFwidWktcmVzaXphYmxlXCIsIHRoaXMuZWxlbWVudC5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnRJc1dyYXBwZXIgPSB0cnVlO1xuXG5cdFx0XHRtYXJnaW5zID0ge1xuXHRcdFx0XHRtYXJnaW5Ub3A6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJtYXJnaW5Ub3BcIiApLFxuXHRcdFx0XHRtYXJnaW5SaWdodDogdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBcIm1hcmdpblJpZ2h0XCIgKSxcblx0XHRcdFx0bWFyZ2luQm90dG9tOiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIFwibWFyZ2luQm90dG9tXCIgKSxcblx0XHRcdFx0bWFyZ2luTGVmdDogdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBcIm1hcmdpbkxlZnRcIiApXG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCBtYXJnaW5zICk7XG5cdFx0XHR0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIFwibWFyZ2luXCIsIDAgKTtcblxuXHRcdFx0Ly8gc3VwcG9ydDogU2FmYXJpXG5cdFx0XHQvLyBQcmV2ZW50IFNhZmFyaSB0ZXh0YXJlYSByZXNpemVcblx0XHRcdHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSA9IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJyZXNpemVcIiApO1xuXHRcdFx0dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBcInJlc2l6ZVwiLCBcIm5vbmVcIiApO1xuXG5cdFx0XHR0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2goIHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJzdGF0aWNcIixcblx0XHRcdFx0em9vbTogMSxcblx0XHRcdFx0ZGlzcGxheTogXCJibG9ja1wiXG5cdFx0XHR9ICkgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0XHQvLyBhdm9pZCBJRSBqdW1wIChoYXJkIHNldCB0aGUgbWFyZ2luKVxuXHRcdFx0dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCBtYXJnaW5zICk7XG5cblx0XHRcdHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2V0dXBIYW5kbGVzKCk7XG5cblx0XHRpZiAoIG8uYXV0b0hpZGUgKSB7XG5cdFx0XHQkKCB0aGlzLmVsZW1lbnQgKVxuXHRcdFx0XHQub24oIFwibW91c2VlbnRlclwiLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIG8uZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiICk7XG5cdFx0XHRcdFx0dGhhdC5faGFuZGxlcy5zaG93KCk7XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQub24oIFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIG8uZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggIXRoYXQucmVzaXppbmcgKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIiApO1xuXHRcdFx0XHRcdFx0dGhhdC5faGFuZGxlcy5oaWRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fbW91c2VJbml0KCk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dGhpcy5fbW91c2VEZXN0cm95KCk7XG5cblx0XHR2YXIgd3JhcHBlcixcblx0XHRcdF9kZXN0cm95ID0gZnVuY3Rpb24oIGV4cCApIHtcblx0XHRcdFx0JCggZXhwIClcblx0XHRcdFx0XHQucmVtb3ZlRGF0YSggXCJyZXNpemFibGVcIiApXG5cdFx0XHRcdFx0LnJlbW92ZURhdGEoIFwidWktcmVzaXphYmxlXCIgKVxuXHRcdFx0XHRcdC5vZmYoIFwiLnJlc2l6YWJsZVwiIClcblx0XHRcdFx0XHQuZmluZCggXCIudWktcmVzaXphYmxlLWhhbmRsZVwiIClcblx0XHRcdFx0XHRcdC5yZW1vdmUoKTtcblx0XHRcdH07XG5cblx0XHQvLyBUT0RPOiBVbndyYXAgYXQgc2FtZSBET00gcG9zaXRpb25cblx0XHRpZiAoIHRoaXMuZWxlbWVudElzV3JhcHBlciApIHtcblx0XHRcdF9kZXN0cm95KCB0aGlzLmVsZW1lbnQgKTtcblx0XHRcdHdyYXBwZXIgPSB0aGlzLmVsZW1lbnQ7XG5cdFx0XHR0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIHtcblx0XHRcdFx0cG9zaXRpb246IHdyYXBwZXIuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdFx0d2lkdGg6IHdyYXBwZXIub3V0ZXJXaWR0aCgpLFxuXHRcdFx0XHRoZWlnaHQ6IHdyYXBwZXIub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0dG9wOiB3cmFwcGVyLmNzcyggXCJ0b3BcIiApLFxuXHRcdFx0XHRsZWZ0OiB3cmFwcGVyLmNzcyggXCJsZWZ0XCIgKVxuXHRcdFx0fSApLmluc2VydEFmdGVyKCB3cmFwcGVyICk7XG5cdFx0XHR3cmFwcGVyLnJlbW92ZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyggXCJyZXNpemVcIiwgdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlICk7XG5cdFx0X2Rlc3Ryb3koIHRoaXMub3JpZ2luYWxFbGVtZW50ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXG5cdFx0c3dpdGNoICgga2V5ICkge1xuXHRcdGNhc2UgXCJoYW5kbGVzXCI6XG5cdFx0XHR0aGlzLl9yZW1vdmVIYW5kbGVzKCk7XG5cdFx0XHR0aGlzLl9zZXR1cEhhbmRsZXMoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0X3NldHVwSGFuZGxlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG8gPSB0aGlzLm9wdGlvbnMsIGhhbmRsZSwgaSwgbiwgaG5hbWUsIGF4aXMsIHRoYXQgPSB0aGlzO1xuXHRcdHRoaXMuaGFuZGxlcyA9IG8uaGFuZGxlcyB8fFxuXHRcdFx0KCAhJCggXCIudWktcmVzaXphYmxlLWhhbmRsZVwiLCB0aGlzLmVsZW1lbnQgKS5sZW5ndGggP1xuXHRcdFx0XHRcImUscyxzZVwiIDoge1xuXHRcdFx0XHRcdG46IFwiLnVpLXJlc2l6YWJsZS1uXCIsXG5cdFx0XHRcdFx0ZTogXCIudWktcmVzaXphYmxlLWVcIixcblx0XHRcdFx0XHRzOiBcIi51aS1yZXNpemFibGUtc1wiLFxuXHRcdFx0XHRcdHc6IFwiLnVpLXJlc2l6YWJsZS13XCIsXG5cdFx0XHRcdFx0c2U6IFwiLnVpLXJlc2l6YWJsZS1zZVwiLFxuXHRcdFx0XHRcdHN3OiBcIi51aS1yZXNpemFibGUtc3dcIixcblx0XHRcdFx0XHRuZTogXCIudWktcmVzaXphYmxlLW5lXCIsXG5cdFx0XHRcdFx0bnc6IFwiLnVpLXJlc2l6YWJsZS1ud1wiXG5cdFx0XHRcdH0gKTtcblxuXHRcdHRoaXMuX2hhbmRsZXMgPSAkKCk7XG5cdFx0aWYgKCB0aGlzLmhhbmRsZXMuY29uc3RydWN0b3IgPT09IFN0cmluZyApIHtcblxuXHRcdFx0aWYgKCB0aGlzLmhhbmRsZXMgPT09IFwiYWxsXCIgKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlcyA9IFwibixlLHMsdyxzZSxzdyxuZSxud1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRuID0gdGhpcy5oYW5kbGVzLnNwbGl0KCBcIixcIiApO1xuXHRcdFx0dGhpcy5oYW5kbGVzID0ge307XG5cblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKyApIHtcblxuXHRcdFx0XHRoYW5kbGUgPSAkLnRyaW0oIG5bIGkgXSApO1xuXHRcdFx0XHRobmFtZSA9IFwidWktcmVzaXphYmxlLVwiICsgaGFuZGxlO1xuXHRcdFx0XHRheGlzID0gJCggXCI8ZGl2PlwiICk7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCBheGlzLCBcInVpLXJlc2l6YWJsZS1oYW5kbGUgXCIgKyBobmFtZSApO1xuXG5cdFx0XHRcdGF4aXMuY3NzKCB7IHpJbmRleDogby56SW5kZXggfSApO1xuXG5cdFx0XHRcdHRoaXMuaGFuZGxlc1sgaGFuZGxlIF0gPSBcIi51aS1yZXNpemFibGUtXCIgKyBoYW5kbGU7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5hcHBlbmQoIGF4aXMgKTtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHRoaXMuX3JlbmRlckF4aXMgPSBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXG5cdFx0XHR2YXIgaSwgYXhpcywgcGFkUG9zLCBwYWRXcmFwcGVyO1xuXG5cdFx0XHR0YXJnZXQgPSB0YXJnZXQgfHwgdGhpcy5lbGVtZW50O1xuXG5cdFx0XHRmb3IgKCBpIGluIHRoaXMuaGFuZGxlcyApIHtcblxuXHRcdFx0XHRpZiAoIHRoaXMuaGFuZGxlc1sgaSBdLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgKSB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVzWyBpIF0gPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oIHRoaXMuaGFuZGxlc1sgaSBdICkuZmlyc3QoKS5zaG93KCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuaGFuZGxlc1sgaSBdLmpxdWVyeSB8fCB0aGlzLmhhbmRsZXNbIGkgXS5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZXNbIGkgXSA9ICQoIHRoaXMuaGFuZGxlc1sgaSBdICk7XG5cdFx0XHRcdFx0dGhpcy5fb24oIHRoaXMuaGFuZGxlc1sgaSBdLCB7IFwibW91c2Vkb3duXCI6IHRoYXQuX21vdXNlRG93biB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHRoaXMuZWxlbWVudElzV3JhcHBlciAmJlxuXHRcdFx0XHRcdFx0dGhpcy5vcmlnaW5hbEVsZW1lbnRbIDAgXVxuXHRcdFx0XHRcdFx0XHQubm9kZU5hbWVcblx0XHRcdFx0XHRcdFx0Lm1hdGNoKCAvXih0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9uKSQvaSApICkge1xuXHRcdFx0XHRcdGF4aXMgPSAkKCB0aGlzLmhhbmRsZXNbIGkgXSwgdGhpcy5lbGVtZW50ICk7XG5cblx0XHRcdFx0XHRwYWRXcmFwcGVyID0gL3N3fG5lfG53fHNlfG58cy8udGVzdCggaSApID9cblx0XHRcdFx0XHRcdGF4aXMub3V0ZXJIZWlnaHQoKSA6XG5cdFx0XHRcdFx0XHRheGlzLm91dGVyV2lkdGgoKTtcblxuXHRcdFx0XHRcdHBhZFBvcyA9IFsgXCJwYWRkaW5nXCIsXG5cdFx0XHRcdFx0XHQvbmV8bnd8bi8udGVzdCggaSApID8gXCJUb3BcIiA6XG5cdFx0XHRcdFx0XHQvc2V8c3d8cy8udGVzdCggaSApID8gXCJCb3R0b21cIiA6XG5cdFx0XHRcdFx0XHQvXmUkLy50ZXN0KCBpICkgPyBcIlJpZ2h0XCIgOiBcIkxlZnRcIiBdLmpvaW4oIFwiXCIgKTtcblxuXHRcdFx0XHRcdHRhcmdldC5jc3MoIHBhZFBvcywgcGFkV3JhcHBlciApO1xuXG5cdFx0XHRcdFx0dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX2hhbmRsZXMgPSB0aGlzLl9oYW5kbGVzLmFkZCggdGhpcy5oYW5kbGVzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gVE9ETzogbWFrZSByZW5kZXJBeGlzIGEgcHJvdG90eXBlIGZ1bmN0aW9uXG5cdFx0dGhpcy5fcmVuZGVyQXhpcyggdGhpcy5lbGVtZW50ICk7XG5cblx0XHR0aGlzLl9oYW5kbGVzID0gdGhpcy5faGFuZGxlcy5hZGQoIHRoaXMuZWxlbWVudC5maW5kKCBcIi51aS1yZXNpemFibGUtaGFuZGxlXCIgKSApO1xuXHRcdHRoaXMuX2hhbmRsZXMuZGlzYWJsZVNlbGVjdGlvbigpO1xuXG5cdFx0dGhpcy5faGFuZGxlcy5vbiggXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICF0aGF0LnJlc2l6aW5nICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdGF4aXMgPSB0aGlzLmNsYXNzTmFtZS5tYXRjaCggL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoYXQuYXhpcyA9IGF4aXMgJiYgYXhpc1sgMSBdID8gYXhpc1sgMSBdIDogXCJzZVwiO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggby5hdXRvSGlkZSApIHtcblx0XHRcdHRoaXMuX2hhbmRsZXMuaGlkZSgpO1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X3JlbW92ZUhhbmRsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2hhbmRsZXMucmVtb3ZlKCk7XG5cdH0sXG5cblx0X21vdXNlQ2FwdHVyZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBpLCBoYW5kbGUsXG5cdFx0XHRjYXB0dXJlID0gZmFsc2U7XG5cblx0XHRmb3IgKCBpIGluIHRoaXMuaGFuZGxlcyApIHtcblx0XHRcdGhhbmRsZSA9ICQoIHRoaXMuaGFuZGxlc1sgaSBdIClbIDAgXTtcblx0XHRcdGlmICggaGFuZGxlID09PSBldmVudC50YXJnZXQgfHwgJC5jb250YWlucyggaGFuZGxlLCBldmVudC50YXJnZXQgKSApIHtcblx0XHRcdFx0Y2FwdHVyZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgY2FwdHVyZTtcblx0fSxcblxuXHRfbW91c2VTdGFydDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIGN1cmxlZnQsIGN1cnRvcCwgY3Vyc29yLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGVsID0gdGhpcy5lbGVtZW50O1xuXG5cdFx0dGhpcy5yZXNpemluZyA9IHRydWU7XG5cblx0XHR0aGlzLl9yZW5kZXJQcm94eSgpO1xuXG5cdFx0Y3VybGVmdCA9IHRoaXMuX251bSggdGhpcy5oZWxwZXIuY3NzKCBcImxlZnRcIiApICk7XG5cdFx0Y3VydG9wID0gdGhpcy5fbnVtKCB0aGlzLmhlbHBlci5jc3MoIFwidG9wXCIgKSApO1xuXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0Y3VybGVmdCArPSAkKCBvLmNvbnRhaW5tZW50ICkuc2Nyb2xsTGVmdCgpIHx8IDA7XG5cdFx0XHRjdXJ0b3AgKz0gJCggby5jb250YWlubWVudCApLnNjcm9sbFRvcCgpIHx8IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy5vZmZzZXQgPSB0aGlzLmhlbHBlci5vZmZzZXQoKTtcblx0XHR0aGlzLnBvc2l0aW9uID0geyBsZWZ0OiBjdXJsZWZ0LCB0b3A6IGN1cnRvcCB9O1xuXG5cdFx0dGhpcy5zaXplID0gdGhpcy5faGVscGVyID8ge1xuXHRcdFx0XHR3aWR0aDogdGhpcy5oZWxwZXIud2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmhlbHBlci5oZWlnaHQoKVxuXHRcdFx0fSA6IHtcblx0XHRcdFx0d2lkdGg6IGVsLndpZHRoKCksXG5cdFx0XHRcdGhlaWdodDogZWwuaGVpZ2h0KClcblx0XHRcdH07XG5cblx0XHR0aGlzLm9yaWdpbmFsU2l6ZSA9IHRoaXMuX2hlbHBlciA/IHtcblx0XHRcdFx0d2lkdGg6IGVsLm91dGVyV2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiBlbC5vdXRlckhlaWdodCgpXG5cdFx0XHR9IDoge1xuXHRcdFx0XHR3aWR0aDogZWwud2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiBlbC5oZWlnaHQoKVxuXHRcdFx0fTtcblxuXHRcdHRoaXMuc2l6ZURpZmYgPSB7XG5cdFx0XHR3aWR0aDogZWwub3V0ZXJXaWR0aCgpIC0gZWwud2lkdGgoKSxcblx0XHRcdGhlaWdodDogZWwub3V0ZXJIZWlnaHQoKSAtIGVsLmhlaWdodCgpXG5cdFx0fTtcblxuXHRcdHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHsgbGVmdDogY3VybGVmdCwgdG9wOiBjdXJ0b3AgfTtcblx0XHR0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbiA9IHsgbGVmdDogZXZlbnQucGFnZVgsIHRvcDogZXZlbnQucGFnZVkgfTtcblxuXHRcdHRoaXMuYXNwZWN0UmF0aW8gPSAoIHR5cGVvZiBvLmFzcGVjdFJhdGlvID09PSBcIm51bWJlclwiICkgP1xuXHRcdFx0by5hc3BlY3RSYXRpbyA6XG5cdFx0XHQoICggdGhpcy5vcmlnaW5hbFNpemUud2lkdGggLyB0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQgKSB8fCAxICk7XG5cblx0XHRjdXJzb3IgPSAkKCBcIi51aS1yZXNpemFibGUtXCIgKyB0aGlzLmF4aXMgKS5jc3MoIFwiY3Vyc29yXCIgKTtcblx0XHQkKCBcImJvZHlcIiApLmNzcyggXCJjdXJzb3JcIiwgY3Vyc29yID09PSBcImF1dG9cIiA/IHRoaXMuYXhpcyArIFwiLXJlc2l6ZVwiIDogY3Vyc29yICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiApO1xuXHRcdHRoaXMuX3Byb3BhZ2F0ZSggXCJzdGFydFwiLCBldmVudCApO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBkYXRhLCBwcm9wcyxcblx0XHRcdHNtcCA9IHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLFxuXHRcdFx0YSA9IHRoaXMuYXhpcyxcblx0XHRcdGR4ID0gKCBldmVudC5wYWdlWCAtIHNtcC5sZWZ0ICkgfHwgMCxcblx0XHRcdGR5ID0gKCBldmVudC5wYWdlWSAtIHNtcC50b3AgKSB8fCAwLFxuXHRcdFx0dHJpZ2dlciA9IHRoaXMuX2NoYW5nZVsgYSBdO1xuXG5cdFx0dGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKTtcblxuXHRcdGlmICggIXRyaWdnZXIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0ZGF0YSA9IHRyaWdnZXIuYXBwbHkoIHRoaXMsIFsgZXZlbnQsIGR4LCBkeSBdICk7XG5cblx0XHR0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyggZXZlbnQuc2hpZnRLZXkgKTtcblx0XHRpZiAoIHRoaXMuX2FzcGVjdFJhdGlvIHx8IGV2ZW50LnNoaWZ0S2V5ICkge1xuXHRcdFx0ZGF0YSA9IHRoaXMuX3VwZGF0ZVJhdGlvKCBkYXRhLCBldmVudCApO1xuXHRcdH1cblxuXHRcdGRhdGEgPSB0aGlzLl9yZXNwZWN0U2l6ZSggZGF0YSwgZXZlbnQgKTtcblxuXHRcdHRoaXMuX3VwZGF0ZUNhY2hlKCBkYXRhICk7XG5cblx0XHR0aGlzLl9wcm9wYWdhdGUoIFwicmVzaXplXCIsIGV2ZW50ICk7XG5cblx0XHRwcm9wcyA9IHRoaXMuX2FwcGx5Q2hhbmdlcygpO1xuXG5cdFx0aWYgKCAhdGhpcy5faGVscGVyICYmIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKTtcblx0XHR9XG5cblx0XHRpZiAoICEkLmlzRW1wdHlPYmplY3QoIHByb3BzICkgKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVQcmV2UHJvcGVydGllcygpO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJyZXNpemVcIiwgZXZlbnQsIHRoaXMudWkoKSApO1xuXHRcdFx0dGhpcy5fYXBwbHlDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdF9tb3VzZVN0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHRoaXMucmVzaXppbmcgPSBmYWxzZTtcblx0XHR2YXIgcHIsIGlzdGEsIHNvZmZzZXRoLCBzb2Zmc2V0dywgcywgbGVmdCwgdG9wLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucywgdGhhdCA9IHRoaXM7XG5cblx0XHRpZiAoIHRoaXMuX2hlbHBlciApIHtcblxuXHRcdFx0cHIgPSB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzO1xuXHRcdFx0aXN0YSA9IHByLmxlbmd0aCAmJiAoIC90ZXh0YXJlYS9pICkudGVzdCggcHJbIDAgXS5ub2RlTmFtZSApO1xuXHRcdFx0c29mZnNldGggPSBpc3RhICYmIHRoaXMuX2hhc1Njcm9sbCggcHJbIDAgXSwgXCJsZWZ0XCIgKSA/IDAgOiB0aGF0LnNpemVEaWZmLmhlaWdodDtcblx0XHRcdHNvZmZzZXR3ID0gaXN0YSA/IDAgOiB0aGF0LnNpemVEaWZmLndpZHRoO1xuXG5cdFx0XHRzID0ge1xuXHRcdFx0XHR3aWR0aDogKCB0aGF0LmhlbHBlci53aWR0aCgpICAtIHNvZmZzZXR3ICksXG5cdFx0XHRcdGhlaWdodDogKCB0aGF0LmhlbHBlci5oZWlnaHQoKSAtIHNvZmZzZXRoIClcblx0XHRcdH07XG5cdFx0XHRsZWZ0ID0gKCBwYXJzZUZsb2F0KCB0aGF0LmVsZW1lbnQuY3NzKCBcImxlZnRcIiApICkgK1xuXHRcdFx0XHQoIHRoYXQucG9zaXRpb24ubGVmdCAtIHRoYXQub3JpZ2luYWxQb3NpdGlvbi5sZWZ0ICkgKSB8fCBudWxsO1xuXHRcdFx0dG9wID0gKCBwYXJzZUZsb2F0KCB0aGF0LmVsZW1lbnQuY3NzKCBcInRvcFwiICkgKSArXG5cdFx0XHRcdCggdGhhdC5wb3NpdGlvbi50b3AgLSB0aGF0Lm9yaWdpbmFsUG9zaXRpb24udG9wICkgKSB8fCBudWxsO1xuXG5cdFx0XHRpZiAoICFvLmFuaW1hdGUgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoICQuZXh0ZW5kKCBzLCB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH0gKSApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGF0LmhlbHBlci5oZWlnaHQoIHRoYXQuc2l6ZS5oZWlnaHQgKTtcblx0XHRcdHRoYXQuaGVscGVyLndpZHRoKCB0aGF0LnNpemUud2lkdGggKTtcblxuXHRcdFx0aWYgKCB0aGlzLl9oZWxwZXIgJiYgIW8uYW5pbWF0ZSApIHtcblx0XHRcdFx0dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQkKCBcImJvZHlcIiApLmNzcyggXCJjdXJzb3JcIiwgXCJhdXRvXCIgKTtcblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBcInVpLXJlc2l6YWJsZS1yZXNpemluZ1wiICk7XG5cblx0XHR0aGlzLl9wcm9wYWdhdGUoIFwic3RvcFwiLCBldmVudCApO1xuXG5cdFx0aWYgKCB0aGlzLl9oZWxwZXIgKSB7XG5cdFx0XHR0aGlzLmhlbHBlci5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSxcblxuXHRfdXBkYXRlUHJldlByb3BlcnRpZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMucHJldlBvc2l0aW9uID0ge1xuXHRcdFx0dG9wOiB0aGlzLnBvc2l0aW9uLnRvcCxcblx0XHRcdGxlZnQ6IHRoaXMucG9zaXRpb24ubGVmdFxuXHRcdH07XG5cdFx0dGhpcy5wcmV2U2l6ZSA9IHtcblx0XHRcdHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHRcblx0XHR9O1xuXHR9LFxuXG5cdF9hcHBseUNoYW5nZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXG5cdFx0aWYgKCB0aGlzLnBvc2l0aW9uLnRvcCAhPT0gdGhpcy5wcmV2UG9zaXRpb24udG9wICkge1xuXHRcdFx0cHJvcHMudG9wID0gdGhpcy5wb3NpdGlvbi50b3AgKyBcInB4XCI7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5wb3NpdGlvbi5sZWZ0ICE9PSB0aGlzLnByZXZQb3NpdGlvbi5sZWZ0ICkge1xuXHRcdFx0cHJvcHMubGVmdCA9IHRoaXMucG9zaXRpb24ubGVmdCArIFwicHhcIjtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLnNpemUud2lkdGggIT09IHRoaXMucHJldlNpemUud2lkdGggKSB7XG5cdFx0XHRwcm9wcy53aWR0aCA9IHRoaXMuc2l6ZS53aWR0aCArIFwicHhcIjtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLnNpemUuaGVpZ2h0ICE9PSB0aGlzLnByZXZTaXplLmhlaWdodCApIHtcblx0XHRcdHByb3BzLmhlaWdodCA9IHRoaXMuc2l6ZS5oZWlnaHQgKyBcInB4XCI7XG5cdFx0fVxuXG5cdFx0dGhpcy5oZWxwZXIuY3NzKCBwcm9wcyApO1xuXG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9LFxuXG5cdF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczogZnVuY3Rpb24oIGZvcmNlQXNwZWN0UmF0aW8gKSB7XG5cdFx0dmFyIHBNaW5XaWR0aCwgcE1heFdpZHRoLCBwTWluSGVpZ2h0LCBwTWF4SGVpZ2h0LCBiLFxuXHRcdFx0byA9IHRoaXMub3B0aW9ucztcblxuXHRcdGIgPSB7XG5cdFx0XHRtaW5XaWR0aDogdGhpcy5faXNOdW1iZXIoIG8ubWluV2lkdGggKSA/IG8ubWluV2lkdGggOiAwLFxuXHRcdFx0bWF4V2lkdGg6IHRoaXMuX2lzTnVtYmVyKCBvLm1heFdpZHRoICkgPyBvLm1heFdpZHRoIDogSW5maW5pdHksXG5cdFx0XHRtaW5IZWlnaHQ6IHRoaXMuX2lzTnVtYmVyKCBvLm1pbkhlaWdodCApID8gby5taW5IZWlnaHQgOiAwLFxuXHRcdFx0bWF4SGVpZ2h0OiB0aGlzLl9pc051bWJlciggby5tYXhIZWlnaHQgKSA/IG8ubWF4SGVpZ2h0IDogSW5maW5pdHlcblx0XHR9O1xuXG5cdFx0aWYgKCB0aGlzLl9hc3BlY3RSYXRpbyB8fCBmb3JjZUFzcGVjdFJhdGlvICkge1xuXHRcdFx0cE1pbldpZHRoID0gYi5taW5IZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvO1xuXHRcdFx0cE1pbkhlaWdodCA9IGIubWluV2lkdGggLyB0aGlzLmFzcGVjdFJhdGlvO1xuXHRcdFx0cE1heFdpZHRoID0gYi5tYXhIZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvO1xuXHRcdFx0cE1heEhlaWdodCA9IGIubWF4V2lkdGggLyB0aGlzLmFzcGVjdFJhdGlvO1xuXG5cdFx0XHRpZiAoIHBNaW5XaWR0aCA+IGIubWluV2lkdGggKSB7XG5cdFx0XHRcdGIubWluV2lkdGggPSBwTWluV2lkdGg7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHBNaW5IZWlnaHQgPiBiLm1pbkhlaWdodCApIHtcblx0XHRcdFx0Yi5taW5IZWlnaHQgPSBwTWluSGVpZ2h0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBwTWF4V2lkdGggPCBiLm1heFdpZHRoICkge1xuXHRcdFx0XHRiLm1heFdpZHRoID0gcE1heFdpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBwTWF4SGVpZ2h0IDwgYi5tYXhIZWlnaHQgKSB7XG5cdFx0XHRcdGIubWF4SGVpZ2h0ID0gcE1heEhlaWdodDtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fdkJvdW5kYXJpZXMgPSBiO1xuXHR9LFxuXG5cdF91cGRhdGVDYWNoZTogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0dGhpcy5vZmZzZXQgPSB0aGlzLmhlbHBlci5vZmZzZXQoKTtcblx0XHRpZiAoIHRoaXMuX2lzTnVtYmVyKCBkYXRhLmxlZnQgKSApIHtcblx0XHRcdHRoaXMucG9zaXRpb24ubGVmdCA9IGRhdGEubGVmdDtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLl9pc051bWJlciggZGF0YS50b3AgKSApIHtcblx0XHRcdHRoaXMucG9zaXRpb24udG9wID0gZGF0YS50b3A7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5faXNOdW1iZXIoIGRhdGEuaGVpZ2h0ICkgKSB7XG5cdFx0XHR0aGlzLnNpemUuaGVpZ2h0ID0gZGF0YS5oZWlnaHQ7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5faXNOdW1iZXIoIGRhdGEud2lkdGggKSApIHtcblx0XHRcdHRoaXMuc2l6ZS53aWR0aCA9IGRhdGEud2lkdGg7XG5cdFx0fVxuXHR9LFxuXG5cdF91cGRhdGVSYXRpbzogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHR2YXIgY3BvcyA9IHRoaXMucG9zaXRpb24sXG5cdFx0XHRjc2l6ZSA9IHRoaXMuc2l6ZSxcblx0XHRcdGEgPSB0aGlzLmF4aXM7XG5cblx0XHRpZiAoIHRoaXMuX2lzTnVtYmVyKCBkYXRhLmhlaWdodCApICkge1xuXHRcdFx0ZGF0YS53aWR0aCA9ICggZGF0YS5oZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvICk7XG5cdFx0fSBlbHNlIGlmICggdGhpcy5faXNOdW1iZXIoIGRhdGEud2lkdGggKSApIHtcblx0XHRcdGRhdGEuaGVpZ2h0ID0gKCBkYXRhLndpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbyApO1xuXHRcdH1cblxuXHRcdGlmICggYSA9PT0gXCJzd1wiICkge1xuXHRcdFx0ZGF0YS5sZWZ0ID0gY3Bvcy5sZWZ0ICsgKCBjc2l6ZS53aWR0aCAtIGRhdGEud2lkdGggKTtcblx0XHRcdGRhdGEudG9wID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKCBhID09PSBcIm53XCIgKSB7XG5cdFx0XHRkYXRhLnRvcCA9IGNwb3MudG9wICsgKCBjc2l6ZS5oZWlnaHQgLSBkYXRhLmhlaWdodCApO1xuXHRcdFx0ZGF0YS5sZWZ0ID0gY3Bvcy5sZWZ0ICsgKCBjc2l6ZS53aWR0aCAtIGRhdGEud2lkdGggKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblxuXHRfcmVzcGVjdFNpemU6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0dmFyIG8gPSB0aGlzLl92Qm91bmRhcmllcyxcblx0XHRcdGEgPSB0aGlzLmF4aXMsXG5cdFx0XHRpc21heHcgPSB0aGlzLl9pc051bWJlciggZGF0YS53aWR0aCApICYmIG8ubWF4V2lkdGggJiYgKCBvLm1heFdpZHRoIDwgZGF0YS53aWR0aCApLFxuXHRcdFx0aXNtYXhoID0gdGhpcy5faXNOdW1iZXIoIGRhdGEuaGVpZ2h0ICkgJiYgby5tYXhIZWlnaHQgJiYgKCBvLm1heEhlaWdodCA8IGRhdGEuaGVpZ2h0ICksXG5cdFx0XHRpc21pbncgPSB0aGlzLl9pc051bWJlciggZGF0YS53aWR0aCApICYmIG8ubWluV2lkdGggJiYgKCBvLm1pbldpZHRoID4gZGF0YS53aWR0aCApLFxuXHRcdFx0aXNtaW5oID0gdGhpcy5faXNOdW1iZXIoIGRhdGEuaGVpZ2h0ICkgJiYgby5taW5IZWlnaHQgJiYgKCBvLm1pbkhlaWdodCA+IGRhdGEuaGVpZ2h0ICksXG5cdFx0XHRkdyA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0ICsgdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsXG5cdFx0XHRkaCA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbi50b3AgKyB0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQsXG5cdFx0XHRjdyA9IC9zd3xud3x3Ly50ZXN0KCBhICksIGNoID0gL253fG5lfG4vLnRlc3QoIGEgKTtcblx0XHRpZiAoIGlzbWludyApIHtcblx0XHRcdGRhdGEud2lkdGggPSBvLm1pbldpZHRoO1xuXHRcdH1cblx0XHRpZiAoIGlzbWluaCApIHtcblx0XHRcdGRhdGEuaGVpZ2h0ID0gby5taW5IZWlnaHQ7XG5cdFx0fVxuXHRcdGlmICggaXNtYXh3ICkge1xuXHRcdFx0ZGF0YS53aWR0aCA9IG8ubWF4V2lkdGg7XG5cdFx0fVxuXHRcdGlmICggaXNtYXhoICkge1xuXHRcdFx0ZGF0YS5oZWlnaHQgPSBvLm1heEhlaWdodDtcblx0XHR9XG5cblx0XHRpZiAoIGlzbWludyAmJiBjdyApIHtcblx0XHRcdGRhdGEubGVmdCA9IGR3IC0gby5taW5XaWR0aDtcblx0XHR9XG5cdFx0aWYgKCBpc21heHcgJiYgY3cgKSB7XG5cdFx0XHRkYXRhLmxlZnQgPSBkdyAtIG8ubWF4V2lkdGg7XG5cdFx0fVxuXHRcdGlmICggaXNtaW5oICYmIGNoICkge1xuXHRcdFx0ZGF0YS50b3AgPSBkaCAtIG8ubWluSGVpZ2h0O1xuXHRcdH1cblx0XHRpZiAoIGlzbWF4aCAmJiBjaCApIHtcblx0XHRcdGRhdGEudG9wID0gZGggLSBvLm1heEhlaWdodDtcblx0XHR9XG5cblx0XHQvLyBGaXhpbmcganVtcCBlcnJvciBvbiB0b3AvbGVmdCAtIGJ1ZyAjMjMzMFxuXHRcdGlmICggIWRhdGEud2lkdGggJiYgIWRhdGEuaGVpZ2h0ICYmICFkYXRhLmxlZnQgJiYgZGF0YS50b3AgKSB7XG5cdFx0XHRkYXRhLnRvcCA9IG51bGw7XG5cdFx0fSBlbHNlIGlmICggIWRhdGEud2lkdGggJiYgIWRhdGEuaGVpZ2h0ICYmICFkYXRhLnRvcCAmJiBkYXRhLmxlZnQgKSB7XG5cdFx0XHRkYXRhLmxlZnQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9LFxuXG5cdF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHdpZHRocyA9IFtdLFxuXHRcdFx0Ym9yZGVycyA9IFtcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwiYm9yZGVyVG9wV2lkdGhcIiApLFxuXHRcdFx0XHRlbGVtZW50LmNzcyggXCJib3JkZXJSaWdodFdpZHRoXCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwiYm9yZGVyQm90dG9tV2lkdGhcIiApLFxuXHRcdFx0XHRlbGVtZW50LmNzcyggXCJib3JkZXJMZWZ0V2lkdGhcIiApXG5cdFx0XHRdLFxuXHRcdFx0cGFkZGluZ3MgPSBbXG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcInBhZGRpbmdUb3BcIiApLFxuXHRcdFx0XHRlbGVtZW50LmNzcyggXCJwYWRkaW5nUmlnaHRcIiApLFxuXHRcdFx0XHRlbGVtZW50LmNzcyggXCJwYWRkaW5nQm90dG9tXCIgKSxcblx0XHRcdFx0ZWxlbWVudC5jc3MoIFwicGFkZGluZ0xlZnRcIiApXG5cdFx0XHRdO1xuXG5cdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0d2lkdGhzWyBpIF0gPSAoIHBhcnNlRmxvYXQoIGJvcmRlcnNbIGkgXSApIHx8IDAgKTtcblx0XHRcdHdpZHRoc1sgaSBdICs9ICggcGFyc2VGbG9hdCggcGFkZGluZ3NbIGkgXSApIHx8IDAgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aGVpZ2h0OiB3aWR0aHNbIDAgXSArIHdpZHRoc1sgMiBdLFxuXHRcdFx0d2lkdGg6IHdpZHRoc1sgMSBdICsgd2lkdGhzWyAzIF1cblx0XHR9O1xuXHR9LFxuXG5cdF9wcm9wb3J0aW9uYWxseVJlc2l6ZTogZnVuY3Rpb24oKSB7XG5cblx0XHRpZiAoICF0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgcHJlbCxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZWxlbWVudCA9IHRoaXMuaGVscGVyIHx8IHRoaXMuZWxlbWVudDtcblxuXHRcdGZvciAoIDsgaSA8IHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoOyBpKysgKSB7XG5cblx0XHRcdHByZWwgPSB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzWyBpIF07XG5cblx0XHRcdC8vIFRPRE86IFNlZW1zIGxpa2UgYSBidWcgdG8gY2FjaGUgdGhpcy5vdXRlckRpbWVuc2lvbnNcblx0XHRcdC8vIGNvbnNpZGVyaW5nIHRoYXQgd2UgYXJlIGluIGEgbG9vcC5cblx0XHRcdGlmICggIXRoaXMub3V0ZXJEaW1lbnNpb25zICkge1xuXHRcdFx0XHR0aGlzLm91dGVyRGltZW5zaW9ucyA9IHRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyggcHJlbCApO1xuXHRcdFx0fVxuXG5cdFx0XHRwcmVsLmNzcygge1xuXHRcdFx0XHRoZWlnaHQ6ICggZWxlbWVudC5oZWlnaHQoKSAtIHRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodCApIHx8IDAsXG5cdFx0XHRcdHdpZHRoOiAoIGVsZW1lbnQud2lkdGgoKSAtIHRoaXMub3V0ZXJEaW1lbnNpb25zLndpZHRoICkgfHwgMFxuXHRcdFx0fSApO1xuXG5cdFx0fVxuXG5cdH0sXG5cblx0X3JlbmRlclByb3h5OiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciBlbCA9IHRoaXMuZWxlbWVudCwgbyA9IHRoaXMub3B0aW9ucztcblx0XHR0aGlzLmVsZW1lbnRPZmZzZXQgPSBlbC5vZmZzZXQoKTtcblxuXHRcdGlmICggdGhpcy5faGVscGVyICkge1xuXG5cdFx0XHR0aGlzLmhlbHBlciA9IHRoaXMuaGVscGVyIHx8ICQoIFwiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PC9kaXY+XCIgKTtcblxuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaGVscGVyLCB0aGlzLl9oZWxwZXIgKTtcblx0XHRcdHRoaXMuaGVscGVyLmNzcygge1xuXHRcdFx0XHR3aWR0aDogdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0cG9zaXRpb246IFwiYWJzb2x1dGVcIixcblx0XHRcdFx0bGVmdDogdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQgKyBcInB4XCIsXG5cdFx0XHRcdHRvcDogdGhpcy5lbGVtZW50T2Zmc2V0LnRvcCArIFwicHhcIixcblx0XHRcdFx0ekluZGV4OiArK28uekluZGV4IC8vVE9ETzogRG9uJ3QgbW9kaWZ5IG9wdGlvblxuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmhlbHBlclxuXHRcdFx0XHQuYXBwZW5kVG8oIFwiYm9keVwiIClcblx0XHRcdFx0LmRpc2FibGVTZWxlY3Rpb24oKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmhlbHBlciA9IHRoaXMuZWxlbWVudDtcblx0XHR9XG5cblx0fSxcblxuXHRfY2hhbmdlOiB7XG5cdFx0ZTogZnVuY3Rpb24oIGV2ZW50LCBkeCApIHtcblx0XHRcdHJldHVybiB7IHdpZHRoOiB0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCArIGR4IH07XG5cdFx0fSxcblx0XHR3OiBmdW5jdGlvbiggZXZlbnQsIGR4ICkge1xuXHRcdFx0dmFyIGNzID0gdGhpcy5vcmlnaW5hbFNpemUsIHNwID0gdGhpcy5vcmlnaW5hbFBvc2l0aW9uO1xuXHRcdFx0cmV0dXJuIHsgbGVmdDogc3AubGVmdCArIGR4LCB3aWR0aDogY3Mud2lkdGggLSBkeCB9O1xuXHRcdH0sXG5cdFx0bjogZnVuY3Rpb24oIGV2ZW50LCBkeCwgZHkgKSB7XG5cdFx0XHR2YXIgY3MgPSB0aGlzLm9yaWdpbmFsU2l6ZSwgc3AgPSB0aGlzLm9yaWdpbmFsUG9zaXRpb247XG5cdFx0XHRyZXR1cm4geyB0b3A6IHNwLnRvcCArIGR5LCBoZWlnaHQ6IGNzLmhlaWdodCAtIGR5IH07XG5cdFx0fSxcblx0XHRzOiBmdW5jdGlvbiggZXZlbnQsIGR4LCBkeSApIHtcblx0XHRcdHJldHVybiB7IGhlaWdodDogdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0ICsgZHkgfTtcblx0XHR9LFxuXHRcdHNlOiBmdW5jdGlvbiggZXZlbnQsIGR4LCBkeSApIHtcblx0XHRcdHJldHVybiAkLmV4dGVuZCggdGhpcy5fY2hhbmdlLnMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLFxuXHRcdFx0XHR0aGlzLl9jaGFuZ2UuZS5hcHBseSggdGhpcywgWyBldmVudCwgZHgsIGR5IF0gKSApO1xuXHRcdH0sXG5cdFx0c3c6IGZ1bmN0aW9uKCBldmVudCwgZHgsIGR5ICkge1xuXHRcdFx0cmV0dXJuICQuZXh0ZW5kKCB0aGlzLl9jaGFuZ2Uucy5hcHBseSggdGhpcywgYXJndW1lbnRzICksXG5cdFx0XHRcdHRoaXMuX2NoYW5nZS53LmFwcGx5KCB0aGlzLCBbIGV2ZW50LCBkeCwgZHkgXSApICk7XG5cdFx0fSxcblx0XHRuZTogZnVuY3Rpb24oIGV2ZW50LCBkeCwgZHkgKSB7XG5cdFx0XHRyZXR1cm4gJC5leHRlbmQoIHRoaXMuX2NoYW5nZS5uLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSxcblx0XHRcdFx0dGhpcy5fY2hhbmdlLmUuYXBwbHkoIHRoaXMsIFsgZXZlbnQsIGR4LCBkeSBdICkgKTtcblx0XHR9LFxuXHRcdG53OiBmdW5jdGlvbiggZXZlbnQsIGR4LCBkeSApIHtcblx0XHRcdHJldHVybiAkLmV4dGVuZCggdGhpcy5fY2hhbmdlLm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLFxuXHRcdFx0XHR0aGlzLl9jaGFuZ2Uudy5hcHBseSggdGhpcywgWyBldmVudCwgZHgsIGR5IF0gKSApO1xuXHRcdH1cblx0fSxcblxuXHRfcHJvcGFnYXRlOiBmdW5jdGlvbiggbiwgZXZlbnQgKSB7XG5cdFx0JC51aS5wbHVnaW4uY2FsbCggdGhpcywgbiwgWyBldmVudCwgdGhpcy51aSgpIF0gKTtcblx0XHQoIG4gIT09IFwicmVzaXplXCIgJiYgdGhpcy5fdHJpZ2dlciggbiwgZXZlbnQsIHRoaXMudWkoKSApICk7XG5cdH0sXG5cblx0cGx1Z2luczoge30sXG5cblx0dWk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvcmlnaW5hbEVsZW1lbnQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LFxuXHRcdFx0ZWxlbWVudDogdGhpcy5lbGVtZW50LFxuXHRcdFx0aGVscGVyOiB0aGlzLmhlbHBlcixcblx0XHRcdHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuXHRcdFx0c2l6ZTogdGhpcy5zaXplLFxuXHRcdFx0b3JpZ2luYWxTaXplOiB0aGlzLm9yaWdpbmFsU2l6ZSxcblx0XHRcdG9yaWdpbmFsUG9zaXRpb246IHRoaXMub3JpZ2luYWxQb3NpdGlvblxuXHRcdH07XG5cdH1cblxufSApO1xuXG4vKlxuICogUmVzaXphYmxlIEV4dGVuc2lvbnNcbiAqL1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwicmVzaXphYmxlXCIsIFwiYW5pbWF0ZVwiLCB7XG5cblx0c3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0cHIgPSB0aGF0Ll9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLFxuXHRcdFx0aXN0YSA9IHByLmxlbmd0aCAmJiAoIC90ZXh0YXJlYS9pICkudGVzdCggcHJbIDAgXS5ub2RlTmFtZSApLFxuXHRcdFx0c29mZnNldGggPSBpc3RhICYmIHRoYXQuX2hhc1Njcm9sbCggcHJbIDAgXSwgXCJsZWZ0XCIgKSA/IDAgOiB0aGF0LnNpemVEaWZmLmhlaWdodCxcblx0XHRcdHNvZmZzZXR3ID0gaXN0YSA/IDAgOiB0aGF0LnNpemVEaWZmLndpZHRoLFxuXHRcdFx0c3R5bGUgPSB7XG5cdFx0XHRcdHdpZHRoOiAoIHRoYXQuc2l6ZS53aWR0aCAtIHNvZmZzZXR3ICksXG5cdFx0XHRcdGhlaWdodDogKCB0aGF0LnNpemUuaGVpZ2h0IC0gc29mZnNldGggKVxuXHRcdFx0fSxcblx0XHRcdGxlZnQgPSAoIHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwibGVmdFwiICkgKSArXG5cdFx0XHRcdCggdGhhdC5wb3NpdGlvbi5sZWZ0IC0gdGhhdC5vcmlnaW5hbFBvc2l0aW9uLmxlZnQgKSApIHx8IG51bGwsXG5cdFx0XHR0b3AgPSAoIHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwidG9wXCIgKSApICtcblx0XHRcdFx0KCB0aGF0LnBvc2l0aW9uLnRvcCAtIHRoYXQub3JpZ2luYWxQb3NpdGlvbi50b3AgKSApIHx8IG51bGw7XG5cblx0XHR0aGF0LmVsZW1lbnQuYW5pbWF0ZShcblx0XHRcdCQuZXh0ZW5kKCBzdHlsZSwgdG9wICYmIGxlZnQgPyB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH0gOiB7fSApLCB7XG5cdFx0XHRcdGR1cmF0aW9uOiBvLmFuaW1hdGVEdXJhdGlvbixcblx0XHRcdFx0ZWFzaW5nOiBvLmFuaW1hdGVFYXNpbmcsXG5cdFx0XHRcdHN0ZXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdFx0XHR3aWR0aDogcGFyc2VGbG9hdCggdGhhdC5lbGVtZW50LmNzcyggXCJ3aWR0aFwiICkgKSxcblx0XHRcdFx0XHRcdGhlaWdodDogcGFyc2VGbG9hdCggdGhhdC5lbGVtZW50LmNzcyggXCJoZWlnaHRcIiApICksXG5cdFx0XHRcdFx0XHR0b3A6IHBhcnNlRmxvYXQoIHRoYXQuZWxlbWVudC5jc3MoIFwidG9wXCIgKSApLFxuXHRcdFx0XHRcdFx0bGVmdDogcGFyc2VGbG9hdCggdGhhdC5lbGVtZW50LmNzcyggXCJsZWZ0XCIgKSApXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmICggcHIgJiYgcHIubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0JCggcHJbIDAgXSApLmNzcyggeyB3aWR0aDogZGF0YS53aWR0aCwgaGVpZ2h0OiBkYXRhLmhlaWdodCB9ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJvcGFnYXRpbmcgcmVzaXplLCBhbmQgdXBkYXRpbmcgdmFsdWVzIGZvciBlYWNoIGFuaW1hdGlvbiBzdGVwXG5cdFx0XHRcdFx0dGhhdC5fdXBkYXRlQ2FjaGUoIGRhdGEgKTtcblx0XHRcdFx0XHR0aGF0Ll9wcm9wYWdhdGUoIFwicmVzaXplXCIsIGV2ZW50ICk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwicmVzaXphYmxlXCIsIFwiY29udGFpbm1lbnRcIiwge1xuXG5cdHN0YXJ0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbWVudCwgcCwgY28sIGNoLCBjdywgd2lkdGgsIGhlaWdodCxcblx0XHRcdHRoYXQgPSAkKCB0aGlzICkucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKSxcblx0XHRcdG8gPSB0aGF0Lm9wdGlvbnMsXG5cdFx0XHRlbCA9IHRoYXQuZWxlbWVudCxcblx0XHRcdG9jID0gby5jb250YWlubWVudCxcblx0XHRcdGNlID0gKCBvYyBpbnN0YW5jZW9mICQgKSA/XG5cdFx0XHRcdG9jLmdldCggMCApIDpcblx0XHRcdFx0KCAvcGFyZW50Ly50ZXN0KCBvYyApICkgPyBlbC5wYXJlbnQoKS5nZXQoIDAgKSA6IG9jO1xuXG5cdFx0aWYgKCAhY2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhhdC5jb250YWluZXJFbGVtZW50ID0gJCggY2UgKTtcblxuXHRcdGlmICggL2RvY3VtZW50Ly50ZXN0KCBvYyApIHx8IG9jID09PSBkb2N1bWVudCApIHtcblx0XHRcdHRoYXQuY29udGFpbmVyT2Zmc2V0ID0ge1xuXHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHR0b3A6IDBcblx0XHRcdH07XG5cdFx0XHR0aGF0LmNvbnRhaW5lclBvc2l0aW9uID0ge1xuXHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHR0b3A6IDBcblx0XHRcdH07XG5cblx0XHRcdHRoYXQucGFyZW50RGF0YSA9IHtcblx0XHRcdFx0ZWxlbWVudDogJCggZG9jdW1lbnQgKSxcblx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0dG9wOiAwLFxuXHRcdFx0XHR3aWR0aDogJCggZG9jdW1lbnQgKS53aWR0aCgpLFxuXHRcdFx0XHRoZWlnaHQ6ICQoIGRvY3VtZW50ICkuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodFxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbWVudCA9ICQoIGNlICk7XG5cdFx0XHRwID0gW107XG5cdFx0XHQkKCBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJMZWZ0XCIsIFwiQm90dG9tXCIgXSApLmVhY2goIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRcdFx0XHRwWyBpIF0gPSB0aGF0Ll9udW0oIGVsZW1lbnQuY3NzKCBcInBhZGRpbmdcIiArIG5hbWUgKSApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGF0LmNvbnRhaW5lck9mZnNldCA9IGVsZW1lbnQub2Zmc2V0KCk7XG5cdFx0XHR0aGF0LmNvbnRhaW5lclBvc2l0aW9uID0gZWxlbWVudC5wb3NpdGlvbigpO1xuXHRcdFx0dGhhdC5jb250YWluZXJTaXplID0ge1xuXHRcdFx0XHRoZWlnaHQ6ICggZWxlbWVudC5pbm5lckhlaWdodCgpIC0gcFsgMyBdICksXG5cdFx0XHRcdHdpZHRoOiAoIGVsZW1lbnQuaW5uZXJXaWR0aCgpIC0gcFsgMSBdIClcblx0XHRcdH07XG5cblx0XHRcdGNvID0gdGhhdC5jb250YWluZXJPZmZzZXQ7XG5cdFx0XHRjaCA9IHRoYXQuY29udGFpbmVyU2l6ZS5oZWlnaHQ7XG5cdFx0XHRjdyA9IHRoYXQuY29udGFpbmVyU2l6ZS53aWR0aDtcblx0XHRcdHdpZHRoID0gKCB0aGF0Ll9oYXNTY3JvbGwgKCBjZSwgXCJsZWZ0XCIgKSA/IGNlLnNjcm9sbFdpZHRoIDogY3cgKTtcblx0XHRcdGhlaWdodCA9ICggdGhhdC5faGFzU2Nyb2xsICggY2UgKSA/IGNlLnNjcm9sbEhlaWdodCA6IGNoICkgO1xuXG5cdFx0XHR0aGF0LnBhcmVudERhdGEgPSB7XG5cdFx0XHRcdGVsZW1lbnQ6IGNlLFxuXHRcdFx0XHRsZWZ0OiBjby5sZWZ0LFxuXHRcdFx0XHR0b3A6IGNvLnRvcCxcblx0XHRcdFx0d2lkdGg6IHdpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IGhlaWdodFxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0cmVzaXplOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHdvc2V0LCBob3NldCwgaXNQYXJlbnQsIGlzT2Zmc2V0UmVsYXRpdmUsXG5cdFx0XHR0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0Y28gPSB0aGF0LmNvbnRhaW5lck9mZnNldCxcblx0XHRcdGNwID0gdGhhdC5wb3NpdGlvbixcblx0XHRcdHBSYXRpbyA9IHRoYXQuX2FzcGVjdFJhdGlvIHx8IGV2ZW50LnNoaWZ0S2V5LFxuXHRcdFx0Y29wID0ge1xuXHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdGxlZnQ6IDBcblx0XHRcdH0sXG5cdFx0XHRjZSA9IHRoYXQuY29udGFpbmVyRWxlbWVudCxcblx0XHRcdGNvbnRpbnVlUmVzaXplID0gdHJ1ZTtcblxuXHRcdGlmICggY2VbIDAgXSAhPT0gZG9jdW1lbnQgJiYgKCAvc3RhdGljLyApLnRlc3QoIGNlLmNzcyggXCJwb3NpdGlvblwiICkgKSApIHtcblx0XHRcdGNvcCA9IGNvO1xuXHRcdH1cblxuXHRcdGlmICggY3AubGVmdCA8ICggdGhhdC5faGVscGVyID8gY28ubGVmdCA6IDAgKSApIHtcblx0XHRcdHRoYXQuc2l6ZS53aWR0aCA9IHRoYXQuc2l6ZS53aWR0aCArXG5cdFx0XHRcdCggdGhhdC5faGVscGVyID9cblx0XHRcdFx0XHQoIHRoYXQucG9zaXRpb24ubGVmdCAtIGNvLmxlZnQgKSA6XG5cdFx0XHRcdFx0KCB0aGF0LnBvc2l0aW9uLmxlZnQgLSBjb3AubGVmdCApICk7XG5cblx0XHRcdGlmICggcFJhdGlvICkge1xuXHRcdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gdGhhdC5zaXplLndpZHRoIC8gdGhhdC5hc3BlY3RSYXRpbztcblx0XHRcdFx0Y29udGludWVSZXNpemUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoYXQucG9zaXRpb24ubGVmdCA9IG8uaGVscGVyID8gY28ubGVmdCA6IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBjcC50b3AgPCAoIHRoYXQuX2hlbHBlciA/IGNvLnRvcCA6IDAgKSApIHtcblx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSB0aGF0LnNpemUuaGVpZ2h0ICtcblx0XHRcdFx0KCB0aGF0Ll9oZWxwZXIgP1xuXHRcdFx0XHRcdCggdGhhdC5wb3NpdGlvbi50b3AgLSBjby50b3AgKSA6XG5cdFx0XHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgKTtcblxuXHRcdFx0aWYgKCBwUmF0aW8gKSB7XG5cdFx0XHRcdHRoYXQuc2l6ZS53aWR0aCA9IHRoYXQuc2l6ZS5oZWlnaHQgKiB0aGF0LmFzcGVjdFJhdGlvO1xuXHRcdFx0XHRjb250aW51ZVJlc2l6ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgPSB0aGF0Ll9oZWxwZXIgPyBjby50b3AgOiAwO1xuXHRcdH1cblxuXHRcdGlzUGFyZW50ID0gdGhhdC5jb250YWluZXJFbGVtZW50LmdldCggMCApID09PSB0aGF0LmVsZW1lbnQucGFyZW50KCkuZ2V0KCAwICk7XG5cdFx0aXNPZmZzZXRSZWxhdGl2ZSA9IC9yZWxhdGl2ZXxhYnNvbHV0ZS8udGVzdCggdGhhdC5jb250YWluZXJFbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICkgKTtcblxuXHRcdGlmICggaXNQYXJlbnQgJiYgaXNPZmZzZXRSZWxhdGl2ZSApIHtcblx0XHRcdHRoYXQub2Zmc2V0LmxlZnQgPSB0aGF0LnBhcmVudERhdGEubGVmdCArIHRoYXQucG9zaXRpb24ubGVmdDtcblx0XHRcdHRoYXQub2Zmc2V0LnRvcCA9IHRoYXQucGFyZW50RGF0YS50b3AgKyB0aGF0LnBvc2l0aW9uLnRvcDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhhdC5vZmZzZXQubGVmdCA9IHRoYXQuZWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xuXHRcdFx0dGhhdC5vZmZzZXQudG9wID0gdGhhdC5lbGVtZW50Lm9mZnNldCgpLnRvcDtcblx0XHR9XG5cblx0XHR3b3NldCA9IE1hdGguYWJzKCB0aGF0LnNpemVEaWZmLndpZHRoICtcblx0XHRcdCggdGhhdC5faGVscGVyID9cblx0XHRcdFx0dGhhdC5vZmZzZXQubGVmdCAtIGNvcC5sZWZ0IDpcblx0XHRcdFx0KCB0aGF0Lm9mZnNldC5sZWZ0IC0gY28ubGVmdCApICkgKTtcblxuXHRcdGhvc2V0ID0gTWF0aC5hYnMoIHRoYXQuc2l6ZURpZmYuaGVpZ2h0ICtcblx0XHRcdCggdGhhdC5faGVscGVyID9cblx0XHRcdFx0dGhhdC5vZmZzZXQudG9wIC0gY29wLnRvcCA6XG5cdFx0XHRcdCggdGhhdC5vZmZzZXQudG9wIC0gY28udG9wICkgKSApO1xuXG5cdFx0aWYgKCB3b3NldCArIHRoYXQuc2l6ZS53aWR0aCA+PSB0aGF0LnBhcmVudERhdGEud2lkdGggKSB7XG5cdFx0XHR0aGF0LnNpemUud2lkdGggPSB0aGF0LnBhcmVudERhdGEud2lkdGggLSB3b3NldDtcblx0XHRcdGlmICggcFJhdGlvICkge1xuXHRcdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gdGhhdC5zaXplLndpZHRoIC8gdGhhdC5hc3BlY3RSYXRpbztcblx0XHRcdFx0Y29udGludWVSZXNpemUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGhvc2V0ICsgdGhhdC5zaXplLmhlaWdodCA+PSB0aGF0LnBhcmVudERhdGEuaGVpZ2h0ICkge1xuXHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IHRoYXQucGFyZW50RGF0YS5oZWlnaHQgLSBob3NldDtcblx0XHRcdGlmICggcFJhdGlvICkge1xuXHRcdFx0XHR0aGF0LnNpemUud2lkdGggPSB0aGF0LnNpemUuaGVpZ2h0ICogdGhhdC5hc3BlY3RSYXRpbztcblx0XHRcdFx0Y29udGludWVSZXNpemUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFjb250aW51ZVJlc2l6ZSApIHtcblx0XHRcdHRoYXQucG9zaXRpb24ubGVmdCA9IHRoYXQucHJldlBvc2l0aW9uLmxlZnQ7XG5cdFx0XHR0aGF0LnBvc2l0aW9uLnRvcCA9IHRoYXQucHJldlBvc2l0aW9uLnRvcDtcblx0XHRcdHRoYXQuc2l6ZS53aWR0aCA9IHRoYXQucHJldlNpemUud2lkdGg7XG5cdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gdGhhdC5wcmV2U2l6ZS5oZWlnaHQ7XG5cdFx0fVxuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0Y28gPSB0aGF0LmNvbnRhaW5lck9mZnNldCxcblx0XHRcdGNvcCA9IHRoYXQuY29udGFpbmVyUG9zaXRpb24sXG5cdFx0XHRjZSA9IHRoYXQuY29udGFpbmVyRWxlbWVudCxcblx0XHRcdGhlbHBlciA9ICQoIHRoYXQuaGVscGVyICksXG5cdFx0XHRobyA9IGhlbHBlci5vZmZzZXQoKSxcblx0XHRcdHcgPSBoZWxwZXIub3V0ZXJXaWR0aCgpIC0gdGhhdC5zaXplRGlmZi53aWR0aCxcblx0XHRcdGggPSBoZWxwZXIub3V0ZXJIZWlnaHQoKSAtIHRoYXQuc2l6ZURpZmYuaGVpZ2h0O1xuXG5cdFx0aWYgKCB0aGF0Ll9oZWxwZXIgJiYgIW8uYW5pbWF0ZSAmJiAoIC9yZWxhdGl2ZS8gKS50ZXN0KCBjZS5jc3MoIFwicG9zaXRpb25cIiApICkgKSB7XG5cdFx0XHQkKCB0aGlzICkuY3NzKCB7XG5cdFx0XHRcdGxlZnQ6IGhvLmxlZnQgLSBjb3AubGVmdCAtIGNvLmxlZnQsXG5cdFx0XHRcdHdpZHRoOiB3LFxuXHRcdFx0XHRoZWlnaHQ6IGhcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoYXQuX2hlbHBlciAmJiAhby5hbmltYXRlICYmICggL3N0YXRpYy8gKS50ZXN0KCBjZS5jc3MoIFwicG9zaXRpb25cIiApICkgKSB7XG5cdFx0XHQkKCB0aGlzICkuY3NzKCB7XG5cdFx0XHRcdGxlZnQ6IGhvLmxlZnQgLSBjb3AubGVmdCAtIGNvLmxlZnQsXG5cdFx0XHRcdHdpZHRoOiB3LFxuXHRcdFx0XHRoZWlnaHQ6IGhcblx0XHRcdH0gKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuJC51aS5wbHVnaW4uYWRkKCBcInJlc2l6YWJsZVwiLCBcImFsc29SZXNpemVcIiwge1xuXG5cdHN0YXJ0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9ICQoIHRoaXMgKS5yZXNpemFibGUoIFwiaW5zdGFuY2VcIiApLFxuXHRcdFx0byA9IHRoYXQub3B0aW9ucztcblxuXHRcdCQoIG8uYWxzb1Jlc2l6ZSApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsID0gJCggdGhpcyApO1xuXHRcdFx0ZWwuZGF0YSggXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiLCB7XG5cdFx0XHRcdHdpZHRoOiBwYXJzZUZsb2F0KCBlbC53aWR0aCgpICksIGhlaWdodDogcGFyc2VGbG9hdCggZWwuaGVpZ2h0KCkgKSxcblx0XHRcdFx0bGVmdDogcGFyc2VGbG9hdCggZWwuY3NzKCBcImxlZnRcIiApICksIHRvcDogcGFyc2VGbG9hdCggZWwuY3NzKCBcInRvcFwiICkgKVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRyZXNpemU6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICkucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKSxcblx0XHRcdG8gPSB0aGF0Lm9wdGlvbnMsXG5cdFx0XHRvcyA9IHRoYXQub3JpZ2luYWxTaXplLFxuXHRcdFx0b3AgPSB0aGF0Lm9yaWdpbmFsUG9zaXRpb24sXG5cdFx0XHRkZWx0YSA9IHtcblx0XHRcdFx0aGVpZ2h0OiAoIHRoYXQuc2l6ZS5oZWlnaHQgLSBvcy5oZWlnaHQgKSB8fCAwLFxuXHRcdFx0XHR3aWR0aDogKCB0aGF0LnNpemUud2lkdGggLSBvcy53aWR0aCApIHx8IDAsXG5cdFx0XHRcdHRvcDogKCB0aGF0LnBvc2l0aW9uLnRvcCAtIG9wLnRvcCApIHx8IDAsXG5cdFx0XHRcdGxlZnQ6ICggdGhhdC5wb3NpdGlvbi5sZWZ0IC0gb3AubGVmdCApIHx8IDBcblx0XHRcdH07XG5cblx0XHRcdCQoIG8uYWxzb1Jlc2l6ZSApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWwgPSAkKCB0aGlzICksIHN0YXJ0ID0gJCggdGhpcyApLmRhdGEoIFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIiApLCBzdHlsZSA9IHt9LFxuXHRcdFx0XHRcdGNzcyA9IGVsLnBhcmVudHMoIHVpLm9yaWdpbmFsRWxlbWVudFsgMCBdICkubGVuZ3RoID9cblx0XHRcdFx0XHRcdFx0WyBcIndpZHRoXCIsIFwiaGVpZ2h0XCIgXSA6XG5cdFx0XHRcdFx0XHRcdFsgXCJ3aWR0aFwiLCBcImhlaWdodFwiLCBcInRvcFwiLCBcImxlZnRcIiBdO1xuXG5cdFx0XHRcdCQuZWFjaCggY3NzLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0XHRcdFx0XHR2YXIgc3VtID0gKCBzdGFydFsgcHJvcCBdIHx8IDAgKSArICggZGVsdGFbIHByb3AgXSB8fCAwICk7XG5cdFx0XHRcdFx0aWYgKCBzdW0gJiYgc3VtID49IDAgKSB7XG5cdFx0XHRcdFx0XHRzdHlsZVsgcHJvcCBdID0gc3VtIHx8IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0ZWwuY3NzKCBzdHlsZSApO1xuXHRcdFx0fSApO1xuXHR9LFxuXG5cdHN0b3A6IGZ1bmN0aW9uKCkge1xuXHRcdCQoIHRoaXMgKS5yZW1vdmVEYXRhKCBcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIgKTtcblx0fVxufSApO1xuXG4kLnVpLnBsdWdpbi5hZGQoIFwicmVzaXphYmxlXCIsIFwiZ2hvc3RcIiwge1xuXG5cdHN0YXJ0OiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciB0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksIGNzID0gdGhhdC5zaXplO1xuXG5cdFx0dGhhdC5naG9zdCA9IHRoYXQub3JpZ2luYWxFbGVtZW50LmNsb25lKCk7XG5cdFx0dGhhdC5naG9zdC5jc3MoIHtcblx0XHRcdG9wYWNpdHk6IDAuMjUsXG5cdFx0XHRkaXNwbGF5OiBcImJsb2NrXCIsXG5cdFx0XHRwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuXHRcdFx0aGVpZ2h0OiBjcy5oZWlnaHQsXG5cdFx0XHR3aWR0aDogY3Mud2lkdGgsXG5cdFx0XHRtYXJnaW46IDAsXG5cdFx0XHRsZWZ0OiAwLFxuXHRcdFx0dG9wOiAwXG5cdFx0fSApO1xuXG5cdFx0dGhhdC5fYWRkQ2xhc3MoIHRoYXQuZ2hvc3QsIFwidWktcmVzaXphYmxlLWdob3N0XCIgKTtcblxuXHRcdC8vIERFUFJFQ0FURURcblx0XHQvLyBUT0RPOiByZW1vdmUgYWZ0ZXIgMS4xMlxuXHRcdGlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICYmIHR5cGVvZiB0aGF0Lm9wdGlvbnMuZ2hvc3QgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vIEdob3N0IG9wdGlvblxuXHRcdFx0dGhhdC5naG9zdC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmdob3N0ICk7XG5cdFx0fVxuXG5cdFx0dGhhdC5naG9zdC5hcHBlbmRUbyggdGhhdC5oZWxwZXIgKTtcblxuXHR9LFxuXG5cdHJlc2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICkucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKTtcblx0XHRpZiAoIHRoYXQuZ2hvc3QgKSB7XG5cdFx0XHR0aGF0Lmdob3N0LmNzcygge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuXHRcdFx0XHRoZWlnaHQ6IHRoYXQuc2l6ZS5oZWlnaHQsXG5cdFx0XHRcdHdpZHRoOiB0aGF0LnNpemUud2lkdGhcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0c3RvcDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSAkKCB0aGlzICkucmVzaXphYmxlKCBcImluc3RhbmNlXCIgKTtcblx0XHRpZiAoIHRoYXQuZ2hvc3QgJiYgdGhhdC5oZWxwZXIgKSB7XG5cdFx0XHR0aGF0LmhlbHBlci5nZXQoIDAgKS5yZW1vdmVDaGlsZCggdGhhdC5naG9zdC5nZXQoIDAgKSApO1xuXHRcdH1cblx0fVxuXG59ICk7XG5cbiQudWkucGx1Z2luLmFkZCggXCJyZXNpemFibGVcIiwgXCJncmlkXCIsIHtcblxuXHRyZXNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvdXRlckRpbWVuc2lvbnMsXG5cdFx0XHR0aGF0ID0gJCggdGhpcyApLnJlc2l6YWJsZSggXCJpbnN0YW5jZVwiICksXG5cdFx0XHRvID0gdGhhdC5vcHRpb25zLFxuXHRcdFx0Y3MgPSB0aGF0LnNpemUsXG5cdFx0XHRvcyA9IHRoYXQub3JpZ2luYWxTaXplLFxuXHRcdFx0b3AgPSB0aGF0Lm9yaWdpbmFsUG9zaXRpb24sXG5cdFx0XHRhID0gdGhhdC5heGlzLFxuXHRcdFx0Z3JpZCA9IHR5cGVvZiBvLmdyaWQgPT09IFwibnVtYmVyXCIgPyBbIG8uZ3JpZCwgby5ncmlkIF0gOiBvLmdyaWQsXG5cdFx0XHRncmlkWCA9ICggZ3JpZFsgMCBdIHx8IDEgKSxcblx0XHRcdGdyaWRZID0gKCBncmlkWyAxIF0gfHwgMSApLFxuXHRcdFx0b3ggPSBNYXRoLnJvdW5kKCAoIGNzLndpZHRoIC0gb3Mud2lkdGggKSAvIGdyaWRYICkgKiBncmlkWCxcblx0XHRcdG95ID0gTWF0aC5yb3VuZCggKCBjcy5oZWlnaHQgLSBvcy5oZWlnaHQgKSAvIGdyaWRZICkgKiBncmlkWSxcblx0XHRcdG5ld1dpZHRoID0gb3Mud2lkdGggKyBveCxcblx0XHRcdG5ld0hlaWdodCA9IG9zLmhlaWdodCArIG95LFxuXHRcdFx0aXNNYXhXaWR0aCA9IG8ubWF4V2lkdGggJiYgKCBvLm1heFdpZHRoIDwgbmV3V2lkdGggKSxcblx0XHRcdGlzTWF4SGVpZ2h0ID0gby5tYXhIZWlnaHQgJiYgKCBvLm1heEhlaWdodCA8IG5ld0hlaWdodCApLFxuXHRcdFx0aXNNaW5XaWR0aCA9IG8ubWluV2lkdGggJiYgKCBvLm1pbldpZHRoID4gbmV3V2lkdGggKSxcblx0XHRcdGlzTWluSGVpZ2h0ID0gby5taW5IZWlnaHQgJiYgKCBvLm1pbkhlaWdodCA+IG5ld0hlaWdodCApO1xuXG5cdFx0by5ncmlkID0gZ3JpZDtcblxuXHRcdGlmICggaXNNaW5XaWR0aCApIHtcblx0XHRcdG5ld1dpZHRoICs9IGdyaWRYO1xuXHRcdH1cblx0XHRpZiAoIGlzTWluSGVpZ2h0ICkge1xuXHRcdFx0bmV3SGVpZ2h0ICs9IGdyaWRZO1xuXHRcdH1cblx0XHRpZiAoIGlzTWF4V2lkdGggKSB7XG5cdFx0XHRuZXdXaWR0aCAtPSBncmlkWDtcblx0XHR9XG5cdFx0aWYgKCBpc01heEhlaWdodCApIHtcblx0XHRcdG5ld0hlaWdodCAtPSBncmlkWTtcblx0XHR9XG5cblx0XHRpZiAoIC9eKHNlfHN8ZSkkLy50ZXN0KCBhICkgKSB7XG5cdFx0XHR0aGF0LnNpemUud2lkdGggPSBuZXdXaWR0aDtcblx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cdFx0fSBlbHNlIGlmICggL14obmUpJC8udGVzdCggYSApICkge1xuXHRcdFx0dGhhdC5zaXplLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHR0aGF0LnNpemUuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuXHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgPSBvcC50b3AgLSBveTtcblx0XHR9IGVsc2UgaWYgKCAvXihzdykkLy50ZXN0KCBhICkgKSB7XG5cdFx0XHR0aGF0LnNpemUud2lkdGggPSBuZXdXaWR0aDtcblx0XHRcdHRoYXQuc2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cdFx0XHR0aGF0LnBvc2l0aW9uLmxlZnQgPSBvcC5sZWZ0IC0gb3g7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggbmV3SGVpZ2h0IC0gZ3JpZFkgPD0gMCB8fCBuZXdXaWR0aCAtIGdyaWRYIDw9IDAgKSB7XG5cdFx0XHRcdG91dGVyRGltZW5zaW9ucyA9IHRoYXQuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyggdGhpcyApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG5ld0hlaWdodCAtIGdyaWRZID4gMCApIHtcblx0XHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IG5ld0hlaWdodDtcblx0XHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgPSBvcC50b3AgLSBveTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0hlaWdodCA9IGdyaWRZIC0gb3V0ZXJEaW1lbnNpb25zLmhlaWdodDtcblx0XHRcdFx0dGhhdC5zaXplLmhlaWdodCA9IG5ld0hlaWdodDtcblx0XHRcdFx0dGhhdC5wb3NpdGlvbi50b3AgPSBvcC50b3AgKyBvcy5oZWlnaHQgLSBuZXdIZWlnaHQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG5ld1dpZHRoIC0gZ3JpZFggPiAwICkge1xuXHRcdFx0XHR0aGF0LnNpemUud2lkdGggPSBuZXdXaWR0aDtcblx0XHRcdFx0dGhhdC5wb3NpdGlvbi5sZWZ0ID0gb3AubGVmdCAtIG94O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3V2lkdGggPSBncmlkWCAtIG91dGVyRGltZW5zaW9ucy53aWR0aDtcblx0XHRcdFx0dGhhdC5zaXplLndpZHRoID0gbmV3V2lkdGg7XG5cdFx0XHRcdHRoYXQucG9zaXRpb24ubGVmdCA9IG9wLmxlZnQgKyBvcy53aWR0aCAtIG5ld1dpZHRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG59ICk7XG5cbnZhciB3aWRnZXRzUmVzaXphYmxlID0gJC51aS5yZXNpemFibGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU2VsZWN0YWJsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2VsZWN0YWJsZVxuLy8+Pmdyb3VwOiBJbnRlcmFjdGlvbnNcbi8vPj5kZXNjcmlwdGlvbjogQWxsb3dzIGdyb3VwcyBvZiBlbGVtZW50cyB0byBiZSBzZWxlY3RlZCB3aXRoIHRoZSBtb3VzZS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zZWxlY3RhYmxlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3NlbGVjdGFibGUvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2Uvc2VsZWN0YWJsZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzU2VsZWN0YWJsZSA9ICQud2lkZ2V0KCBcInVpLnNlbGVjdGFibGVcIiwgJC51aS5tb3VzZSwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YXBwZW5kVG86IFwiYm9keVwiLFxuXHRcdGF1dG9SZWZyZXNoOiB0cnVlLFxuXHRcdGRpc3RhbmNlOiAwLFxuXHRcdGZpbHRlcjogXCIqXCIsXG5cdFx0dG9sZXJhbmNlOiBcInRvdWNoXCIsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRzZWxlY3Rpbmc6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbCxcblx0XHR1bnNlbGVjdGVkOiBudWxsLFxuXHRcdHVuc2VsZWN0aW5nOiBudWxsXG5cdH0sXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNlbGVjdGFibGVcIiApO1xuXG5cdFx0dGhpcy5kcmFnZ2VkID0gZmFsc2U7XG5cblx0XHQvLyBDYWNoZSBzZWxlY3RlZSBjaGlsZHJlbiBiYXNlZCBvbiBmaWx0ZXJcblx0XHR0aGlzLnJlZnJlc2ggPSBmdW5jdGlvbigpIHtcblx0XHRcdHRoYXQuZWxlbWVudFBvcyA9ICQoIHRoYXQuZWxlbWVudFsgMCBdICkub2Zmc2V0KCk7XG5cdFx0XHR0aGF0LnNlbGVjdGVlcyA9ICQoIHRoYXQub3B0aW9ucy5maWx0ZXIsIHRoYXQuZWxlbWVudFsgMCBdICk7XG5cdFx0XHR0aGF0Ll9hZGRDbGFzcyggdGhhdC5zZWxlY3RlZXMsIFwidWktc2VsZWN0ZWVcIiApO1xuXHRcdFx0dGhhdC5zZWxlY3RlZXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciAkdGhpcyA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRzZWxlY3RlZU9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdHBvcyA9IHtcblx0XHRcdFx0XHRcdGxlZnQ6IHNlbGVjdGVlT2Zmc2V0LmxlZnQgLSB0aGF0LmVsZW1lbnRQb3MubGVmdCxcblx0XHRcdFx0XHRcdHRvcDogc2VsZWN0ZWVPZmZzZXQudG9wIC0gdGhhdC5lbGVtZW50UG9zLnRvcFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdCQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiwge1xuXHRcdFx0XHRcdGVsZW1lbnQ6IHRoaXMsXG5cdFx0XHRcdFx0JGVsZW1lbnQ6ICR0aGlzLFxuXHRcdFx0XHRcdGxlZnQ6IHBvcy5sZWZ0LFxuXHRcdFx0XHRcdHRvcDogcG9zLnRvcCxcblx0XHRcdFx0XHRyaWdodDogcG9zLmxlZnQgKyAkdGhpcy5vdXRlcldpZHRoKCksXG5cdFx0XHRcdFx0Ym90dG9tOiBwb3MudG9wICsgJHRoaXMub3V0ZXJIZWlnaHQoKSxcblx0XHRcdFx0XHRzdGFydHNlbGVjdGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzZWxlY3RlZDogJHRoaXMuaGFzQ2xhc3MoIFwidWktc2VsZWN0ZWRcIiApLFxuXHRcdFx0XHRcdHNlbGVjdGluZzogJHRoaXMuaGFzQ2xhc3MoIFwidWktc2VsZWN0aW5nXCIgKSxcblx0XHRcdFx0XHR1bnNlbGVjdGluZzogJHRoaXMuaGFzQ2xhc3MoIFwidWktdW5zZWxlY3RpbmdcIiApXG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gKTtcblx0XHR9O1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXG5cdFx0dGhpcy5fbW91c2VJbml0KCk7XG5cblx0XHR0aGlzLmhlbHBlciA9ICQoIFwiPGRpdj5cIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlbHBlciwgXCJ1aS1zZWxlY3RhYmxlLWhlbHBlclwiICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2VsZWN0ZWVzLnJlbW92ZURhdGEoIFwic2VsZWN0YWJsZS1pdGVtXCIgKTtcblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblx0fSxcblxuXHRfbW91c2VTdGFydDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHR0aGlzLm9wb3MgPSBbIGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSBdO1xuXHRcdHRoaXMuZWxlbWVudFBvcyA9ICQoIHRoaXMuZWxlbWVudFsgMCBdICkub2Zmc2V0KCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVlcyA9ICQoIG9wdGlvbnMuZmlsdGVyLCB0aGlzLmVsZW1lbnRbIDAgXSApO1xuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzdGFydFwiLCBldmVudCApO1xuXG5cdFx0JCggb3B0aW9ucy5hcHBlbmRUbyApLmFwcGVuZCggdGhpcy5oZWxwZXIgKTtcblxuXHRcdC8vIHBvc2l0aW9uIGhlbHBlciAobGFzc28pXG5cdFx0dGhpcy5oZWxwZXIuY3NzKCB7XG5cdFx0XHRcImxlZnRcIjogZXZlbnQucGFnZVgsXG5cdFx0XHRcInRvcFwiOiBldmVudC5wYWdlWSxcblx0XHRcdFwid2lkdGhcIjogMCxcblx0XHRcdFwiaGVpZ2h0XCI6IDBcblx0XHR9ICk7XG5cblx0XHRpZiAoIG9wdGlvbnMuYXV0b1JlZnJlc2ggKSB7XG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIFwiLnVpLXNlbGVjdGVkXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0c2VsZWN0ZWUuc3RhcnRzZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRpZiAoICFldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICkge1xuXHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktdW5zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cblx0XHRcdFx0Ly8gc2VsZWN0YWJsZSBVTlNFTEVDVElORyBjYWxsYmFja1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInVuc2VsZWN0aW5nXCIsIGV2ZW50LCB7XG5cdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdCQoIGV2ZW50LnRhcmdldCApLnBhcmVudHMoKS5hZGRCYWNrKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9TZWxlY3QsXG5cdFx0XHRcdHNlbGVjdGVlID0gJC5kYXRhKCB0aGlzLCBcInNlbGVjdGFibGUtaXRlbVwiICk7XG5cdFx0XHRpZiAoIHNlbGVjdGVlICkge1xuXHRcdFx0XHRkb1NlbGVjdCA9ICggIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmN0cmxLZXkgKSB8fFxuXHRcdFx0XHRcdCFzZWxlY3RlZS4kZWxlbWVudC5oYXNDbGFzcyggXCJ1aS1zZWxlY3RlZFwiICk7XG5cdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgZG9TZWxlY3QgPyBcInVpLXVuc2VsZWN0aW5nXCIgOiBcInVpLXNlbGVjdGVkXCIgKVxuXHRcdFx0XHRcdC5fYWRkQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBkb1NlbGVjdCA/IFwidWktc2VsZWN0aW5nXCIgOiBcInVpLXVuc2VsZWN0aW5nXCIgKTtcblx0XHRcdFx0c2VsZWN0ZWUudW5zZWxlY3RpbmcgPSAhZG9TZWxlY3Q7XG5cdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGluZyA9IGRvU2VsZWN0O1xuXHRcdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IGRvU2VsZWN0O1xuXG5cdFx0XHRcdC8vIHNlbGVjdGFibGUgKFVOKVNFTEVDVElORyBjYWxsYmFja1xuXHRcdFx0XHRpZiAoIGRvU2VsZWN0ICkge1xuXHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwic2VsZWN0aW5nXCIsIGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJ1bnNlbGVjdGluZ1wiLCBldmVudCwge1xuXHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHRoaXMuZHJhZ2dlZCA9IHRydWU7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgdG1wLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0eDEgPSB0aGlzLm9wb3NbIDAgXSxcblx0XHRcdHkxID0gdGhpcy5vcG9zWyAxIF0sXG5cdFx0XHR4MiA9IGV2ZW50LnBhZ2VYLFxuXHRcdFx0eTIgPSBldmVudC5wYWdlWTtcblxuXHRcdGlmICggeDEgPiB4MiApIHsgdG1wID0geDI7IHgyID0geDE7IHgxID0gdG1wOyB9XG5cdFx0aWYgKCB5MSA+IHkyICkgeyB0bXAgPSB5MjsgeTIgPSB5MTsgeTEgPSB0bXA7IH1cblx0XHR0aGlzLmhlbHBlci5jc3MoIHsgbGVmdDogeDEsIHRvcDogeTEsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTEgfSApO1xuXG5cdFx0dGhpcy5zZWxlY3RlZXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZWN0ZWUgPSAkLmRhdGEoIHRoaXMsIFwic2VsZWN0YWJsZS1pdGVtXCIgKSxcblx0XHRcdFx0aGl0ID0gZmFsc2UsXG5cdFx0XHRcdG9mZnNldCA9IHt9O1xuXG5cdFx0XHQvL3ByZXZlbnQgaGVscGVyIGZyb20gYmVpbmcgc2VsZWN0ZWQgaWYgYXBwZW5kVG86IHNlbGVjdGFibGVcblx0XHRcdGlmICggIXNlbGVjdGVlIHx8IHNlbGVjdGVlLmVsZW1lbnQgPT09IHRoYXQuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdG9mZnNldC5sZWZ0ICAgPSBzZWxlY3RlZS5sZWZ0ICAgKyB0aGF0LmVsZW1lbnRQb3MubGVmdDtcblx0XHRcdG9mZnNldC5yaWdodCAgPSBzZWxlY3RlZS5yaWdodCAgKyB0aGF0LmVsZW1lbnRQb3MubGVmdDtcblx0XHRcdG9mZnNldC50b3AgICAgPSBzZWxlY3RlZS50b3AgICAgKyB0aGF0LmVsZW1lbnRQb3MudG9wO1xuXHRcdFx0b2Zmc2V0LmJvdHRvbSA9IHNlbGVjdGVlLmJvdHRvbSArIHRoYXQuZWxlbWVudFBvcy50b3A7XG5cblx0XHRcdGlmICggb3B0aW9ucy50b2xlcmFuY2UgPT09IFwidG91Y2hcIiApIHtcblx0XHRcdFx0aGl0ID0gKCAhKCBvZmZzZXQubGVmdCA+IHgyIHx8IG9mZnNldC5yaWdodCA8IHgxIHx8IG9mZnNldC50b3AgPiB5MiB8fFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQuYm90dG9tIDwgeTEgKSApO1xuXHRcdFx0fSBlbHNlIGlmICggb3B0aW9ucy50b2xlcmFuY2UgPT09IFwiZml0XCIgKSB7XG5cdFx0XHRcdGhpdCA9ICggb2Zmc2V0LmxlZnQgPiB4MSAmJiBvZmZzZXQucmlnaHQgPCB4MiAmJiBvZmZzZXQudG9wID4geTEgJiZcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmJvdHRvbSA8IHkyICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGl0ICkge1xuXG5cdFx0XHRcdC8vIFNFTEVDVFxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnNlbGVjdGVkICkge1xuXHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS1zZWxlY3RlZFwiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnVuc2VsZWN0aW5nICkge1xuXHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS11bnNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUudW5zZWxlY3RpbmcgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFzZWxlY3RlZS5zZWxlY3RpbmcgKSB7XG5cdFx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgU0VMRUNUSU5HIGNhbGxiYWNrXG5cdFx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJzZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdHNlbGVjdGluZzogc2VsZWN0ZWUuZWxlbWVudFxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBVTlNFTEVDVFxuXHRcdFx0XHRpZiAoIHNlbGVjdGVlLnNlbGVjdGluZyApIHtcblx0XHRcdFx0XHRpZiAoICggZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5ICkgJiYgc2VsZWN0ZWUuc3RhcnRzZWxlY3RlZCApIHtcblx0XHRcdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS1zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0aW5nXCIgKTtcblx0XHRcdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0aWYgKCBzZWxlY3RlZS5zdGFydHNlbGVjdGVkICkge1xuXHRcdFx0XHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktdW5zZWxlY3RpbmdcIiApO1xuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgVU5TRUxFQ1RJTkcgY2FsbGJhY2tcblx0XHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwidW5zZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBzZWxlY3RlZS5zZWxlY3RlZCApIHtcblx0XHRcdFx0XHRpZiAoICFldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFzZWxlY3RlZS5zdGFydHNlbGVjdGVkICkge1xuXHRcdFx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGVkXCIgKTtcblx0XHRcdFx0XHRcdHNlbGVjdGVlLnNlbGVjdGVkID0gZmFsc2U7XG5cblx0XHRcdFx0XHRcdHRoYXQuX2FkZENsYXNzKCBzZWxlY3RlZS4kZWxlbWVudCwgXCJ1aS11bnNlbGVjdGluZ1wiICk7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZS51bnNlbGVjdGluZyA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIHNlbGVjdGFibGUgVU5TRUxFQ1RJTkcgY2FsbGJhY2tcblx0XHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwidW5zZWxlY3RpbmdcIiwgZXZlbnQsIHtcblx0XHRcdFx0XHRcdFx0dW5zZWxlY3Rpbmc6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHRoaXMuZHJhZ2dlZCA9IGZhbHNlO1xuXG5cdFx0JCggXCIudWktdW5zZWxlY3RpbmdcIiwgdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXVuc2VsZWN0aW5nXCIgKTtcblx0XHRcdHNlbGVjdGVlLnVuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRzZWxlY3RlZS5zdGFydHNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInVuc2VsZWN0ZWRcIiwgZXZlbnQsIHtcblx0XHRcdFx0dW5zZWxlY3RlZDogc2VsZWN0ZWUuZWxlbWVudFxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHQkKCBcIi51aS1zZWxlY3RpbmdcIiwgdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxlY3RlZSA9ICQuZGF0YSggdGhpcywgXCJzZWxlY3RhYmxlLWl0ZW1cIiApO1xuXHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHNlbGVjdGVlLiRlbGVtZW50LCBcInVpLXNlbGVjdGluZ1wiIClcblx0XHRcdFx0Ll9hZGRDbGFzcyggc2VsZWN0ZWUuJGVsZW1lbnQsIFwidWktc2VsZWN0ZWRcIiApO1xuXHRcdFx0c2VsZWN0ZWUuc2VsZWN0aW5nID0gZmFsc2U7XG5cdFx0XHRzZWxlY3RlZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRzZWxlY3RlZS5zdGFydHNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdHRoYXQuX3RyaWdnZXIoIFwic2VsZWN0ZWRcIiwgZXZlbnQsIHtcblx0XHRcdFx0c2VsZWN0ZWQ6IHNlbGVjdGVlLmVsZW1lbnRcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzdG9wXCIsIGV2ZW50ICk7XG5cblx0XHR0aGlzLmhlbHBlci5yZW1vdmUoKTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU29ydGFibGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNvcnRhYmxlXG4vLz4+Z3JvdXA6IEludGVyYWN0aW9uc1xuLy8+PmRlc2NyaXB0aW9uOiBFbmFibGVzIGl0ZW1zIGluIGEgbGlzdCB0byBiZSBzb3J0ZWQgdXNpbmcgdGhlIG1vdXNlLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3NvcnRhYmxlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3NvcnRhYmxlL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL3NvcnRhYmxlLmNzc1xuXG5cblxudmFyIHdpZGdldHNTb3J0YWJsZSA9ICQud2lkZ2V0KCBcInVpLnNvcnRhYmxlXCIsICQudWkubW91c2UsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwic29ydFwiLFxuXHRyZWFkeTogZmFsc2UsXG5cdG9wdGlvbnM6IHtcblx0XHRhcHBlbmRUbzogXCJwYXJlbnRcIixcblx0XHRheGlzOiBmYWxzZSxcblx0XHRjb25uZWN0V2l0aDogZmFsc2UsXG5cdFx0Y29udGFpbm1lbnQ6IGZhbHNlLFxuXHRcdGN1cnNvcjogXCJhdXRvXCIsXG5cdFx0Y3Vyc29yQXQ6IGZhbHNlLFxuXHRcdGRyb3BPbkVtcHR5OiB0cnVlLFxuXHRcdGZvcmNlUGxhY2Vob2xkZXJTaXplOiBmYWxzZSxcblx0XHRmb3JjZUhlbHBlclNpemU6IGZhbHNlLFxuXHRcdGdyaWQ6IGZhbHNlLFxuXHRcdGhhbmRsZTogZmFsc2UsXG5cdFx0aGVscGVyOiBcIm9yaWdpbmFsXCIsXG5cdFx0aXRlbXM6IFwiPiAqXCIsXG5cdFx0b3BhY2l0eTogZmFsc2UsXG5cdFx0cGxhY2Vob2xkZXI6IGZhbHNlLFxuXHRcdHJldmVydDogZmFsc2UsXG5cdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdHNjcm9sbFNlbnNpdGl2aXR5OiAyMCxcblx0XHRzY3JvbGxTcGVlZDogMjAsXG5cdFx0c2NvcGU6IFwiZGVmYXVsdFwiLFxuXHRcdHRvbGVyYW5jZTogXCJpbnRlcnNlY3RcIixcblx0XHR6SW5kZXg6IDEwMDAsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRhY3RpdmF0ZTogbnVsbCxcblx0XHRiZWZvcmVTdG9wOiBudWxsLFxuXHRcdGNoYW5nZTogbnVsbCxcblx0XHRkZWFjdGl2YXRlOiBudWxsLFxuXHRcdG91dDogbnVsbCxcblx0XHRvdmVyOiBudWxsLFxuXHRcdHJlY2VpdmU6IG51bGwsXG5cdFx0cmVtb3ZlOiBudWxsLFxuXHRcdHNvcnQ6IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbCxcblx0XHR1cGRhdGU6IG51bGxcblx0fSxcblxuXHRfaXNPdmVyQXhpczogZnVuY3Rpb24oIHgsIHJlZmVyZW5jZSwgc2l6ZSApIHtcblx0XHRyZXR1cm4gKCB4ID49IHJlZmVyZW5jZSApICYmICggeCA8ICggcmVmZXJlbmNlICsgc2l6ZSApICk7XG5cdH0sXG5cblx0X2lzRmxvYXRpbmc6IGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdHJldHVybiAoIC9sZWZ0fHJpZ2h0LyApLnRlc3QoIGl0ZW0uY3NzKCBcImZsb2F0XCIgKSApIHx8XG5cdFx0XHQoIC9pbmxpbmV8dGFibGUtY2VsbC8gKS50ZXN0KCBpdGVtLmNzcyggXCJkaXNwbGF5XCIgKSApO1xuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udGFpbmVyQ2FjaGUgPSB7fTtcblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1zb3J0YWJsZVwiICk7XG5cblx0XHQvL0dldCB0aGUgaXRlbXNcblx0XHR0aGlzLnJlZnJlc2goKTtcblxuXHRcdC8vTGV0J3MgZGV0ZXJtaW5lIHRoZSBwYXJlbnQncyBvZmZzZXRcblx0XHR0aGlzLm9mZnNldCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcblxuXHRcdC8vSW5pdGlhbGl6ZSBtb3VzZSBldmVudHMgZm9yIGludGVyYWN0aW9uXG5cdFx0dGhpcy5fbW91c2VJbml0KCk7XG5cblx0XHR0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKTtcblxuXHRcdC8vV2UncmUgcmVhZHkgdG8gZ29cblx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcblxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJoYW5kbGVcIiApIHtcblx0XHRcdHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0SGFuZGxlQ2xhc3NOYW1lOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuZWxlbWVudC5maW5kKCBcIi51aS1zb3J0YWJsZS1oYW5kbGVcIiApLCBcInVpLXNvcnRhYmxlLWhhbmRsZVwiICk7XG5cdFx0JC5lYWNoKCB0aGlzLml0ZW1zLCBmdW5jdGlvbigpIHtcblx0XHRcdHRoYXQuX2FkZENsYXNzKFxuXHRcdFx0XHR0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlID9cblx0XHRcdFx0XHR0aGlzLml0ZW0uZmluZCggdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZSApIDpcblx0XHRcdFx0XHR0aGlzLml0ZW0sXG5cdFx0XHRcdFwidWktc29ydGFibGUtaGFuZGxlXCJcblx0XHRcdCk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9tb3VzZURlc3Ryb3koKTtcblxuXHRcdGZvciAoIHZhciBpID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdHRoaXMuaXRlbXNbIGkgXS5pdGVtLnJlbW92ZURhdGEoIHRoaXMud2lkZ2V0TmFtZSArIFwiLWl0ZW1cIiApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdF9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9uKCBldmVudCwgb3ZlcnJpZGVIYW5kbGUgKSB7XG5cdFx0dmFyIGN1cnJlbnRJdGVtID0gbnVsbCxcblx0XHRcdHZhbGlkSGFuZGxlID0gZmFsc2UsXG5cdFx0XHR0aGF0ID0gdGhpcztcblxuXHRcdGlmICggdGhpcy5yZXZlcnRpbmcgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5vcHRpb25zLnR5cGUgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly9XZSBoYXZlIHRvIHJlZnJlc2ggdGhlIGl0ZW1zIGRhdGEgb25jZSBmaXJzdFxuXHRcdHRoaXMuX3JlZnJlc2hJdGVtcyggZXZlbnQgKTtcblxuXHRcdC8vRmluZCBvdXQgaWYgdGhlIGNsaWNrZWQgbm9kZSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBpcyBhIGFjdHVhbCBpdGVtIGluIHRoaXMuaXRlbXNcblx0XHQkKCBldmVudC50YXJnZXQgKS5wYXJlbnRzKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICQuZGF0YSggdGhpcywgdGhhdC53aWRnZXROYW1lICsgXCItaXRlbVwiICkgPT09IHRoYXQgKSB7XG5cdFx0XHRcdGN1cnJlbnRJdGVtID0gJCggdGhpcyApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdGlmICggJC5kYXRhKCBldmVudC50YXJnZXQsIHRoYXQud2lkZ2V0TmFtZSArIFwiLWl0ZW1cIiApID09PSB0aGF0ICkge1xuXHRcdFx0Y3VycmVudEl0ZW0gPSAkKCBldmVudC50YXJnZXQgKTtcblx0XHR9XG5cblx0XHRpZiAoICFjdXJyZW50SXRlbSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuaGFuZGxlICYmICFvdmVycmlkZUhhbmRsZSApIHtcblx0XHRcdCQoIHRoaXMub3B0aW9ucy5oYW5kbGUsIGN1cnJlbnRJdGVtICkuZmluZCggXCIqXCIgKS5hZGRCYWNrKCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyA9PT0gZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0XHRcdHZhbGlkSGFuZGxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdFx0aWYgKCAhdmFsaWRIYW5kbGUgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmN1cnJlbnRJdGVtID0gY3VycmVudEl0ZW07XG5cdFx0dGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9LFxuXG5cdF9tb3VzZVN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIG92ZXJyaWRlSGFuZGxlLCBub0FjdGl2YXRpb24gKSB7XG5cblx0XHR2YXIgaSwgYm9keSxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnM7XG5cblx0XHR0aGlzLmN1cnJlbnRDb250YWluZXIgPSB0aGlzO1xuXG5cdFx0Ly9XZSBvbmx5IG5lZWQgdG8gY2FsbCByZWZyZXNoUG9zaXRpb25zLCBiZWNhdXNlIHRoZSByZWZyZXNoSXRlbXMgY2FsbCBoYXMgYmVlbiBtb3ZlZCB0b1xuXHRcdC8vIG1vdXNlQ2FwdHVyZVxuXHRcdHRoaXMucmVmcmVzaFBvc2l0aW9ucygpO1xuXG5cdFx0Ly9DcmVhdGUgYW5kIGFwcGVuZCB0aGUgdmlzaWJsZSBoZWxwZXJcblx0XHR0aGlzLmhlbHBlciA9IHRoaXMuX2NyZWF0ZUhlbHBlciggZXZlbnQgKTtcblxuXHRcdC8vQ2FjaGUgdGhlIGhlbHBlciBzaXplXG5cdFx0dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpO1xuXG5cdFx0Lypcblx0XHQgKiAtIFBvc2l0aW9uIGdlbmVyYXRpb24gLVxuXHRcdCAqIFRoaXMgYmxvY2sgZ2VuZXJhdGVzIGV2ZXJ5dGhpbmcgcG9zaXRpb24gcmVsYXRlZCAtIGl0J3MgdGhlIGNvcmUgb2YgZHJhZ2dhYmxlcy5cblx0XHQgKi9cblxuXHRcdC8vQ2FjaGUgdGhlIG1hcmdpbnMgb2YgdGhlIG9yaWdpbmFsIGVsZW1lbnRcblx0XHR0aGlzLl9jYWNoZU1hcmdpbnMoKTtcblxuXHRcdC8vR2V0IHRoZSBuZXh0IHNjcm9sbGluZyBwYXJlbnRcblx0XHR0aGlzLnNjcm9sbFBhcmVudCA9IHRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpO1xuXG5cdFx0Ly9UaGUgZWxlbWVudCdzIGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIG1pbnVzIG1hcmdpbnNcblx0XHR0aGlzLm9mZnNldCA9IHRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCk7XG5cdFx0dGhpcy5vZmZzZXQgPSB7XG5cdFx0XHR0b3A6IHRoaXMub2Zmc2V0LnRvcCAtIHRoaXMubWFyZ2lucy50b3AsXG5cdFx0XHRsZWZ0OiB0aGlzLm9mZnNldC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnRcblx0XHR9O1xuXG5cdFx0JC5leHRlbmQoIHRoaXMub2Zmc2V0LCB7XG5cdFx0XHRjbGljazogeyAvL1doZXJlIHRoZSBjbGljayBoYXBwZW5lZCwgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnRcblx0XHRcdFx0bGVmdDogZXZlbnQucGFnZVggLSB0aGlzLm9mZnNldC5sZWZ0LFxuXHRcdFx0XHR0b3A6IGV2ZW50LnBhZ2VZIC0gdGhpcy5vZmZzZXQudG9wXG5cdFx0XHR9LFxuXHRcdFx0cGFyZW50OiB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxcblxuXHRcdFx0Ly8gVGhpcyBpcyBhIHJlbGF0aXZlIHRvIGFic29sdXRlIHBvc2l0aW9uIG1pbnVzIHRoZSBhY3R1YWwgcG9zaXRpb24gY2FsY3VsYXRpb24gLVxuXHRcdFx0Ly8gb25seSB1c2VkIGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIGhlbHBlclxuXHRcdFx0cmVsYXRpdmU6IHRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KClcblx0XHR9ICk7XG5cblx0XHQvLyBPbmx5IGFmdGVyIHdlIGdvdCB0aGUgb2Zmc2V0LCB3ZSBjYW4gY2hhbmdlIHRoZSBoZWxwZXIncyBwb3NpdGlvbiB0byBhYnNvbHV0ZVxuXHRcdC8vIFRPRE86IFN0aWxsIG5lZWQgdG8gZmlndXJlIG91dCBhIHdheSB0byBtYWtlIHJlbGF0aXZlIHNvcnRpbmcgcG9zc2libGVcblx0XHR0aGlzLmhlbHBlci5jc3MoIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiICk7XG5cdFx0dGhpcy5jc3NQb3NpdGlvbiA9IHRoaXMuaGVscGVyLmNzcyggXCJwb3NpdGlvblwiICk7XG5cblx0XHQvL0dlbmVyYXRlIHRoZSBvcmlnaW5hbCBwb3NpdGlvblxuXHRcdHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oIGV2ZW50ICk7XG5cdFx0dGhpcy5vcmlnaW5hbFBhZ2VYID0gZXZlbnQucGFnZVg7XG5cdFx0dGhpcy5vcmlnaW5hbFBhZ2VZID0gZXZlbnQucGFnZVk7XG5cblx0XHQvL0FkanVzdCB0aGUgbW91c2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBoZWxwZXIgaWYgXCJjdXJzb3JBdFwiIGlzIHN1cHBsaWVkXG5cdFx0KCBvLmN1cnNvckF0ICYmIHRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoIG8uY3Vyc29yQXQgKSApO1xuXG5cdFx0Ly9DYWNoZSB0aGUgZm9ybWVyIERPTSBwb3NpdGlvblxuXHRcdHRoaXMuZG9tUG9zaXRpb24gPSB7XG5cdFx0XHRwcmV2OiB0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVsgMCBdLFxuXHRcdFx0cGFyZW50OiB0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWyAwIF1cblx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGhlbHBlciBpcyBub3QgdGhlIG9yaWdpbmFsLCBoaWRlIHRoZSBvcmlnaW5hbCBzbyBpdCdzIG5vdCBwbGF5aW5nIGFueSByb2xlIGR1cmluZ1xuXHRcdC8vIHRoZSBkcmFnLCB3b24ndCBjYXVzZSBhbnl0aGluZyBiYWQgdGhpcyB3YXlcblx0XHRpZiAoIHRoaXMuaGVscGVyWyAwIF0gIT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSApIHtcblx0XHRcdHRoaXMuY3VycmVudEl0ZW0uaGlkZSgpO1xuXHRcdH1cblxuXHRcdC8vQ3JlYXRlIHRoZSBwbGFjZWhvbGRlclxuXHRcdHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCk7XG5cblx0XHQvL1NldCBhIGNvbnRhaW5tZW50IGlmIGdpdmVuIGluIHRoZSBvcHRpb25zXG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0dGhpcy5fc2V0Q29udGFpbm1lbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIG8uY3Vyc29yICYmIG8uY3Vyc29yICE9PSBcImF1dG9cIiApIHsgLy8gY3Vyc29yIG9wdGlvblxuXHRcdFx0Ym9keSA9IHRoaXMuZG9jdW1lbnQuZmluZCggXCJib2R5XCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUVcblx0XHRcdHRoaXMuc3RvcmVkQ3Vyc29yID0gYm9keS5jc3MoIFwiY3Vyc29yXCIgKTtcblx0XHRcdGJvZHkuY3NzKCBcImN1cnNvclwiLCBvLmN1cnNvciApO1xuXG5cdFx0XHR0aGlzLnN0b3JlZFN0eWxlc2hlZXQgPVxuXHRcdFx0XHQkKCBcIjxzdHlsZT4qeyBjdXJzb3I6IFwiICsgby5jdXJzb3IgKyBcIiAhaW1wb3J0YW50OyB9PC9zdHlsZT5cIiApLmFwcGVuZFRvKCBib2R5ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvLm9wYWNpdHkgKSB7IC8vIG9wYWNpdHkgb3B0aW9uXG5cdFx0XHRpZiAoIHRoaXMuaGVscGVyLmNzcyggXCJvcGFjaXR5XCIgKSApIHtcblx0XHRcdFx0dGhpcy5fc3RvcmVkT3BhY2l0eSA9IHRoaXMuaGVscGVyLmNzcyggXCJvcGFjaXR5XCIgKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaGVscGVyLmNzcyggXCJvcGFjaXR5XCIsIG8ub3BhY2l0eSApO1xuXHRcdH1cblxuXHRcdGlmICggby56SW5kZXggKSB7IC8vIHpJbmRleCBvcHRpb25cblx0XHRcdGlmICggdGhpcy5oZWxwZXIuY3NzKCBcInpJbmRleFwiICkgKSB7XG5cdFx0XHRcdHRoaXMuX3N0b3JlZFpJbmRleCA9IHRoaXMuaGVscGVyLmNzcyggXCJ6SW5kZXhcIiApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5oZWxwZXIuY3NzKCBcInpJbmRleFwiLCBvLnpJbmRleCApO1xuXHRcdH1cblxuXHRcdC8vUHJlcGFyZSBzY3JvbGxpbmdcblx0XHRpZiAoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gIT09IHRoaXMuZG9jdW1lbnRbIDAgXSAmJlxuXHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnRhZ05hbWUgIT09IFwiSFRNTFwiICkge1xuXHRcdFx0dGhpcy5vdmVyZmxvd09mZnNldCA9IHRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpO1xuXHRcdH1cblxuXHRcdC8vQ2FsbCBjYWxsYmFja3Ncblx0XHR0aGlzLl90cmlnZ2VyKCBcInN0YXJ0XCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXG5cdFx0Ly9SZWNhY2hlIHRoZSBoZWxwZXIgc2l6ZVxuXHRcdGlmICggIXRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnMgKSB7XG5cdFx0XHR0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7XG5cdFx0fVxuXG5cdFx0Ly9Qb3N0IFwiYWN0aXZhdGVcIiBldmVudHMgdG8gcG9zc2libGUgY29udGFpbmVyc1xuXHRcdGlmICggIW5vQWN0aXZhdGlvbiApIHtcblx0XHRcdGZvciAoIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLl90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vUHJlcGFyZSBwb3NzaWJsZSBkcm9wcGFibGVzXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLmN1cnJlbnQgPSB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgJiYgIW8uZHJvcEJlaGF2aW91ciApIHtcblx0XHRcdCQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaGVscGVyLCBcInVpLXNvcnRhYmxlLWhlbHBlclwiICk7XG5cblx0XHQvLyBFeGVjdXRlIHRoZSBkcmFnIG9uY2UgLSB0aGlzIGNhdXNlcyB0aGUgaGVscGVyIG5vdCB0byBiZSB2aXNpYmxlYmVmb3JlIGdldHRpbmcgaXRzXG5cdFx0Ly8gY29ycmVjdCBwb3NpdGlvblxuXHRcdHRoaXMuX21vdXNlRHJhZyggZXZlbnQgKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHR9LFxuXG5cdF9tb3VzZURyYWc6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgaSwgaXRlbSwgaXRlbUVsZW1lbnQsIGludGVyc2VjdGlvbixcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRzY3JvbGxlZCA9IGZhbHNlO1xuXG5cdFx0Ly9Db21wdXRlIHRoZSBoZWxwZXJzIHBvc2l0aW9uXG5cdFx0dGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oIGV2ZW50ICk7XG5cdFx0dGhpcy5wb3NpdGlvbkFicyA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCBcImFic29sdXRlXCIgKTtcblxuXHRcdGlmICggIXRoaXMubGFzdFBvc2l0aW9uQWJzICkge1xuXHRcdFx0dGhpcy5sYXN0UG9zaXRpb25BYnMgPSB0aGlzLnBvc2l0aW9uQWJzO1xuXHRcdH1cblxuXHRcdC8vRG8gc2Nyb2xsaW5nXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc2Nyb2xsICkge1xuXHRcdFx0aWYgKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSB0aGlzLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnRhZ05hbWUgIT09IFwiSFRNTFwiICkge1xuXG5cdFx0XHRcdGlmICggKCB0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCArIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0ub2Zmc2V0SGVpZ2h0ICkgLVxuXHRcdFx0XHRcdFx0ZXZlbnQucGFnZVkgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsVG9wID1cblx0XHRcdFx0XHRcdHNjcm9sbGVkID0gdGhpcy5zY3JvbGxQYXJlbnRbIDAgXS5zY3JvbGxUb3AgKyBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBldmVudC5wYWdlWSAtIHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wIDwgby5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnNjcm9sbFRvcCA9XG5cdFx0XHRcdFx0XHRzY3JvbGxlZCA9IHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsVG9wIC0gby5zY3JvbGxTcGVlZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggKCB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgKyB0aGlzLnNjcm9sbFBhcmVudFsgMCBdLm9mZnNldFdpZHRoICkgLVxuXHRcdFx0XHRcdFx0ZXZlbnQucGFnZVggPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsTGVmdCA9IHNjcm9sbGVkID1cblx0XHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0uc2Nyb2xsTGVmdCArIG8uc2Nyb2xsU3BlZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0IDwgby5zY3JvbGxTZW5zaXRpdml0eSApIHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnNjcm9sbExlZnQgPSBzY3JvbGxlZCA9XG5cdFx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudFsgMCBdLnNjcm9sbExlZnQgLSBvLnNjcm9sbFNwZWVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoIHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkgLSBvLnNjcm9sbFNwZWVkICk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIHRoaXMud2luZG93LmhlaWdodCgpIC0gKCBldmVudC5wYWdlWSAtIHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkgKSA8XG5cdFx0XHRcdFx0XHRvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoIHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkgKyBvLnNjcm9sbFNwZWVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkgPCBvLnNjcm9sbFNlbnNpdGl2aXR5ICkge1xuXHRcdFx0XHRcdHNjcm9sbGVkID0gdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KFxuXHRcdFx0XHRcdFx0dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkgLSBvLnNjcm9sbFNwZWVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICggdGhpcy53aW5kb3cud2lkdGgoKSAtICggZXZlbnQucGFnZVggLSB0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSApIDxcblx0XHRcdFx0XHRcdG8uc2Nyb2xsU2Vuc2l0aXZpdHkgKSB7XG5cdFx0XHRcdFx0c2Nyb2xsZWQgPSB0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoXG5cdFx0XHRcdFx0XHR0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSArIG8uc2Nyb2xsU3BlZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzY3JvbGxlZCAhPT0gZmFsc2UgJiYgJC51aS5kZG1hbmFnZXIgJiYgIW8uZHJvcEJlaGF2aW91ciApIHtcblx0XHRcdFx0JC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoIHRoaXMsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9SZWdlbmVyYXRlIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiB1c2VkIGZvciBwb3NpdGlvbiBjaGVja3Ncblx0XHR0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oIFwiYWJzb2x1dGVcIiApO1xuXG5cdFx0Ly9TZXQgdGhlIGhlbHBlciBwb3NpdGlvblxuXHRcdGlmICggIXRoaXMub3B0aW9ucy5heGlzIHx8IHRoaXMub3B0aW9ucy5heGlzICE9PSBcInlcIiApIHtcblx0XHRcdHRoaXMuaGVscGVyWyAwIF0uc3R5bGUubGVmdCA9IHRoaXMucG9zaXRpb24ubGVmdCArIFwicHhcIjtcblx0XHR9XG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLmF4aXMgfHwgdGhpcy5vcHRpb25zLmF4aXMgIT09IFwieFwiICkge1xuXHRcdFx0dGhpcy5oZWxwZXJbIDAgXS5zdHlsZS50b3AgPSB0aGlzLnBvc2l0aW9uLnRvcCArIFwicHhcIjtcblx0XHR9XG5cblx0XHQvL1JlYXJyYW5nZVxuXHRcdGZvciAoIGkgPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXG5cdFx0XHQvL0NhY2hlIHZhcmlhYmxlcyBhbmQgaW50ZXJzZWN0aW9uLCBjb250aW51ZSBpZiBubyBpbnRlcnNlY3Rpb25cblx0XHRcdGl0ZW0gPSB0aGlzLml0ZW1zWyBpIF07XG5cdFx0XHRpdGVtRWxlbWVudCA9IGl0ZW0uaXRlbVsgMCBdO1xuXHRcdFx0aW50ZXJzZWN0aW9uID0gdGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKCBpdGVtICk7XG5cdFx0XHRpZiAoICFpbnRlcnNlY3Rpb24gKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IHB1dCB0aGUgcGxhY2Vob2xkZXIgaW5zaWRlIHRoZSBjdXJyZW50IENvbnRhaW5lciwgc2tpcCBhbGxcblx0XHRcdC8vIGl0ZW1zIGZyb20gb3RoZXIgY29udGFpbmVycy4gVGhpcyB3b3JrcyBiZWNhdXNlIHdoZW4gbW92aW5nXG5cdFx0XHQvLyBhbiBpdGVtIGZyb20gb25lIGNvbnRhaW5lciB0byBhbm90aGVyIHRoZVxuXHRcdFx0Ly8gY3VycmVudENvbnRhaW5lciBpcyBzd2l0Y2hlZCBiZWZvcmUgdGhlIHBsYWNlaG9sZGVyIGlzIG1vdmVkLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFdpdGhvdXQgdGhpcywgbW92aW5nIGl0ZW1zIGluIFwic3ViLXNvcnRhYmxlc1wiIGNhbiBjYXVzZVxuXHRcdFx0Ly8gdGhlIHBsYWNlaG9sZGVyIHRvIGppdHRlciBiZXR3ZWVuIHRoZSBvdXRlciBhbmQgaW5uZXIgY29udGFpbmVyLlxuXHRcdFx0aWYgKCBpdGVtLmluc3RhbmNlICE9PSB0aGlzLmN1cnJlbnRDb250YWluZXIgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYW5ub3QgaW50ZXJzZWN0IHdpdGggaXRzZWxmXG5cdFx0XHQvLyBubyB1c2VsZXNzIGFjdGlvbnMgdGhhdCBoYXZlIGJlZW4gZG9uZSBiZWZvcmVcblx0XHRcdC8vIG5vIGFjdGlvbiBpZiB0aGUgaXRlbSBtb3ZlZCBpcyB0aGUgcGFyZW50IG9mIHRoZSBpdGVtIGNoZWNrZWRcblx0XHRcdGlmICggaXRlbUVsZW1lbnQgIT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSAmJlxuXHRcdFx0XHR0aGlzLnBsYWNlaG9sZGVyWyBpbnRlcnNlY3Rpb24gPT09IDEgPyBcIm5leHRcIiA6IFwicHJldlwiIF0oKVsgMCBdICE9PSBpdGVtRWxlbWVudCAmJlxuXHRcdFx0XHQhJC5jb250YWlucyggdGhpcy5wbGFjZWhvbGRlclsgMCBdLCBpdGVtRWxlbWVudCApICYmXG5cdFx0XHRcdCggdGhpcy5vcHRpb25zLnR5cGUgPT09IFwic2VtaS1keW5hbWljXCIgP1xuXHRcdFx0XHRcdCEkLmNvbnRhaW5zKCB0aGlzLmVsZW1lbnRbIDAgXSwgaXRlbUVsZW1lbnQgKSA6XG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblxuXHRcdFx0XHR0aGlzLmRpcmVjdGlvbiA9IGludGVyc2VjdGlvbiA9PT0gMSA/IFwiZG93blwiIDogXCJ1cFwiO1xuXG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLnRvbGVyYW5jZSA9PT0gXCJwb2ludGVyXCIgfHwgdGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyggaXRlbSApICkge1xuXHRcdFx0XHRcdHRoaXMuX3JlYXJyYW5nZSggZXZlbnQsIGl0ZW0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL1Bvc3QgZXZlbnRzIHRvIGNvbnRhaW5lcnNcblx0XHR0aGlzLl9jb250YWN0Q29udGFpbmVycyggZXZlbnQgKTtcblxuXHRcdC8vSW50ZXJjb25uZWN0IHdpdGggZHJvcHBhYmxlc1xuXHRcdGlmICggJC51aS5kZG1hbmFnZXIgKSB7XG5cdFx0XHQkLnVpLmRkbWFuYWdlci5kcmFnKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdC8vQ2FsbCBjYWxsYmFja3Ncblx0XHR0aGlzLl90cmlnZ2VyKCBcInNvcnRcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCgpICk7XG5cblx0XHR0aGlzLmxhc3RQb3NpdGlvbkFicyA9IHRoaXMucG9zaXRpb25BYnM7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdH0sXG5cblx0X21vdXNlU3RvcDogZnVuY3Rpb24oIGV2ZW50LCBub1Byb3BhZ2F0aW9uICkge1xuXG5cdFx0aWYgKCAhZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly9JZiB3ZSBhcmUgdXNpbmcgZHJvcHBhYmxlcywgaW5mb3JtIHRoZSBtYW5hZ2VyIGFib3V0IHRoZSBkcm9wXG5cdFx0aWYgKCAkLnVpLmRkbWFuYWdlciAmJiAhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXIgKSB7XG5cdFx0XHQkLnVpLmRkbWFuYWdlci5kcm9wKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnJldmVydCApIHtcblx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0Y3VyID0gdGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxcblx0XHRcdFx0YXhpcyA9IHRoaXMub3B0aW9ucy5heGlzLFxuXHRcdFx0XHRhbmltYXRpb24gPSB7fTtcblxuXHRcdFx0aWYgKCAhYXhpcyB8fCBheGlzID09PSBcInhcIiApIHtcblx0XHRcdFx0YW5pbWF0aW9uLmxlZnQgPSBjdXIubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgK1xuXHRcdFx0XHRcdCggdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSA9PT0gdGhpcy5kb2N1bWVudFsgMCBdLmJvZHkgP1xuXHRcdFx0XHRcdFx0MCA6XG5cdFx0XHRcdFx0XHR0aGlzLm9mZnNldFBhcmVudFsgMCBdLnNjcm9sbExlZnRcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhYXhpcyB8fCBheGlzID09PSBcInlcIiApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnRvcCA9IGN1ci50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wIC0gdGhpcy5tYXJnaW5zLnRvcCArXG5cdFx0XHRcdFx0KCB0aGlzLm9mZnNldFBhcmVudFsgMCBdID09PSB0aGlzLmRvY3VtZW50WyAwIF0uYm9keSA/XG5cdFx0XHRcdFx0XHQwIDpcblx0XHRcdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50WyAwIF0uc2Nyb2xsVG9wXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMucmV2ZXJ0aW5nID0gdHJ1ZTtcblx0XHRcdCQoIHRoaXMuaGVscGVyICkuYW5pbWF0ZShcblx0XHRcdFx0YW5pbWF0aW9uLFxuXHRcdFx0XHRwYXJzZUludCggdGhpcy5vcHRpb25zLnJldmVydCwgMTAgKSB8fCA1MDAsXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHRoYXQuX2NsZWFyKCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jbGVhciggZXZlbnQsIG5vUHJvcGFnYXRpb24gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0fSxcblxuXHRjYW5jZWw6IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYgKCB0aGlzLmRyYWdnaW5nICkge1xuXG5cdFx0XHR0aGlzLl9tb3VzZVVwKCBuZXcgJC5FdmVudCggXCJtb3VzZXVwXCIsIHsgdGFyZ2V0OiBudWxsIH0gKSApO1xuXG5cdFx0XHRpZiAoIHRoaXMub3B0aW9ucy5oZWxwZXIgPT09IFwib3JpZ2luYWxcIiApIHtcblx0XHRcdFx0dGhpcy5jdXJyZW50SXRlbS5jc3MoIHRoaXMuX3N0b3JlZENTUyApO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5jdXJyZW50SXRlbSwgXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vUG9zdCBkZWFjdGl2YXRpbmcgZXZlbnRzIHRvIGNvbnRhaW5lcnNcblx0XHRcdGZvciAoIHZhciBpID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5fdHJpZ2dlciggXCJkZWFjdGl2YXRlXCIsIG51bGwsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggdGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5fdHJpZ2dlciggXCJvdXRcIiwgbnVsbCwgdGhpcy5fdWlIYXNoKCB0aGlzICkgKTtcblx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS5vdmVyID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnBsYWNlaG9sZGVyICkge1xuXG5cdFx0XHQvLyQodGhpcy5wbGFjZWhvbGRlclswXSkucmVtb3ZlKCk7IHdvdWxkIGhhdmUgYmVlbiB0aGUgalF1ZXJ5IHdheSAtIHVuZm9ydHVuYXRlbHksXG5cdFx0XHQvLyBpdCB1bmJpbmRzIEFMTCBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgbm9kZSFcblx0XHRcdGlmICggdGhpcy5wbGFjZWhvbGRlclsgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXJbIDAgXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0aGlzLnBsYWNlaG9sZGVyWyAwIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggdGhpcy5vcHRpb25zLmhlbHBlciAhPT0gXCJvcmlnaW5hbFwiICYmIHRoaXMuaGVscGVyICYmXG5cdFx0XHRcdFx0dGhpcy5oZWxwZXJbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLmhlbHBlci5yZW1vdmUoKTtcblx0XHRcdH1cblxuXHRcdFx0JC5leHRlbmQoIHRoaXMsIHtcblx0XHRcdFx0aGVscGVyOiBudWxsLFxuXHRcdFx0XHRkcmFnZ2luZzogZmFsc2UsXG5cdFx0XHRcdHJldmVydGluZzogZmFsc2UsXG5cdFx0XHRcdF9ub0ZpbmFsU29ydDogbnVsbFxuXHRcdFx0fSApO1xuXG5cdFx0XHRpZiAoIHRoaXMuZG9tUG9zaXRpb24ucHJldiApIHtcblx0XHRcdFx0JCggdGhpcy5kb21Qb3NpdGlvbi5wcmV2ICkuYWZ0ZXIoIHRoaXMuY3VycmVudEl0ZW0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMuZG9tUG9zaXRpb24ucGFyZW50ICkucHJlcGVuZCggdGhpcy5jdXJyZW50SXRlbSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c2VyaWFsaXplOiBmdW5jdGlvbiggbyApIHtcblxuXHRcdHZhciBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoIG8gJiYgby5jb25uZWN0ZWQgKSxcblx0XHRcdHN0ciA9IFtdO1xuXHRcdG8gPSBvIHx8IHt9O1xuXG5cdFx0JCggaXRlbXMgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciByZXMgPSAoICQoIG8uaXRlbSB8fCB0aGlzICkuYXR0ciggby5hdHRyaWJ1dGUgfHwgXCJpZFwiICkgfHwgXCJcIiApXG5cdFx0XHRcdC5tYXRjaCggby5leHByZXNzaW9uIHx8ICggLyguKylbXFwtPV9dKC4rKS8gKSApO1xuXHRcdFx0aWYgKCByZXMgKSB7XG5cdFx0XHRcdHN0ci5wdXNoKFxuXHRcdFx0XHRcdCggby5rZXkgfHwgcmVzWyAxIF0gKyBcIltdXCIgKSArXG5cdFx0XHRcdFx0XCI9XCIgKyAoIG8ua2V5ICYmIG8uZXhwcmVzc2lvbiA/IHJlc1sgMSBdIDogcmVzWyAyIF0gKSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggIXN0ci5sZW5ndGggJiYgby5rZXkgKSB7XG5cdFx0XHRzdHIucHVzaCggby5rZXkgKyBcIj1cIiApO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdHIuam9pbiggXCImXCIgKTtcblxuXHR9LFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCBvICkge1xuXG5cdFx0dmFyIGl0ZW1zID0gdGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSggbyAmJiBvLmNvbm5lY3RlZCApLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHRvID0gbyB8fCB7fTtcblxuXHRcdGl0ZW1zLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0LnB1c2goICQoIG8uaXRlbSB8fCB0aGlzICkuYXR0ciggby5hdHRyaWJ1dGUgfHwgXCJpZFwiICkgfHwgXCJcIiApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gcmV0O1xuXG5cdH0sXG5cblx0LyogQmUgY2FyZWZ1bCB3aXRoIHRoZSBmb2xsb3dpbmcgY29yZSBmdW5jdGlvbnMgKi9cblx0X2ludGVyc2VjdHNXaXRoOiBmdW5jdGlvbiggaXRlbSApIHtcblxuXHRcdHZhciB4MSA9IHRoaXMucG9zaXRpb25BYnMubGVmdCxcblx0XHRcdHgyID0geDEgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLFxuXHRcdFx0eTEgPSB0aGlzLnBvc2l0aW9uQWJzLnRvcCxcblx0XHRcdHkyID0geTEgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxcblx0XHRcdGwgPSBpdGVtLmxlZnQsXG5cdFx0XHRyID0gbCArIGl0ZW0ud2lkdGgsXG5cdFx0XHR0ID0gaXRlbS50b3AsXG5cdFx0XHRiID0gdCArIGl0ZW0uaGVpZ2h0LFxuXHRcdFx0ZHlDbGljayA9IHRoaXMub2Zmc2V0LmNsaWNrLnRvcCxcblx0XHRcdGR4Q2xpY2sgPSB0aGlzLm9mZnNldC5jbGljay5sZWZ0LFxuXHRcdFx0aXNPdmVyRWxlbWVudEhlaWdodCA9ICggdGhpcy5vcHRpb25zLmF4aXMgPT09IFwieFwiICkgfHwgKCAoIHkxICsgZHlDbGljayApID4gdCAmJlxuXHRcdFx0XHQoIHkxICsgZHlDbGljayApIDwgYiApLFxuXHRcdFx0aXNPdmVyRWxlbWVudFdpZHRoID0gKCB0aGlzLm9wdGlvbnMuYXhpcyA9PT0gXCJ5XCIgKSB8fCAoICggeDEgKyBkeENsaWNrICkgPiBsICYmXG5cdFx0XHRcdCggeDEgKyBkeENsaWNrICkgPCByICksXG5cdFx0XHRpc092ZXJFbGVtZW50ID0gaXNPdmVyRWxlbWVudEhlaWdodCAmJiBpc092ZXJFbGVtZW50V2lkdGg7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy50b2xlcmFuY2UgPT09IFwicG9pbnRlclwiIHx8XG5cdFx0XHR0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVycyB8fFxuXHRcdFx0KCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlICE9PSBcInBvaW50ZXJcIiAmJlxuXHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zWyB0aGlzLmZsb2F0aW5nID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIiBdID5cblx0XHRcdFx0aXRlbVsgdGhpcy5mbG9hdGluZyA/IFwid2lkdGhcIiA6IFwiaGVpZ2h0XCIgXSApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gaXNPdmVyRWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gKCBsIDwgeDEgKyAoIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyICkgJiYgLy8gUmlnaHQgSGFsZlxuXHRcdFx0XHR4MiAtICggdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAvIDIgKSA8IHIgJiYgLy8gTGVmdCBIYWxmXG5cdFx0XHRcdHQgPCB5MSArICggdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyICkgJiYgLy8gQm90dG9tIEhhbGZcblx0XHRcdFx0eTIgLSAoIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC8gMiApIDwgYiApOyAvLyBUb3AgSGFsZlxuXG5cdFx0fVxuXHR9LFxuXG5cdF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6IGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdHZhciB2ZXJ0aWNhbERpcmVjdGlvbiwgaG9yaXpvbnRhbERpcmVjdGlvbixcblx0XHRcdGlzT3ZlckVsZW1lbnRIZWlnaHQgPSAoIHRoaXMub3B0aW9ucy5heGlzID09PSBcInhcIiApIHx8XG5cdFx0XHRcdHRoaXMuX2lzT3ZlckF4aXMoXG5cdFx0XHRcdFx0dGhpcy5wb3NpdGlvbkFicy50b3AgKyB0aGlzLm9mZnNldC5jbGljay50b3AsIGl0ZW0udG9wLCBpdGVtLmhlaWdodCApLFxuXHRcdFx0aXNPdmVyRWxlbWVudFdpZHRoID0gKCB0aGlzLm9wdGlvbnMuYXhpcyA9PT0gXCJ5XCIgKSB8fFxuXHRcdFx0XHR0aGlzLl9pc092ZXJBeGlzKFxuXHRcdFx0XHRcdHRoaXMucG9zaXRpb25BYnMubGVmdCArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIGl0ZW0ubGVmdCwgaXRlbS53aWR0aCApLFxuXHRcdFx0aXNPdmVyRWxlbWVudCA9IGlzT3ZlckVsZW1lbnRIZWlnaHQgJiYgaXNPdmVyRWxlbWVudFdpZHRoO1xuXG5cdFx0aWYgKCAhaXNPdmVyRWxlbWVudCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2ZXJ0aWNhbERpcmVjdGlvbiA9IHRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpO1xuXHRcdGhvcml6b250YWxEaXJlY3Rpb24gPSB0aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmxvYXRpbmcgP1xuXHRcdFx0KCAoIGhvcml6b250YWxEaXJlY3Rpb24gPT09IFwicmlnaHRcIiB8fCB2ZXJ0aWNhbERpcmVjdGlvbiA9PT0gXCJkb3duXCIgKSA/IDIgOiAxIClcblx0XHRcdDogKCB2ZXJ0aWNhbERpcmVjdGlvbiAmJiAoIHZlcnRpY2FsRGlyZWN0aW9uID09PSBcImRvd25cIiA/IDIgOiAxICkgKTtcblxuXHR9LFxuXG5cdF9pbnRlcnNlY3RzV2l0aFNpZGVzOiBmdW5jdGlvbiggaXRlbSApIHtcblxuXHRcdHZhciBpc092ZXJCb3R0b21IYWxmID0gdGhpcy5faXNPdmVyQXhpcyggdGhpcy5wb3NpdGlvbkFicy50b3AgK1xuXHRcdFx0XHR0aGlzLm9mZnNldC5jbGljay50b3AsIGl0ZW0udG9wICsgKCBpdGVtLmhlaWdodCAvIDIgKSwgaXRlbS5oZWlnaHQgKSxcblx0XHRcdGlzT3ZlclJpZ2h0SGFsZiA9IHRoaXMuX2lzT3ZlckF4aXMoIHRoaXMucG9zaXRpb25BYnMubGVmdCArXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIGl0ZW0ubGVmdCArICggaXRlbS53aWR0aCAvIDIgKSwgaXRlbS53aWR0aCApLFxuXHRcdFx0dmVydGljYWxEaXJlY3Rpb24gPSB0aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxcblx0XHRcdGhvcml6b250YWxEaXJlY3Rpb24gPSB0aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO1xuXG5cdFx0aWYgKCB0aGlzLmZsb2F0aW5nICYmIGhvcml6b250YWxEaXJlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm4gKCAoIGhvcml6b250YWxEaXJlY3Rpb24gPT09IFwicmlnaHRcIiAmJiBpc092ZXJSaWdodEhhbGYgKSB8fFxuXHRcdFx0XHQoIGhvcml6b250YWxEaXJlY3Rpb24gPT09IFwibGVmdFwiICYmICFpc092ZXJSaWdodEhhbGYgKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdmVydGljYWxEaXJlY3Rpb24gJiYgKCAoIHZlcnRpY2FsRGlyZWN0aW9uID09PSBcImRvd25cIiAmJiBpc092ZXJCb3R0b21IYWxmICkgfHxcblx0XHRcdFx0KCB2ZXJ0aWNhbERpcmVjdGlvbiA9PT0gXCJ1cFwiICYmICFpc092ZXJCb3R0b21IYWxmICkgKTtcblx0XHR9XG5cblx0fSxcblxuXHRfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGVsdGEgPSB0aGlzLnBvc2l0aW9uQWJzLnRvcCAtIHRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtcblx0XHRyZXR1cm4gZGVsdGEgIT09IDAgJiYgKCBkZWx0YSA+IDAgPyBcImRvd25cIiA6IFwidXBcIiApO1xuXHR9LFxuXG5cdF9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlbHRhID0gdGhpcy5wb3NpdGlvbkFicy5sZWZ0IC0gdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtcblx0XHRyZXR1cm4gZGVsdGEgIT09IDAgJiYgKCBkZWx0YSA+IDAgPyBcInJpZ2h0XCIgOiBcImxlZnRcIiApO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR0aGlzLl9yZWZyZXNoSXRlbXMoIGV2ZW50ICk7XG5cdFx0dGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCk7XG5cdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0X2Nvbm5lY3RXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRyZXR1cm4gb3B0aW9ucy5jb25uZWN0V2l0aC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nID9cblx0XHRcdFsgb3B0aW9ucy5jb25uZWN0V2l0aCBdIDpcblx0XHRcdG9wdGlvbnMuY29ubmVjdFdpdGg7XG5cdH0sXG5cblx0X2dldEl0ZW1zQXNqUXVlcnk6IGZ1bmN0aW9uKCBjb25uZWN0ZWQgKSB7XG5cblx0XHR2YXIgaSwgaiwgY3VyLCBpbnN0LFxuXHRcdFx0aXRlbXMgPSBbXSxcblx0XHRcdHF1ZXJpZXMgPSBbXSxcblx0XHRcdGNvbm5lY3RXaXRoID0gdGhpcy5fY29ubmVjdFdpdGgoKTtcblxuXHRcdGlmICggY29ubmVjdFdpdGggJiYgY29ubmVjdGVkICkge1xuXHRcdFx0Zm9yICggaSA9IGNvbm5lY3RXaXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0XHRjdXIgPSAkKCBjb25uZWN0V2l0aFsgaSBdLCB0aGlzLmRvY3VtZW50WyAwIF0gKTtcblx0XHRcdFx0Zm9yICggaiA9IGN1ci5sZW5ndGggLSAxOyBqID49IDA7IGotLSApIHtcblx0XHRcdFx0XHRpbnN0ID0gJC5kYXRhKCBjdXJbIGogXSwgdGhpcy53aWRnZXRGdWxsTmFtZSApO1xuXHRcdFx0XHRcdGlmICggaW5zdCAmJiBpbnN0ICE9PSB0aGlzICYmICFpbnN0Lm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0XHRxdWVyaWVzLnB1c2goIFsgJC5pc0Z1bmN0aW9uKCBpbnN0Lm9wdGlvbnMuaXRlbXMgKSA/XG5cdFx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5pdGVtcy5jYWxsKCBpbnN0LmVsZW1lbnQgKSA6XG5cdFx0XHRcdFx0XHRcdCQoIGluc3Qub3B0aW9ucy5pdGVtcywgaW5zdC5lbGVtZW50IClcblx0XHRcdFx0XHRcdFx0XHQubm90KCBcIi51aS1zb3J0YWJsZS1oZWxwZXJcIiApXG5cdFx0XHRcdFx0XHRcdFx0Lm5vdCggXCIudWktc29ydGFibGUtcGxhY2Vob2xkZXJcIiApLCBpbnN0IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRxdWVyaWVzLnB1c2goIFsgJC5pc0Z1bmN0aW9uKCB0aGlzLm9wdGlvbnMuaXRlbXMgKSA/XG5cdFx0XHR0aGlzLm9wdGlvbnMuaXRlbXNcblx0XHRcdFx0LmNhbGwoIHRoaXMuZWxlbWVudCwgbnVsbCwgeyBvcHRpb25zOiB0aGlzLm9wdGlvbnMsIGl0ZW06IHRoaXMuY3VycmVudEl0ZW0gfSApIDpcblx0XHRcdCQoIHRoaXMub3B0aW9ucy5pdGVtcywgdGhpcy5lbGVtZW50IClcblx0XHRcdFx0Lm5vdCggXCIudWktc29ydGFibGUtaGVscGVyXCIgKVxuXHRcdFx0XHQubm90KCBcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiICksIHRoaXMgXSApO1xuXG5cdFx0ZnVuY3Rpb24gYWRkSXRlbXMoKSB7XG5cdFx0XHRpdGVtcy5wdXNoKCB0aGlzICk7XG5cdFx0fVxuXHRcdGZvciAoIGkgPSBxdWVyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkge1xuXHRcdFx0cXVlcmllc1sgaSBdWyAwIF0uZWFjaCggYWRkSXRlbXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJCggaXRlbXMgKTtcblxuXHR9LFxuXG5cdF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczogZnVuY3Rpb24oKSB7XG5cblx0XHR2YXIgbGlzdCA9IHRoaXMuY3VycmVudEl0ZW0uZmluZCggXCI6ZGF0YShcIiArIHRoaXMud2lkZ2V0TmFtZSArIFwiLWl0ZW0pXCIgKTtcblxuXHRcdHRoaXMuaXRlbXMgPSAkLmdyZXAoIHRoaXMuaXRlbXMsIGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdFx0Zm9yICggdmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKyApIHtcblx0XHRcdFx0aWYgKCBsaXN0WyBqIF0gPT09IGl0ZW0uaXRlbVsgMCBdICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSApO1xuXG5cdH0sXG5cblx0X3JlZnJlc2hJdGVtczogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dGhpcy5pdGVtcyA9IFtdO1xuXHRcdHRoaXMuY29udGFpbmVycyA9IFsgdGhpcyBdO1xuXG5cdFx0dmFyIGksIGosIGN1ciwgaW5zdCwgdGFyZ2V0RGF0YSwgX3F1ZXJpZXMsIGl0ZW0sIHF1ZXJpZXNMZW5ndGgsXG5cdFx0XHRpdGVtcyA9IHRoaXMuaXRlbXMsXG5cdFx0XHRxdWVyaWVzID0gWyBbICQuaXNGdW5jdGlvbiggdGhpcy5vcHRpb25zLml0ZW1zICkgP1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCggdGhpcy5lbGVtZW50WyAwIF0sIGV2ZW50LCB7IGl0ZW06IHRoaXMuY3VycmVudEl0ZW0gfSApIDpcblx0XHRcdFx0JCggdGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQgKSwgdGhpcyBdIF0sXG5cdFx0XHRjb25uZWN0V2l0aCA9IHRoaXMuX2Nvbm5lY3RXaXRoKCk7XG5cblx0XHQvL1Nob3VsZG4ndCBiZSBydW4gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCBkdWUgdG8gbWFzc2l2ZSBzbG93LWRvd25cblx0XHRpZiAoIGNvbm5lY3RXaXRoICYmIHRoaXMucmVhZHkgKSB7XG5cdFx0XHRmb3IgKCBpID0gY29ubmVjdFdpdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdGN1ciA9ICQoIGNvbm5lY3RXaXRoWyBpIF0sIHRoaXMuZG9jdW1lbnRbIDAgXSApO1xuXHRcdFx0XHRmb3IgKCBqID0gY3VyLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tICkge1xuXHRcdFx0XHRcdGluc3QgPSAkLmRhdGEoIGN1clsgaiBdLCB0aGlzLndpZGdldEZ1bGxOYW1lICk7XG5cdFx0XHRcdFx0aWYgKCBpbnN0ICYmIGluc3QgIT09IHRoaXMgJiYgIWluc3Qub3B0aW9ucy5kaXNhYmxlZCApIHtcblx0XHRcdFx0XHRcdHF1ZXJpZXMucHVzaCggWyAkLmlzRnVuY3Rpb24oIGluc3Qub3B0aW9ucy5pdGVtcyApID9cblx0XHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLml0ZW1zXG5cdFx0XHRcdFx0XHRcdFx0LmNhbGwoIGluc3QuZWxlbWVudFsgMCBdLCBldmVudCwgeyBpdGVtOiB0aGlzLmN1cnJlbnRJdGVtIH0gKSA6XG5cdFx0XHRcdFx0XHRcdCQoIGluc3Qub3B0aW9ucy5pdGVtcywgaW5zdC5lbGVtZW50ICksIGluc3QgXSApO1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWluZXJzLnB1c2goIGluc3QgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKCBpID0gcXVlcmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblx0XHRcdHRhcmdldERhdGEgPSBxdWVyaWVzWyBpIF1bIDEgXTtcblx0XHRcdF9xdWVyaWVzID0gcXVlcmllc1sgaSBdWyAwIF07XG5cblx0XHRcdGZvciAoIGogPSAwLCBxdWVyaWVzTGVuZ3RoID0gX3F1ZXJpZXMubGVuZ3RoOyBqIDwgcXVlcmllc0xlbmd0aDsgaisrICkge1xuXHRcdFx0XHRpdGVtID0gJCggX3F1ZXJpZXNbIGogXSApO1xuXG5cdFx0XHRcdC8vIERhdGEgZm9yIHRhcmdldCBjaGVja2luZyAobW91c2UgbWFuYWdlcilcblx0XHRcdFx0aXRlbS5kYXRhKCB0aGlzLndpZGdldE5hbWUgKyBcIi1pdGVtXCIsIHRhcmdldERhdGEgKTtcblxuXHRcdFx0XHRpdGVtcy5wdXNoKCB7XG5cdFx0XHRcdFx0aXRlbTogaXRlbSxcblx0XHRcdFx0XHRpbnN0YW5jZTogdGFyZ2V0RGF0YSxcblx0XHRcdFx0XHR3aWR0aDogMCwgaGVpZ2h0OiAwLFxuXHRcdFx0XHRcdGxlZnQ6IDAsIHRvcDogMFxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0sXG5cblx0cmVmcmVzaFBvc2l0aW9uczogZnVuY3Rpb24oIGZhc3QgKSB7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hldGhlciBpdGVtcyBhcmUgYmVpbmcgZGlzcGxheWVkIGhvcml6b250YWxseVxuXHRcdHRoaXMuZmxvYXRpbmcgPSB0aGlzLml0ZW1zLmxlbmd0aCA/XG5cdFx0XHR0aGlzLm9wdGlvbnMuYXhpcyA9PT0gXCJ4XCIgfHwgdGhpcy5faXNGbG9hdGluZyggdGhpcy5pdGVtc1sgMCBdLml0ZW0gKSA6XG5cdFx0XHRmYWxzZTtcblxuXHRcdC8vVGhpcyBoYXMgdG8gYmUgcmVkb25lIGJlY2F1c2UgZHVlIHRvIHRoZSBpdGVtIGJlaW5nIG1vdmVkIG91dC9pbnRvIHRoZSBvZmZzZXRQYXJlbnQsXG5cdFx0Ly8gdGhlIG9mZnNldFBhcmVudCdzIHBvc2l0aW9uIHdpbGwgY2hhbmdlXG5cdFx0aWYgKCB0aGlzLm9mZnNldFBhcmVudCAmJiB0aGlzLmhlbHBlciApIHtcblx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudCA9IHRoaXMuX2dldFBhcmVudE9mZnNldCgpO1xuXHRcdH1cblxuXHRcdHZhciBpLCBpdGVtLCB0LCBwO1xuXG5cdFx0Zm9yICggaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRpdGVtID0gdGhpcy5pdGVtc1sgaSBdO1xuXG5cdFx0XHQvL1dlIGlnbm9yZSBjYWxjdWxhdGluZyBwb3NpdGlvbnMgb2YgYWxsIGNvbm5lY3RlZCBjb250YWluZXJzIHdoZW4gd2UncmUgbm90IG92ZXIgdGhlbVxuXHRcdFx0aWYgKCBpdGVtLmluc3RhbmNlICE9PSB0aGlzLmN1cnJlbnRDb250YWluZXIgJiYgdGhpcy5jdXJyZW50Q29udGFpbmVyICYmXG5cdFx0XHRcdFx0aXRlbS5pdGVtWyAwIF0gIT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHQgPSB0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCA/XG5cdFx0XHRcdCQoIHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LCBpdGVtLml0ZW0gKSA6XG5cdFx0XHRcdGl0ZW0uaXRlbTtcblxuXHRcdFx0aWYgKCAhZmFzdCApIHtcblx0XHRcdFx0aXRlbS53aWR0aCA9IHQub3V0ZXJXaWR0aCgpO1xuXHRcdFx0XHRpdGVtLmhlaWdodCA9IHQub3V0ZXJIZWlnaHQoKTtcblx0XHRcdH1cblxuXHRcdFx0cCA9IHQub2Zmc2V0KCk7XG5cdFx0XHRpdGVtLmxlZnQgPSBwLmxlZnQ7XG5cdFx0XHRpdGVtLnRvcCA9IHAudG9wO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmN1c3RvbSAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdHAgPSB0aGlzLmNvbnRhaW5lcnNbIGkgXS5lbGVtZW50Lm9mZnNldCgpO1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS5sZWZ0ID0gcC5sZWZ0O1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS50b3AgPSBwLnRvcDtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUud2lkdGggPVxuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmVsZW1lbnQub3V0ZXJXaWR0aCgpO1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGkgXS5jb250YWluZXJDYWNoZS5oZWlnaHQgPVxuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRfY3JlYXRlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uKCB0aGF0ICkge1xuXHRcdHRoYXQgPSB0aGF0IHx8IHRoaXM7XG5cdFx0dmFyIGNsYXNzTmFtZSxcblx0XHRcdG8gPSB0aGF0Lm9wdGlvbnM7XG5cblx0XHRpZiAoICFvLnBsYWNlaG9sZGVyIHx8IG8ucGxhY2Vob2xkZXIuY29uc3RydWN0b3IgPT09IFN0cmluZyApIHtcblx0XHRcdGNsYXNzTmFtZSA9IG8ucGxhY2Vob2xkZXI7XG5cdFx0XHRvLnBsYWNlaG9sZGVyID0ge1xuXHRcdFx0XHRlbGVtZW50OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdHZhciBub2RlTmFtZSA9IHRoYXQuY3VycmVudEl0ZW1bIDAgXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0ZWxlbWVudCA9ICQoIFwiPFwiICsgbm9kZU5hbWUgKyBcIj5cIiwgdGhhdC5kb2N1bWVudFsgMCBdICk7XG5cblx0XHRcdFx0XHRcdHRoYXQuX2FkZENsYXNzKCBlbGVtZW50LCBcInVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHRoYXQuY3VycmVudEl0ZW1bIDAgXS5jbGFzc05hbWUgKVxuXHRcdFx0XHRcdFx0XHQuX3JlbW92ZUNsYXNzKCBlbGVtZW50LCBcInVpLXNvcnRhYmxlLWhlbHBlclwiICk7XG5cblx0XHRcdFx0XHRpZiAoIG5vZGVOYW1lID09PSBcInRib2R5XCIgKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9jcmVhdGVUclBsYWNlaG9sZGVyKFxuXHRcdFx0XHRcdFx0XHR0aGF0LmN1cnJlbnRJdGVtLmZpbmQoIFwidHJcIiApLmVxKCAwICksXG5cdFx0XHRcdFx0XHRcdCQoIFwiPHRyPlwiLCB0aGF0LmRvY3VtZW50WyAwIF0gKS5hcHBlbmRUbyggZWxlbWVudCApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcInRyXCIgKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll9jcmVhdGVUclBsYWNlaG9sZGVyKCB0aGF0LmN1cnJlbnRJdGVtLCBlbGVtZW50ICk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW1nXCIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LmF0dHIoIFwic3JjXCIsIHRoYXQuY3VycmVudEl0ZW0uYXR0ciggXCJzcmNcIiApICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhY2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5jc3MoIFwidmlzaWJpbGl0eVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVwZGF0ZTogZnVuY3Rpb24oIGNvbnRhaW5lciwgcCApIHtcblxuXHRcdFx0XHRcdC8vIDEuIElmIGEgY2xhc3NOYW1lIGlzIHNldCBhcyAncGxhY2Vob2xkZXIgb3B0aW9uLCB3ZSBkb24ndCBmb3JjZSBzaXplcyAtXG5cdFx0XHRcdFx0Ly8gdGhlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciB0aGF0XG5cdFx0XHRcdFx0Ly8gMi4gVGhlIG9wdGlvbiAnZm9yY2VQbGFjZWhvbGRlclNpemUgY2FuIGJlIGVuYWJsZWQgdG8gZm9yY2UgaXQgZXZlbiBpZiBhXG5cdFx0XHRcdFx0Ly8gY2xhc3MgbmFtZSBpcyBzcGVjaWZpZWRcblx0XHRcdFx0XHRpZiAoIGNsYXNzTmFtZSAmJiAhby5mb3JjZVBsYWNlaG9sZGVyU2l6ZSApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL0lmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhIGFjdHVhbCBoZWlnaHQgYnkgaXRzZWxmICh3aXRob3V0IHN0eWxlcyBjb21pbmdcblx0XHRcdFx0XHQvLyBmcm9tIGEgc3R5bGVzaGVldCksIGl0IHJlY2VpdmVzIHRoZSBpbmxpbmUgaGVpZ2h0IGZyb20gdGhlIGRyYWdnZWQgaXRlbVxuXHRcdFx0XHRcdGlmICggIXAuaGVpZ2h0KCkgKSB7XG5cdFx0XHRcdFx0XHRwLmhlaWdodChcblx0XHRcdFx0XHRcdFx0dGhhdC5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpIC1cblx0XHRcdFx0XHRcdFx0cGFyc2VJbnQoIHRoYXQuY3VycmVudEl0ZW0uY3NzKCBcInBhZGRpbmdUb3BcIiApIHx8IDAsIDEwICkgLVxuXHRcdFx0XHRcdFx0XHRwYXJzZUludCggdGhhdC5jdXJyZW50SXRlbS5jc3MoIFwicGFkZGluZ0JvdHRvbVwiICkgfHwgMCwgMTAgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoICFwLndpZHRoKCkgKSB7XG5cdFx0XHRcdFx0XHRwLndpZHRoKFxuXHRcdFx0XHRcdFx0XHR0aGF0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKSAtXG5cdFx0XHRcdFx0XHRcdHBhcnNlSW50KCB0aGF0LmN1cnJlbnRJdGVtLmNzcyggXCJwYWRkaW5nTGVmdFwiICkgfHwgMCwgMTAgKSAtXG5cdFx0XHRcdFx0XHRcdHBhcnNlSW50KCB0aGF0LmN1cnJlbnRJdGVtLmNzcyggXCJwYWRkaW5nUmlnaHRcIiApIHx8IDAsIDEwICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly9DcmVhdGUgdGhlIHBsYWNlaG9sZGVyXG5cdFx0dGhhdC5wbGFjZWhvbGRlciA9ICQoIG8ucGxhY2Vob2xkZXIuZWxlbWVudC5jYWxsKCB0aGF0LmVsZW1lbnQsIHRoYXQuY3VycmVudEl0ZW0gKSApO1xuXG5cdFx0Ly9BcHBlbmQgaXQgYWZ0ZXIgdGhlIGFjdHVhbCBjdXJyZW50IGl0ZW1cblx0XHR0aGF0LmN1cnJlbnRJdGVtLmFmdGVyKCB0aGF0LnBsYWNlaG9sZGVyICk7XG5cblx0XHQvL1VwZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgcGxhY2Vob2xkZXIgKFRPRE86IExvZ2ljIHRvIGZ1enp5LCBzZWUgbGluZSAzMTYvMzE3KVxuXHRcdG8ucGxhY2Vob2xkZXIudXBkYXRlKCB0aGF0LCB0aGF0LnBsYWNlaG9sZGVyICk7XG5cblx0fSxcblxuXHRfY3JlYXRlVHJQbGFjZWhvbGRlcjogZnVuY3Rpb24oIHNvdXJjZVRyLCB0YXJnZXRUciApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHRzb3VyY2VUci5jaGlsZHJlbigpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggXCI8dGQ+JiMxNjA7PC90ZD5cIiwgdGhhdC5kb2N1bWVudFsgMCBdIClcblx0XHRcdFx0LmF0dHIoIFwiY29sc3BhblwiLCAkKCB0aGlzICkuYXR0ciggXCJjb2xzcGFuXCIgKSB8fCAxIClcblx0XHRcdFx0LmFwcGVuZFRvKCB0YXJnZXRUciApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfY29udGFjdENvbnRhaW5lcnM6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgaSwgaiwgZGlzdCwgaXRlbVdpdGhMZWFzdERpc3RhbmNlLCBwb3NQcm9wZXJ0eSwgc2l6ZVByb3BlcnR5LCBjdXIsIG5lYXJCb3R0b20sXG5cdFx0XHRmbG9hdGluZywgYXhpcyxcblx0XHRcdGlubmVybW9zdENvbnRhaW5lciA9IG51bGwsXG5cdFx0XHRpbm5lcm1vc3RJbmRleCA9IG51bGw7XG5cblx0XHQvLyBHZXQgaW5uZXJtb3N0IGNvbnRhaW5lciB0aGF0IGludGVyc2VjdHMgd2l0aCBpdGVtXG5cdFx0Zm9yICggaSA9IHRoaXMuY29udGFpbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSApIHtcblxuXHRcdFx0Ly8gTmV2ZXIgY29uc2lkZXIgYSBjb250YWluZXIgdGhhdCdzIGxvY2F0ZWQgd2l0aGluIHRoZSBpdGVtIGl0c2VsZlxuXHRcdFx0aWYgKCAkLmNvbnRhaW5zKCB0aGlzLmN1cnJlbnRJdGVtWyAwIF0sIHRoaXMuY29udGFpbmVyc1sgaSBdLmVsZW1lbnRbIDAgXSApICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLl9pbnRlcnNlY3RzV2l0aCggdGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUgKSApIHtcblxuXHRcdFx0XHQvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGEgY29udGFpbmVyIGFuZCBpdCdzIG1vcmUgXCJpbm5lclwiIHRoYW4gdGhpcywgdGhlbiBjb250aW51ZVxuXHRcdFx0XHRpZiAoIGlubmVybW9zdENvbnRhaW5lciAmJlxuXHRcdFx0XHRcdFx0JC5jb250YWlucyhcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uZWxlbWVudFsgMCBdLFxuXHRcdFx0XHRcdFx0XHRpbm5lcm1vc3RDb250YWluZXIuZWxlbWVudFsgMCBdICkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbm5lcm1vc3RDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcnNbIGkgXTtcblx0XHRcdFx0aW5uZXJtb3N0SW5kZXggPSBpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIGNvbnRhaW5lciBkb2Vzbid0IGludGVyc2VjdC4gdHJpZ2dlciBcIm91dFwiIGV2ZW50IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRpZiAoIHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLm92ZXIgKSB7XG5cdFx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uX3RyaWdnZXIoIFwib3V0XCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaSBdLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyBJZiBubyBpbnRlcnNlY3RpbmcgY29udGFpbmVycyBmb3VuZCwgcmV0dXJuXG5cdFx0aWYgKCAhaW5uZXJtb3N0Q29udGFpbmVyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1vdmUgdGhlIGl0ZW0gaW50byB0aGUgY29udGFpbmVyIGlmIGl0J3Mgbm90IHRoZXJlIGFscmVhZHlcblx0XHRpZiAoIHRoaXMuY29udGFpbmVycy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRpZiAoICF0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF0uY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLl90cmlnZ2VyKCBcIm92ZXJcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5jb250YWluZXJDYWNoZS5vdmVyID0gMTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBXaGVuIGVudGVyaW5nIGEgbmV3IGNvbnRhaW5lciwgd2Ugd2lsbCBmaW5kIHRoZSBpdGVtIHdpdGggdGhlIGxlYXN0IGRpc3RhbmNlIGFuZFxuXHRcdFx0Ly8gYXBwZW5kIG91ciBpdGVtIG5lYXIgaXRcblx0XHRcdGRpc3QgPSAxMDAwMDtcblx0XHRcdGl0ZW1XaXRoTGVhc3REaXN0YW5jZSA9IG51bGw7XG5cdFx0XHRmbG9hdGluZyA9IGlubmVybW9zdENvbnRhaW5lci5mbG9hdGluZyB8fCB0aGlzLl9pc0Zsb2F0aW5nKCB0aGlzLmN1cnJlbnRJdGVtICk7XG5cdFx0XHRwb3NQcm9wZXJ0eSA9IGZsb2F0aW5nID8gXCJsZWZ0XCIgOiBcInRvcFwiO1xuXHRcdFx0c2l6ZVByb3BlcnR5ID0gZmxvYXRpbmcgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiO1xuXHRcdFx0YXhpcyA9IGZsb2F0aW5nID8gXCJwYWdlWFwiIDogXCJwYWdlWVwiO1xuXG5cdFx0XHRmb3IgKCBqID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSApIHtcblx0XHRcdFx0aWYgKCAhJC5jb250YWlucyhcblx0XHRcdFx0XHRcdHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5lbGVtZW50WyAwIF0sIHRoaXMuaXRlbXNbIGogXS5pdGVtWyAwIF0gKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHRoaXMuaXRlbXNbIGogXS5pdGVtWyAwIF0gPT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1ciA9IHRoaXMuaXRlbXNbIGogXS5pdGVtLm9mZnNldCgpWyBwb3NQcm9wZXJ0eSBdO1xuXHRcdFx0XHRuZWFyQm90dG9tID0gZmFsc2U7XG5cdFx0XHRcdGlmICggZXZlbnRbIGF4aXMgXSAtIGN1ciA+IHRoaXMuaXRlbXNbIGogXVsgc2l6ZVByb3BlcnR5IF0gLyAyICkge1xuXHRcdFx0XHRcdG5lYXJCb3R0b20gPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggZXZlbnRbIGF4aXMgXSAtIGN1ciApIDwgZGlzdCApIHtcblx0XHRcdFx0XHRkaXN0ID0gTWF0aC5hYnMoIGV2ZW50WyBheGlzIF0gLSBjdXIgKTtcblx0XHRcdFx0XHRpdGVtV2l0aExlYXN0RGlzdGFuY2UgPSB0aGlzLml0ZW1zWyBqIF07XG5cdFx0XHRcdFx0dGhpcy5kaXJlY3Rpb24gPSBuZWFyQm90dG9tID8gXCJ1cFwiIDogXCJkb3duXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly9DaGVjayBpZiBkcm9wT25FbXB0eSBpcyBlbmFibGVkXG5cdFx0XHRpZiAoICFpdGVtV2l0aExlYXN0RGlzdGFuY2UgJiYgIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMuY3VycmVudENvbnRhaW5lciA9PT0gdGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdICkge1xuXHRcdFx0XHRpZiAoICF0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0XHR0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF0uX3RyaWdnZXIoIFwib3ZlclwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdFx0XHR0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3ZlciA9IDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpdGVtV2l0aExlYXN0RGlzdGFuY2UgP1xuXHRcdFx0XHR0aGlzLl9yZWFycmFuZ2UoIGV2ZW50LCBpdGVtV2l0aExlYXN0RGlzdGFuY2UsIG51bGwsIHRydWUgKSA6XG5cdFx0XHRcdHRoaXMuX3JlYXJyYW5nZSggZXZlbnQsIG51bGwsIHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5lbGVtZW50LCB0cnVlICk7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImNoYW5nZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5fdHJpZ2dlciggXCJjaGFuZ2VcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHR0aGlzLmN1cnJlbnRDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcnNbIGlubmVybW9zdEluZGV4IF07XG5cblx0XHRcdC8vVXBkYXRlIHRoZSBwbGFjZWhvbGRlclxuXHRcdFx0dGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSggdGhpcy5jdXJyZW50Q29udGFpbmVyLCB0aGlzLnBsYWNlaG9sZGVyICk7XG5cblx0XHRcdHRoaXMuY29udGFpbmVyc1sgaW5uZXJtb3N0SW5kZXggXS5fdHJpZ2dlciggXCJvdmVyXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0dGhpcy5jb250YWluZXJzWyBpbm5lcm1vc3RJbmRleCBdLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAxO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdHZhciBvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0aGVscGVyID0gJC5pc0Z1bmN0aW9uKCBvLmhlbHBlciApID9cblx0XHRcdFx0JCggby5oZWxwZXIuYXBwbHkoIHRoaXMuZWxlbWVudFsgMCBdLCBbIGV2ZW50LCB0aGlzLmN1cnJlbnRJdGVtIF0gKSApIDpcblx0XHRcdFx0KCBvLmhlbHBlciA9PT0gXCJjbG9uZVwiID8gdGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpIDogdGhpcy5jdXJyZW50SXRlbSApO1xuXG5cdFx0Ly9BZGQgdGhlIGhlbHBlciB0byB0aGUgRE9NIGlmIHRoYXQgZGlkbid0IGhhcHBlbiBhbHJlYWR5XG5cdFx0aWYgKCAhaGVscGVyLnBhcmVudHMoIFwiYm9keVwiICkubGVuZ3RoICkge1xuXHRcdFx0JCggby5hcHBlbmRUbyAhPT0gXCJwYXJlbnRcIiA/XG5cdFx0XHRcdG8uYXBwZW5kVG8gOlxuXHRcdFx0XHR0aGlzLmN1cnJlbnRJdGVtWyAwIF0ucGFyZW50Tm9kZSApWyAwIF0uYXBwZW5kQ2hpbGQoIGhlbHBlclsgMCBdICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBoZWxwZXJbIDAgXSA9PT0gdGhpcy5jdXJyZW50SXRlbVsgMCBdICkge1xuXHRcdFx0dGhpcy5fc3RvcmVkQ1NTID0ge1xuXHRcdFx0XHR3aWR0aDogdGhpcy5jdXJyZW50SXRlbVsgMCBdLnN0eWxlLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHRoaXMuY3VycmVudEl0ZW1bIDAgXS5zdHlsZS5oZWlnaHQsXG5cdFx0XHRcdHBvc2l0aW9uOiB0aGlzLmN1cnJlbnRJdGVtLmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRcdHRvcDogdGhpcy5jdXJyZW50SXRlbS5jc3MoIFwidG9wXCIgKSxcblx0XHRcdFx0bGVmdDogdGhpcy5jdXJyZW50SXRlbS5jc3MoIFwibGVmdFwiIClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKCAhaGVscGVyWyAwIF0uc3R5bGUud2lkdGggfHwgby5mb3JjZUhlbHBlclNpemUgKSB7XG5cdFx0XHRoZWxwZXIud2lkdGgoIHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSApO1xuXHRcdH1cblx0XHRpZiAoICFoZWxwZXJbIDAgXS5zdHlsZS5oZWlnaHQgfHwgby5mb3JjZUhlbHBlclNpemUgKSB7XG5cdFx0XHRoZWxwZXIuaGVpZ2h0KCB0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhlbHBlcjtcblxuXHR9LFxuXG5cdF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdGlmICggdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IG9iai5zcGxpdCggXCIgXCIgKTtcblx0XHR9XG5cdFx0aWYgKCAkLmlzQXJyYXkoIG9iaiApICkge1xuXHRcdFx0b2JqID0geyBsZWZ0OiArb2JqWyAwIF0sIHRvcDogK29ialsgMSBdIHx8IDAgfTtcblx0XHR9XG5cdFx0aWYgKCBcImxlZnRcIiBpbiBvYmogKSB7XG5cdFx0XHR0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gb2JqLmxlZnQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInJpZ2h0XCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSBvYmoucmlnaHQgKyB0aGlzLm1hcmdpbnMubGVmdDtcblx0XHR9XG5cdFx0aWYgKCBcInRvcFwiIGluIG9iaiApIHtcblx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IG9iai50b3AgKyB0aGlzLm1hcmdpbnMudG9wO1xuXHRcdH1cblx0XHRpZiAoIFwiYm90dG9tXCIgaW4gb2JqICkge1xuXHRcdFx0dGhpcy5vZmZzZXQuY2xpY2sudG9wID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSBvYmouYm90dG9tICsgdGhpcy5tYXJnaW5zLnRvcDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFBhcmVudE9mZnNldDogZnVuY3Rpb24oKSB7XG5cblx0XHQvL0dldCB0aGUgb2Zmc2V0UGFyZW50IGFuZCBjYWNoZSBpdHMgcG9zaXRpb25cblx0XHR0aGlzLm9mZnNldFBhcmVudCA9IHRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO1xuXHRcdHZhciBwbyA9IHRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1vZGlmeSBhIG9mZnNldCBjYWxjdWxhdGVkIG9uIHN0YXJ0LCBzaW5jZSB0aGVcblx0XHQvLyBmb2xsb3dpbmcgaGFwcGVuZWQ6XG5cdFx0Ly8gMS4gVGhlIHBvc2l0aW9uIG9mIHRoZSBoZWxwZXIgaXMgYWJzb2x1dGUsIHNvIGl0J3MgcG9zaXRpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGVcblx0XHQvLyBuZXh0IHBvc2l0aW9uZWQgcGFyZW50XG5cdFx0Ly8gMi4gVGhlIGFjdHVhbCBvZmZzZXQgcGFyZW50IGlzIGEgY2hpbGQgb2YgdGhlIHNjcm9sbCBwYXJlbnQsIGFuZCB0aGUgc2Nyb2xsIHBhcmVudCBpc24ndFxuXHRcdC8vIHRoZSBkb2N1bWVudCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc2Nyb2xsIGlzIGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGNhbGN1bGF0aW9uIG9mIHRoZVxuXHRcdC8vIG9mZnNldCBvZiB0aGUgcGFyZW50LCBhbmQgbmV2ZXIgcmVjYWxjdWxhdGVkIHVwb24gZHJhZ1xuXHRcdGlmICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiICYmIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0gIT09IHRoaXMuZG9jdW1lbnRbIDAgXSAmJlxuXHRcdFx0XHQkLmNvbnRhaW5zKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdLCB0aGlzLm9mZnNldFBhcmVudFsgMCBdICkgKSB7XG5cdFx0XHRwby5sZWZ0ICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTtcblx0XHRcdHBvLnRvcCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTtcblx0XHR9XG5cblx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIGFjdHVhbGx5IGRvbmUgZm9yIGFsbCBicm93c2Vycywgc2luY2UgcGFnZVgvcGFnZVkgaW5jbHVkZXMgdGhpc1xuXHRcdC8vIGluZm9ybWF0aW9uIHdpdGggYW4gdWdseSBJRSBmaXhcblx0XHRpZiAoIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gPT09IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5IHx8XG5cdFx0XHRcdCggdGhpcy5vZmZzZXRQYXJlbnRbIDAgXS50YWdOYW1lICYmXG5cdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50WyAwIF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImh0bWxcIiAmJiAkLnVpLmllICkgKSB7XG5cdFx0XHRwbyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcG8udG9wICsgKCBwYXJzZUludCggdGhpcy5vZmZzZXRQYXJlbnQuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSwgMTAgKSB8fCAwICksXG5cdFx0XHRsZWZ0OiBwby5sZWZ0ICsgKCBwYXJzZUludCggdGhpcy5vZmZzZXRQYXJlbnQuY3NzKCBcImJvcmRlckxlZnRXaWR0aFwiICksIDEwICkgfHwgMCApXG5cdFx0fTtcblxuXHR9LFxuXG5cdF9nZXRSZWxhdGl2ZU9mZnNldDogZnVuY3Rpb24oKSB7XG5cblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwicmVsYXRpdmVcIiApIHtcblx0XHRcdHZhciBwID0gdGhpcy5jdXJyZW50SXRlbS5wb3NpdGlvbigpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dG9wOiBwLnRvcCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJ0b3BcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksXG5cdFx0XHRcdGxlZnQ6IHAubGVmdCAtICggcGFyc2VJbnQoIHRoaXMuaGVscGVyLmNzcyggXCJsZWZ0XCIgKSwgMTAgKSB8fCAwICkgK1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdH0sXG5cblx0X2NhY2hlTWFyZ2luczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5tYXJnaW5zID0ge1xuXHRcdFx0bGVmdDogKCBwYXJzZUludCggdGhpcy5jdXJyZW50SXRlbS5jc3MoIFwibWFyZ2luTGVmdFwiICksIDEwICkgfHwgMCApLFxuXHRcdFx0dG9wOiAoIHBhcnNlSW50KCB0aGlzLmN1cnJlbnRJdGVtLmNzcyggXCJtYXJnaW5Ub3BcIiApLCAxMCApIHx8IDAgKVxuXHRcdH07XG5cdH0sXG5cblx0X2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaGVscGVyUHJvcG9ydGlvbnMgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLFxuXHRcdFx0aGVpZ2h0OiB0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpXG5cdFx0fTtcblx0fSxcblxuXHRfc2V0Q29udGFpbm1lbnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIGNlLCBjbywgb3Zlcixcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnM7XG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcInBhcmVudFwiICkge1xuXHRcdFx0by5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWyAwIF0ucGFyZW50Tm9kZTtcblx0XHR9XG5cdFx0aWYgKCBvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgfHwgby5jb250YWlubWVudCA9PT0gXCJ3aW5kb3dcIiApIHtcblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdDAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC0gdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsXG5cdFx0XHRcdDAgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLFxuXHRcdFx0XHRvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgP1xuXHRcdFx0XHRcdHRoaXMuZG9jdW1lbnQud2lkdGgoKSA6XG5cdFx0XHRcdFx0dGhpcy53aW5kb3cud2lkdGgoKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCxcblx0XHRcdFx0KCBvLmNvbnRhaW5tZW50ID09PSBcImRvY3VtZW50XCIgP1xuXHRcdFx0XHRcdCggdGhpcy5kb2N1bWVudC5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0ICkgOlxuXHRcdFx0XHRcdHRoaXMud2luZG93LmhlaWdodCgpIHx8IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0XG5cdFx0XHRcdCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3Bcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0aWYgKCAhKCAvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvICkudGVzdCggby5jb250YWlubWVudCApICkge1xuXHRcdFx0Y2UgPSAkKCBvLmNvbnRhaW5tZW50IClbIDAgXTtcblx0XHRcdGNvID0gJCggby5jb250YWlubWVudCApLm9mZnNldCgpO1xuXHRcdFx0b3ZlciA9ICggJCggY2UgKS5jc3MoIFwib3ZlcmZsb3dcIiApICE9PSBcImhpZGRlblwiICk7XG5cblx0XHRcdHRoaXMuY29udGFpbm1lbnQgPSBbXG5cdFx0XHRcdGNvLmxlZnQgKyAoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJib3JkZXJMZWZ0V2lkdGhcIiApLCAxMCApIHx8IDAgKSArXG5cdFx0XHRcdFx0KCBwYXJzZUludCggJCggY2UgKS5jc3MoIFwicGFkZGluZ0xlZnRcIiApLCAxMCApIHx8IDAgKSAtIHRoaXMubWFyZ2lucy5sZWZ0LFxuXHRcdFx0XHRjby50b3AgKyAoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJib3JkZXJUb3BXaWR0aFwiICksIDEwICkgfHwgMCApICtcblx0XHRcdFx0XHQoIHBhcnNlSW50KCAkKCBjZSApLmNzcyggXCJwYWRkaW5nVG9wXCIgKSwgMTAgKSB8fCAwICkgLSB0aGlzLm1hcmdpbnMudG9wLFxuXHRcdFx0XHRjby5sZWZ0ICsgKCBvdmVyID8gTWF0aC5tYXgoIGNlLnNjcm9sbFdpZHRoLCBjZS5vZmZzZXRXaWR0aCApIDogY2Uub2Zmc2V0V2lkdGggKSAtXG5cdFx0XHRcdFx0KCBwYXJzZUludCggJCggY2UgKS5jc3MoIFwiYm9yZGVyTGVmdFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcInBhZGRpbmdSaWdodFwiICksIDEwICkgfHwgMCApIC1cblx0XHRcdFx0XHR0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsXG5cdFx0XHRcdGNvLnRvcCArICggb3ZlciA/IE1hdGgubWF4KCBjZS5zY3JvbGxIZWlnaHQsIGNlLm9mZnNldEhlaWdodCApIDogY2Uub2Zmc2V0SGVpZ2h0ICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHRcdCggcGFyc2VJbnQoICQoIGNlICkuY3NzKCBcInBhZGRpbmdCb3R0b21cIiApLCAxMCApIHx8IDAgKSAtXG5cdFx0XHRcdFx0dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wXG5cdFx0XHRdO1xuXHRcdH1cblxuXHR9LFxuXG5cdF9jb252ZXJ0UG9zaXRpb25UbzogZnVuY3Rpb24oIGQsIHBvcyApIHtcblxuXHRcdGlmICggIXBvcyApIHtcblx0XHRcdHBvcyA9IHRoaXMucG9zaXRpb247XG5cdFx0fVxuXHRcdHZhciBtb2QgPSBkID09PSBcImFic29sdXRlXCIgPyAxIDogLTEsXG5cdFx0XHRzY3JvbGwgPSB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImFic29sdXRlXCIgJiZcblx0XHRcdFx0ISggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSAhPT0gdGhpcy5kb2N1bWVudFsgMCBdICYmXG5cdFx0XHRcdCQuY29udGFpbnMoIHRoaXMuc2Nyb2xsUGFyZW50WyAwIF0sIHRoaXMub2Zmc2V0UGFyZW50WyAwIF0gKSApID9cblx0XHRcdFx0XHR0aGlzLm9mZnNldFBhcmVudCA6XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnQsXG5cdFx0XHRzY3JvbGxJc1Jvb3ROb2RlID0gKCAvKGh0bWx8Ym9keSkvaSApLnRlc3QoIHNjcm9sbFsgMCBdLnRhZ05hbWUgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cG9zLnRvcFx0K1xuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgKiBtb2QgK1xuXG5cdFx0XHRcdC8vIFRoZSBvZmZzZXRQYXJlbnQncyBvZmZzZXQgd2l0aG91dCBib3JkZXJzIChvZmZzZXQgKyBib3JkZXIpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBtb2QgLVxuXHRcdFx0XHQoICggdGhpcy5jc3NQb3NpdGlvbiA9PT0gXCJmaXhlZFwiID9cblx0XHRcdFx0XHQtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOlxuXHRcdFx0XHRcdCggc2Nyb2xsSXNSb290Tm9kZSA/IDAgOiBzY3JvbGwuc2Nyb2xsVG9wKCkgKSApICogbW9kIClcblx0XHRcdCksXG5cdFx0XHRsZWZ0OiAoXG5cblx0XHRcdFx0Ly8gVGhlIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uXG5cdFx0XHRcdHBvcy5sZWZ0ICtcblxuXHRcdFx0XHQvLyBPbmx5IGZvciByZWxhdGl2ZSBwb3NpdGlvbmVkIG5vZGVzOiBSZWxhdGl2ZSBvZmZzZXQgZnJvbSBlbGVtZW50IHRvIG9mZnNldCBwYXJlbnRcblx0XHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAqIG1vZCArXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBtb2RcdC1cblx0XHRcdFx0KCAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwiZml4ZWRcIiA/XG5cdFx0XHRcdFx0LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IHNjcm9sbElzUm9vdE5vZGUgPyAwIDpcblx0XHRcdFx0XHRzY3JvbGwuc2Nyb2xsTGVmdCgpICkgKiBtb2QgKVxuXHRcdFx0KVxuXHRcdH07XG5cblx0fSxcblxuXHRfZ2VuZXJhdGVQb3NpdGlvbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0dmFyIHRvcCwgbGVmdCxcblx0XHRcdG8gPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRwYWdlWCA9IGV2ZW50LnBhZ2VYLFxuXHRcdFx0cGFnZVkgPSBldmVudC5wYWdlWSxcblx0XHRcdHNjcm9sbCA9IHRoaXMuY3NzUG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiAmJlxuXHRcdFx0XHQhKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSB0aGlzLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0JC5jb250YWlucyggdGhpcy5zY3JvbGxQYXJlbnRbIDAgXSwgdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSApICkgP1xuXHRcdFx0XHRcdHRoaXMub2Zmc2V0UGFyZW50IDpcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFBhcmVudCxcblx0XHRcdFx0c2Nyb2xsSXNSb290Tm9kZSA9ICggLyhodG1sfGJvZHkpL2kgKS50ZXN0KCBzY3JvbGxbIDAgXS50YWdOYW1lICk7XG5cblx0XHQvLyBUaGlzIGlzIGFub3RoZXIgdmVyeSB3ZWlyZCBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGhhcHBlbnMgZm9yIHJlbGF0aXZlIGVsZW1lbnRzOlxuXHRcdC8vIDEuIElmIHRoZSBjc3MgcG9zaXRpb24gaXMgcmVsYXRpdmVcblx0XHQvLyAyLiBhbmQgdGhlIHNjcm9sbCBwYXJlbnQgaXMgdGhlIGRvY3VtZW50IG9yIHNpbWlsYXIgdG8gdGhlIG9mZnNldCBwYXJlbnRcblx0XHQvLyB3ZSBoYXZlIHRvIHJlZnJlc2ggdGhlIHJlbGF0aXZlIG9mZnNldCBkdXJpbmcgdGhlIHNjcm9sbCBzbyB0aGVyZSBhcmUgbm8ganVtcHNcblx0XHRpZiAoIHRoaXMuY3NzUG9zaXRpb24gPT09IFwicmVsYXRpdmVcIiAmJiAhKCB0aGlzLnNjcm9sbFBhcmVudFsgMCBdICE9PSB0aGlzLmRvY3VtZW50WyAwIF0gJiZcblx0XHRcdFx0dGhpcy5zY3JvbGxQYXJlbnRbIDAgXSAhPT0gdGhpcy5vZmZzZXRQYXJlbnRbIDAgXSApICkge1xuXHRcdFx0dGhpcy5vZmZzZXQucmVsYXRpdmUgPSB0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpO1xuXHRcdH1cblxuXHRcdC8qXG5cdFx0ICogLSBQb3NpdGlvbiBjb25zdHJhaW5pbmcgLVxuXHRcdCAqIENvbnN0cmFpbiB0aGUgcG9zaXRpb24gdG8gYSBtaXggb2YgZ3JpZCwgY29udGFpbm1lbnQuXG5cdFx0ICovXG5cblx0XHRpZiAoIHRoaXMub3JpZ2luYWxQb3NpdGlvbiApIHsgLy9JZiB3ZSBhcmUgbm90IGRyYWdnaW5nIHlldCwgd2Ugd29uJ3QgY2hlY2sgZm9yIG9wdGlvbnNcblxuXHRcdFx0aWYgKCB0aGlzLmNvbnRhaW5tZW50ICkge1xuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA8IHRoaXMuY29udGFpbm1lbnRbIDAgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnRbIDAgXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IHRoaXMuY29udGFpbm1lbnRbIDEgXSApIHtcblx0XHRcdFx0XHRwYWdlWSA9IHRoaXMuY29udGFpbm1lbnRbIDEgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGV2ZW50LnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IHRoaXMuY29udGFpbm1lbnRbIDIgXSApIHtcblx0XHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnRbIDIgXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBldmVudC5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+IHRoaXMuY29udGFpbm1lbnRbIDMgXSApIHtcblx0XHRcdFx0XHRwYWdlWSA9IHRoaXMuY29udGFpbm1lbnRbIDMgXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG8uZ3JpZCApIHtcblx0XHRcdFx0dG9wID0gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCggKCBwYWdlWSAtIHRoaXMub3JpZ2luYWxQYWdlWSApIC9cblx0XHRcdFx0XHRvLmdyaWRbIDEgXSApICogby5ncmlkWyAxIF07XG5cdFx0XHRcdHBhZ2VZID0gdGhpcy5jb250YWlubWVudCA/XG5cdFx0XHRcdFx0KCAoIHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+PSB0aGlzLmNvbnRhaW5tZW50WyAxIF0gJiZcblx0XHRcdFx0XHRcdHRvcCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8PSB0aGlzLmNvbnRhaW5tZW50WyAzIF0gKSA/XG5cdFx0XHRcdFx0XHRcdHRvcCA6XG5cdFx0XHRcdFx0XHRcdCggKCB0b3AgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gdGhpcy5jb250YWlubWVudFsgMSBdICkgP1xuXHRcdFx0XHRcdFx0XHRcdHRvcCAtIG8uZ3JpZFsgMSBdIDogdG9wICsgby5ncmlkWyAxIF0gKSApIDpcblx0XHRcdFx0XHRcdFx0XHR0b3A7XG5cblx0XHRcdFx0bGVmdCA9IHRoaXMub3JpZ2luYWxQYWdlWCArIE1hdGgucm91bmQoICggcGFnZVggLSB0aGlzLm9yaWdpbmFsUGFnZVggKSAvXG5cdFx0XHRcdFx0by5ncmlkWyAwIF0gKSAqIG8uZ3JpZFsgMCBdO1xuXHRcdFx0XHRwYWdlWCA9IHRoaXMuY29udGFpbm1lbnQgP1xuXHRcdFx0XHRcdCggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSB0aGlzLmNvbnRhaW5tZW50WyAwIF0gJiZcblx0XHRcdFx0XHRcdGxlZnQgLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDw9IHRoaXMuY29udGFpbm1lbnRbIDIgXSApID9cblx0XHRcdFx0XHRcdFx0bGVmdCA6XG5cdFx0XHRcdFx0XHRcdCggKCBsZWZ0IC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+PSB0aGlzLmNvbnRhaW5tZW50WyAwIF0gKSA/XG5cdFx0XHRcdFx0XHRcdFx0bGVmdCAtIG8uZ3JpZFsgMCBdIDogbGVmdCArIG8uZ3JpZFsgMCBdICkgKSA6XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cGFnZVkgLVxuXG5cdFx0XHRcdC8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLnRvcCAtXG5cblx0XHRcdFx0Ly8gT25seSBmb3IgcmVsYXRpdmUgcG9zaXRpb25lZCBub2RlczogUmVsYXRpdmUgb2Zmc2V0IGZyb20gZWxlbWVudCB0byBvZmZzZXQgcGFyZW50XG5cdFx0XHRcdHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtXG5cblx0XHRcdFx0Ly8gVGhlIG9mZnNldFBhcmVudCdzIG9mZnNldCB3aXRob3V0IGJvcmRlcnMgKG9mZnNldCArIGJvcmRlcilcblx0XHRcdFx0dGhpcy5vZmZzZXQucGFyZW50LnRvcCArXG5cdFx0XHRcdCggKCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSA6XG5cdFx0XHRcdFx0KCBzY3JvbGxJc1Jvb3ROb2RlID8gMCA6IHNjcm9sbC5zY3JvbGxUb3AoKSApICkgKVxuXHRcdFx0KSxcblx0XHRcdGxlZnQ6IChcblxuXHRcdFx0XHQvLyBUaGUgYWJzb2x1dGUgbW91c2UgcG9zaXRpb25cblx0XHRcdFx0cGFnZVggLVxuXG5cdFx0XHRcdC8vIENsaWNrIG9mZnNldCAocmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQpXG5cdFx0XHRcdHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgLVxuXG5cdFx0XHRcdC8vIE9ubHkgZm9yIHJlbGF0aXZlIHBvc2l0aW9uZWQgbm9kZXM6IFJlbGF0aXZlIG9mZnNldCBmcm9tIGVsZW1lbnQgdG8gb2Zmc2V0IHBhcmVudFxuXHRcdFx0XHR0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0IC1cblxuXHRcdFx0XHQvLyBUaGUgb2Zmc2V0UGFyZW50J3Mgb2Zmc2V0IHdpdGhvdXQgYm9yZGVycyAob2Zmc2V0ICsgYm9yZGVyKVxuXHRcdFx0XHR0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArXG5cdFx0XHRcdCggKCB0aGlzLmNzc1Bvc2l0aW9uID09PSBcImZpeGVkXCIgP1xuXHRcdFx0XHRcdC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkgOlxuXHRcdFx0XHRcdHNjcm9sbElzUm9vdE5vZGUgPyAwIDogc2Nyb2xsLnNjcm9sbExlZnQoKSApIClcblx0XHRcdClcblx0XHR9O1xuXG5cdH0sXG5cblx0X3JlYXJyYW5nZTogZnVuY3Rpb24oIGV2ZW50LCBpLCBhLCBoYXJkUmVmcmVzaCApIHtcblxuXHRcdGEgPyBhWyAwIF0uYXBwZW5kQ2hpbGQoIHRoaXMucGxhY2Vob2xkZXJbIDAgXSApIDpcblx0XHRcdGkuaXRlbVsgMCBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCB0aGlzLnBsYWNlaG9sZGVyWyAwIF0sXG5cdFx0XHRcdCggdGhpcy5kaXJlY3Rpb24gPT09IFwiZG93blwiID8gaS5pdGVtWyAwIF0gOiBpLml0ZW1bIDAgXS5uZXh0U2libGluZyApICk7XG5cblx0XHQvL1ZhcmlvdXMgdGhpbmdzIGRvbmUgaGVyZSB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZTpcblx0XHQvLyAxLiB3ZSBjcmVhdGUgYSBzZXRUaW1lb3V0LCB0aGF0IGNhbGxzIHJlZnJlc2hQb3NpdGlvbnNcblx0XHQvLyAyLiBvbiB0aGUgaW5zdGFuY2UsIHdlIGhhdmUgYSBjb3VudGVyIHZhcmlhYmxlLCB0aGF0IGdldCdzIGhpZ2hlciBhZnRlciBldmVyeSBhcHBlbmRcblx0XHQvLyAzLiBvbiB0aGUgbG9jYWwgc2NvcGUsIHdlIGNvcHkgdGhlIGNvdW50ZXIgdmFyaWFibGUsIGFuZCBjaGVjayBpbiB0aGUgdGltZW91dCxcblx0XHQvLyBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lXG5cdFx0Ly8gNC4gdGhpcyBsZXRzIG9ubHkgdGhlIGxhc3QgYWRkaXRpb24gdG8gdGhlIHRpbWVvdXQgc3RhY2sgdGhyb3VnaFxuXHRcdHRoaXMuY291bnRlciA9IHRoaXMuY291bnRlciA/ICsrdGhpcy5jb3VudGVyIDogMTtcblx0XHR2YXIgY291bnRlciA9IHRoaXMuY291bnRlcjtcblxuXHRcdHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY291bnRlciA9PT0gdGhpcy5jb3VudGVyICkge1xuXG5cdFx0XHRcdC8vUHJlY29tcHV0ZSBhZnRlciBlYWNoIERPTSBpbnNlcnRpb24sIE5PVCBvbiBtb3VzZW1vdmVcblx0XHRcdFx0dGhpcy5yZWZyZXNoUG9zaXRpb25zKCAhaGFyZFJlZnJlc2ggKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSxcblxuXHRfY2xlYXI6IGZ1bmN0aW9uKCBldmVudCwgbm9Qcm9wYWdhdGlvbiApIHtcblxuXHRcdHRoaXMucmV2ZXJ0aW5nID0gZmFsc2U7XG5cblx0XHQvLyBXZSBkZWxheSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSB0byBiZSB0cmlnZ2VyZWQgdG8gYWZ0ZXIgdGhlIHBvaW50IHdoZXJlIHRoZSBwbGFjZWhvbGRlclxuXHRcdC8vIGhhcyBiZWVuIHJlbW92ZWQgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBub3JtYWxpemVkIGFnYWluXG5cdFx0dmFyIGksXG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMgPSBbXTtcblxuXHRcdC8vIFdlIGZpcnN0IGhhdmUgdG8gdXBkYXRlIHRoZSBkb20gcG9zaXRpb24gb2YgdGhlIGFjdHVhbCBjdXJyZW50SXRlbVxuXHRcdC8vIE5vdGU6IGRvbid0IGRvIGl0IGlmIHRoZSBjdXJyZW50IGl0ZW0gaXMgYWxyZWFkeSByZW1vdmVkIChieSBhIHVzZXIpLCBvciBpdCBnZXRzXG5cdFx0Ly8gcmVhcHBlbmRlZCAoc2VlICM0MDg4KVxuXHRcdGlmICggIXRoaXMuX25vRmluYWxTb3J0ICYmIHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5wbGFjZWhvbGRlci5iZWZvcmUoIHRoaXMuY3VycmVudEl0ZW0gKTtcblx0XHR9XG5cdFx0dGhpcy5fbm9GaW5hbFNvcnQgPSBudWxsO1xuXG5cdFx0aWYgKCB0aGlzLmhlbHBlclsgMCBdID09PSB0aGlzLmN1cnJlbnRJdGVtWyAwIF0gKSB7XG5cdFx0XHRmb3IgKCBpIGluIHRoaXMuX3N0b3JlZENTUyApIHtcblx0XHRcdFx0aWYgKCB0aGlzLl9zdG9yZWRDU1NbIGkgXSA9PT0gXCJhdXRvXCIgfHwgdGhpcy5fc3RvcmVkQ1NTWyBpIF0gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcmVkQ1NTWyBpIF0gPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmN1cnJlbnRJdGVtLmNzcyggdGhpcy5fc3RvcmVkQ1NTICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5jdXJyZW50SXRlbSwgXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZnJvbU91dHNpZGUgJiYgIW5vUHJvcGFnYXRpb24gKSB7XG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInJlY2VpdmVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcy5mcm9tT3V0c2lkZSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdGlmICggKCB0aGlzLmZyb21PdXRzaWRlIHx8XG5cdFx0XHRcdHRoaXMuZG9tUG9zaXRpb24ucHJldiAhPT1cblx0XHRcdFx0dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCBcIi51aS1zb3J0YWJsZS1oZWxwZXJcIiApWyAwIF0gfHxcblx0XHRcdFx0dGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQgIT09IHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbIDAgXSApICYmICFub1Byb3BhZ2F0aW9uICkge1xuXG5cdFx0XHQvLyBUcmlnZ2VyIHVwZGF0ZSBjYWxsYmFjayBpZiB0aGUgRE9NIHBvc2l0aW9uIGhhcyBjaGFuZ2VkXG5cdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInVwZGF0ZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgaXRlbXMgQ29udGFpbmVyIGhhcyBDaGFuZ2VkIGFuZCB0cmlnZ2VyIGFwcHJvcHJpYXRlXG5cdFx0Ly8gZXZlbnRzLlxuXHRcdGlmICggdGhpcyAhPT0gdGhpcy5jdXJyZW50Q29udGFpbmVyICkge1xuXHRcdFx0aWYgKCAhbm9Qcm9wYWdhdGlvbiApIHtcblx0XHRcdFx0ZGVsYXllZFRyaWdnZXJzLnB1c2goIGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0XHR0aGlzLl90cmlnZ2VyKCBcInJlbW92ZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCkgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggKCBmdW5jdGlvbiggYyApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRcdFx0Yy5fdHJpZ2dlciggXCJyZWNlaXZlXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIHRoaXMgKSApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gKS5jYWxsKCB0aGlzLCB0aGlzLmN1cnJlbnRDb250YWluZXIgKSApO1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggKCBmdW5jdGlvbiggYyApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRcdFx0Yy5fdHJpZ2dlciggXCJ1cGRhdGVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggdGhpcyApICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSApLmNhbGwoIHRoaXMsIHRoaXMuY3VycmVudENvbnRhaW5lciApICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9Qb3N0IGV2ZW50cyB0byBjb250YWluZXJzXG5cdFx0ZnVuY3Rpb24gZGVsYXlFdmVudCggdHlwZSwgaW5zdGFuY2UsIGNvbnRhaW5lciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5fdHJpZ2dlciggdHlwZSwgZXZlbnQsIGluc3RhbmNlLl91aUhhc2goIGluc3RhbmNlICkgKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGZvciAoIGkgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0XHRkZWxheWVkVHJpZ2dlcnMucHVzaCggZGVsYXlFdmVudCggXCJkZWFjdGl2YXRlXCIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1sgaSBdICkgKTtcblx0XHRcdH1cblx0XHRcdGlmICggdGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciApIHtcblx0XHRcdFx0ZGVsYXllZFRyaWdnZXJzLnB1c2goIGRlbGF5RXZlbnQoIFwib3V0XCIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1sgaSBdICkgKTtcblx0XHRcdFx0dGhpcy5jb250YWluZXJzWyBpIF0uY29udGFpbmVyQ2FjaGUub3ZlciA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9EbyB3aGF0IHdhcyBvcmlnaW5hbGx5IGluIHBsdWdpbnNcblx0XHRpZiAoIHRoaXMuc3RvcmVkQ3Vyc29yICkge1xuXHRcdFx0dGhpcy5kb2N1bWVudC5maW5kKCBcImJvZHlcIiApLmNzcyggXCJjdXJzb3JcIiwgdGhpcy5zdG9yZWRDdXJzb3IgKTtcblx0XHRcdHRoaXMuc3RvcmVkU3R5bGVzaGVldC5yZW1vdmUoKTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLl9zdG9yZWRPcGFjaXR5ICkge1xuXHRcdFx0dGhpcy5oZWxwZXIuY3NzKCBcIm9wYWNpdHlcIiwgdGhpcy5fc3RvcmVkT3BhY2l0eSApO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX3N0b3JlZFpJbmRleCApIHtcblx0XHRcdHRoaXMuaGVscGVyLmNzcyggXCJ6SW5kZXhcIiwgdGhpcy5fc3RvcmVkWkluZGV4ID09PSBcImF1dG9cIiA/IFwiXCIgOiB0aGlzLl9zdG9yZWRaSW5kZXggKTtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG5cblx0XHRpZiAoICFub1Byb3BhZ2F0aW9uICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJiZWZvcmVTdG9wXCIsIGV2ZW50LCB0aGlzLl91aUhhc2goKSApO1xuXHRcdH1cblxuXHRcdC8vJCh0aGlzLnBsYWNlaG9sZGVyWzBdKS5yZW1vdmUoKTsgd291bGQgaGF2ZSBiZWVuIHRoZSBqUXVlcnkgd2F5IC0gdW5mb3J0dW5hdGVseSxcblx0XHQvLyBpdCB1bmJpbmRzIEFMTCBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgbm9kZSFcblx0XHR0aGlzLnBsYWNlaG9sZGVyWyAwIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGhpcy5wbGFjZWhvbGRlclsgMCBdICk7XG5cblx0XHRpZiAoICF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwgKSB7XG5cdFx0XHRpZiAoIHRoaXMuaGVscGVyWyAwIF0gIT09IHRoaXMuY3VycmVudEl0ZW1bIDAgXSApIHtcblx0XHRcdFx0dGhpcy5oZWxwZXIucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhlbHBlciA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKCAhbm9Qcm9wYWdhdGlvbiApIHtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsYXllZFRyaWdnZXJzLmxlbmd0aDsgaSsrICkge1xuXG5cdFx0XHRcdC8vIFRyaWdnZXIgYWxsIGRlbGF5ZWQgZXZlbnRzXG5cdFx0XHRcdGRlbGF5ZWRUcmlnZ2Vyc1sgaSBdLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCgpICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mcm9tT3V0c2lkZSA9IGZhbHNlO1xuXHRcdHJldHVybiAhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsO1xuXG5cdH0sXG5cblx0X3RyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggJC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLmNhbmNlbCgpO1xuXHRcdH1cblx0fSxcblxuXHRfdWlIYXNoOiBmdW5jdGlvbiggX2luc3QgKSB7XG5cdFx0dmFyIGluc3QgPSBfaW5zdCB8fCB0aGlzO1xuXHRcdHJldHVybiB7XG5cdFx0XHRoZWxwZXI6IGluc3QuaGVscGVyLFxuXHRcdFx0cGxhY2Vob2xkZXI6IGluc3QucGxhY2Vob2xkZXIgfHwgJCggW10gKSxcblx0XHRcdHBvc2l0aW9uOiBpbnN0LnBvc2l0aW9uLFxuXHRcdFx0b3JpZ2luYWxQb3NpdGlvbjogaW5zdC5vcmlnaW5hbFBvc2l0aW9uLFxuXHRcdFx0b2Zmc2V0OiBpbnN0LnBvc2l0aW9uQWJzLFxuXHRcdFx0aXRlbTogaW5zdC5jdXJyZW50SXRlbSxcblx0XHRcdHNlbmRlcjogX2luc3QgPyBfaW5zdC5lbGVtZW50IDogbnVsbFxuXHRcdH07XG5cdH1cblxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEFjY29yZGlvbiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQWNjb3JkaW9uXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBjb2xsYXBzaWJsZSBjb250ZW50IHBhbmVscyBmb3IgcHJlc2VudGluZyBpbmZvcm1hdGlvbiBpbiBhIGxpbWl0ZWQgYW1vdW50IG9mIHNwYWNlLlxuLy8ganNjczplbmFibGUgbWF4aW11bUxpbmVMZW5ndGhcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9hY2NvcmRpb24vXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vYWNjb3JkaW9uL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvYWNjb3JkaW9uLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG52YXIgd2lkZ2V0c0FjY29yZGlvbiA9ICQud2lkZ2V0KCBcInVpLmFjY29yZGlvblwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRhY3RpdmU6IDAsXG5cdFx0YW5pbWF0ZToge30sXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1hY2NvcmRpb24taGVhZGVyXCI6IFwidWktY29ybmVyLXRvcFwiLFxuXHRcdFx0XCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiOiBcInVpLWNvcm5lci1hbGxcIixcblx0XHRcdFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIjogXCJ1aS1jb3JuZXItYm90dG9tXCJcblx0XHR9LFxuXHRcdGNvbGxhcHNpYmxlOiBmYWxzZSxcblx0XHRldmVudDogXCJjbGlja1wiLFxuXHRcdGhlYWRlcjogXCI+IGxpID4gOmZpcnN0LWNoaWxkLCA+IDpub3QobGkpOmV2ZW5cIixcblx0XHRoZWlnaHRTdHlsZTogXCJhdXRvXCIsXG5cdFx0aWNvbnM6IHtcblx0XHRcdGFjdGl2ZUhlYWRlcjogXCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wiLFxuXHRcdFx0aGVhZGVyOiBcInVpLWljb24tdHJpYW5nbGUtMS1lXCJcblx0XHR9LFxuXG5cdFx0Ly8gQ2FsbGJhY2tzXG5cdFx0YWN0aXZhdGU6IG51bGwsXG5cdFx0YmVmb3JlQWN0aXZhdGU6IG51bGxcblx0fSxcblxuXHRoaWRlUHJvcHM6IHtcblx0XHRib3JkZXJUb3BXaWR0aDogXCJoaWRlXCIsXG5cdFx0Ym9yZGVyQm90dG9tV2lkdGg6IFwiaGlkZVwiLFxuXHRcdHBhZGRpbmdUb3A6IFwiaGlkZVwiLFxuXHRcdHBhZGRpbmdCb3R0b206IFwiaGlkZVwiLFxuXHRcdGhlaWdodDogXCJoaWRlXCJcblx0fSxcblxuXHRzaG93UHJvcHM6IHtcblx0XHRib3JkZXJUb3BXaWR0aDogXCJzaG93XCIsXG5cdFx0Ym9yZGVyQm90dG9tV2lkdGg6IFwic2hvd1wiLFxuXHRcdHBhZGRpbmdUb3A6IFwic2hvd1wiLFxuXHRcdHBhZGRpbmdCb3R0b206IFwic2hvd1wiLFxuXHRcdGhlaWdodDogXCJzaG93XCJcblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdHRoaXMucHJldlNob3cgPSB0aGlzLnByZXZIaWRlID0gJCgpO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWFjY29yZGlvblwiLCBcInVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXRcIiApO1xuXHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIgKTtcblxuXHRcdC8vIERvbid0IGFsbG93IGNvbGxhcHNpYmxlOiBmYWxzZSBhbmQgYWN0aXZlOiBmYWxzZSAvIG51bGxcblx0XHRpZiAoICFvcHRpb25zLmNvbGxhcHNpYmxlICYmICggb3B0aW9ucy5hY3RpdmUgPT09IGZhbHNlIHx8IG9wdGlvbnMuYWN0aXZlID09IG51bGwgKSApIHtcblx0XHRcdG9wdGlvbnMuYWN0aXZlID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLl9wcm9jZXNzUGFuZWxzKCk7XG5cblx0XHQvLyBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzXG5cdFx0aWYgKCBvcHRpb25zLmFjdGl2ZSA8IDAgKSB7XG5cdFx0XHRvcHRpb25zLmFjdGl2ZSArPSB0aGlzLmhlYWRlcnMubGVuZ3RoO1xuXHRcdH1cblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cdH0sXG5cblx0X2dldENyZWF0ZUV2ZW50RGF0YTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhlYWRlcjogdGhpcy5hY3RpdmUsXG5cdFx0XHRwYW5lbDogIXRoaXMuYWN0aXZlLmxlbmd0aCA/ICQoKSA6IHRoaXMuYWN0aXZlLm5leHQoKVxuXHRcdH07XG5cdH0sXG5cblx0X2NyZWF0ZUljb25zOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWNvbiwgY2hpbGRyZW4sXG5cdFx0XHRpY29ucyA9IHRoaXMub3B0aW9ucy5pY29ucztcblxuXHRcdGlmICggaWNvbnMgKSB7XG5cdFx0XHRpY29uID0gJCggXCI8c3Bhbj5cIiApO1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIGljb24sIFwidWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIsIFwidWktaWNvbiBcIiArIGljb25zLmhlYWRlciApO1xuXHRcdFx0aWNvbi5wcmVwZW5kVG8oIHRoaXMuaGVhZGVycyApO1xuXHRcdFx0Y2hpbGRyZW4gPSB0aGlzLmFjdGl2ZS5jaGlsZHJlbiggXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBjaGlsZHJlbiwgaWNvbnMuaGVhZGVyIClcblx0XHRcdFx0Ll9hZGRDbGFzcyggY2hpbGRyZW4sIG51bGwsIGljb25zLmFjdGl2ZUhlYWRlciApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIHRoaXMuaGVhZGVycywgXCJ1aS1hY2NvcmRpb24taWNvbnNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRfZGVzdHJveUljb25zOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5oZWFkZXJzLCBcInVpLWFjY29yZGlvbi1pY29uc1wiICk7XG5cdFx0dGhpcy5oZWFkZXJzLmNoaWxkcmVuKCBcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiApLnJlbW92ZSgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29udGVudHM7XG5cblx0XHQvLyBDbGVhbiB1cCBtYWluIGVsZW1lbnRcblx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJyb2xlXCIgKTtcblxuXHRcdC8vIENsZWFuIHVwIGhlYWRlcnNcblx0XHR0aGlzLmhlYWRlcnNcblx0XHRcdC5yZW1vdmVBdHRyKCBcInJvbGUgYXJpYS1leHBhbmRlZCBhcmlhLXNlbGVjdGVkIGFyaWEtY29udHJvbHMgdGFiSW5kZXhcIiApXG5cdFx0XHQucmVtb3ZlVW5pcXVlSWQoKTtcblxuXHRcdHRoaXMuX2Rlc3Ryb3lJY29ucygpO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgY29udGVudCBwYW5lbHNcblx0XHRjb250ZW50cyA9IHRoaXMuaGVhZGVycy5uZXh0KClcblx0XHRcdC5jc3MoIFwiZGlzcGxheVwiLCBcIlwiIClcblx0XHRcdC5yZW1vdmVBdHRyKCBcInJvbGUgYXJpYS1oaWRkZW4gYXJpYS1sYWJlbGxlZGJ5XCIgKVxuXHRcdFx0LnJlbW92ZVVuaXF1ZUlkKCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSAhPT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRjb250ZW50cy5jc3MoIFwiaGVpZ2h0XCIsIFwiXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0aWYgKCBrZXkgPT09IFwiYWN0aXZlXCIgKSB7XG5cblx0XHRcdC8vIF9hY3RpdmF0ZSgpIHdpbGwgaGFuZGxlIGludmFsaWQgdmFsdWVzIGFuZCB1cGRhdGUgdGhpcy5vcHRpb25zXG5cdFx0XHR0aGlzLl9hY3RpdmF0ZSggdmFsdWUgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSA9PT0gXCJldmVudFwiICkge1xuXHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMuZXZlbnQgKSB7XG5cdFx0XHRcdHRoaXMuX29mZiggdGhpcy5oZWFkZXJzLCB0aGlzLm9wdGlvbnMuZXZlbnQgKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3NldHVwRXZlbnRzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTZXR0aW5nIGNvbGxhcHNpYmxlOiBmYWxzZSB3aGlsZSBjb2xsYXBzZWQ7IG9wZW4gZmlyc3QgcGFuZWxcblx0XHRpZiAoIGtleSA9PT0gXCJjb2xsYXBzaWJsZVwiICYmICF2YWx1ZSAmJiB0aGlzLm9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCAwICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvbnNcIiApIHtcblx0XHRcdHRoaXMuX2Rlc3Ryb3lJY29ucygpO1xuXHRcdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdFx0dGhpcy5fY3JlYXRlSWNvbnMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIHZhbHVlICk7XG5cblx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJhcmlhLWRpc2FibGVkXCIsIHZhbHVlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRTggT25seVxuXHRcdC8vICM1MzMyIC8gIzYwNTkgLSBvcGFjaXR5IGRvZXNuJ3QgY2FzY2FkZSB0byBwb3NpdGlvbmVkIGVsZW1lbnRzIGluIElFXG5cdFx0Ly8gc28gd2UgbmVlZCB0byBhZGQgdGhlIGRpc2FibGVkIGNsYXNzIHRvIHRoZSBoZWFkZXJzIGFuZCBwYW5lbHNcblx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMuaGVhZGVycy5hZGQoIHRoaXMuaGVhZGVycy5uZXh0KCkgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLFxuXHRcdFx0ISF2YWx1ZSApO1xuXHR9LFxuXG5cdF9rZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIga2V5Q29kZSA9ICQudWkua2V5Q29kZSxcblx0XHRcdGxlbmd0aCA9IHRoaXMuaGVhZGVycy5sZW5ndGgsXG5cdFx0XHRjdXJyZW50SW5kZXggPSB0aGlzLmhlYWRlcnMuaW5kZXgoIGV2ZW50LnRhcmdldCApLFxuXHRcdFx0dG9Gb2N1cyA9IGZhbHNlO1xuXG5cdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRjYXNlIGtleUNvZGUuUklHSFQ6XG5cdFx0Y2FzZSBrZXlDb2RlLkRPV046XG5cdFx0XHR0b0ZvY3VzID0gdGhpcy5oZWFkZXJzWyAoIGN1cnJlbnRJbmRleCArIDEgKSAlIGxlbmd0aCBdO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBrZXlDb2RlLkxFRlQ6XG5cdFx0Y2FzZSBrZXlDb2RlLlVQOlxuXHRcdFx0dG9Gb2N1cyA9IHRoaXMuaGVhZGVyc1sgKCBjdXJyZW50SW5kZXggLSAxICsgbGVuZ3RoICkgJSBsZW5ndGggXTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2Uga2V5Q29kZS5TUEFDRTpcblx0XHRjYXNlIGtleUNvZGUuRU5URVI6XG5cdFx0XHR0aGlzLl9ldmVudEhhbmRsZXIoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIGtleUNvZGUuSE9NRTpcblx0XHRcdHRvRm9jdXMgPSB0aGlzLmhlYWRlcnNbIDAgXTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2Uga2V5Q29kZS5FTkQ6XG5cdFx0XHR0b0ZvY3VzID0gdGhpcy5oZWFkZXJzWyBsZW5ndGggLSAxIF07XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoIHRvRm9jdXMgKSB7XG5cdFx0XHQkKCBldmVudC50YXJnZXQgKS5hdHRyKCBcInRhYkluZGV4XCIsIC0xICk7XG5cdFx0XHQkKCB0b0ZvY3VzICkuYXR0ciggXCJ0YWJJbmRleFwiLCAwICk7XG5cdFx0XHQkKCB0b0ZvY3VzICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblxuXHRfcGFuZWxLZXlEb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuVVAgJiYgZXZlbnQuY3RybEtleSApIHtcblx0XHRcdCQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKS5wcmV2KCkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdHRoaXMuX3Byb2Nlc3NQYW5lbHMoKTtcblxuXHRcdC8vIFdhcyBjb2xsYXBzZWQgb3Igbm8gcGFuZWxcblx0XHRpZiAoICggb3B0aW9ucy5hY3RpdmUgPT09IGZhbHNlICYmIG9wdGlvbnMuY29sbGFwc2libGUgPT09IHRydWUgKSB8fFxuXHRcdFx0XHQhdGhpcy5oZWFkZXJzLmxlbmd0aCApIHtcblx0XHRcdG9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XG5cdFx0XHR0aGlzLmFjdGl2ZSA9ICQoKTtcblxuXHRcdC8vIGFjdGl2ZSBmYWxzZSBvbmx5IHdoZW4gY29sbGFwc2libGUgaXMgdHJ1ZVxuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuX2FjdGl2YXRlKCAwICk7XG5cblx0XHQvLyB3YXMgYWN0aXZlLCBidXQgYWN0aXZlIHBhbmVsIGlzIGdvbmVcblx0XHR9IGVsc2UgaWYgKCB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgISQuY29udGFpbnMoIHRoaXMuZWxlbWVudFsgMCBdLCB0aGlzLmFjdGl2ZVsgMCBdICkgKSB7XG5cblx0XHRcdC8vIGFsbCByZW1haW5pbmcgcGFuZWwgYXJlIGRpc2FibGVkXG5cdFx0XHRpZiAoIHRoaXMuaGVhZGVycy5sZW5ndGggPT09IHRoaXMuaGVhZGVycy5maW5kKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRvcHRpb25zLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLmFjdGl2ZSA9ICQoKTtcblxuXHRcdFx0Ly8gYWN0aXZhdGUgcHJldmlvdXMgcGFuZWxcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2FjdGl2YXRlKCBNYXRoLm1heCggMCwgb3B0aW9ucy5hY3RpdmUgLSAxICkgKTtcblx0XHRcdH1cblxuXHRcdC8vIHdhcyBhY3RpdmUsIGFjdGl2ZSBwYW5lbCBzdGlsbCBleGlzdHNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBtYWtlIHN1cmUgYWN0aXZlIGluZGV4IGlzIGNvcnJlY3Rcblx0XHRcdG9wdGlvbnMuYWN0aXZlID0gdGhpcy5oZWFkZXJzLmluZGV4KCB0aGlzLmFjdGl2ZSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX2Rlc3Ryb3lJY29ucygpO1xuXG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9wcm9jZXNzUGFuZWxzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcHJldkhlYWRlcnMgPSB0aGlzLmhlYWRlcnMsXG5cdFx0XHRwcmV2UGFuZWxzID0gdGhpcy5wYW5lbHM7XG5cblx0XHR0aGlzLmhlYWRlcnMgPSB0aGlzLmVsZW1lbnQuZmluZCggdGhpcy5vcHRpb25zLmhlYWRlciApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhlYWRlcnMsIFwidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiLFxuXHRcdFx0XCJ1aS1zdGF0ZS1kZWZhdWx0XCIgKTtcblxuXHRcdHRoaXMucGFuZWxzID0gdGhpcy5oZWFkZXJzLm5leHQoKS5maWx0ZXIoIFwiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKVwiICkuaGlkZSgpO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLnBhbmVscywgXCJ1aS1hY2NvcmRpb24tY29udGVudFwiLCBcInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudFwiICk7XG5cblx0XHQvLyBBdm9pZCBtZW1vcnkgbGVha3MgKCMxMDA1Nilcblx0XHRpZiAoIHByZXZQYW5lbHMgKSB7XG5cdFx0XHR0aGlzLl9vZmYoIHByZXZIZWFkZXJzLm5vdCggdGhpcy5oZWFkZXJzICkgKTtcblx0XHRcdHRoaXMuX29mZiggcHJldlBhbmVscy5ub3QoIHRoaXMucGFuZWxzICkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3JlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtYXhIZWlnaHQsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0aGVpZ2h0U3R5bGUgPSBvcHRpb25zLmhlaWdodFN0eWxlLFxuXHRcdFx0cGFyZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudCgpO1xuXG5cdFx0dGhpcy5hY3RpdmUgPSB0aGlzLl9maW5kQWN0aXZlKCBvcHRpb25zLmFjdGl2ZSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmFjdGl2ZSwgXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiIClcblx0XHRcdC5fcmVtb3ZlQ2xhc3MoIHRoaXMuYWN0aXZlLCBcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5hY3RpdmUubmV4dCgpLCBcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiICk7XG5cdFx0dGhpcy5hY3RpdmUubmV4dCgpLnNob3coKTtcblxuXHRcdHRoaXMuaGVhZGVyc1xuXHRcdFx0LmF0dHIoIFwicm9sZVwiLCBcInRhYlwiIClcblx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGhlYWRlciA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRoZWFkZXJJZCA9IGhlYWRlci51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApLFxuXHRcdFx0XHRcdHBhbmVsID0gaGVhZGVyLm5leHQoKSxcblx0XHRcdFx0XHRwYW5lbElkID0gcGFuZWwudW5pcXVlSWQoKS5hdHRyKCBcImlkXCIgKTtcblx0XHRcdFx0aGVhZGVyLmF0dHIoIFwiYXJpYS1jb250cm9sc1wiLCBwYW5lbElkICk7XG5cdFx0XHRcdHBhbmVsLmF0dHIoIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIGhlYWRlcklkICk7XG5cdFx0XHR9IClcblx0XHRcdC5uZXh0KClcblx0XHRcdFx0LmF0dHIoIFwicm9sZVwiLCBcInRhYnBhbmVsXCIgKTtcblxuXHRcdHRoaXMuaGVhZGVyc1xuXHRcdFx0Lm5vdCggdGhpcy5hY3RpdmUgKVxuXHRcdFx0XHQuYXR0cigge1xuXHRcdFx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwiZmFsc2VcIixcblx0XHRcdFx0XHR0YWJJbmRleDogLTFcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5uZXh0KClcblx0XHRcdFx0XHQuYXR0cigge1xuXHRcdFx0XHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHRcdC5oaWRlKCk7XG5cblx0XHQvLyBNYWtlIHN1cmUgYXQgbGVhc3Qgb25lIGhlYWRlciBpcyBpbiB0aGUgdGFiIG9yZGVyXG5cdFx0aWYgKCAhdGhpcy5hY3RpdmUubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5oZWFkZXJzLmVxKCAwICkuYXR0ciggXCJ0YWJJbmRleFwiLCAwICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWN0aXZlLmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLXNlbGVjdGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcdHRhYkluZGV4OiAwXG5cdFx0XHR9IClcblx0XHRcdFx0Lm5leHQoKVxuXHRcdFx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdFx0XHRcImFyaWEtaGlkZGVuXCI6IFwiZmFsc2VcIlxuXHRcdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR0aGlzLl9jcmVhdGVJY29ucygpO1xuXG5cdFx0dGhpcy5fc2V0dXBFdmVudHMoIG9wdGlvbnMuZXZlbnQgKTtcblxuXHRcdGlmICggaGVpZ2h0U3R5bGUgPT09IFwiZmlsbFwiICkge1xuXHRcdFx0bWF4SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuXHRcdFx0dGhpcy5lbGVtZW50LnNpYmxpbmdzKCBcIjp2aXNpYmxlXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSAkKCB0aGlzICksXG5cdFx0XHRcdFx0cG9zaXRpb24gPSBlbGVtLmNzcyggXCJwb3NpdGlvblwiICk7XG5cblx0XHRcdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1heEhlaWdodCAtPSBlbGVtLm91dGVySGVpZ2h0KCB0cnVlICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuaGVhZGVycy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0bWF4SGVpZ2h0IC09ICQoIHRoaXMgKS5vdXRlckhlaWdodCggdHJ1ZSApO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmhlYWRlcnMubmV4dCgpXG5cdFx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKCB0aGlzICkuaGVpZ2h0KCBNYXRoLm1heCggMCwgbWF4SGVpZ2h0IC1cblx0XHRcdFx0XHRcdCQoIHRoaXMgKS5pbm5lckhlaWdodCgpICsgJCggdGhpcyApLmhlaWdodCgpICkgKTtcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5jc3MoIFwib3ZlcmZsb3dcIiwgXCJhdXRvXCIgKTtcblx0XHR9IGVsc2UgaWYgKCBoZWlnaHRTdHlsZSA9PT0gXCJhdXRvXCIgKSB7XG5cdFx0XHRtYXhIZWlnaHQgPSAwO1xuXHRcdFx0dGhpcy5oZWFkZXJzLm5leHQoKVxuXHRcdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGlzVmlzaWJsZSA9ICQoIHRoaXMgKS5pcyggXCI6dmlzaWJsZVwiICk7XG5cdFx0XHRcdFx0aWYgKCAhaXNWaXNpYmxlICkge1xuXHRcdFx0XHRcdFx0JCggdGhpcyApLnNob3coKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWF4SGVpZ2h0ID0gTWF0aC5tYXgoIG1heEhlaWdodCwgJCggdGhpcyApLmNzcyggXCJoZWlnaHRcIiwgXCJcIiApLmhlaWdodCgpICk7XG5cdFx0XHRcdFx0aWYgKCAhaXNWaXNpYmxlICkge1xuXHRcdFx0XHRcdFx0JCggdGhpcyApLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKVxuXHRcdFx0XHQuaGVpZ2h0KCBtYXhIZWlnaHQgKTtcblx0XHR9XG5cdH0sXG5cblx0X2FjdGl2YXRlOiBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0dmFyIGFjdGl2ZSA9IHRoaXMuX2ZpbmRBY3RpdmUoIGluZGV4IClbIDAgXTtcblxuXHRcdC8vIFRyeWluZyB0byBhY3RpdmF0ZSB0aGUgYWxyZWFkeSBhY3RpdmUgcGFuZWxcblx0XHRpZiAoIGFjdGl2ZSA9PT0gdGhpcy5hY3RpdmVbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUcnlpbmcgdG8gY29sbGFwc2UsIHNpbXVsYXRlIGEgY2xpY2sgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgaGVhZGVyXG5cdFx0YWN0aXZlID0gYWN0aXZlIHx8IHRoaXMuYWN0aXZlWyAwIF07XG5cblx0XHR0aGlzLl9ldmVudEhhbmRsZXIoIHtcblx0XHRcdHRhcmdldDogYWN0aXZlLFxuXHRcdFx0Y3VycmVudFRhcmdldDogYWN0aXZlLFxuXHRcdFx0cHJldmVudERlZmF1bHQ6ICQubm9vcFxuXHRcdH0gKTtcblx0fSxcblxuXHRfZmluZEFjdGl2ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwibnVtYmVyXCIgPyB0aGlzLmhlYWRlcnMuZXEoIHNlbGVjdG9yICkgOiAkKCk7XG5cdH0sXG5cblx0X3NldHVwRXZlbnRzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGV2ZW50cyA9IHtcblx0XHRcdGtleWRvd246IFwiX2tleWRvd25cIlxuXHRcdH07XG5cdFx0aWYgKCBldmVudCApIHtcblx0XHRcdCQuZWFjaCggZXZlbnQuc3BsaXQoIFwiIFwiICksIGZ1bmN0aW9uKCBpbmRleCwgZXZlbnROYW1lICkge1xuXHRcdFx0XHRldmVudHNbIGV2ZW50TmFtZSBdID0gXCJfZXZlbnRIYW5kbGVyXCI7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb2ZmKCB0aGlzLmhlYWRlcnMuYWRkKCB0aGlzLmhlYWRlcnMubmV4dCgpICkgKTtcblx0XHR0aGlzLl9vbiggdGhpcy5oZWFkZXJzLCBldmVudHMgKTtcblx0XHR0aGlzLl9vbiggdGhpcy5oZWFkZXJzLm5leHQoKSwgeyBrZXlkb3duOiBcIl9wYW5lbEtleURvd25cIiB9ICk7XG5cdFx0dGhpcy5faG92ZXJhYmxlKCB0aGlzLmhlYWRlcnMgKTtcblx0XHR0aGlzLl9mb2N1c2FibGUoIHRoaXMuaGVhZGVycyApO1xuXHR9LFxuXG5cdF9ldmVudEhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYWN0aXZlQ2hpbGRyZW4sIGNsaWNrZWRDaGlsZHJlbixcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRhY3RpdmUgPSB0aGlzLmFjdGl2ZSxcblx0XHRcdGNsaWNrZWQgPSAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICksXG5cdFx0XHRjbGlja2VkSXNBY3RpdmUgPSBjbGlja2VkWyAwIF0gPT09IGFjdGl2ZVsgMCBdLFxuXHRcdFx0Y29sbGFwc2luZyA9IGNsaWNrZWRJc0FjdGl2ZSAmJiBvcHRpb25zLmNvbGxhcHNpYmxlLFxuXHRcdFx0dG9TaG93ID0gY29sbGFwc2luZyA/ICQoKSA6IGNsaWNrZWQubmV4dCgpLFxuXHRcdFx0dG9IaWRlID0gYWN0aXZlLm5leHQoKSxcblx0XHRcdGV2ZW50RGF0YSA9IHtcblx0XHRcdFx0b2xkSGVhZGVyOiBhY3RpdmUsXG5cdFx0XHRcdG9sZFBhbmVsOiB0b0hpZGUsXG5cdFx0XHRcdG5ld0hlYWRlcjogY29sbGFwc2luZyA/ICQoKSA6IGNsaWNrZWQsXG5cdFx0XHRcdG5ld1BhbmVsOiB0b1Nob3dcblx0XHRcdH07XG5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKFxuXG5cdFx0XHRcdC8vIGNsaWNrIG9uIGFjdGl2ZSBoZWFkZXIsIGJ1dCBub3QgY29sbGFwc2libGVcblx0XHRcdFx0KCBjbGlja2VkSXNBY3RpdmUgJiYgIW9wdGlvbnMuY29sbGFwc2libGUgKSB8fFxuXG5cdFx0XHRcdC8vIGFsbG93IGNhbmNlbGluZyBhY3RpdmF0aW9uXG5cdFx0XHRcdCggdGhpcy5fdHJpZ2dlciggXCJiZWZvcmVBY3RpdmF0ZVwiLCBldmVudCwgZXZlbnREYXRhICkgPT09IGZhbHNlICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0b3B0aW9ucy5hY3RpdmUgPSBjb2xsYXBzaW5nID8gZmFsc2UgOiB0aGlzLmhlYWRlcnMuaW5kZXgoIGNsaWNrZWQgKTtcblxuXHRcdC8vIFdoZW4gdGhlIGNhbGwgdG8gLl90b2dnbGUoKSBjb21lcyBhZnRlciB0aGUgY2xhc3MgY2hhbmdlc1xuXHRcdC8vIGl0IGNhdXNlcyBhIHZlcnkgb2RkIGJ1ZyBpbiBJRSA4IChzZWUgIzY3MjApXG5cdFx0dGhpcy5hY3RpdmUgPSBjbGlja2VkSXNBY3RpdmUgPyAkKCkgOiBjbGlja2VkO1xuXHRcdHRoaXMuX3RvZ2dsZSggZXZlbnREYXRhICk7XG5cblx0XHQvLyBTd2l0Y2ggY2xhc3Nlc1xuXHRcdC8vIGNvcm5lciBjbGFzc2VzIG9uIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBoZWFkZXIgc3RheSBhZnRlciB0aGUgYW5pbWF0aW9uXG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGFjdGl2ZSwgXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0aWYgKCBvcHRpb25zLmljb25zICkge1xuXHRcdFx0YWN0aXZlQ2hpbGRyZW4gPSBhY3RpdmUuY2hpbGRyZW4oIFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggYWN0aXZlQ2hpbGRyZW4sIG51bGwsIG9wdGlvbnMuaWNvbnMuYWN0aXZlSGVhZGVyIClcblx0XHRcdFx0Ll9hZGRDbGFzcyggYWN0aXZlQ2hpbGRyZW4sIG51bGwsIG9wdGlvbnMuaWNvbnMuaGVhZGVyICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhY2xpY2tlZElzQWN0aXZlICkge1xuXHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGNsaWNrZWQsIFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiApXG5cdFx0XHRcdC5fYWRkQ2xhc3MoIGNsaWNrZWQsIFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0aWYgKCBvcHRpb25zLmljb25zICkge1xuXHRcdFx0XHRjbGlja2VkQ2hpbGRyZW4gPSBjbGlja2VkLmNoaWxkcmVuKCBcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiApO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggY2xpY2tlZENoaWxkcmVuLCBudWxsLCBvcHRpb25zLmljb25zLmhlYWRlciApXG5cdFx0XHRcdFx0Ll9hZGRDbGFzcyggY2xpY2tlZENoaWxkcmVuLCBudWxsLCBvcHRpb25zLmljb25zLmFjdGl2ZUhlYWRlciApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggY2xpY2tlZC5uZXh0KCksIFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X3RvZ2dsZTogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0dmFyIHRvU2hvdyA9IGRhdGEubmV3UGFuZWwsXG5cdFx0XHR0b0hpZGUgPSB0aGlzLnByZXZTaG93Lmxlbmd0aCA/IHRoaXMucHJldlNob3cgOiBkYXRhLm9sZFBhbmVsO1xuXG5cdFx0Ly8gSGFuZGxlIGFjdGl2YXRpbmcgYSBwYW5lbCBkdXJpbmcgdGhlIGFuaW1hdGlvbiBmb3IgYW5vdGhlciBhY3RpdmF0aW9uXG5cdFx0dGhpcy5wcmV2U2hvdy5hZGQoIHRoaXMucHJldkhpZGUgKS5zdG9wKCB0cnVlLCB0cnVlICk7XG5cdFx0dGhpcy5wcmV2U2hvdyA9IHRvU2hvdztcblx0XHR0aGlzLnByZXZIaWRlID0gdG9IaWRlO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuYW5pbWF0ZSApIHtcblx0XHRcdHRoaXMuX2FuaW1hdGUoIHRvU2hvdywgdG9IaWRlLCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvSGlkZS5oaWRlKCk7XG5cdFx0XHR0b1Nob3cuc2hvdygpO1xuXHRcdFx0dGhpcy5fdG9nZ2xlQ29tcGxldGUoIGRhdGEgKTtcblx0XHR9XG5cblx0XHR0b0hpZGUuYXR0cigge1xuXHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuXHRcdH0gKTtcblx0XHR0b0hpZGUucHJldigpLmF0dHIoIHtcblx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiXG5cdFx0fSApO1xuXG5cdFx0Ly8gaWYgd2UncmUgc3dpdGNoaW5nIHBhbmVscywgcmVtb3ZlIHRoZSBvbGQgaGVhZGVyIGZyb20gdGhlIHRhYiBvcmRlclxuXHRcdC8vIGlmIHdlJ3JlIG9wZW5pbmcgZnJvbSBjb2xsYXBzZWQgc3RhdGUsIHJlbW92ZSB0aGUgcHJldmlvdXMgaGVhZGVyIGZyb20gdGhlIHRhYiBvcmRlclxuXHRcdC8vIGlmIHdlJ3JlIGNvbGxhcHNpbmcsIHRoZW4ga2VlcCB0aGUgY29sbGFwc2luZyBoZWFkZXIgaW4gdGhlIHRhYiBvcmRlclxuXHRcdGlmICggdG9TaG93Lmxlbmd0aCAmJiB0b0hpZGUubGVuZ3RoICkge1xuXHRcdFx0dG9IaWRlLnByZXYoKS5hdHRyKCB7XG5cdFx0XHRcdFwidGFiSW5kZXhcIjogLTEsXG5cdFx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCJcblx0XHRcdH0gKTtcblx0XHR9IGVsc2UgaWYgKCB0b1Nob3cubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5oZWFkZXJzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUludCggJCggdGhpcyApLmF0dHIoIFwidGFiSW5kZXhcIiApLCAxMCApID09PSAwO1xuXHRcdFx0fSApXG5cdFx0XHRcdC5hdHRyKCBcInRhYkluZGV4XCIsIC0xICk7XG5cdFx0fVxuXG5cdFx0dG9TaG93XG5cdFx0XHQuYXR0ciggXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIgKVxuXHRcdFx0LnByZXYoKVxuXHRcdFx0XHQuYXR0cigge1xuXHRcdFx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcInRydWVcIixcblx0XHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0dGFiSW5kZXg6IDBcblx0XHRcdFx0fSApO1xuXHR9LFxuXG5cdF9hbmltYXRlOiBmdW5jdGlvbiggdG9TaG93LCB0b0hpZGUsIGRhdGEgKSB7XG5cdFx0dmFyIHRvdGFsLCBlYXNpbmcsIGR1cmF0aW9uLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRhZGp1c3QgPSAwLFxuXHRcdFx0Ym94U2l6aW5nID0gdG9TaG93LmNzcyggXCJib3gtc2l6aW5nXCIgKSxcblx0XHRcdGRvd24gPSB0b1Nob3cubGVuZ3RoICYmXG5cdFx0XHRcdCggIXRvSGlkZS5sZW5ndGggfHwgKCB0b1Nob3cuaW5kZXgoKSA8IHRvSGlkZS5pbmRleCgpICkgKSxcblx0XHRcdGFuaW1hdGUgPSB0aGlzLm9wdGlvbnMuYW5pbWF0ZSB8fCB7fSxcblx0XHRcdG9wdGlvbnMgPSBkb3duICYmIGFuaW1hdGUuZG93biB8fCBhbmltYXRlLFxuXHRcdFx0Y29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhhdC5fdG9nZ2xlQ29tcGxldGUoIGRhdGEgKTtcblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0ZHVyYXRpb24gPSBvcHRpb25zO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZWFzaW5nID0gb3B0aW9ucztcblx0XHR9XG5cblx0XHQvLyBmYWxsIGJhY2sgZnJvbSBvcHRpb25zIHRvIGFuaW1hdGlvbiBpbiBjYXNlIG9mIHBhcnRpYWwgZG93biBzZXR0aW5nc1xuXHRcdGVhc2luZyA9IGVhc2luZyB8fCBvcHRpb25zLmVhc2luZyB8fCBhbmltYXRlLmVhc2luZztcblx0XHRkdXJhdGlvbiA9IGR1cmF0aW9uIHx8IG9wdGlvbnMuZHVyYXRpb24gfHwgYW5pbWF0ZS5kdXJhdGlvbjtcblxuXHRcdGlmICggIXRvSGlkZS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdG9TaG93LmFuaW1hdGUoIHRoaXMuc2hvd1Byb3BzLCBkdXJhdGlvbiwgZWFzaW5nLCBjb21wbGV0ZSApO1xuXHRcdH1cblx0XHRpZiAoICF0b1Nob3cubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRvSGlkZS5hbmltYXRlKCB0aGlzLmhpZGVQcm9wcywgZHVyYXRpb24sIGVhc2luZywgY29tcGxldGUgKTtcblx0XHR9XG5cblx0XHR0b3RhbCA9IHRvU2hvdy5zaG93KCkub3V0ZXJIZWlnaHQoKTtcblx0XHR0b0hpZGUuYW5pbWF0ZSggdGhpcy5oaWRlUHJvcHMsIHtcblx0XHRcdGR1cmF0aW9uOiBkdXJhdGlvbixcblx0XHRcdGVhc2luZzogZWFzaW5nLFxuXHRcdFx0c3RlcDogZnVuY3Rpb24oIG5vdywgZnggKSB7XG5cdFx0XHRcdGZ4Lm5vdyA9IE1hdGgucm91bmQoIG5vdyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHR0b1Nob3dcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hbmltYXRlKCB0aGlzLnNob3dQcm9wcywge1xuXHRcdFx0XHRkdXJhdGlvbjogZHVyYXRpb24sXG5cdFx0XHRcdGVhc2luZzogZWFzaW5nLFxuXHRcdFx0XHRjb21wbGV0ZTogY29tcGxldGUsXG5cdFx0XHRcdHN0ZXA6IGZ1bmN0aW9uKCBub3csIGZ4ICkge1xuXHRcdFx0XHRcdGZ4Lm5vdyA9IE1hdGgucm91bmQoIG5vdyApO1xuXHRcdFx0XHRcdGlmICggZngucHJvcCAhPT0gXCJoZWlnaHRcIiApIHtcblx0XHRcdFx0XHRcdGlmICggYm94U2l6aW5nID09PSBcImNvbnRlbnQtYm94XCIgKSB7XG5cdFx0XHRcdFx0XHRcdGFkanVzdCArPSBmeC5ub3c7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggdGhhdC5vcHRpb25zLmhlaWdodFN0eWxlICE9PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0XHRcdGZ4Lm5vdyA9IE1hdGgucm91bmQoIHRvdGFsIC0gdG9IaWRlLm91dGVySGVpZ2h0KCkgLSBhZGp1c3QgKTtcblx0XHRcdFx0XHRcdGFkanVzdCA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cblx0X3RvZ2dsZUNvbXBsZXRlOiBmdW5jdGlvbiggZGF0YSApIHtcblx0XHR2YXIgdG9IaWRlID0gZGF0YS5vbGRQYW5lbCxcblx0XHRcdHByZXYgPSB0b0hpZGUucHJldigpO1xuXG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRvSGlkZSwgXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIiApO1xuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBwcmV2LCBcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIgKVxuXHRcdFx0Ll9hZGRDbGFzcyggcHJldiwgXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiICk7XG5cblx0XHQvLyBXb3JrIGFyb3VuZCBmb3IgcmVuZGVyaW5nIGJ1ZyBpbiBJRSAoIzU0MjEpXG5cdFx0aWYgKCB0b0hpZGUubGVuZ3RoICkge1xuXHRcdFx0dG9IaWRlLnBhcmVudCgpWyAwIF0uY2xhc3NOYW1lID0gdG9IaWRlLnBhcmVudCgpWyAwIF0uY2xhc3NOYW1lO1xuXHRcdH1cblx0XHR0aGlzLl90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIG51bGwsIGRhdGEgKTtcblx0fVxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIE1lbnUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IE1lbnVcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBDcmVhdGVzIG5lc3RhYmxlIG1lbnVzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL21lbnUvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vbWVudS9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL21lbnUuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzTWVudSA9ICQud2lkZ2V0KCBcInVpLm1lbnVcIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8dWw+XCIsXG5cdGRlbGF5OiAzMDAsXG5cdG9wdGlvbnM6IHtcblx0XHRpY29uczoge1xuXHRcdFx0c3VibWVudTogXCJ1aS1pY29uLWNhcmV0LTEtZVwiXG5cdFx0fSxcblx0XHRpdGVtczogXCI+ICpcIixcblx0XHRtZW51czogXCJ1bFwiLFxuXHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRteTogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0YXQ6IFwicmlnaHQgdG9wXCJcblx0XHR9LFxuXHRcdHJvbGU6IFwibWVudVwiLFxuXG5cdFx0Ly8gQ2FsbGJhY2tzXG5cdFx0Ymx1cjogbnVsbCxcblx0XHRmb2N1czogbnVsbCxcblx0XHRzZWxlY3Q6IG51bGxcblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmFjdGl2ZU1lbnUgPSB0aGlzLmVsZW1lbnQ7XG5cblx0XHQvLyBGbGFnIHVzZWQgdG8gcHJldmVudCBmaXJpbmcgb2YgdGhlIGNsaWNrIGhhbmRsZXJcblx0XHQvLyBhcyB0aGUgZXZlbnQgYnViYmxlcyB1cCB0aHJvdWdoIG5lc3RlZCBtZW51c1xuXHRcdHRoaXMubW91c2VIYW5kbGVkID0gZmFsc2U7XG5cdFx0dGhpcy5lbGVtZW50XG5cdFx0XHQudW5pcXVlSWQoKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0cm9sZTogdGhpcy5vcHRpb25zLnJvbGUsXG5cdFx0XHRcdHRhYkluZGV4OiAwXG5cdFx0XHR9ICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1tZW51XCIsIFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIgKTtcblx0XHR0aGlzLl9vbigge1xuXG5cdFx0XHQvLyBQcmV2ZW50IGZvY3VzIGZyb20gc3RpY2tpbmcgdG8gbGlua3MgaW5zaWRlIG1lbnUgYWZ0ZXIgY2xpY2tpbmdcblx0XHRcdC8vIHRoZW0gKGZvY3VzIHNob3VsZCBhbHdheXMgc3RheSBvbiBVTCBkdXJpbmcgbmF2aWdhdGlvbikuXG5cdFx0XHRcIm1vdXNlZG93biAudWktbWVudS1pdGVtXCI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH0sXG5cdFx0XHRcImNsaWNrIC51aS1tZW51LWl0ZW1cIjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gJCggZXZlbnQudGFyZ2V0ICk7XG5cdFx0XHRcdHZhciBhY3RpdmUgPSAkKCAkLnVpLnNhZmVBY3RpdmVFbGVtZW50KCB0aGlzLmRvY3VtZW50WyAwIF0gKSApO1xuXHRcdFx0XHRpZiAoICF0aGlzLm1vdXNlSGFuZGxlZCAmJiB0YXJnZXQubm90KCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0KCBldmVudCApO1xuXG5cdFx0XHRcdFx0Ly8gT25seSBzZXQgdGhlIG1vdXNlSGFuZGxlZCBmbGFnIGlmIHRoZSBldmVudCB3aWxsIGJ1YmJsZSwgc2VlICM5NDY5LlxuXHRcdFx0XHRcdGlmICggIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1vdXNlSGFuZGxlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT3BlbiBzdWJtZW51IG9uIGNsaWNrXG5cdFx0XHRcdFx0aWYgKCB0YXJnZXQuaGFzKCBcIi51aS1tZW51XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmV4cGFuZCggZXZlbnQgKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhdGhpcy5lbGVtZW50LmlzKCBcIjpmb2N1c1wiICkgJiZcblx0XHRcdFx0XHRcdFx0YWN0aXZlLmNsb3Nlc3QoIFwiLnVpLW1lbnVcIiApLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVkaXJlY3QgZm9jdXMgdG8gdGhlIG1lbnVcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKCBcImZvY3VzXCIsIFsgdHJ1ZSBdICk7XG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBhY3RpdmUgaXRlbSBpcyBvbiB0aGUgdG9wIGxldmVsLCBsZXQgaXQgc3RheSBhY3RpdmUuXG5cdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGJsdXIgdGhlIGFjdGl2ZSBpdGVtIHNpbmNlIGl0IGlzIG5vIGxvbmdlciB2aXNpYmxlLlxuXHRcdFx0XHRcdFx0aWYgKCB0aGlzLmFjdGl2ZSAmJiB0aGlzLmFjdGl2ZS5wYXJlbnRzKCBcIi51aS1tZW51XCIgKS5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCggdGhpcy50aW1lciApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdFwibW91c2VlbnRlciAudWktbWVudS1pdGVtXCI6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBJZ25vcmUgbW91c2UgZXZlbnRzIHdoaWxlIHR5cGVhaGVhZCBpcyBhY3RpdmUsIHNlZSAjMTA0NTguXG5cdFx0XHRcdC8vIFByZXZlbnRzIGZvY3VzaW5nIHRoZSB3cm9uZyBpdGVtIHdoZW4gdHlwZWFoZWFkIGNhdXNlcyBhIHNjcm9sbCB3aGlsZSB0aGUgbW91c2Vcblx0XHRcdFx0Ly8gaXMgb3ZlciBhbiBpdGVtIGluIHRoZSBtZW51XG5cdFx0XHRcdGlmICggdGhpcy5wcmV2aW91c0ZpbHRlciApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgYWN0dWFsVGFyZ2V0ID0gJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktbWVudS1pdGVtXCIgKSxcblx0XHRcdFx0XHR0YXJnZXQgPSAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICk7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGJ1YmJsZWQgZXZlbnRzIG9uIHBhcmVudCBpdGVtcywgc2VlICMxMTY0MVxuXHRcdFx0XHRpZiAoIGFjdHVhbFRhcmdldFsgMCBdICE9PSB0YXJnZXRbIDAgXSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZW1vdmUgdWktc3RhdGUtYWN0aXZlIGNsYXNzIGZyb20gc2libGluZ3Mgb2YgdGhlIG5ld2x5IGZvY3VzZWQgbWVudSBpdGVtXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGEganVtcCBjYXVzZWQgYnkgYWRqYWNlbnQgZWxlbWVudHMgYm90aCBoYXZpbmcgYSBjbGFzcyB3aXRoIGEgYm9yZGVyXG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0YXJnZXQuc2libGluZ3MoKS5jaGlsZHJlbiggXCIudWktc3RhdGUtYWN0aXZlXCIgKSxcblx0XHRcdFx0XHRudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCB0YXJnZXQgKTtcblx0XHRcdH0sXG5cdFx0XHRtb3VzZWxlYXZlOiBcImNvbGxhcHNlQWxsXCIsXG5cdFx0XHRcIm1vdXNlbGVhdmUgLnVpLW1lbnVcIjogXCJjb2xsYXBzZUFsbFwiLFxuXHRcdFx0Zm9jdXM6IGZ1bmN0aW9uKCBldmVudCwga2VlcEFjdGl2ZUl0ZW0gKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbHJlYWR5IGFuIGFjdGl2ZSBpdGVtLCBrZWVwIGl0IGFjdGl2ZVxuXHRcdFx0XHQvLyBJZiBub3QsIGFjdGl2YXRlIHRoZSBmaXJzdCBpdGVtXG5cdFx0XHRcdHZhciBpdGVtID0gdGhpcy5hY3RpdmUgfHwgdGhpcy5lbGVtZW50LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApLmVxKCAwICk7XG5cblx0XHRcdFx0aWYgKCAha2VlcEFjdGl2ZUl0ZW0gKSB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cyggZXZlbnQsIGl0ZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGJsdXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBub3RDb250YWluZWQgPSAhJC5jb250YWlucyhcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudFsgMCBdLFxuXHRcdFx0XHRcdFx0JC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmICggbm90Q29udGFpbmVkICkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZUFsbCggZXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0sXG5cdFx0XHRrZXlkb3duOiBcIl9rZXlkb3duXCJcblx0XHR9ICk7XG5cblx0XHR0aGlzLnJlZnJlc2goKTtcblxuXHRcdC8vIENsaWNrcyBvdXRzaWRlIG9mIGEgbWVudSBjb2xsYXBzZSBhbnkgb3BlbiBtZW51c1xuXHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB7XG5cdFx0XHRjbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuX2Nsb3NlT25Eb2N1bWVudENsaWNrKCBldmVudCApICkge1xuXHRcdFx0XHRcdHRoaXMuY29sbGFwc2VBbGwoIGV2ZW50ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNldCB0aGUgbW91c2VIYW5kbGVkIGZsYWdcblx0XHRcdFx0dGhpcy5tb3VzZUhhbmRsZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpdGVtcyA9IHRoaXMuZWxlbWVudC5maW5kKCBcIi51aS1tZW51LWl0ZW1cIiApXG5cdFx0XHRcdC5yZW1vdmVBdHRyKCBcInJvbGUgYXJpYS1kaXNhYmxlZFwiICksXG5cdFx0XHRzdWJtZW51cyA9IGl0ZW1zLmNoaWxkcmVuKCBcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiIClcblx0XHRcdFx0LnJlbW92ZVVuaXF1ZUlkKClcblx0XHRcdFx0LnJlbW92ZUF0dHIoIFwidGFiSW5kZXggcm9sZSBhcmlhLWhhc3BvcHVwXCIgKTtcblxuXHRcdC8vIERlc3Ryb3kgKHN1YiltZW51c1xuXHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0LnJlbW92ZUF0dHIoIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgKVxuXHRcdFx0LmZpbmQoIFwiLnVpLW1lbnVcIiApLmFkZEJhY2soKVxuXHRcdFx0XHQucmVtb3ZlQXR0ciggXCJyb2xlIGFyaWEtbGFiZWxsZWRieSBhcmlhLWV4cGFuZGVkIGFyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgXCIgK1xuXHRcdFx0XHRcdFwidGFiSW5kZXhcIiApXG5cdFx0XHRcdC5yZW1vdmVVbmlxdWVJZCgpXG5cdFx0XHRcdC5zaG93KCk7XG5cblx0XHRzdWJtZW51cy5jaGlsZHJlbigpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsZW0gPSAkKCB0aGlzICk7XG5cdFx0XHRpZiAoIGVsZW0uZGF0YSggXCJ1aS1tZW51LXN1Ym1lbnUtY2FyZXRcIiApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfa2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBtYXRjaCwgcHJldiwgY2hhcmFjdGVyLCBza2lwLFxuXHRcdFx0cHJldmVudERlZmF1bHQgPSB0cnVlO1xuXG5cdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRjYXNlICQudWkua2V5Q29kZS5QQUdFX1VQOlxuXHRcdFx0dGhpcy5wcmV2aW91c1BhZ2UoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5QQUdFX0RPV046XG5cdFx0XHR0aGlzLm5leHRQYWdlKCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuSE9NRTpcblx0XHRcdHRoaXMuX21vdmUoIFwiZmlyc3RcIiwgXCJmaXJzdFwiLCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5EOlxuXHRcdFx0dGhpcy5fbW92ZSggXCJsYXN0XCIsIFwibGFzdFwiLCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuVVA6XG5cdFx0XHR0aGlzLnByZXZpb3VzKCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuRE9XTjpcblx0XHRcdHRoaXMubmV4dCggZXZlbnQgKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLkxFRlQ6XG5cdFx0XHR0aGlzLmNvbGxhcHNlKCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAkLnVpLmtleUNvZGUuUklHSFQ6XG5cdFx0XHRpZiAoIHRoaXMuYWN0aXZlICYmICF0aGlzLmFjdGl2ZS5pcyggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApICkge1xuXHRcdFx0XHR0aGlzLmV4cGFuZCggZXZlbnQgKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLkVOVEVSOlxuXHRcdGNhc2UgJC51aS5rZXlDb2RlLlNQQUNFOlxuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIGV2ZW50ICk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5FU0NBUEU6XG5cdFx0XHR0aGlzLmNvbGxhcHNlKCBldmVudCApO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG5cdFx0XHRwcmV2ID0gdGhpcy5wcmV2aW91c0ZpbHRlciB8fCBcIlwiO1xuXHRcdFx0c2tpcCA9IGZhbHNlO1xuXG5cdFx0XHQvLyBTdXBwb3J0IG51bWJlciBwYWQgdmFsdWVzXG5cdFx0XHRjaGFyYWN0ZXIgPSBldmVudC5rZXlDb2RlID49IDk2ICYmIGV2ZW50LmtleUNvZGUgPD0gMTA1ID9cblx0XHRcdFx0KCBldmVudC5rZXlDb2RlIC0gOTYgKS50b1N0cmluZygpIDogU3RyaW5nLmZyb21DaGFyQ29kZSggZXZlbnQua2V5Q29kZSApO1xuXG5cdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMuZmlsdGVyVGltZXIgKTtcblxuXHRcdFx0aWYgKCBjaGFyYWN0ZXIgPT09IHByZXYgKSB7XG5cdFx0XHRcdHNraXAgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hhcmFjdGVyID0gcHJldiArIGNoYXJhY3Rlcjtcblx0XHRcdH1cblxuXHRcdFx0bWF0Y2ggPSB0aGlzLl9maWx0ZXJNZW51SXRlbXMoIGNoYXJhY3RlciApO1xuXHRcdFx0bWF0Y2ggPSBza2lwICYmIG1hdGNoLmluZGV4KCB0aGlzLmFjdGl2ZS5uZXh0KCkgKSAhPT0gLTEgP1xuXHRcdFx0XHR0aGlzLmFjdGl2ZS5uZXh0QWxsKCBcIi51aS1tZW51LWl0ZW1cIiApIDpcblx0XHRcdFx0bWF0Y2g7XG5cblx0XHRcdC8vIElmIG5vIG1hdGNoZXMgb24gdGhlIGN1cnJlbnQgZmlsdGVyLCByZXNldCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJlc3NlZFxuXHRcdFx0Ly8gdG8gbW92ZSBkb3duIHRoZSBtZW51IHRvIHRoZSBmaXJzdCBpdGVtIHRoYXQgc3RhcnRzIHdpdGggdGhhdCBjaGFyYWN0ZXJcblx0XHRcdGlmICggIW1hdGNoLmxlbmd0aCApIHtcblx0XHRcdFx0Y2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZSggZXZlbnQua2V5Q29kZSApO1xuXHRcdFx0XHRtYXRjaCA9IHRoaXMuX2ZpbHRlck1lbnVJdGVtcyggY2hhcmFjdGVyICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0Y2gubGVuZ3RoICkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgbWF0Y2ggKTtcblx0XHRcdFx0dGhpcy5wcmV2aW91c0ZpbHRlciA9IGNoYXJhY3Rlcjtcblx0XHRcdFx0dGhpcy5maWx0ZXJUaW1lciA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcjtcblx0XHRcdFx0fSwgMTAwMCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBwcmV2ZW50RGVmYXVsdCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hY3RpdmF0ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggdGhpcy5hY3RpdmUgJiYgIXRoaXMuYWN0aXZlLmlzKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSB7XG5cdFx0XHRpZiAoIHRoaXMuYWN0aXZlLmNoaWxkcmVuKCBcIlthcmlhLWhhc3BvcHVwPSd0cnVlJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0dGhpcy5leHBhbmQoIGV2ZW50ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNlbGVjdCggZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lbnVzLCBpdGVtcywgbmV3U3VibWVudXMsIG5ld0l0ZW1zLCBuZXdXcmFwcGVycyxcblx0XHRcdHRoYXQgPSB0aGlzLFxuXHRcdFx0aWNvbiA9IHRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LFxuXHRcdFx0c3VibWVudXMgPSB0aGlzLmVsZW1lbnQuZmluZCggdGhpcy5vcHRpb25zLm1lbnVzICk7XG5cblx0XHR0aGlzLl90b2dnbGVDbGFzcyggXCJ1aS1tZW51LWljb25zXCIsIG51bGwsICEhdGhpcy5lbGVtZW50LmZpbmQoIFwiLnVpLWljb25cIiApLmxlbmd0aCApO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBuZXN0ZWQgbWVudXNcblx0XHRuZXdTdWJtZW51cyA9IHN1Ym1lbnVzLmZpbHRlciggXCI6bm90KC51aS1tZW51KVwiIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdHJvbGU6IHRoaXMub3B0aW9ucy5yb2xlLFxuXHRcdFx0XHRcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiXG5cdFx0XHR9IClcblx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIG1lbnUgPSAkKCB0aGlzICksXG5cdFx0XHRcdFx0aXRlbSA9IG1lbnUucHJldigpLFxuXHRcdFx0XHRcdHN1Ym1lbnVDYXJldCA9ICQoIFwiPHNwYW4+XCIgKS5kYXRhKCBcInVpLW1lbnUtc3VibWVudS1jYXJldFwiLCB0cnVlICk7XG5cblx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIHN1Ym1lbnVDYXJldCwgXCJ1aS1tZW51LWljb25cIiwgXCJ1aS1pY29uIFwiICsgaWNvbiApO1xuXHRcdFx0XHRpdGVtXG5cdFx0XHRcdFx0LmF0dHIoIFwiYXJpYS1oYXNwb3B1cFwiLCBcInRydWVcIiApXG5cdFx0XHRcdFx0LnByZXBlbmQoIHN1Ym1lbnVDYXJldCApO1xuXHRcdFx0XHRtZW51LmF0dHIoIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIGl0ZW0uYXR0ciggXCJpZFwiICkgKTtcblx0XHRcdH0gKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCBuZXdTdWJtZW51cywgXCJ1aS1tZW51XCIsIFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWZyb250XCIgKTtcblxuXHRcdG1lbnVzID0gc3VibWVudXMuYWRkKCB0aGlzLmVsZW1lbnQgKTtcblx0XHRpdGVtcyA9IG1lbnVzLmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBtZW51LWl0ZW1zIGNvbnRhaW5pbmcgc3BhY2VzIGFuZC9vciBkYXNoZXMgb25seSBhcyBkaXZpZGVyc1xuXHRcdGl0ZW1zLm5vdCggXCIudWktbWVudS1pdGVtXCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpdGVtID0gJCggdGhpcyApO1xuXHRcdFx0aWYgKCB0aGF0Ll9pc0RpdmlkZXIoIGl0ZW0gKSApIHtcblx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIGl0ZW0sIFwidWktbWVudS1kaXZpZGVyXCIsIFwidWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8vIERvbid0IHJlZnJlc2ggbGlzdCBpdGVtcyB0aGF0IGFyZSBhbHJlYWR5IGFkYXB0ZWRcblx0XHRuZXdJdGVtcyA9IGl0ZW1zLm5vdCggXCIudWktbWVudS1pdGVtLCAudWktbWVudS1kaXZpZGVyXCIgKTtcblx0XHRuZXdXcmFwcGVycyA9IG5ld0l0ZW1zLmNoaWxkcmVuKClcblx0XHRcdC5ub3QoIFwiLnVpLW1lbnVcIiApXG5cdFx0XHRcdC51bmlxdWVJZCgpXG5cdFx0XHRcdC5hdHRyKCB7XG5cdFx0XHRcdFx0dGFiSW5kZXg6IC0xLFxuXHRcdFx0XHRcdHJvbGU6IHRoaXMuX2l0ZW1Sb2xlKClcblx0XHRcdFx0fSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBuZXdJdGVtcywgXCJ1aS1tZW51LWl0ZW1cIiApXG5cdFx0XHQuX2FkZENsYXNzKCBuZXdXcmFwcGVycywgXCJ1aS1tZW51LWl0ZW0td3JhcHBlclwiICk7XG5cblx0XHQvLyBBZGQgYXJpYS1kaXNhYmxlZCBhdHRyaWJ1dGUgdG8gYW55IGRpc2FibGVkIG1lbnUgaXRlbVxuXHRcdGl0ZW1zLmZpbHRlciggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApLmF0dHIoIFwiYXJpYS1kaXNhYmxlZFwiLCBcInRydWVcIiApO1xuXG5cdFx0Ly8gSWYgdGhlIGFjdGl2ZSBpdGVtIGhhcyBiZWVuIHJlbW92ZWQsIGJsdXIgdGhlIG1lbnVcblx0XHRpZiAoIHRoaXMuYWN0aXZlICYmICEkLmNvbnRhaW5zKCB0aGlzLmVsZW1lbnRbIDAgXSwgdGhpcy5hY3RpdmVbIDAgXSApICkge1xuXHRcdFx0dGhpcy5ibHVyKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9pdGVtUm9sZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lbnU6IFwibWVudWl0ZW1cIixcblx0XHRcdGxpc3Rib3g6IFwib3B0aW9uXCJcblx0XHR9WyB0aGlzLm9wdGlvbnMucm9sZSBdO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImljb25zXCIgKSB7XG5cdFx0XHR2YXIgaWNvbnMgPSB0aGlzLmVsZW1lbnQuZmluZCggXCIudWktbWVudS1pY29uXCIgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBpY29ucywgbnVsbCwgdGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUgKVxuXHRcdFx0XHQuX2FkZENsYXNzKCBpY29ucywgbnVsbCwgdmFsdWUuc3VibWVudSApO1xuXHRcdH1cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25EaXNhYmxlZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHRoaXMuX3N1cGVyKCB2YWx1ZSApO1xuXG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwiYXJpYS1kaXNhYmxlZFwiLCBTdHJpbmcoIHZhbHVlICkgKTtcblx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdH0sXG5cblx0Zm9jdXM6IGZ1bmN0aW9uKCBldmVudCwgaXRlbSApIHtcblx0XHR2YXIgbmVzdGVkLCBmb2N1c2VkLCBhY3RpdmVQYXJlbnQ7XG5cdFx0dGhpcy5ibHVyKCBldmVudCwgZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiICk7XG5cblx0XHR0aGlzLl9zY3JvbGxJbnRvVmlldyggaXRlbSApO1xuXG5cdFx0dGhpcy5hY3RpdmUgPSBpdGVtLmZpcnN0KCk7XG5cblx0XHRmb2N1c2VkID0gdGhpcy5hY3RpdmUuY2hpbGRyZW4oIFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggZm9jdXNlZCwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXG5cdFx0Ly8gT25seSB1cGRhdGUgYXJpYS1hY3RpdmVkZXNjZW5kYW50IGlmIHRoZXJlJ3MgYSByb2xlXG5cdFx0Ly8gb3RoZXJ3aXNlIHdlIGFzc3VtZSBmb2N1cyBpcyBtYW5hZ2VkIGVsc2V3aGVyZVxuXHRcdGlmICggdGhpcy5vcHRpb25zLnJvbGUgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgZm9jdXNlZC5hdHRyKCBcImlkXCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIEhpZ2hsaWdodCBhY3RpdmUgcGFyZW50IG1lbnUgaXRlbSwgaWYgYW55XG5cdFx0YWN0aXZlUGFyZW50ID0gdGhpcy5hY3RpdmVcblx0XHRcdC5wYXJlbnQoKVxuXHRcdFx0XHQuY2xvc2VzdCggXCIudWktbWVudS1pdGVtXCIgKVxuXHRcdFx0XHRcdC5jaGlsZHJlbiggXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBhY3RpdmVQYXJlbnQsIG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblxuXHRcdGlmICggZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgKSB7XG5cdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdFx0fSwgdGhpcy5kZWxheSApO1xuXHRcdH1cblxuXHRcdG5lc3RlZCA9IGl0ZW0uY2hpbGRyZW4oIFwiLnVpLW1lbnVcIiApO1xuXHRcdGlmICggbmVzdGVkLmxlbmd0aCAmJiBldmVudCAmJiAoIC9ebW91c2UvLnRlc3QoIGV2ZW50LnR5cGUgKSApICkge1xuXHRcdFx0dGhpcy5fc3RhcnRPcGVuaW5nKCBuZXN0ZWQgKTtcblx0XHR9XG5cdFx0dGhpcy5hY3RpdmVNZW51ID0gaXRlbS5wYXJlbnQoKTtcblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwiZm9jdXNcIiwgZXZlbnQsIHsgaXRlbTogaXRlbSB9ICk7XG5cdH0sXG5cblx0X3Njcm9sbEludG9WaWV3OiBmdW5jdGlvbiggaXRlbSApIHtcblx0XHR2YXIgYm9yZGVyVG9wLCBwYWRkaW5nVG9wLCBvZmZzZXQsIHNjcm9sbCwgZWxlbWVudEhlaWdodCwgaXRlbUhlaWdodDtcblx0XHRpZiAoIHRoaXMuX2hhc1Njcm9sbCgpICkge1xuXHRcdFx0Ym9yZGVyVG9wID0gcGFyc2VGbG9hdCggJC5jc3MoIHRoaXMuYWN0aXZlTWVudVsgMCBdLCBcImJvcmRlclRvcFdpZHRoXCIgKSApIHx8IDA7XG5cdFx0XHRwYWRkaW5nVG9wID0gcGFyc2VGbG9hdCggJC5jc3MoIHRoaXMuYWN0aXZlTWVudVsgMCBdLCBcInBhZGRpbmdUb3BcIiApICkgfHwgMDtcblx0XHRcdG9mZnNldCA9IGl0ZW0ub2Zmc2V0KCkudG9wIC0gdGhpcy5hY3RpdmVNZW51Lm9mZnNldCgpLnRvcCAtIGJvcmRlclRvcCAtIHBhZGRpbmdUb3A7XG5cdFx0XHRzY3JvbGwgPSB0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCk7XG5cdFx0XHRlbGVtZW50SGVpZ2h0ID0gdGhpcy5hY3RpdmVNZW51LmhlaWdodCgpO1xuXHRcdFx0aXRlbUhlaWdodCA9IGl0ZW0ub3V0ZXJIZWlnaHQoKTtcblxuXHRcdFx0aWYgKCBvZmZzZXQgPCAwICkge1xuXHRcdFx0XHR0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCBzY3JvbGwgKyBvZmZzZXQgKTtcblx0XHRcdH0gZWxzZSBpZiAoIG9mZnNldCArIGl0ZW1IZWlnaHQgPiBlbGVtZW50SGVpZ2h0ICkge1xuXHRcdFx0XHR0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCBzY3JvbGwgKyBvZmZzZXQgLSBlbGVtZW50SGVpZ2h0ICsgaXRlbUhlaWdodCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRibHVyOiBmdW5jdGlvbiggZXZlbnQsIGZyb21Gb2N1cyApIHtcblx0XHRpZiAoICFmcm9tRm9jdXMgKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXIgKTtcblx0XHR9XG5cblx0XHRpZiAoICF0aGlzLmFjdGl2ZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5hY3RpdmUuY2hpbGRyZW4oIFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKSxcblx0XHRcdG51bGwsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwiYmx1clwiLCBldmVudCwgeyBpdGVtOiB0aGlzLmFjdGl2ZSB9ICk7XG5cdFx0dGhpcy5hY3RpdmUgPSBudWxsO1xuXHR9LFxuXG5cdF9zdGFydE9wZW5pbmc6IGZ1bmN0aW9uKCBzdWJtZW51ICkge1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy50aW1lciApO1xuXG5cdFx0Ly8gRG9uJ3Qgb3BlbiBpZiBhbHJlYWR5IG9wZW4gZml4ZXMgYSBGaXJlZm94IGJ1ZyB0aGF0IGNhdXNlZCBhIC41IHBpeGVsXG5cdFx0Ly8gc2hpZnQgaW4gdGhlIHN1Ym1lbnUgcG9zaXRpb24gd2hlbiBtb3VzaW5nIG92ZXIgdGhlIGNhcmV0IGljb25cblx0XHRpZiAoIHN1Ym1lbnUuYXR0ciggXCJhcmlhLWhpZGRlblwiICkgIT09IFwidHJ1ZVwiICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMudGltZXIgPSB0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdFx0dGhpcy5fb3Blbiggc3VibWVudSApO1xuXHRcdH0sIHRoaXMuZGVsYXkgKTtcblx0fSxcblxuXHRfb3BlbjogZnVuY3Rpb24oIHN1Ym1lbnUgKSB7XG5cdFx0dmFyIHBvc2l0aW9uID0gJC5leHRlbmQoIHtcblx0XHRcdG9mOiB0aGlzLmFjdGl2ZVxuXHRcdH0sIHRoaXMub3B0aW9ucy5wb3NpdGlvbiApO1xuXG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnRpbWVyICk7XG5cdFx0dGhpcy5lbGVtZW50LmZpbmQoIFwiLnVpLW1lbnVcIiApLm5vdCggc3VibWVudS5wYXJlbnRzKCBcIi51aS1tZW51XCIgKSApXG5cdFx0XHQuaGlkZSgpXG5cdFx0XHQuYXR0ciggXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIiApO1xuXG5cdFx0c3VibWVudVxuXHRcdFx0LnNob3coKVxuXHRcdFx0LnJlbW92ZUF0dHIoIFwiYXJpYS1oaWRkZW5cIiApXG5cdFx0XHQuYXR0ciggXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiIClcblx0XHRcdC5wb3NpdGlvbiggcG9zaXRpb24gKTtcblx0fSxcblxuXHRjb2xsYXBzZUFsbDogZnVuY3Rpb24oIGV2ZW50LCBhbGwgKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnRpbWVyICk7XG5cdFx0dGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgd2Ugd2VyZSBwYXNzZWQgYW4gZXZlbnQsIGxvb2sgZm9yIHRoZSBzdWJtZW51IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50XG5cdFx0XHR2YXIgY3VycmVudE1lbnUgPSBhbGwgPyB0aGlzLmVsZW1lbnQgOlxuXHRcdFx0XHQkKCBldmVudCAmJiBldmVudC50YXJnZXQgKS5jbG9zZXN0KCB0aGlzLmVsZW1lbnQuZmluZCggXCIudWktbWVudVwiICkgKTtcblxuXHRcdFx0Ly8gSWYgd2UgZm91bmQgbm8gdmFsaWQgc3VibWVudSBhbmNlc3RvciwgdXNlIHRoZSBtYWluIG1lbnUgdG8gY2xvc2UgYWxsXG5cdFx0XHQvLyBzdWIgbWVudXMgYW55d2F5XG5cdFx0XHRpZiAoICFjdXJyZW50TWVudS5sZW5ndGggKSB7XG5cdFx0XHRcdGN1cnJlbnRNZW51ID0gdGhpcy5lbGVtZW50O1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9jbG9zZSggY3VycmVudE1lbnUgKTtcblxuXHRcdFx0dGhpcy5ibHVyKCBldmVudCApO1xuXG5cdFx0XHQvLyBXb3JrIGFyb3VuZCBhY3RpdmUgaXRlbSBzdGF5aW5nIGFjdGl2ZSBhZnRlciBtZW51IGlzIGJsdXJyZWRcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBjdXJyZW50TWVudS5maW5kKCBcIi51aS1zdGF0ZS1hY3RpdmVcIiApLCBudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cblx0XHRcdHRoaXMuYWN0aXZlTWVudSA9IGN1cnJlbnRNZW51O1xuXHRcdH0sIHRoaXMuZGVsYXkgKTtcblx0fSxcblxuXHQvLyBXaXRoIG5vIGFyZ3VtZW50cywgY2xvc2VzIHRoZSBjdXJyZW50bHkgYWN0aXZlIG1lbnUgLSBpZiBub3RoaW5nIGlzIGFjdGl2ZVxuXHQvLyBpdCBjbG9zZXMgYWxsIG1lbnVzLiAgSWYgcGFzc2VkIGFuIGFyZ3VtZW50LCBpdCB3aWxsIHNlYXJjaCBmb3IgbWVudXMgQkVMT1dcblx0X2Nsb3NlOiBmdW5jdGlvbiggc3RhcnRNZW51ICkge1xuXHRcdGlmICggIXN0YXJ0TWVudSApIHtcblx0XHRcdHN0YXJ0TWVudSA9IHRoaXMuYWN0aXZlID8gdGhpcy5hY3RpdmUucGFyZW50KCkgOiB0aGlzLmVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0c3RhcnRNZW51LmZpbmQoIFwiLnVpLW1lbnVcIiApXG5cdFx0XHQuaGlkZSgpXG5cdFx0XHQuYXR0ciggXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIiApXG5cdFx0XHQuYXR0ciggXCJhcmlhLWV4cGFuZGVkXCIsIFwiZmFsc2VcIiApO1xuXHR9LFxuXG5cdF9jbG9zZU9uRG9jdW1lbnRDbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHJldHVybiAhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktbWVudVwiICkubGVuZ3RoO1xuXHR9LFxuXG5cdF9pc0RpdmlkZXI6IGZ1bmN0aW9uKCBpdGVtICkge1xuXG5cdFx0Ly8gTWF0Y2ggaHlwaGVuLCBlbSBkYXNoLCBlbiBkYXNoXG5cdFx0cmV0dXJuICEvW15cXC1cXHUyMDE0XFx1MjAxM1xcc10vLnRlc3QoIGl0ZW0udGV4dCgpICk7XG5cdH0sXG5cblx0Y29sbGFwc2U6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgbmV3SXRlbSA9IHRoaXMuYWN0aXZlICYmXG5cdFx0XHR0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCBcIi51aS1tZW51LWl0ZW1cIiwgdGhpcy5lbGVtZW50ICk7XG5cdFx0aWYgKCBuZXdJdGVtICYmIG5ld0l0ZW0ubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5fY2xvc2UoKTtcblx0XHRcdHRoaXMuZm9jdXMoIGV2ZW50LCBuZXdJdGVtICk7XG5cdFx0fVxuXHR9LFxuXG5cdGV4cGFuZDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBuZXdJdGVtID0gdGhpcy5hY3RpdmUgJiZcblx0XHRcdHRoaXMuYWN0aXZlXG5cdFx0XHRcdC5jaGlsZHJlbiggXCIudWktbWVudSBcIiApXG5cdFx0XHRcdFx0LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApXG5cdFx0XHRcdFx0XHQuZmlyc3QoKTtcblxuXHRcdGlmICggbmV3SXRlbSAmJiBuZXdJdGVtLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuX29wZW4oIG5ld0l0ZW0ucGFyZW50KCkgKTtcblxuXHRcdFx0Ly8gRGVsYXkgc28gRmlyZWZveCB3aWxsIG5vdCBoaWRlIGFjdGl2ZWRlc2NlbmRhbnQgY2hhbmdlIGluIGV4cGFuZGluZyBzdWJtZW51IGZyb20gQVRcblx0XHRcdHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyggZXZlbnQsIG5ld0l0ZW0gKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0bmV4dDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuX21vdmUoIFwibmV4dFwiLCBcImZpcnN0XCIsIGV2ZW50ICk7XG5cdH0sXG5cblx0cHJldmlvdXM6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR0aGlzLl9tb3ZlKCBcInByZXZcIiwgXCJsYXN0XCIsIGV2ZW50ICk7XG5cdH0sXG5cblx0aXNGaXJzdEl0ZW06IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUucHJldkFsbCggXCIudWktbWVudS1pdGVtXCIgKS5sZW5ndGg7XG5cdH0sXG5cblx0aXNMYXN0SXRlbTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlICYmICF0aGlzLmFjdGl2ZS5uZXh0QWxsKCBcIi51aS1tZW51LWl0ZW1cIiApLmxlbmd0aDtcblx0fSxcblxuXHRfbW92ZTogZnVuY3Rpb24oIGRpcmVjdGlvbiwgZmlsdGVyLCBldmVudCApIHtcblx0XHR2YXIgbmV4dDtcblx0XHRpZiAoIHRoaXMuYWN0aXZlICkge1xuXHRcdFx0aWYgKCBkaXJlY3Rpb24gPT09IFwiZmlyc3RcIiB8fCBkaXJlY3Rpb24gPT09IFwibGFzdFwiICkge1xuXHRcdFx0XHRuZXh0ID0gdGhpcy5hY3RpdmVcblx0XHRcdFx0XHRbIGRpcmVjdGlvbiA9PT0gXCJmaXJzdFwiID8gXCJwcmV2QWxsXCIgOiBcIm5leHRBbGxcIiBdKCBcIi51aS1tZW51LWl0ZW1cIiApXG5cdFx0XHRcdFx0LmVxKCAtMSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV4dCA9IHRoaXMuYWN0aXZlXG5cdFx0XHRcdFx0WyBkaXJlY3Rpb24gKyBcIkFsbFwiIF0oIFwiLnVpLW1lbnUtaXRlbVwiIClcblx0XHRcdFx0XHQuZXEoIDAgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCAhbmV4dCB8fCAhbmV4dC5sZW5ndGggfHwgIXRoaXMuYWN0aXZlICkge1xuXHRcdFx0bmV4dCA9IHRoaXMuYWN0aXZlTWVudS5maW5kKCB0aGlzLm9wdGlvbnMuaXRlbXMgKVsgZmlsdGVyIF0oKTtcblx0XHR9XG5cblx0XHR0aGlzLmZvY3VzKCBldmVudCwgbmV4dCApO1xuXHR9LFxuXG5cdG5leHRQYWdlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGl0ZW0sIGJhc2UsIGhlaWdodDtcblxuXHRcdGlmICggIXRoaXMuYWN0aXZlICkge1xuXHRcdFx0dGhpcy5uZXh0KCBldmVudCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuaXNMYXN0SXRlbSgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX2hhc1Njcm9sbCgpICkge1xuXHRcdFx0YmFzZSA9IHRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcDtcblx0XHRcdGhlaWdodCA9IHRoaXMuZWxlbWVudC5oZWlnaHQoKTtcblx0XHRcdHRoaXMuYWN0aXZlLm5leHRBbGwoIFwiLnVpLW1lbnUtaXRlbVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGl0ZW0gPSAkKCB0aGlzICk7XG5cdFx0XHRcdHJldHVybiBpdGVtLm9mZnNldCgpLnRvcCAtIGJhc2UgLSBoZWlnaHQgPCAwO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgaXRlbSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgdGhpcy5hY3RpdmVNZW51LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApXG5cdFx0XHRcdFsgIXRoaXMuYWN0aXZlID8gXCJmaXJzdFwiIDogXCJsYXN0XCIgXSgpICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZXZpb3VzUGFnZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBpdGVtLCBiYXNlLCBoZWlnaHQ7XG5cdFx0aWYgKCAhdGhpcy5hY3RpdmUgKSB7XG5cdFx0XHR0aGlzLm5leHQoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggdGhpcy5pc0ZpcnN0SXRlbSgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuX2hhc1Njcm9sbCgpICkge1xuXHRcdFx0YmFzZSA9IHRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcDtcblx0XHRcdGhlaWdodCA9IHRoaXMuZWxlbWVudC5oZWlnaHQoKTtcblx0XHRcdHRoaXMuYWN0aXZlLnByZXZBbGwoIFwiLnVpLW1lbnUtaXRlbVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGl0ZW0gPSAkKCB0aGlzICk7XG5cdFx0XHRcdHJldHVybiBpdGVtLm9mZnNldCgpLnRvcCAtIGJhc2UgKyBoZWlnaHQgPiAwO1xuXHRcdFx0fSApO1xuXG5cdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgaXRlbSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKCBldmVudCwgdGhpcy5hY3RpdmVNZW51LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApLmZpcnN0KCkgKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhc1Njcm9sbDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIDwgdGhpcy5lbGVtZW50LnByb3AoIFwic2Nyb2xsSGVpZ2h0XCIgKTtcblx0fSxcblxuXHRzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdC8vIFRPRE86IEl0IHNob3VsZCBuZXZlciBiZSBwb3NzaWJsZSB0byBub3QgaGF2ZSBhbiBhY3RpdmUgaXRlbSBhdCB0aGlzXG5cdFx0Ly8gcG9pbnQsIGJ1dCB0aGUgdGVzdHMgZG9uJ3QgdHJpZ2dlciBtb3VzZWVudGVyIGJlZm9yZSBjbGljay5cblx0XHR0aGlzLmFjdGl2ZSA9IHRoaXMuYWN0aXZlIHx8ICQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIFwiLnVpLW1lbnUtaXRlbVwiICk7XG5cdFx0dmFyIHVpID0geyBpdGVtOiB0aGlzLmFjdGl2ZSB9O1xuXHRcdGlmICggIXRoaXMuYWN0aXZlLmhhcyggXCIudWktbWVudVwiICkubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5jb2xsYXBzZUFsbCggZXZlbnQsIHRydWUgKTtcblx0XHR9XG5cdFx0dGhpcy5fdHJpZ2dlciggXCJzZWxlY3RcIiwgZXZlbnQsIHVpICk7XG5cdH0sXG5cblx0X2ZpbHRlck1lbnVJdGVtczogZnVuY3Rpb24oIGNoYXJhY3RlciApIHtcblx0XHR2YXIgZXNjYXBlZENoYXJhY3RlciA9IGNoYXJhY3Rlci5yZXBsYWNlKCAvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csIFwiXFxcXCQmXCIgKSxcblx0XHRcdHJlZ2V4ID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBlc2NhcGVkQ2hhcmFjdGVyLCBcImlcIiApO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlTWVudVxuXHRcdFx0LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcyApXG5cblx0XHRcdFx0Ly8gT25seSBtYXRjaCBvbiBpdGVtcywgbm90IGRpdmlkZXJzIG9yIG90aGVyIGNvbnRlbnQgKCMxMDU3MSlcblx0XHRcdFx0LmZpbHRlciggXCIudWktbWVudS1pdGVtXCIgKVxuXHRcdFx0XHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlZ2V4LnRlc3QoXG5cdFx0XHRcdFx0XHRcdCQudHJpbSggJCggdGhpcyApLmNoaWxkcmVuKCBcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiICkudGV4dCgpICkgKTtcblx0XHRcdFx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBBdXRvY29tcGxldGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEF1dG9jb21wbGV0ZVxuLy8+Pmdyb3VwOiBXaWRnZXRzXG4vLz4+ZGVzY3JpcHRpb246IExpc3RzIHN1Z2dlc3RlZCB3b3JkcyBhcyB0aGUgdXNlciBpcyB0eXBpbmcuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vYXV0b2NvbXBsZXRlL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2F1dG9jb21wbGV0ZS9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2F1dG9jb21wbGV0ZS5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkuYXV0b2NvbXBsZXRlXCIsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0ZGVmYXVsdEVsZW1lbnQ6IFwiPGlucHV0PlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0YXBwZW5kVG86IG51bGwsXG5cdFx0YXV0b0ZvY3VzOiBmYWxzZSxcblx0XHRkZWxheTogMzAwLFxuXHRcdG1pbkxlbmd0aDogMSxcblx0XHRwb3NpdGlvbjoge1xuXHRcdFx0bXk6IFwibGVmdCB0b3BcIixcblx0XHRcdGF0OiBcImxlZnQgYm90dG9tXCIsXG5cdFx0XHRjb2xsaXNpb246IFwibm9uZVwiXG5cdFx0fSxcblx0XHRzb3VyY2U6IG51bGwsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjaGFuZ2U6IG51bGwsXG5cdFx0Y2xvc2U6IG51bGwsXG5cdFx0Zm9jdXM6IG51bGwsXG5cdFx0b3BlbjogbnVsbCxcblx0XHRyZXNwb25zZTogbnVsbCxcblx0XHRzZWFyY2g6IG51bGwsXG5cdFx0c2VsZWN0OiBudWxsXG5cdH0sXG5cblx0cmVxdWVzdEluZGV4OiAwLFxuXHRwZW5kaW5nOiAwLFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gU29tZSBicm93c2VycyBvbmx5IHJlcGVhdCBrZXlkb3duIGV2ZW50cywgbm90IGtleXByZXNzIGV2ZW50cyxcblx0XHQvLyBzbyB3ZSB1c2UgdGhlIHN1cHByZXNzS2V5UHJlc3MgZmxhZyB0byBkZXRlcm1pbmUgaWYgd2UndmUgYWxyZWFkeVxuXHRcdC8vIGhhbmRsZWQgdGhlIGtleWRvd24gZXZlbnQuICM3MjY5XG5cdFx0Ly8gVW5mb3J0dW5hdGVseSB0aGUgY29kZSBmb3IgJiBpbiBrZXlwcmVzcyBpcyB0aGUgc2FtZSBhcyB0aGUgdXAgYXJyb3csXG5cdFx0Ly8gc28gd2UgdXNlIHRoZSBzdXBwcmVzc0tleVByZXNzUmVwZWF0IGZsYWcgdG8gYXZvaWQgaGFuZGxpbmcga2V5cHJlc3Ncblx0XHQvLyBldmVudHMgd2hlbiB3ZSBrbm93IHRoZSBrZXlkb3duIGV2ZW50IHdhcyB1c2VkIHRvIG1vZGlmeSB0aGVcblx0XHQvLyBzZWFyY2ggdGVybS4gIzc3OTlcblx0XHR2YXIgc3VwcHJlc3NLZXlQcmVzcywgc3VwcHJlc3NLZXlQcmVzc1JlcGVhdCwgc3VwcHJlc3NJbnB1dCxcblx0XHRcdG5vZGVOYW1lID0gdGhpcy5lbGVtZW50WyAwIF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdGlzVGV4dGFyZWEgPSBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiLFxuXHRcdFx0aXNJbnB1dCA9IG5vZGVOYW1lID09PSBcImlucHV0XCI7XG5cblx0XHQvLyBUZXh0YXJlYXMgYXJlIGFsd2F5cyBtdWx0aS1saW5lXG5cdFx0Ly8gSW5wdXRzIGFyZSBhbHdheXMgc2luZ2xlLWxpbmUsIGV2ZW4gaWYgaW5zaWRlIGEgY29udGVudEVkaXRhYmxlIGVsZW1lbnRcblx0XHQvLyBJRSBhbHNvIHRyZWF0cyBpbnB1dHMgYXMgY29udGVudEVkaXRhYmxlXG5cdFx0Ly8gQWxsIG90aGVyIGVsZW1lbnQgdHlwZXMgYXJlIGRldGVybWluZWQgYnkgd2hldGhlciBvciBub3QgdGhleSdyZSBjb250ZW50RWRpdGFibGVcblx0XHR0aGlzLmlzTXVsdGlMaW5lID0gaXNUZXh0YXJlYSB8fCAhaXNJbnB1dCAmJiB0aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSggdGhpcy5lbGVtZW50ICk7XG5cblx0XHR0aGlzLnZhbHVlTWV0aG9kID0gdGhpcy5lbGVtZW50WyBpc1RleHRhcmVhIHx8IGlzSW5wdXQgPyBcInZhbFwiIDogXCJ0ZXh0XCIgXTtcblx0XHR0aGlzLmlzTmV3TWVudSA9IHRydWU7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1hdXRvY29tcGxldGUtaW5wdXRcIiApO1xuXHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiICk7XG5cblx0XHR0aGlzLl9vbiggdGhpcy5lbGVtZW50LCB7XG5cdFx0XHRrZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5lbGVtZW50LnByb3AoIFwicmVhZE9ubHlcIiApICkge1xuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHN1cHByZXNzSW5wdXQgPSB0cnVlO1xuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3NSZXBlYXQgPSB0cnVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSBmYWxzZTtcblx0XHRcdFx0c3VwcHJlc3NJbnB1dCA9IGZhbHNlO1xuXHRcdFx0XHRzdXBwcmVzc0tleVByZXNzUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHRcdHZhciBrZXlDb2RlID0gJC51aS5rZXlDb2RlO1xuXHRcdFx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuUEFHRV9VUDpcblx0XHRcdFx0XHRzdXBwcmVzc0tleVByZXNzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9tb3ZlKCBcInByZXZpb3VzUGFnZVwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuUEFHRV9ET1dOOlxuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwibmV4dFBhZ2VcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLlVQOlxuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX2tleUV2ZW50KCBcInByZXZpb3VzXCIsIGV2ZW50ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5ET1dOOlxuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuX2tleUV2ZW50KCBcIm5leHRcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLkVOVEVSOlxuXG5cdFx0XHRcdFx0Ly8gd2hlbiBtZW51IGlzIG9wZW4gYW5kIGhhcyBmb2N1c1xuXHRcdFx0XHRcdGlmICggdGhpcy5tZW51LmFjdGl2ZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gIzYwNTUgLSBPcGVyYSBzdGlsbCBhbGxvd3MgdGhlIGtleXByZXNzIHRvIG9jY3VyXG5cdFx0XHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgZm9ybXMgdG8gc3VibWl0XG5cdFx0XHRcdFx0XHRzdXBwcmVzc0tleVByZXNzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLm1lbnUuc2VsZWN0KCBldmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLlRBQjpcblx0XHRcdFx0XHRpZiAoIHRoaXMubWVudS5hY3RpdmUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1lbnUuc2VsZWN0KCBldmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLkVTQ0FQRTpcblx0XHRcdFx0XHRpZiAoIHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSApIHtcblx0XHRcdFx0XHRcdGlmICggIXRoaXMuaXNNdWx0aUxpbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3ZhbHVlKCB0aGlzLnRlcm0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cblx0XHRcdFx0XHRcdC8vIERpZmZlcmVudCBicm93c2VycyBoYXZlIGRpZmZlcmVudCBkZWZhdWx0IGJlaGF2aW9yIGZvciBlc2NhcGVcblx0XHRcdFx0XHRcdC8vIFNpbmdsZSBwcmVzcyBjYW4gbWVhbiB1bmRvIG9yIGNsZWFyXG5cdFx0XHRcdFx0XHQvLyBEb3VibGUgcHJlc3MgaW4gSUUgbWVhbnMgY2xlYXIgdGhlIHdob2xlIGZvcm1cblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3NSZXBlYXQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly8gc2VhcmNoIHRpbWVvdXQgc2hvdWxkIGJlIHRyaWdnZXJlZCBiZWZvcmUgdGhlIGlucHV0IHZhbHVlIGlzIGNoYW5nZWRcblx0XHRcdFx0XHR0aGlzLl9zZWFyY2hUaW1lb3V0KCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0a2V5cHJlc3M6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0aWYgKCBzdXBwcmVzc0tleVByZXNzICkge1xuXHRcdFx0XHRcdHN1cHByZXNzS2V5UHJlc3MgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoICF0aGlzLmlzTXVsdGlMaW5lIHx8IHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSApIHtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIHN1cHByZXNzS2V5UHJlc3NSZXBlYXQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVwbGljYXRlIHNvbWUga2V5IGhhbmRsZXJzIHRvIGFsbG93IHRoZW0gdG8gcmVwZWF0IGluIEZpcmVmb3ggYW5kIE9wZXJhXG5cdFx0XHRcdHZhciBrZXlDb2RlID0gJC51aS5rZXlDb2RlO1xuXHRcdFx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuUEFHRV9VUDpcblx0XHRcdFx0XHR0aGlzLl9tb3ZlKCBcInByZXZpb3VzUGFnZVwiLCBldmVudCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGtleUNvZGUuUEFHRV9ET1dOOlxuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwibmV4dFBhZ2VcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBrZXlDb2RlLlVQOlxuXHRcdFx0XHRcdHRoaXMuX2tleUV2ZW50KCBcInByZXZpb3VzXCIsIGV2ZW50ICk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2Uga2V5Q29kZS5ET1dOOlxuXHRcdFx0XHRcdHRoaXMuX2tleUV2ZW50KCBcIm5leHRcIiwgZXZlbnQgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGlucHV0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggc3VwcHJlc3NJbnB1dCApIHtcblx0XHRcdFx0XHRzdXBwcmVzc0lucHV0ID0gZmFsc2U7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fc2VhcmNoVGltZW91dCggZXZlbnQgKTtcblx0XHRcdH0sXG5cdFx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcblx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IHRoaXMuX3ZhbHVlKCk7XG5cdFx0XHR9LFxuXHRcdFx0Ymx1cjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuY2FuY2VsQmx1ciApIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5jYW5jZWxCbHVyO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5zZWFyY2hpbmcgKTtcblx0XHRcdFx0dGhpcy5jbG9zZSggZXZlbnQgKTtcblx0XHRcdFx0dGhpcy5fY2hhbmdlKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdHRoaXMuX2luaXRTb3VyY2UoKTtcblx0XHR0aGlzLm1lbnUgPSAkKCBcIjx1bD5cIiApXG5cdFx0XHQuYXBwZW5kVG8oIHRoaXMuX2FwcGVuZFRvKCkgKVxuXHRcdFx0Lm1lbnUoIHtcblxuXHRcdFx0XHQvLyBkaXNhYmxlIEFSSUEgc3VwcG9ydCwgdGhlIGxpdmUgcmVnaW9uIHRha2VzIGNhcmUgb2YgdGhhdFxuXHRcdFx0XHRyb2xlOiBudWxsXG5cdFx0XHR9IClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5tZW51KCBcImluc3RhbmNlXCIgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLm1lbnUuZWxlbWVudCwgXCJ1aS1hdXRvY29tcGxldGVcIiwgXCJ1aS1mcm9udFwiICk7XG5cdFx0dGhpcy5fb24oIHRoaXMubWVudS5lbGVtZW50LCB7XG5cdFx0XHRtb3VzZWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBwcmV2ZW50IG1vdmluZyBmb2N1cyBvdXQgb2YgdGhlIHRleHQgZmllbGRcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHQvLyBJRSBkb2Vzbid0IHByZXZlbnQgbW92aW5nIGZvY3VzIGV2ZW4gd2l0aCBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdC8vIHNvIHdlIHNldCBhIGZsYWcgdG8ga25vdyB3aGVuIHdlIHNob3VsZCBpZ25vcmUgdGhlIGJsdXIgZXZlbnRcblx0XHRcdFx0dGhpcy5jYW5jZWxCbHVyID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0XHQvLyBSaWdodCBjbGlja2luZyBhIG1lbnUgaXRlbSBvciBzZWxlY3RpbmcgdGV4dCBmcm9tIHRoZSBtZW51IGl0ZW1zIHdpbGxcblx0XHRcdFx0XHQvLyByZXN1bHQgaW4gZm9jdXMgbW92aW5nIG91dCBvZiB0aGUgaW5wdXQuIEhvd2V2ZXIsIHdlJ3ZlIGFscmVhZHkgcmVjZWl2ZWRcblx0XHRcdFx0XHQvLyBhbmQgaWdub3JlZCB0aGUgYmx1ciBldmVudCBiZWNhdXNlIG9mIHRoZSBjYW5jZWxCbHVyIGZsYWcgc2V0IGFib3ZlLiBTb1xuXHRcdFx0XHRcdC8vIHdlIHJlc3RvcmUgZm9jdXMgdG8gZW5zdXJlIHRoYXQgdGhlIG1lbnUgY2xvc2VzIHByb3Blcmx5IGJhc2VkIG9uIHRoZSB1c2VyJ3Ncblx0XHRcdFx0XHQvLyBuZXh0IGFjdGlvbnMuXG5cdFx0XHRcdFx0aWYgKCB0aGlzLmVsZW1lbnRbIDAgXSAhPT0gJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9LFxuXHRcdFx0bWVudWZvY3VzOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR2YXIgbGFiZWwsIGl0ZW07XG5cblx0XHRcdFx0Ly8gc3VwcG9ydDogRmlyZWZveFxuXHRcdFx0XHQvLyBQcmV2ZW50IGFjY2lkZW50YWwgYWN0aXZhdGlvbiBvZiBtZW51IGl0ZW1zIGluIEZpcmVmb3ggKCM3MDI0ICM5MTE4KVxuXHRcdFx0XHRpZiAoIHRoaXMuaXNOZXdNZW51ICkge1xuXHRcdFx0XHRcdHRoaXMuaXNOZXdNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKCBldmVudC5vcmlnaW5hbEV2ZW50ICYmIC9ebW91c2UvLnRlc3QoIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSApICkge1xuXHRcdFx0XHRcdFx0dGhpcy5tZW51LmJsdXIoKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5kb2N1bWVudC5vbmUoIFwibW91c2Vtb3ZlXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHQkKCBldmVudC50YXJnZXQgKS50cmlnZ2VyKCBldmVudC5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtID0gdWkuaXRlbS5kYXRhKCBcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIgKTtcblx0XHRcdFx0aWYgKCBmYWxzZSAhPT0gdGhpcy5fdHJpZ2dlciggXCJmb2N1c1wiLCBldmVudCwgeyBpdGVtOiBpdGVtIH0gKSApIHtcblxuXHRcdFx0XHRcdC8vIHVzZSB2YWx1ZSB0byBtYXRjaCB3aGF0IHdpbGwgZW5kIHVwIGluIHRoZSBpbnB1dCwgaWYgaXQgd2FzIGEga2V5IGV2ZW50XG5cdFx0XHRcdFx0aWYgKCBldmVudC5vcmlnaW5hbEV2ZW50ICYmIC9ea2V5Ly50ZXN0KCBldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgKSApIHtcblx0XHRcdFx0XHRcdHRoaXMuX3ZhbHVlKCBpdGVtLnZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQW5ub3VuY2UgdGhlIHZhbHVlIGluIHRoZSBsaXZlUmVnaW9uXG5cdFx0XHRcdGxhYmVsID0gdWkuaXRlbS5hdHRyKCBcImFyaWEtbGFiZWxcIiApIHx8IGl0ZW0udmFsdWU7XG5cdFx0XHRcdGlmICggbGFiZWwgJiYgJC50cmltKCBsYWJlbCApLmxlbmd0aCApIHtcblx0XHRcdFx0XHR0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCk7XG5cdFx0XHRcdFx0JCggXCI8ZGl2PlwiICkudGV4dCggbGFiZWwgKS5hcHBlbmRUbyggdGhpcy5saXZlUmVnaW9uICk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRtZW51c2VsZWN0OiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR2YXIgaXRlbSA9IHVpLml0ZW0uZGF0YSggXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiICksXG5cdFx0XHRcdFx0cHJldmlvdXMgPSB0aGlzLnByZXZpb3VzO1xuXG5cdFx0XHRcdC8vIE9ubHkgdHJpZ2dlciB3aGVuIGZvY3VzIHdhcyBsb3N0IChjbGljayBvbiBtZW51KVxuXHRcdFx0XHRpZiAoIHRoaXMuZWxlbWVudFsgMCBdICE9PSAkLnVpLnNhZmVBY3RpdmVFbGVtZW50KCB0aGlzLmRvY3VtZW50WyAwIF0gKSApIHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IHByZXZpb3VzO1xuXG5cdFx0XHRcdFx0Ly8gIzYxMDkgLSBJRSB0cmlnZ2VycyB0d28gZm9jdXMgZXZlbnRzIGFuZCB0aGUgc2Vjb25kXG5cdFx0XHRcdFx0Ly8gaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBwcmV2aW91c1xuXHRcdFx0XHRcdC8vIHRlcm0gc3luY2hyb25vdXNseSBhbmQgYXN5bmNocm9ub3VzbHkgOi0oXG5cdFx0XHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IHByZXZpb3VzO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggZmFsc2UgIT09IHRoaXMuX3RyaWdnZXIoIFwic2VsZWN0XCIsIGV2ZW50LCB7IGl0ZW06IGl0ZW0gfSApICkge1xuXHRcdFx0XHRcdHRoaXMuX3ZhbHVlKCBpdGVtLnZhbHVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyByZXNldCB0aGUgdGVybSBhZnRlciB0aGUgc2VsZWN0IGV2ZW50XG5cdFx0XHRcdC8vIHRoaXMgYWxsb3dzIGN1c3RvbSBzZWxlY3QgaGFuZGxpbmcgdG8gd29yayBwcm9wZXJseVxuXHRcdFx0XHR0aGlzLnRlcm0gPSB0aGlzLl92YWx1ZSgpO1xuXG5cdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLmxpdmVSZWdpb24gPSAkKCBcIjxkaXY+XCIsIHtcblx0XHRcdHJvbGU6IFwic3RhdHVzXCIsXG5cdFx0XHRcImFyaWEtbGl2ZVwiOiBcImFzc2VydGl2ZVwiLFxuXHRcdFx0XCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zXCJcblx0XHR9IClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy5kb2N1bWVudFsgMCBdLmJvZHkgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxpdmVSZWdpb24sIG51bGwsIFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIgKTtcblxuXHRcdC8vIFR1cm5pbmcgb2ZmIGF1dG9jb21wbGV0ZSBwcmV2ZW50cyB0aGUgYnJvd3NlciBmcm9tIHJlbWVtYmVyaW5nIHRoZVxuXHRcdC8vIHZhbHVlIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIGhpc3RvcnksIHNvIHdlIHJlLWVuYWJsZSBhdXRvY29tcGxldGVcblx0XHQvLyBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQuICM3NzkwXG5cdFx0dGhpcy5fb24oIHRoaXMud2luZG93LCB7XG5cdFx0XHRiZWZvcmV1bmxvYWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJhdXRvY29tcGxldGVcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLnNlYXJjaGluZyApO1xuXHRcdHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCBcImF1dG9jb21wbGV0ZVwiICk7XG5cdFx0dGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0dGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cdFx0aWYgKCBrZXkgPT09IFwic291cmNlXCIgKSB7XG5cdFx0XHR0aGlzLl9pbml0U291cmNlKCk7XG5cdFx0fVxuXHRcdGlmICgga2V5ID09PSBcImFwcGVuZFRvXCIgKSB7XG5cdFx0XHR0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oKSApO1xuXHRcdH1cblx0XHRpZiAoIGtleSA9PT0gXCJkaXNhYmxlZFwiICYmIHZhbHVlICYmIHRoaXMueGhyICkge1xuXHRcdFx0dGhpcy54aHIuYWJvcnQoKTtcblx0XHR9XG5cdH0sXG5cblx0X2lzRXZlbnRUYXJnZXRJbldpZGdldDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBtZW51RWxlbWVudCA9IHRoaXMubWVudS5lbGVtZW50WyAwIF07XG5cblx0XHRyZXR1cm4gZXZlbnQudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnRbIDAgXSB8fFxuXHRcdFx0ZXZlbnQudGFyZ2V0ID09PSBtZW51RWxlbWVudCB8fFxuXHRcdFx0JC5jb250YWlucyggbWVudUVsZW1lbnQsIGV2ZW50LnRhcmdldCApO1xuXHR9LFxuXG5cdF9jbG9zZU9uQ2xpY2tPdXRzaWRlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCAhdGhpcy5faXNFdmVudFRhcmdldEluV2lkZ2V0KCBldmVudCApICkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fSxcblxuXHRfYXBwZW5kVG86IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5vcHRpb25zLmFwcGVuZFRvO1xuXG5cdFx0aWYgKCBlbGVtZW50ICkge1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQuanF1ZXJ5IHx8IGVsZW1lbnQubm9kZVR5cGUgP1xuXHRcdFx0XHQkKCBlbGVtZW50ICkgOlxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LmZpbmQoIGVsZW1lbnQgKS5lcSggMCApO1xuXHRcdH1cblxuXHRcdGlmICggIWVsZW1lbnQgfHwgIWVsZW1lbnRbIDAgXSApIHtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY2xvc2VzdCggXCIudWktZnJvbnQsIGRpYWxvZ1wiICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhZWxlbWVudC5sZW5ndGggKSB7XG5cdFx0XHRlbGVtZW50ID0gdGhpcy5kb2N1bWVudFsgMCBdLmJvZHk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH0sXG5cblx0X2luaXRTb3VyY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhcnJheSwgdXJsLFxuXHRcdFx0dGhhdCA9IHRoaXM7XG5cdFx0aWYgKCAkLmlzQXJyYXkoIHRoaXMub3B0aW9ucy5zb3VyY2UgKSApIHtcblx0XHRcdGFycmF5ID0gdGhpcy5vcHRpb25zLnNvdXJjZTtcblx0XHRcdHRoaXMuc291cmNlID0gZnVuY3Rpb24oIHJlcXVlc3QsIHJlc3BvbnNlICkge1xuXHRcdFx0XHRyZXNwb25zZSggJC51aS5hdXRvY29tcGxldGUuZmlsdGVyKCBhcnJheSwgcmVxdWVzdC50ZXJtICkgKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmICggdHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2UgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR1cmwgPSB0aGlzLm9wdGlvbnMuc291cmNlO1xuXHRcdFx0dGhpcy5zb3VyY2UgPSBmdW5jdGlvbiggcmVxdWVzdCwgcmVzcG9uc2UgKSB7XG5cdFx0XHRcdGlmICggdGhhdC54aHIgKSB7XG5cdFx0XHRcdFx0dGhhdC54aHIuYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGF0LnhociA9ICQuYWpheCgge1xuXHRcdFx0XHRcdHVybDogdXJsLFxuXHRcdFx0XHRcdGRhdGE6IHJlcXVlc3QsXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UoIGRhdGEgKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlKCBbXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zb3VyY2UgPSB0aGlzLm9wdGlvbnMuc291cmNlO1xuXHRcdH1cblx0fSxcblxuXHRfc2VhcmNoVGltZW91dDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy5zZWFyY2hpbmcgKTtcblx0XHR0aGlzLnNlYXJjaGluZyA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU2VhcmNoIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgb3IgaWYgdGhlIHVzZXIgcmV0eXBlcyB0aGUgc2FtZSB2YWx1ZSAoc2VlICM3NDM0KVxuXHRcdFx0dmFyIGVxdWFsVmFsdWVzID0gdGhpcy50ZXJtID09PSB0aGlzLl92YWx1ZSgpLFxuXHRcdFx0XHRtZW51VmlzaWJsZSA9IHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSxcblx0XHRcdFx0bW9kaWZpZXJLZXkgPSBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5O1xuXG5cdFx0XHRpZiAoICFlcXVhbFZhbHVlcyB8fCAoIGVxdWFsVmFsdWVzICYmICFtZW51VmlzaWJsZSAmJiAhbW9kaWZpZXJLZXkgKSApIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdFx0XHR0aGlzLnNlYXJjaCggbnVsbCwgZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLm9wdGlvbnMuZGVsYXkgKTtcblx0fSxcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKCB2YWx1ZSwgZXZlbnQgKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiB0aGlzLl92YWx1ZSgpO1xuXG5cdFx0Ly8gQWx3YXlzIHNhdmUgdGhlIGFjdHVhbCB2YWx1ZSwgbm90IHRoZSBvbmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG5cdFx0dGhpcy50ZXJtID0gdGhpcy5fdmFsdWUoKTtcblxuXHRcdGlmICggdmFsdWUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLm1pbkxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5fdHJpZ2dlciggXCJzZWFyY2hcIiwgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3NlYXJjaCggdmFsdWUgKTtcblx0fSxcblxuXHRfc2VhcmNoOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5wZW5kaW5nKys7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiApO1xuXHRcdHRoaXMuY2FuY2VsU2VhcmNoID0gZmFsc2U7XG5cblx0XHR0aGlzLnNvdXJjZSggeyB0ZXJtOiB2YWx1ZSB9LCB0aGlzLl9yZXNwb25zZSgpICk7XG5cdH0sXG5cblx0X3Jlc3BvbnNlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5kZXggPSArK3RoaXMucmVxdWVzdEluZGV4O1xuXG5cdFx0cmV0dXJuICQucHJveHkoIGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdFx0aWYgKCBpbmRleCA9PT0gdGhpcy5yZXF1ZXN0SW5kZXggKSB7XG5cdFx0XHRcdHRoaXMuX19yZXNwb25zZSggY29udGVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnBlbmRpbmctLTtcblx0XHRcdGlmICggIXRoaXMucGVuZGluZyApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiApO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKTtcblx0fSxcblxuXHRfX3Jlc3BvbnNlOiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHRpZiAoIGNvbnRlbnQgKSB7XG5cdFx0XHRjb250ZW50ID0gdGhpcy5fbm9ybWFsaXplKCBjb250ZW50ICk7XG5cdFx0fVxuXHRcdHRoaXMuX3RyaWdnZXIoIFwicmVzcG9uc2VcIiwgbnVsbCwgeyBjb250ZW50OiBjb250ZW50IH0gKTtcblx0XHRpZiAoICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCAmJiAhdGhpcy5jYW5jZWxTZWFyY2ggKSB7XG5cdFx0XHR0aGlzLl9zdWdnZXN0KCBjb250ZW50ICk7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcIm9wZW5cIiApO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHVzZSAuX2Nsb3NlKCkgaW5zdGVhZCBvZiAuY2xvc2UoKSBzbyB3ZSBkb24ndCBjYW5jZWwgZnV0dXJlIHNlYXJjaGVzXG5cdFx0XHR0aGlzLl9jbG9zZSgpO1xuXHRcdH1cblx0fSxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuY2FuY2VsU2VhcmNoID0gdHJ1ZTtcblx0XHR0aGlzLl9jbG9zZSggZXZlbnQgKTtcblx0fSxcblxuXHRfY2xvc2U6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciB0aGF0IGNsb3NlcyB0aGUgbWVudSBvbiBvdXRzaWRlIGNsaWNrc1xuXHRcdHRoaXMuX29mZiggdGhpcy5kb2N1bWVudCwgXCJtb3VzZWRvd25cIiApO1xuXG5cdFx0aWYgKCB0aGlzLm1lbnUuZWxlbWVudC5pcyggXCI6dmlzaWJsZVwiICkgKSB7XG5cdFx0XHR0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCk7XG5cdFx0XHR0aGlzLm1lbnUuYmx1cigpO1xuXHRcdFx0dGhpcy5pc05ld01lbnUgPSB0cnVlO1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjbG9zZVwiLCBldmVudCApO1xuXHRcdH1cblx0fSxcblxuXHRfY2hhbmdlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLnByZXZpb3VzICE9PSB0aGlzLl92YWx1ZSgpICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiwgZXZlbnQsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSApO1xuXHRcdH1cblx0fSxcblxuXHRfbm9ybWFsaXplOiBmdW5jdGlvbiggaXRlbXMgKSB7XG5cblx0XHQvLyBhc3N1bWUgYWxsIGl0ZW1zIGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCB3aGVuIHRoZSBmaXJzdCBpdGVtIGlzIGNvbXBsZXRlXG5cdFx0aWYgKCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbIDAgXS5sYWJlbCAmJiBpdGVtc1sgMCBdLnZhbHVlICkge1xuXHRcdFx0cmV0dXJuIGl0ZW1zO1xuXHRcdH1cblx0XHRyZXR1cm4gJC5tYXAoIGl0ZW1zLCBmdW5jdGlvbiggaXRlbSApIHtcblx0XHRcdGlmICggdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bGFiZWw6IGl0ZW0sXG5cdFx0XHRcdFx0dmFsdWU6IGl0ZW1cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAkLmV4dGVuZCgge30sIGl0ZW0sIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW0ubGFiZWwgfHwgaXRlbS52YWx1ZSxcblx0XHRcdFx0dmFsdWU6IGl0ZW0udmFsdWUgfHwgaXRlbS5sYWJlbFxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfc3VnZ2VzdDogZnVuY3Rpb24oIGl0ZW1zICkge1xuXHRcdHZhciB1bCA9IHRoaXMubWVudS5lbGVtZW50LmVtcHR5KCk7XG5cdFx0dGhpcy5fcmVuZGVyTWVudSggdWwsIGl0ZW1zICk7XG5cdFx0dGhpcy5pc05ld01lbnUgPSB0cnVlO1xuXHRcdHRoaXMubWVudS5yZWZyZXNoKCk7XG5cblx0XHQvLyBTaXplIGFuZCBwb3NpdGlvbiBtZW51XG5cdFx0dWwuc2hvdygpO1xuXHRcdHRoaXMuX3Jlc2l6ZU1lbnUoKTtcblx0XHR1bC5wb3NpdGlvbiggJC5leHRlbmQoIHtcblx0XHRcdG9mOiB0aGlzLmVsZW1lbnRcblx0XHR9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24gKSApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzICkge1xuXHRcdFx0dGhpcy5tZW51Lm5leHQoKTtcblx0XHR9XG5cblx0XHQvLyBMaXN0ZW4gZm9yIGludGVyYWN0aW9ucyBvdXRzaWRlIG9mIHRoZSB3aWRnZXQgKCM2NjQyKVxuXHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB7XG5cdFx0XHRtb3VzZWRvd246IFwiX2Nsb3NlT25DbGlja091dHNpZGVcIlxuXHRcdH0gKTtcblx0fSxcblxuXHRfcmVzaXplTWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVsID0gdGhpcy5tZW51LmVsZW1lbnQ7XG5cdFx0dWwub3V0ZXJXaWR0aCggTWF0aC5tYXgoXG5cblx0XHRcdC8vIEZpcmVmb3ggd3JhcHMgbG9uZyB0ZXh0IChwb3NzaWJseSBhIHJvdW5kaW5nIGJ1Zylcblx0XHRcdC8vIHNvIHdlIGFkZCAxcHggdG8gYXZvaWQgdGhlIHdyYXBwaW5nICgjNzUxMylcblx0XHRcdHVsLndpZHRoKCBcIlwiICkub3V0ZXJXaWR0aCgpICsgMSxcblx0XHRcdHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKClcblx0XHQpICk7XG5cdH0sXG5cblx0X3JlbmRlck1lbnU6IGZ1bmN0aW9uKCB1bCwgaXRlbXMgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdCQuZWFjaCggaXRlbXMsIGZ1bmN0aW9uKCBpbmRleCwgaXRlbSApIHtcblx0XHRcdHRoYXQuX3JlbmRlckl0ZW1EYXRhKCB1bCwgaXRlbSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfcmVuZGVySXRlbURhdGE6IGZ1bmN0aW9uKCB1bCwgaXRlbSApIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSggdWwsIGl0ZW0gKS5kYXRhKCBcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIsIGl0ZW0gKTtcblx0fSxcblxuXHRfcmVuZGVySXRlbTogZnVuY3Rpb24oIHVsLCBpdGVtICkge1xuXHRcdHJldHVybiAkKCBcIjxsaT5cIiApXG5cdFx0XHQuYXBwZW5kKCAkKCBcIjxkaXY+XCIgKS50ZXh0KCBpdGVtLmxhYmVsICkgKVxuXHRcdFx0LmFwcGVuZFRvKCB1bCApO1xuXHR9LFxuXG5cdF9tb3ZlOiBmdW5jdGlvbiggZGlyZWN0aW9uLCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLm1lbnUuZWxlbWVudC5pcyggXCI6dmlzaWJsZVwiICkgKSB7XG5cdFx0XHR0aGlzLnNlYXJjaCggbnVsbCwgZXZlbnQgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSAmJiAvXnByZXZpb3VzLy50ZXN0KCBkaXJlY3Rpb24gKSB8fFxuXHRcdFx0XHR0aGlzLm1lbnUuaXNMYXN0SXRlbSgpICYmIC9ebmV4dC8udGVzdCggZGlyZWN0aW9uICkgKSB7XG5cblx0XHRcdGlmICggIXRoaXMuaXNNdWx0aUxpbmUgKSB7XG5cdFx0XHRcdHRoaXMuX3ZhbHVlKCB0aGlzLnRlcm0gKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tZW51LmJsdXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5tZW51WyBkaXJlY3Rpb24gXSggZXZlbnQgKTtcblx0fSxcblxuXHR3aWRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1lbnUuZWxlbWVudDtcblx0fSxcblxuXHRfdmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KCB0aGlzLmVsZW1lbnQsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdF9rZXlFdmVudDogZnVuY3Rpb24oIGtleUV2ZW50LCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLmlzTXVsdGlMaW5lIHx8IHRoaXMubWVudS5lbGVtZW50LmlzKCBcIjp2aXNpYmxlXCIgKSApIHtcblx0XHRcdHRoaXMuX21vdmUoIGtleUV2ZW50LCBldmVudCApO1xuXG5cdFx0XHQvLyBQcmV2ZW50cyBtb3ZpbmcgY3Vyc29yIHRvIGJlZ2lubmluZy9lbmQgb2YgdGhlIHRleHQgZmllbGQgaW4gc29tZSBicm93c2Vyc1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTBcblx0Ly8gV2Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdCB1c2UgdGhpcy5lbGVtZW50LnByb3AoIFwiaXNDb250ZW50RWRpdGFibGVcIiApXG5cdC8vIGJ1dCBoaWRkZW4gZWxlbWVudHMgYWx3YXlzIHJlcG9ydCBmYWxzZSBpbiBDaHJvbWUuXG5cdC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zMTMwODJcblx0X2lzQ29udGVudEVkaXRhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRpZiAoICFlbGVtZW50Lmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgZWRpdGFibGUgPSBlbGVtZW50LnByb3AoIFwiY29udGVudEVkaXRhYmxlXCIgKTtcblxuXHRcdGlmICggZWRpdGFibGUgPT09IFwiaW5oZXJpdFwiICkge1xuXHRcdCAgcmV0dXJuIHRoaXMuX2lzQ29udGVudEVkaXRhYmxlKCBlbGVtZW50LnBhcmVudCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVkaXRhYmxlID09PSBcInRydWVcIjtcblx0fVxufSApO1xuXG4kLmV4dGVuZCggJC51aS5hdXRvY29tcGxldGUsIHtcblx0ZXNjYXBlUmVnZXg6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZSggL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiICk7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIGFycmF5LCB0ZXJtICkge1xuXHRcdHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cCggJC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoIHRlcm0gKSwgXCJpXCIgKTtcblx0XHRyZXR1cm4gJC5ncmVwKCBhcnJheSwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXIudGVzdCggdmFsdWUubGFiZWwgfHwgdmFsdWUudmFsdWUgfHwgdmFsdWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gTGl2ZSByZWdpb24gZXh0ZW5zaW9uLCBhZGRpbmcgYSBgbWVzc2FnZXNgIG9wdGlvblxuLy8gTk9URTogVGhpcyBpcyBhbiBleHBlcmltZW50YWwgQVBJLiBXZSBhcmUgc3RpbGwgaW52ZXN0aWdhdGluZ1xuLy8gYSBmdWxsIHNvbHV0aW9uIGZvciBzdHJpbmcgbWFuaXB1bGF0aW9uIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbi5cbiQud2lkZ2V0KCBcInVpLmF1dG9jb21wbGV0ZVwiLCAkLnVpLmF1dG9jb21wbGV0ZSwge1xuXHRvcHRpb25zOiB7XG5cdFx0bWVzc2FnZXM6IHtcblx0XHRcdG5vUmVzdWx0czogXCJObyBzZWFyY2ggcmVzdWx0cy5cIixcblx0XHRcdHJlc3VsdHM6IGZ1bmN0aW9uKCBhbW91bnQgKSB7XG5cdFx0XHRcdHJldHVybiBhbW91bnQgKyAoIGFtb3VudCA+IDEgPyBcIiByZXN1bHRzIGFyZVwiIDogXCIgcmVzdWx0IGlzXCIgKSArXG5cdFx0XHRcdFx0XCIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X19yZXNwb25zZTogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0dmFyIG1lc3NhZ2U7XG5cdFx0dGhpcy5fc3VwZXJBcHBseSggYXJndW1lbnRzICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5jYW5jZWxTZWFyY2ggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICggY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCApIHtcblx0XHRcdG1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMubWVzc2FnZXMucmVzdWx0cyggY29udGVudC5sZW5ndGggKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWVzc2FnZSA9IHRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHM7XG5cdFx0fVxuXHRcdHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKTtcblx0XHQkKCBcIjxkaXY+XCIgKS50ZXh0KCBtZXNzYWdlICkuYXBwZW5kVG8oIHRoaXMubGl2ZVJlZ2lvbiApO1xuXHR9XG59ICk7XG5cbnZhciB3aWRnZXRzQXV0b2NvbXBsZXRlID0gJC51aS5hdXRvY29tcGxldGU7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgQ29udHJvbGdyb3VwIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBDb250cm9sZ3JvdXBcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBWaXN1YWxseSBncm91cHMgZm9ybSBjb250cm9sIHdpZGdldHNcbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jb250cm9sZ3JvdXAvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vY29udHJvbGdyb3VwL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29udHJvbGdyb3VwLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxudmFyIGNvbnRyb2xncm91cENvcm5lclJlZ2V4ID0gL3VpLWNvcm5lci0oW2Etel0pezIsNn0vZztcblxudmFyIHdpZGdldHNDb250cm9sZ3JvdXAgPSAkLndpZGdldCggXCJ1aS5jb250cm9sZ3JvdXBcIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8ZGl2PlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0ZGlyZWN0aW9uOiBcImhvcml6b250YWxcIixcblx0XHRkaXNhYmxlZDogbnVsbCxcblx0XHRvbmx5VmlzaWJsZTogdHJ1ZSxcblx0XHRpdGVtczoge1xuXHRcdFx0XCJidXR0b25cIjogXCJpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGJ1dHRvbiwgYVwiLFxuXHRcdFx0XCJjb250cm9sZ3JvdXBMYWJlbFwiOiBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWxcIixcblx0XHRcdFwiY2hlY2tib3hyYWRpb1wiOiBcImlucHV0W3R5cGU9J2NoZWNrYm94J10sIGlucHV0W3R5cGU9J3JhZGlvJ11cIixcblx0XHRcdFwic2VsZWN0bWVudVwiOiBcInNlbGVjdFwiLFxuXHRcdFx0XCJzcGlubmVyXCI6IFwiLnVpLXNwaW5uZXItaW5wdXRcIlxuXHRcdH1cblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9lbmhhbmNlKCk7XG5cdH0sXG5cblx0Ly8gVG8gc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIGluIGpRdWVyeSBNb2JpbGUsIHdlIGlzb2xhdGUgRE9NIG1hbmlwdWxhdGlvblxuXHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwicm9sZVwiLCBcInRvb2xiYXJcIiApO1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9jYWxsQ2hpbGRNZXRob2QoIFwiZGVzdHJveVwiICk7XG5cdFx0dGhpcy5jaGlsZFdpZGdldHMucmVtb3ZlRGF0YSggXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiICk7XG5cdFx0dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoIFwicm9sZVwiICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuaXRlbXMuY29udHJvbGdyb3VwTGFiZWwgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0LmZpbmQoIHRoaXMub3B0aW9ucy5pdGVtcy5jb250cm9sZ3JvdXBMYWJlbCApXG5cdFx0XHRcdC5maW5kKCBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIiApXG5cdFx0XHRcdC5jb250ZW50cygpLnVud3JhcCgpO1xuXHRcdH1cblx0fSxcblxuXHRfaW5pdFdpZGdldHM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdGNoaWxkV2lkZ2V0cyA9IFtdO1xuXG5cdFx0Ly8gRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIGVhY2ggb2YgdGhlIGl0ZW1zIG9wdGlvbnNcblx0XHQkLmVhY2goIHRoaXMub3B0aW9ucy5pdGVtcywgZnVuY3Rpb24oIHdpZGdldCwgc2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbGFiZWxzO1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB7fTtcblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoZSB3aWRnZXQgaGFzIGEgc2VsZWN0b3Igc2V0XG5cdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpZGdldCA9PT0gXCJjb250cm9sZ3JvdXBMYWJlbFwiICkge1xuXHRcdFx0XHRsYWJlbHMgPSB0aGF0LmVsZW1lbnQuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdFx0bGFiZWxzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBlbGVtZW50ID0gJCggdGhpcyApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtZW50LmNoaWxkcmVuKCBcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxlbWVudC5jb250ZW50cygpXG5cdFx0XHRcdFx0XHQud3JhcEFsbCggXCI8c3BhbiBjbGFzcz0ndWktY29udHJvbGdyb3VwLWxhYmVsLWNvbnRlbnRzJz48L3NwYW4+XCIgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0XHR0aGF0Ll9hZGRDbGFzcyggbGFiZWxzLCBudWxsLCBcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1zdGF0ZS1kZWZhdWx0XCIgKTtcblx0XHRcdFx0Y2hpbGRXaWRnZXRzID0gY2hpbGRXaWRnZXRzLmNvbmNhdCggbGFiZWxzLmdldCgpICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoZSB3aWRnZXQgYWN0dWFsbHkgZXhpc3RzXG5cdFx0XHRpZiAoICEkLmZuWyB3aWRnZXQgXSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZSBhc3N1bWUgZXZlcnl0aGluZyBpcyBpbiB0aGUgbWlkZGxlIHRvIHN0YXJ0IGJlY2F1c2Ugd2UgY2FuJ3QgZGV0ZXJtaW5lXG5cdFx0XHQvLyBmaXJzdCAvIGxhc3QgZWxlbWVudHMgdW50aWwgYWxsIGVuaGFuY21lbnRzIGFyZSBkb25lLlxuXHRcdFx0aWYgKCB0aGF0WyBcIl9cIiArIHdpZGdldCArIFwiT3B0aW9uc1wiIF0gKSB7XG5cdFx0XHRcdG9wdGlvbnMgPSB0aGF0WyBcIl9cIiArIHdpZGdldCArIFwiT3B0aW9uc1wiIF0oIFwibWlkZGxlXCIgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdGlvbnMgPSB7IGNsYXNzZXM6IHt9IH07XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpbmQgaW5zdGFuY2VzIG9mIHRoaXMgd2lkZ2V0IGluc2lkZSBjb250cm9sZ3JvdXAgYW5kIGluaXQgdGhlbVxuXHRcdFx0dGhhdC5lbGVtZW50XG5cdFx0XHRcdC5maW5kKCBzZWxlY3RvciApXG5cdFx0XHRcdC5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgZWxlbWVudCA9ICQoIHRoaXMgKTtcblx0XHRcdFx0XHR2YXIgaW5zdGFuY2UgPSBlbGVtZW50WyB3aWRnZXQgXSggXCJpbnN0YW5jZVwiICk7XG5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNsb25lIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiB3aWRnZXQgdG8gYXZvaWRcblx0XHRcdFx0XHQvLyBwb2xsdXRpbmcgdGhlIHZhcmlhYmxlIG9wdGlvbnMgd2hpY2ggaGFzIGEgd2lkZXIgc2NvcGUgdGhhbiBhIHNpbmdsZSB3aWRnZXQuXG5cdFx0XHRcdFx0dmFyIGluc3RhbmNlT3B0aW9ucyA9ICQud2lkZ2V0LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBidXR0b24gaXMgdGhlIGNoaWxkIG9mIGEgc3Bpbm5lciBpZ25vcmUgaXRcblx0XHRcdFx0XHQvLyBUT0RPOiBGaW5kIGEgbW9yZSBnZW5lcmljIHNvbHV0aW9uXG5cdFx0XHRcdFx0aWYgKCB3aWRnZXQgPT09IFwiYnV0dG9uXCIgJiYgZWxlbWVudC5wYXJlbnQoIFwiLnVpLXNwaW5uZXJcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgdGhlIHdpZGdldCBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0XHRcdFx0aWYgKCAhaW5zdGFuY2UgKSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZSA9IGVsZW1lbnRbIHdpZGdldCBdKClbIHdpZGdldCBdKCBcImluc3RhbmNlXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdGluc3RhbmNlT3B0aW9ucy5jbGFzc2VzID1cblx0XHRcdFx0XHRcdFx0dGhhdC5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoIGluc3RhbmNlT3B0aW9ucy5jbGFzc2VzLCBpbnN0YW5jZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbGVtZW50WyB3aWRnZXQgXSggaW5zdGFuY2VPcHRpb25zICk7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJvbGdyb3VwIHRvIGJlIGFibGUgdG8gcmVmZXJlbmNlXG5cdFx0XHRcdFx0Ly8gZnJvbSB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgZm9yIGNoYW5naW5nIG9wdGlvbnMgYW5kIHJlZnJlc2hcblx0XHRcdFx0XHR2YXIgd2lkZ2V0RWxlbWVudCA9IGVsZW1lbnRbIHdpZGdldCBdKCBcIndpZGdldFwiICk7XG5cdFx0XHRcdFx0JC5kYXRhKCB3aWRnZXRFbGVtZW50WyAwIF0sIFwidWktY29udHJvbGdyb3VwLWRhdGFcIixcblx0XHRcdFx0XHRcdGluc3RhbmNlID8gaW5zdGFuY2UgOiBlbGVtZW50WyB3aWRnZXQgXSggXCJpbnN0YW5jZVwiICkgKTtcblxuXHRcdFx0XHRcdGNoaWxkV2lkZ2V0cy5wdXNoKCB3aWRnZXRFbGVtZW50WyAwIF0gKTtcblx0XHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMuY2hpbGRXaWRnZXRzID0gJCggJC51bmlxdWUoIGNoaWxkV2lkZ2V0cyApICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuY2hpbGRXaWRnZXRzLCBcInVpLWNvbnRyb2xncm91cC1pdGVtXCIgKTtcblx0fSxcblxuXHRfY2FsbENoaWxkTWV0aG9kOiBmdW5jdGlvbiggbWV0aG9kICkge1xuXHRcdHRoaXMuY2hpbGRXaWRnZXRzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0XHRcdGRhdGEgPSBlbGVtZW50LmRhdGEoIFwidWktY29udHJvbGdyb3VwLWRhdGFcIiApO1xuXHRcdFx0aWYgKCBkYXRhICYmIGRhdGFbIG1ldGhvZCBdICkge1xuXHRcdFx0XHRkYXRhWyBtZXRob2QgXSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfdXBkYXRlQ29ybmVyQ2xhc3M6IGZ1bmN0aW9uKCBlbGVtZW50LCBwb3NpdGlvbiApIHtcblx0XHR2YXIgcmVtb3ZlID0gXCJ1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IHVpLWNvcm5lci1hbGxcIjtcblx0XHR2YXIgYWRkID0gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKCBwb3NpdGlvbiwgXCJsYWJlbFwiICkuY2xhc3Nlcy5sYWJlbDtcblxuXHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBlbGVtZW50LCBudWxsLCByZW1vdmUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggZWxlbWVudCwgbnVsbCwgYWRkICk7XG5cdH0sXG5cblx0X2J1aWxkU2ltcGxlT3B0aW9uczogZnVuY3Rpb24oIHBvc2l0aW9uLCBrZXkgKSB7XG5cdFx0dmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIjtcblx0XHR2YXIgcmVzdWx0ID0ge1xuXHRcdFx0Y2xhc3Nlczoge31cblx0XHR9O1xuXHRcdHJlc3VsdC5jbGFzc2VzWyBrZXkgXSA9IHtcblx0XHRcdFwibWlkZGxlXCI6IFwiXCIsXG5cdFx0XHRcImZpcnN0XCI6IFwidWktY29ybmVyLVwiICsgKCBkaXJlY3Rpb24gPyBcInRvcFwiIDogXCJsZWZ0XCIgKSxcblx0XHRcdFwibGFzdFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJib3R0b21cIiA6IFwicmlnaHRcIiApLFxuXHRcdFx0XCJvbmx5XCI6IFwidWktY29ybmVyLWFsbFwiXG5cdFx0fVsgcG9zaXRpb24gXTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0X3NwaW5uZXJPcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoIHBvc2l0aW9uLCBcInVpLXNwaW5uZXJcIiApO1xuXG5cdFx0b3B0aW9ucy5jbGFzc2VzWyBcInVpLXNwaW5uZXItdXBcIiBdID0gXCJcIjtcblx0XHRvcHRpb25zLmNsYXNzZXNbIFwidWktc3Bpbm5lci1kb3duXCIgXSA9IFwiXCI7XG5cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fSxcblxuXHRfYnV0dG9uT3B0aW9uczogZnVuY3Rpb24oIHBvc2l0aW9uICkge1xuXHRcdHJldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoIHBvc2l0aW9uLCBcInVpLWJ1dHRvblwiICk7XG5cdH0sXG5cblx0X2NoZWNrYm94cmFkaW9PcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyggcG9zaXRpb24sIFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiICk7XG5cdH0sXG5cblx0X3NlbGVjdG1lbnVPcHRpb25zOiBmdW5jdGlvbiggcG9zaXRpb24gKSB7XG5cdFx0dmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0d2lkdGg6IGRpcmVjdGlvbiA/IFwiYXV0b1wiIDogZmFsc2UsXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdG1pZGRsZToge1xuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOiBcIlwiLFxuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6IFwiXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Zmlyc3Q6IHtcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjogXCJ1aS1jb3JuZXItXCIgKyAoIGRpcmVjdGlvbiA/IFwidG9wXCIgOiBcInRsXCIgKSxcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJ0b3BcIiA6IFwibGVmdFwiIClcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFzdDoge1xuXHRcdFx0XHRcdFwidWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOiBkaXJlY3Rpb24gPyBcIlwiIDogXCJ1aS1jb3JuZXItdHJcIixcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOiBcInVpLWNvcm5lci1cIiArICggZGlyZWN0aW9uID8gXCJib3R0b21cIiA6IFwicmlnaHRcIiApXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9ubHk6IHtcblx0XHRcdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjogXCJ1aS1jb3JuZXItdG9wXCIsXG5cdFx0XHRcdFx0XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHRcdFx0fVxuXG5cdFx0XHR9WyBwb3NpdGlvbiBdXG5cdFx0fTtcblx0fSxcblxuXHRfcmVzb2x2ZUNsYXNzZXNWYWx1ZXM6IGZ1bmN0aW9uKCBjbGFzc2VzLCBpbnN0YW5jZSApIHtcblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0JC5lYWNoKCBjbGFzc2VzLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0dmFyIGN1cnJlbnQgPSBpbnN0YW5jZS5vcHRpb25zLmNsYXNzZXNbIGtleSBdIHx8IFwiXCI7XG5cdFx0XHRjdXJyZW50ID0gJC50cmltKCBjdXJyZW50LnJlcGxhY2UoIGNvbnRyb2xncm91cENvcm5lclJlZ2V4LCBcIlwiICkgKTtcblx0XHRcdHJlc3VsdFsga2V5IF0gPSAoIGN1cnJlbnQgKyBcIiBcIiArIGNsYXNzZXNbIGtleSBdICkucmVwbGFjZSggL1xccysvZywgXCIgXCIgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHRpZiAoIGtleSA9PT0gXCJkaXJlY3Rpb25cIiApIHtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBcInVpLWNvbnRyb2xncm91cC1cIiArIHRoaXMub3B0aW9ucy5kaXJlY3Rpb24gKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zdXBlcigga2V5LCB2YWx1ZSApO1xuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl9jYWxsQ2hpbGRNZXRob2QoIHZhbHVlID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoaWxkcmVuLFxuXHRcdFx0dGhhdCA9IHRoaXM7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1jb250cm9sZ3JvdXAgdWktY29udHJvbGdyb3VwLVwiICsgdGhpcy5vcHRpb25zLmRpcmVjdGlvbiApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBudWxsLCBcInVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cdFx0fVxuXHRcdHRoaXMuX2luaXRXaWRnZXRzKCk7XG5cblx0XHRjaGlsZHJlbiA9IHRoaXMuY2hpbGRXaWRnZXRzO1xuXG5cdFx0Ly8gV2UgZmlsdGVyIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHRyYWNrIGFsbCBjaGlsZFdpZGdldHMgbm90IGp1c3QgdGhlIHZpc2libGUgb25lc1xuXHRcdGlmICggdGhpcy5vcHRpb25zLm9ubHlWaXNpYmxlICkge1xuXHRcdFx0Y2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoIFwiOnZpc2libGVcIiApO1xuXHRcdH1cblxuXHRcdGlmICggY2hpbGRyZW4ubGVuZ3RoICkge1xuXG5cdFx0XHQvLyBXZSBkbyB0aGlzIGxhc3QgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgZW5oYW5jbWVudCBpcyBkb25lXG5cdFx0XHQvLyBiZWZvcmUgZGV0ZXJtaW5pbmcgZmlyc3QgYW5kIGxhc3Rcblx0XHRcdCQuZWFjaCggWyBcImZpcnN0XCIsIFwibGFzdFwiIF0sIGZ1bmN0aW9uKCBpbmRleCwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBpbnN0YW5jZSA9IGNoaWxkcmVuWyB2YWx1ZSBdKCkuZGF0YSggXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiICk7XG5cblx0XHRcdFx0aWYgKCBpbnN0YW5jZSAmJiB0aGF0WyBcIl9cIiArIGluc3RhbmNlLndpZGdldE5hbWUgKyBcIk9wdGlvbnNcIiBdICkge1xuXHRcdFx0XHRcdHZhciBvcHRpb25zID0gdGhhdFsgXCJfXCIgKyBpbnN0YW5jZS53aWRnZXROYW1lICsgXCJPcHRpb25zXCIgXShcblx0XHRcdFx0XHRcdGNoaWxkcmVuLmxlbmd0aCA9PT0gMSA/IFwib25seVwiIDogdmFsdWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdG9wdGlvbnMuY2xhc3NlcyA9IHRoYXQuX3Jlc29sdmVDbGFzc2VzVmFsdWVzKCBvcHRpb25zLmNsYXNzZXMsIGluc3RhbmNlICk7XG5cdFx0XHRcdFx0aW5zdGFuY2UuZWxlbWVudFsgaW5zdGFuY2Uud2lkZ2V0TmFtZSBdKCBvcHRpb25zICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhhdC5fdXBkYXRlQ29ybmVyQ2xhc3MoIGNoaWxkcmVuWyB2YWx1ZSBdKCksIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gRmluYWxseSBjYWxsIHRoZSByZWZyZXNoIG1ldGhvZCBvbiBlYWNoIG9mIHRoZSBjaGlsZCB3aWRnZXRzLlxuXHRcdFx0dGhpcy5fY2FsbENoaWxkTWV0aG9kKCBcInJlZnJlc2hcIiApO1xuXHRcdH1cblx0fVxufSApO1xuXG4vKiFcbiAqIGpRdWVyeSBVSSBDaGVja2JveHJhZGlvIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBDaGVja2JveHJhZGlvXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogRW5oYW5jZXMgYSBmb3JtIHdpdGggbXVsdGlwbGUgdGhlbWVhYmxlIGNoZWNrYm94ZXMgb3IgcmFkaW8gYnV0dG9ucy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jaGVja2JveHJhZGlvL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2NoZWNrYm94cmFkaW8vXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9idXR0b24uY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY2hlY2tib3hyYWRpby5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC53aWRnZXQoIFwidWkuY2hlY2tib3hyYWRpb1wiLCBbICQudWkuZm9ybVJlc2V0TWl4aW4sIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0b3B0aW9uczoge1xuXHRcdGRpc2FibGVkOiBudWxsLFxuXHRcdGxhYmVsOiBudWxsLFxuXHRcdGljb246IHRydWUsXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS1jaGVja2JveHJhZGlvLWljb25cIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHR9XG5cdH0sXG5cblx0X2dldENyZWF0ZU9wdGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkaXNhYmxlZCwgbGFiZWxzO1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3N1cGVyKCkgfHwge307XG5cblx0XHQvLyBXZSByZWFkIHRoZSB0eXBlIGhlcmUsIGJlY2F1c2UgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byB0aHJvdyBhIGVsZW1lbnQgdHlwZSBlcnJvciBmaXJzdCxcblx0XHQvLyByYXRoZXIgdGhlbiB0aGUgZXJyb3IgZm9yIGxhY2sgb2YgYSBsYWJlbC4gT2Z0ZW4gaWYgaXRzIHRoZSB3cm9uZyB0eXBlLCBpdFxuXHRcdC8vIHdvbid0IGhhdmUgYSBsYWJlbCAoZS5nLiBjYWxsaW5nIG9uIGEgZGl2LCBidG4sIGV0Yylcblx0XHR0aGlzLl9yZWFkVHlwZSgpO1xuXG5cdFx0bGFiZWxzID0gdGhpcy5lbGVtZW50LmxhYmVscygpO1xuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGxhYmVscywgdXNlIHRoZSBsYXN0IG9uZVxuXHRcdHRoaXMubGFiZWwgPSAkKCBsYWJlbHNbIGxhYmVscy5sZW5ndGggLSAxIF0gKTtcblx0XHRpZiAoICF0aGlzLmxhYmVsLmxlbmd0aCApIHtcblx0XHRcdCQuZXJyb3IoIFwiTm8gbGFiZWwgZm91bmQgZm9yIGNoZWNrYm94cmFkaW8gd2lkZ2V0XCIgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9yaWdpbmFsTGFiZWwgPSBcIlwiO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBnZXQgdGhlIGxhYmVsIHRleHQgYnV0IHRoaXMgbWF5IGFsc28gbmVlZCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY29udGFpbiB0aGVcblx0XHQvLyBpbnB1dCBpdHNlbGYuXG5cdFx0dGhpcy5sYWJlbC5jb250ZW50cygpLm5vdCggdGhpcy5lbGVtZW50WyAwIF0gKS5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gVGhlIGxhYmVsIGNvbnRlbnRzIGNvdWxkIGJlIHRleHQsIGh0bWwsIG9yIGEgbWl4LiBXZSBjb25jYXQgZWFjaCBlbGVtZW50IHRvIGdldCBhXG5cdFx0XHQvLyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxhYmVsLCB3aXRob3V0IHRoZSBpbnB1dCBhcyBwYXJ0IG9mIGl0LlxuXHRcdFx0dGhhdC5vcmlnaW5hbExhYmVsICs9IHRoaXMubm9kZVR5cGUgPT09IDMgPyAkKCB0aGlzICkudGV4dCgpIDogdGhpcy5vdXRlckhUTUw7XG5cdFx0fSApO1xuXG5cdFx0Ly8gU2V0IHRoZSBsYWJlbCBvcHRpb24gaWYgd2UgZm91bmQgbGFiZWwgdGV4dFxuXHRcdGlmICggdGhpcy5vcmlnaW5hbExhYmVsICkge1xuXHRcdFx0b3B0aW9ucy5sYWJlbCA9IHRoaXMub3JpZ2luYWxMYWJlbDtcblx0XHR9XG5cblx0XHRkaXNhYmxlZCA9IHRoaXMuZWxlbWVudFsgMCBdLmRpc2FibGVkO1xuXHRcdGlmICggZGlzYWJsZWQgIT0gbnVsbCApIHtcblx0XHRcdG9wdGlvbnMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcblx0XHR9XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH0sXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoZWNrZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkO1xuXG5cdFx0dGhpcy5fYmluZEZvcm1SZXNldEhhbmRsZXIoKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkID09IG51bGwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5kaXNhYmxlZDtcblx0XHR9XG5cblx0XHR0aGlzLl9zZXRPcHRpb24oIFwiZGlzYWJsZWRcIiwgdGhpcy5vcHRpb25zLmRpc2FibGVkICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktY2hlY2tib3hyYWRpb1wiLCBcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiLCBcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiApO1xuXG5cdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwicmFkaW9cIiApIHtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxhYmVsLCBcInVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWxcIiApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdGhpcy5vcmlnaW5hbExhYmVsICkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTGFiZWwoKTtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMubGFiZWwgPSB0aGlzLm9yaWdpbmFsTGFiZWw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZW5oYW5jZSgpO1xuXG5cdFx0aWYgKCBjaGVja2VkICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBudWxsLCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9vbigge1xuXHRcdFx0Y2hhbmdlOiBcIl90b2dnbGVDbGFzc2VzXCIsXG5cdFx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxhYmVsLCBudWxsLCBcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiICk7XG5cdFx0XHR9LFxuXHRcdFx0Ymx1cjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmxhYmVsLCBudWxsLCBcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9yZWFkVHlwZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5vZGVOYW1lID0gdGhpcy5lbGVtZW50WyAwIF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHR0aGlzLnR5cGUgPSB0aGlzLmVsZW1lbnRbIDAgXS50eXBlO1xuXHRcdGlmICggbm9kZU5hbWUgIT09IFwiaW5wdXRcIiB8fCAhL3JhZGlvfGNoZWNrYm94Ly50ZXN0KCB0aGlzLnR5cGUgKSApIHtcblx0XHRcdCQuZXJyb3IoIFwiQ2FuJ3QgY3JlYXRlIGNoZWNrYm94cmFkaW8gb24gZWxlbWVudC5ub2RlTmFtZT1cIiArIG5vZGVOYW1lICtcblx0XHRcdFx0XCIgYW5kIGVsZW1lbnQudHlwZT1cIiArIHRoaXMudHlwZSApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBTdXBwb3J0IGpRdWVyeSBNb2JpbGUgZW5oYW5jZWQgb3B0aW9uXG5cdF9lbmhhbmNlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl91cGRhdGVJY29uKCB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkICk7XG5cdH0sXG5cblx0d2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5sYWJlbDtcblx0fSxcblxuXHRfZ2V0UmFkaW9Hcm91cDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGdyb3VwO1xuXHRcdHZhciBuYW1lID0gdGhpcy5lbGVtZW50WyAwIF0ubmFtZTtcblx0XHR2YXIgbmFtZVNlbGVjdG9yID0gXCJpbnB1dFtuYW1lPSdcIiArICQudWkuZXNjYXBlU2VsZWN0b3IoIG5hbWUgKSArIFwiJ11cIjtcblxuXHRcdGlmICggIW5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gJCggW10gKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZm9ybS5sZW5ndGggKSB7XG5cdFx0XHRncm91cCA9ICQoIHRoaXMuZm9ybVsgMCBdLmVsZW1lbnRzICkuZmlsdGVyKCBuYW1lU2VsZWN0b3IgKTtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBOb3QgaW5zaWRlIGEgZm9ybSwgY2hlY2sgYWxsIGlucHV0cyB0aGF0IGFsc28gYXJlIG5vdCBpbnNpZGUgYSBmb3JtXG5cdFx0XHRncm91cCA9ICQoIG5hbWVTZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAkKCB0aGlzICkuZm9ybSgpLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZ3JvdXAubm90KCB0aGlzLmVsZW1lbnQgKTtcblx0fSxcblxuXHRfdG9nZ2xlQ2xhc3NlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNoZWNrZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5jaGVja2VkO1xuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLmxhYmVsLCBcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLCBcInVpLXN0YXRlLWFjdGl2ZVwiLCBjaGVja2VkICk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICYmIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICkge1xuXHRcdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiwgY2hlY2tlZCApXG5cdFx0XHRcdC5fdG9nZ2xlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWJsYW5rXCIsICFjaGVja2VkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwicmFkaW9cIiApIHtcblx0XHRcdHRoaXMuX2dldFJhZGlvR3JvdXAoKVxuXHRcdFx0XHQuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGluc3RhbmNlID0gJCggdGhpcyApLmNoZWNrYm94cmFkaW8oIFwiaW5zdGFuY2VcIiApO1xuXG5cdFx0XHRcdFx0aWYgKCBpbnN0YW5jZSApIHtcblx0XHRcdFx0XHRcdGluc3RhbmNlLl9yZW1vdmVDbGFzcyggaW5zdGFuY2UubGFiZWwsXG5cdFx0XHRcdFx0XHRcdFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3VuYmluZEZvcm1SZXNldEhhbmRsZXIoKTtcblxuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gV2UgZG9uJ3QgYWxsb3cgdGhlIHZhbHVlIHRvIGJlIHNldCB0byBub3RoaW5nXG5cdFx0aWYgKCBrZXkgPT09IFwibGFiZWxcIiAmJiAhdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggdGhpcy5sYWJlbCwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgPSB2YWx1ZTtcblxuXHRcdFx0Ly8gRG9uJ3QgcmVmcmVzaCB3aGVuIHNldHRpbmcgZGlzYWJsZWRcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0X3VwZGF0ZUljb246IGZ1bmN0aW9uKCBjaGVja2VkICkge1xuXHRcdHZhciB0b0FkZCA9IFwidWktaWNvbiB1aS1pY29uLWJhY2tncm91bmQgXCI7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0aWYgKCAhdGhpcy5pY29uICkge1xuXHRcdFx0XHR0aGlzLmljb24gPSAkKCBcIjxzcGFuPlwiICk7XG5cdFx0XHRcdHRoaXMuaWNvblNwYWNlID0gJCggXCI8c3Bhbj4gPC9zcGFuPlwiICk7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmljb25TcGFjZSwgXCJ1aS1jaGVja2JveHJhZGlvLWljb24tc3BhY2VcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICkge1xuXHRcdFx0XHR0b0FkZCArPSBjaGVja2VkID8gXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiA6IFwidWktaWNvbi1ibGFua1wiO1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5pY29uLCBudWxsLCBjaGVja2VkID8gXCJ1aS1pY29uLWJsYW5rXCIgOiBcInVpLWljb24tY2hlY2tcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG9BZGQgKz0gXCJ1aS1pY29uLWJsYW5rXCI7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBcInVpLWNoZWNrYm94cmFkaW8taWNvblwiLCB0b0FkZCApO1xuXHRcdFx0aWYgKCAhY2hlY2tlZCApIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pY29uLnByZXBlbmRUbyggdGhpcy5sYWJlbCApLmFmdGVyKCB0aGlzLmljb25TcGFjZSApO1xuXHRcdH0gZWxzZSBpZiAoIHRoaXMuaWNvbiAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0XHRkZWxldGUgdGhpcy5pY29uO1xuXHRcdH1cblx0fSxcblxuXHRfdXBkYXRlTGFiZWw6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBjb250ZW50cyBvZiB0aGUgbGFiZWwgKCBtaW51cyB0aGUgaWNvbiwgaWNvbiBzcGFjZSwgYW5kIGlucHV0IClcblx0XHR2YXIgY29udGVudHMgPSB0aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KCB0aGlzLmVsZW1lbnRbIDAgXSApO1xuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0Y29udGVudHMgPSBjb250ZW50cy5ub3QoIHRoaXMuaWNvblsgMCBdICk7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5pY29uU3BhY2UgKSB7XG5cdFx0XHRjb250ZW50cyA9IGNvbnRlbnRzLm5vdCggdGhpcy5pY29uU3BhY2VbIDAgXSApO1xuXHRcdH1cblx0XHRjb250ZW50cy5yZW1vdmUoKTtcblxuXHRcdHRoaXMubGFiZWwuYXBwZW5kKCB0aGlzLm9wdGlvbnMubGFiZWwgKTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2hlY2tlZCA9IHRoaXMuZWxlbWVudFsgMCBdLmNoZWNrZWQsXG5cdFx0XHRpc0Rpc2FibGVkID0gdGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQ7XG5cblx0XHR0aGlzLl91cGRhdGVJY29uKCBjaGVja2VkICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIHRoaXMubGFiZWwsIFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsIFwidWktc3RhdGUtYWN0aXZlXCIsIGNoZWNrZWQgKTtcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gbnVsbCApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZUxhYmVsKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Rpc2FibGVkICE9PSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLl9zZXRPcHRpb25zKCB7IFwiZGlzYWJsZWRcIjogaXNEaXNhYmxlZCB9ICk7XG5cdFx0fVxuXHR9XG5cbn0gXSApO1xuXG52YXIgd2lkZ2V0c0NoZWNrYm94cmFkaW8gPSAkLnVpLmNoZWNrYm94cmFkaW87XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgQnV0dG9uIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBCdXR0b25cbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBFbmhhbmNlcyBhIGZvcm0gd2l0aCB0aGVtZWFibGUgYnV0dG9ucy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9idXR0b24vXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vYnV0dG9uL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvYnV0dG9uLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS5idXR0b25cIiwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHRkZWZhdWx0RWxlbWVudDogXCI8YnV0dG9uPlwiLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1idXR0b25cIjogXCJ1aS1jb3JuZXItYWxsXCJcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBudWxsLFxuXHRcdGljb246IG51bGwsXG5cdFx0aWNvblBvc2l0aW9uOiBcImJlZ2lubmluZ1wiLFxuXHRcdGxhYmVsOiBudWxsLFxuXHRcdHNob3dMYWJlbDogdHJ1ZVxuXHR9LFxuXG5cdF9nZXRDcmVhdGVPcHRpb25zOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZGlzYWJsZWQsXG5cblx0XHRcdC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBjYXNlcyBsaWtlIGluIGpRdWVyeSBNb2JpbGUgd2hlcmUgdGhlIGJhc2Ugd2lkZ2V0IGRvZXMgaGF2ZVxuXHRcdFx0Ly8gYW4gaW1wbGVtZW50YXRpb24gb2YgX2dldENyZWF0ZU9wdGlvbnNcblx0XHRcdG9wdGlvbnMgPSB0aGlzLl9zdXBlcigpIHx8IHt9O1xuXG5cdFx0dGhpcy5pc0lucHV0ID0gdGhpcy5lbGVtZW50LmlzKCBcImlucHV0XCIgKTtcblxuXHRcdGRpc2FibGVkID0gdGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQ7XG5cdFx0aWYgKCBkaXNhYmxlZCAhPSBudWxsICkge1xuXHRcdFx0b3B0aW9ucy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdHRoaXMub3JpZ2luYWxMYWJlbCA9IHRoaXMuaXNJbnB1dCA/IHRoaXMuZWxlbWVudC52YWwoKSA6IHRoaXMuZWxlbWVudC5odG1sKCk7XG5cdFx0aWYgKCB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHRvcHRpb25zLmxhYmVsID0gdGhpcy5vcmlnaW5hbExhYmVsO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXMub3B0aW9uLnNob3dMYWJlbCAmICF0aGlzLm9wdGlvbnMuaWNvbiApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFdlIGhhdmUgdG8gY2hlY2sgdGhlIG9wdGlvbiBhZ2FpbiBoZXJlIGV2ZW4gdGhvdWdoIHdlIGRpZCBpbiBfZ2V0Q3JlYXRlT3B0aW9ucyxcblx0XHQvLyBiZWNhdXNlIG51bGwgbWF5IGhhdmUgYmVlbiBwYXNzZWQgb24gaW5pdCB3aGljaCB3b3VsZCBvdmVycmlkZSB3aGF0IHdhcyBzZXQgaW5cblx0XHQvLyBfZ2V0Q3JlYXRlT3B0aW9uc1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmRpc2FibGVkID09IG51bGwgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0aGlzLmVsZW1lbnRbIDAgXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmhhc1RpdGxlID0gISF0aGlzLmVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiICk7XG5cblx0XHQvLyBDaGVjayB0byBzZWUgaWYgdGhlIGxhYmVsIG5lZWRzIHRvIGJlIHNldCBvciBpZiBpdHMgYWxyZWFkeSBjb3JyZWN0XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubGFiZWwgJiYgdGhpcy5vcHRpb25zLmxhYmVsICE9PSB0aGlzLm9yaWdpbmFsTGFiZWwgKSB7XG5cdFx0XHRpZiAoIHRoaXMuaXNJbnB1dCApIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnZhbCggdGhpcy5vcHRpb25zLmxhYmVsICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaHRtbCggdGhpcy5vcHRpb25zLmxhYmVsICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWJ1dHRvblwiLCBcInVpLXdpZGdldFwiICk7XG5cdFx0dGhpcy5fc2V0T3B0aW9uKCBcImRpc2FibGVkXCIsIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApO1xuXHRcdHRoaXMuX2VuaGFuY2UoKTtcblxuXHRcdGlmICggdGhpcy5lbGVtZW50LmlzKCBcImFcIiApICkge1xuXHRcdFx0dGhpcy5fb24oIHtcblx0XHRcdFx0XCJrZXl1cFwiOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFx0aWYgKCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuU1BBQ0UgKSB7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQaGFudG9tSlMgPD0gMS45LCBJRSA4IE9ubHlcblx0XHRcdFx0XHRcdC8vIElmIGEgbmF0aXZlIGNsaWNrIGlzIGF2YWlsYWJsZSB1c2UgaXQgc28gd2UgYWN0dWFsbHkgY2F1c2UgbmF2aWdhdGlvblxuXHRcdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgdHJpZ2dlciBhIGNsaWNrIGV2ZW50XG5cdFx0XHRcdFx0XHRpZiAoIHRoaXMuZWxlbWVudFsgMCBdLmNsaWNrICkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5jbGljaygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoIFwiY2xpY2tcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fSxcblxuXHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpcy5lbGVtZW50LmlzKCBcImJ1dHRvblwiICkgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQuYXR0ciggXCJyb2xlXCIsIFwiYnV0dG9uXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0dGhpcy5fdXBkYXRlSWNvbiggXCJpY29uXCIsIHRoaXMub3B0aW9ucy5pY29uICk7XG5cdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF91cGRhdGVUb29sdGlwOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRpdGxlID0gdGhpcy5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiApO1xuXG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLnNob3dMYWJlbCAmJiAhdGhpcy50aXRsZSApIHtcblx0XHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcInRpdGxlXCIsIHRoaXMub3B0aW9ucy5sYWJlbCApO1xuXHRcdH1cblx0fSxcblxuXHRfdXBkYXRlSWNvbjogZnVuY3Rpb24oIG9wdGlvbiwgdmFsdWUgKSB7XG5cdFx0dmFyIGljb24gPSBvcHRpb24gIT09IFwiaWNvblBvc2l0aW9uXCIsXG5cdFx0XHRwb3NpdGlvbiA9IGljb24gPyB0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uIDogdmFsdWUsXG5cdFx0XHRkaXNwbGF5QmxvY2sgPSBwb3NpdGlvbiA9PT0gXCJ0b3BcIiB8fCBwb3NpdGlvbiA9PT0gXCJib3R0b21cIjtcblxuXHRcdC8vIENyZWF0ZSBpY29uXG5cdFx0aWYgKCAhdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uID0gJCggXCI8c3Bhbj5cIiApO1xuXG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5pY29uLCBcInVpLWJ1dHRvbi1pY29uXCIsIFwidWktaWNvblwiICk7XG5cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5zaG93TGFiZWwgKSB7XG5cdFx0XHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLWJ1dHRvbi1pY29uLW9ubHlcIiApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIGljb24gKSB7XG5cblx0XHRcdC8vIElmIHdlIGFyZSB1cGRhdGluZyB0aGUgaWNvbiByZW1vdmUgdGhlIG9sZCBpY29uIGNsYXNzXG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5pY29uLCBudWxsLCB0aGlzLm9wdGlvbnMuaWNvbiApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGFyZSB1cGRhdGluZyB0aGUgaWNvbiBhZGQgdGhlIG5ldyBpY29uIGNsYXNzXG5cdFx0aWYgKCBpY29uICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9hdHRhY2hJY29uKCBwb3NpdGlvbiApO1xuXG5cdFx0Ly8gSWYgdGhlIGljb24gaXMgb24gdG9wIG9yIGJvdHRvbSB3ZSBuZWVkIHRvIGFkZCB0aGUgdWktd2lkZ2V0LWljb24tYmxvY2sgY2xhc3MgYW5kIHJlbW92ZVxuXHRcdC8vIHRoZSBpY29uU3BhY2UgaWYgdGhlcmUgaXMgb25lLlxuXHRcdGlmICggZGlzcGxheUJsb2NrICkge1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvbiwgbnVsbCwgXCJ1aS13aWRnZXQtaWNvbi1ibG9ja1wiICk7XG5cdFx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0XHR0aGlzLmljb25TcGFjZS5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBQb3NpdGlvbiBpcyBiZWdpbm5pbmcgb3IgZW5kIHNvIHJlbW92ZSB0aGUgdWktd2lkZ2V0LWljb24tYmxvY2sgY2xhc3MgYW5kIGFkZCB0aGVcblx0XHRcdC8vIHNwYWNlIGlmIGl0IGRvZXMgbm90IGV4aXN0XG5cdFx0XHRpZiAoICF0aGlzLmljb25TcGFjZSApIHtcblx0XHRcdFx0dGhpcy5pY29uU3BhY2UgPSAkKCBcIjxzcGFuPiA8L3NwYW4+XCIgKTtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuaWNvblNwYWNlLCBcInVpLWJ1dHRvbi1pY29uLXNwYWNlXCIgKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLmljb24sIG51bGwsIFwidWktd2lnZXQtaWNvbi1ibG9ja1wiICk7XG5cdFx0XHR0aGlzLl9hdHRhY2hJY29uU3BhY2UoIHBvc2l0aW9uICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJyb2xlXCIgKTtcblxuXHRcdGlmICggdGhpcy5pY29uICkge1xuXHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0dGhpcy5pY29uU3BhY2UucmVtb3ZlKCk7XG5cdFx0fVxuXHRcdGlmICggIXRoaXMuaGFzVGl0bGUgKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJ0aXRsZVwiICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hdHRhY2hJY29uU3BhY2U6IGZ1bmN0aW9uKCBpY29uUG9zaXRpb24gKSB7XG5cdFx0dGhpcy5pY29uWyAvXig/OmVuZHxib3R0b20pLy50ZXN0KCBpY29uUG9zaXRpb24gKSA/IFwiYmVmb3JlXCIgOiBcImFmdGVyXCIgXSggdGhpcy5pY29uU3BhY2UgKTtcblx0fSxcblxuXHRfYXR0YWNoSWNvbjogZnVuY3Rpb24oIGljb25Qb3NpdGlvbiApIHtcblx0XHR0aGlzLmVsZW1lbnRbIC9eKD86ZW5kfGJvdHRvbSkvLnRlc3QoIGljb25Qb3NpdGlvbiApID8gXCJhcHBlbmRcIiA6IFwicHJlcGVuZFwiIF0oIHRoaXMuaWNvbiApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgbmV3U2hvd0xhYmVsID0gb3B0aW9ucy5zaG93TGFiZWwgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgOlxuXHRcdFx0XHRvcHRpb25zLnNob3dMYWJlbCxcblx0XHRcdG5ld0ljb24gPSBvcHRpb25zLmljb24gPT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5pY29uIDogb3B0aW9ucy5pY29uO1xuXG5cdFx0aWYgKCAhbmV3U2hvd0xhYmVsICYmICFuZXdJY29uICkge1xuXHRcdFx0b3B0aW9ucy5zaG93TGFiZWwgPSB0cnVlO1xuXHRcdH1cblx0XHR0aGlzLl9zdXBlciggb3B0aW9ucyApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImljb25cIiApIHtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUljb24oIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuaWNvbiApIHtcblx0XHRcdFx0dGhpcy5pY29uLnJlbW92ZSgpO1xuXHRcdFx0XHRpZiAoIHRoaXMuaWNvblNwYWNlICkge1xuXHRcdFx0XHRcdHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvblBvc2l0aW9uXCIgKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVJY29uKCBrZXksIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIGNhbid0IGVuZCB1cCB3aXRoIGEgYnV0dG9uIHRoYXQgaGFzIG5laXRoZXIgdGV4dCBub3IgaWNvblxuXHRcdGlmICgga2V5ID09PSBcInNob3dMYWJlbFwiICkge1xuXHRcdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggXCJ1aS1idXR0b24taWNvbi1vbmx5XCIsIG51bGwsICF2YWx1ZSApO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwibGFiZWxcIiApIHtcblx0XHRcdGlmICggdGhpcy5pc0lucHV0ICkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQudmFsKCB2YWx1ZSApO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBpY29uLCBhcHBlbmQgaXQsIGVsc2Ugbm90aGluZyB0aGVuIGFwcGVuZCB0aGUgdmFsdWVcblx0XHRcdFx0Ly8gdGhpcyBhdm9pZHMgcmVtb3ZhbCBvZiB0aGUgaWNvbiB3aGVuIHNldHRpbmcgbGFiZWwgdGV4dFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaHRtbCggdmFsdWUgKTtcblx0XHRcdFx0aWYgKCB0aGlzLmljb24gKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXR0YWNoSWNvbiggdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiApO1xuXHRcdFx0XHRcdHRoaXMuX2F0dGFjaEljb25TcGFjZSggdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgPSB2YWx1ZTtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRvIG9ubHkgY2hlY2sgZGlzYWJsZWQgaWYgaXRzIGFuIGVsZW1lbnQgdGhhdCBzdXBwb3J0cyB0aGlzIG90aGVyd2lzZVxuXHRcdC8vIGNoZWNrIGZvciB0aGUgZGlzYWJsZWQgY2xhc3MgdG8gZGV0ZXJtaW5lIHN0YXRlXG5cdFx0dmFyIGlzRGlzYWJsZWQgPSB0aGlzLmVsZW1lbnQuaXMoIFwiaW5wdXQsIGJ1dHRvblwiICkgP1xuXHRcdFx0dGhpcy5lbGVtZW50WyAwIF0uZGlzYWJsZWQgOiB0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoIFwidWktYnV0dG9uLWRpc2FibGVkXCIgKTtcblxuXHRcdGlmICggaXNEaXNhYmxlZCAhPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICkge1xuXHRcdFx0dGhpcy5fc2V0T3B0aW9ucyggeyBkaXNhYmxlZDogaXNEaXNhYmxlZCB9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdXBkYXRlVG9vbHRpcCgpO1xuXHR9XG59ICk7XG5cbi8vIERFUFJFQ0FURURcbmlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICkge1xuXG5cdC8vIFRleHQgYW5kIEljb25zIG9wdGlvbnNcblx0JC53aWRnZXQoIFwidWkuYnV0dG9uXCIsICQudWkuYnV0dG9uLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0dGV4dDogdHJ1ZSxcblx0XHRcdGljb25zOiB7XG5cdFx0XHRcdHByaW1hcnk6IG51bGwsXG5cdFx0XHRcdHNlY29uZGFyeTogbnVsbFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLnNob3dMYWJlbCAmJiAhdGhpcy5vcHRpb25zLnRleHQgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy5zaG93TGFiZWwgPSB0aGlzLm9wdGlvbnMudGV4dDtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5zaG93TGFiZWwgJiYgdGhpcy5vcHRpb25zLnRleHQgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy50ZXh0ID0gdGhpcy5vcHRpb25zLnNob3dMYWJlbDtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMub3B0aW9ucy5pY29uICYmICggdGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgfHxcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbnMuc2Vjb25kYXJ5ICkgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgKSB7XG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmljb24gPSB0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbiA9IHRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnk7XG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiA9IFwiZW5kXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMub3B0aW9ucy5pY29uICkge1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeSA9IHRoaXMub3B0aW9ucy5pY29uO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc3VwZXIoKTtcblx0XHR9LFxuXG5cdFx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIGtleSA9PT0gXCJ0ZXh0XCIgKSB7XG5cdFx0XHRcdHRoaXMuX3N1cGVyKCBcInNob3dMYWJlbFwiLCB2YWx1ZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGtleSA9PT0gXCJzaG93TGFiZWxcIiApIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmICgga2V5ID09PSBcImljb25cIiApIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdGlmICgga2V5ID09PSBcImljb25zXCIgKSB7XG5cdFx0XHRcdGlmICggdmFsdWUucHJpbWFyeSApIHtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uXCIsIHZhbHVlLnByaW1hcnkgKTtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uUG9zaXRpb25cIiwgXCJiZWdpbm5pbmdcIiApO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZS5zZWNvbmRhcnkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3VwZXIoIFwiaWNvblwiLCB2YWx1ZS5zZWNvbmRhcnkgKTtcblx0XHRcdFx0XHR0aGlzLl9zdXBlciggXCJpY29uUG9zaXRpb25cIiwgXCJlbmRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdXBlckFwcGx5KCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH0gKTtcblxuXHQkLmZuLmJ1dHRvbiA9ICggZnVuY3Rpb24oIG9yaWcgKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhdGhpcy5sZW5ndGggfHwgKCB0aGlzLmxlbmd0aCAmJiB0aGlzWyAwIF0udGFnTmFtZSAhPT0gXCJJTlBVVFwiICkgfHxcblx0XHRcdFx0XHQoIHRoaXMubGVuZ3RoICYmIHRoaXNbIDAgXS50YWdOYW1lID09PSBcIklOUFVUXCIgJiYgKFxuXHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBcInR5cGVcIiApICE9PSBcImNoZWNrYm94XCIgJiYgdGhpcy5hdHRyKCBcInR5cGVcIiApICE9PSBcInJhZGlvXCJcblx0XHRcdFx0XHQpICkgKSB7XG5cdFx0XHRcdHJldHVybiBvcmlnLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH1cblx0XHRcdGlmICggISQudWkuY2hlY2tib3hyYWRpbyApIHtcblx0XHRcdFx0JC5lcnJvciggXCJDaGVja2JveHJhZGlvIHdpZGdldCBtaXNzaW5nXCIgKTtcblx0XHRcdH1cblx0XHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tib3hyYWRpbygge1xuXHRcdFx0XHRcdFwiaWNvblwiOiBmYWxzZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jaGVja2JveHJhZGlvLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXHR9ICkoICQuZm4uYnV0dG9uICk7XG5cblx0JC5mbi5idXR0b25zZXQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEkLnVpLmNvbnRyb2xncm91cCApIHtcblx0XHRcdCQuZXJyb3IoIFwiQ29udHJvbGdyb3VwIHdpZGdldCBtaXNzaW5nXCIgKTtcblx0XHR9XG5cdFx0aWYgKCBhcmd1bWVudHNbIDAgXSA9PT0gXCJvcHRpb25cIiAmJiBhcmd1bWVudHNbIDEgXSA9PT0gXCJpdGVtc1wiICYmIGFyZ3VtZW50c1sgMiBdICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udHJvbGdyb3VwLmFwcGx5KCB0aGlzLFxuXHRcdFx0XHRbIGFyZ3VtZW50c1sgMCBdLCBcIml0ZW1zLmJ1dHRvblwiLCBhcmd1bWVudHNbIDIgXSBdICk7XG5cdFx0fVxuXHRcdGlmICggYXJndW1lbnRzWyAwIF0gPT09IFwib3B0aW9uXCIgJiYgYXJndW1lbnRzWyAxIF0gPT09IFwiaXRlbXNcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRyb2xncm91cC5hcHBseSggdGhpcywgWyBhcmd1bWVudHNbIDAgXSwgXCJpdGVtcy5idXR0b25cIiBdICk7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIGFyZ3VtZW50c1sgMCBdID09PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50c1sgMCBdLml0ZW1zICkge1xuXHRcdFx0YXJndW1lbnRzWyAwIF0uaXRlbXMgPSB7XG5cdFx0XHRcdGJ1dHRvbjogYXJndW1lbnRzWyAwIF0uaXRlbXNcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbnRyb2xncm91cC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH07XG59XG5cbnZhciB3aWRnZXRzQnV0dG9uID0gJC51aS5idXR0b247XG5cblxuLy8ganNjczpkaXNhYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vKiBqc2NzOmRpc2FibGUgcmVxdWlyZUNhbWVsQ2FzZU9yVXBwZXJDYXNlSWRlbnRpZmllcnMgKi9cbi8qIVxuICogalF1ZXJ5IFVJIERhdGVwaWNrZXIgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IERhdGVwaWNrZXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIGNhbGVuZGFyIGZyb20gYW4gaW5wdXQgb3IgaW5saW5lIGZvciBzZWxlY3RpbmcgZGF0ZXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZGF0ZXBpY2tlci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kYXRlcGlja2VyL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvZGF0ZXBpY2tlci5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuJC5leHRlbmQoICQudWksIHsgZGF0ZXBpY2tlcjogeyB2ZXJzaW9uOiBcIjEuMTIuMVwiIH0gfSApO1xuXG52YXIgZGF0ZXBpY2tlcl9pbnN0QWN0aXZlO1xuXG5mdW5jdGlvbiBkYXRlcGlja2VyX2dldFppbmRleCggZWxlbSApIHtcblx0dmFyIHBvc2l0aW9uLCB2YWx1ZTtcblx0d2hpbGUgKCBlbGVtLmxlbmd0aCAmJiBlbGVtWyAwIF0gIT09IGRvY3VtZW50ICkge1xuXG5cdFx0Ly8gSWdub3JlIHotaW5kZXggaWYgcG9zaXRpb24gaXMgc2V0IHRvIGEgdmFsdWUgd2hlcmUgei1pbmRleCBpcyBpZ25vcmVkIGJ5IHRoZSBicm93c2VyXG5cdFx0Ly8gVGhpcyBtYWtlcyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzXG5cdFx0Ly8gV2ViS2l0IGFsd2F5cyByZXR1cm5zIGF1dG8gaWYgdGhlIGVsZW1lbnQgaXMgcG9zaXRpb25lZFxuXHRcdHBvc2l0aW9uID0gZWxlbS5jc3MoIFwicG9zaXRpb25cIiApO1xuXHRcdGlmICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJyZWxhdGl2ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIElFIHJldHVybnMgMCB3aGVuIHpJbmRleCBpcyBub3Qgc3BlY2lmaWVkXG5cdFx0XHQvLyBvdGhlciBicm93c2VycyByZXR1cm4gYSBzdHJpbmdcblx0XHRcdC8vIHdlIGlnbm9yZSB0aGUgY2FzZSBvZiBuZXN0ZWQgZWxlbWVudHMgd2l0aCBhbiBleHBsaWNpdCB2YWx1ZSBvZiAwXG5cdFx0XHQvLyA8ZGl2IHN0eWxlPVwiei1pbmRleDogLTEwO1wiPjxkaXYgc3R5bGU9XCJ6LWluZGV4OiAwO1wiPjwvZGl2PjwvZGl2PlxuXHRcdFx0dmFsdWUgPSBwYXJzZUludCggZWxlbS5jc3MoIFwiekluZGV4XCIgKSwgMTAgKTtcblx0XHRcdGlmICggIWlzTmFOKCB2YWx1ZSApICYmIHZhbHVlICE9PSAwICkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsZW0gPSBlbGVtLnBhcmVudCgpO1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG4vKiBEYXRlIHBpY2tlciBtYW5hZ2VyLlxuICAgVXNlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgJC5kYXRlcGlja2VyLCB0byBpbnRlcmFjdCB3aXRoIHRoZSBkYXRlIHBpY2tlci5cbiAgIFNldHRpbmdzIGZvciAoZ3JvdXBzIG9mKSBkYXRlIHBpY2tlcnMgYXJlIG1haW50YWluZWQgaW4gYW4gaW5zdGFuY2Ugb2JqZWN0LFxuICAgYWxsb3dpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBzYW1lIHBhZ2UuICovXG5cbmZ1bmN0aW9uIERhdGVwaWNrZXIoKSB7XG5cdHRoaXMuX2N1ckluc3QgPSBudWxsOyAvLyBUaGUgY3VycmVudCBpbnN0YW5jZSBpbiB1c2Vcblx0dGhpcy5fa2V5RXZlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIGxhc3QgZXZlbnQgd2FzIGEga2V5IGV2ZW50XG5cdHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gW107IC8vIExpc3Qgb2YgZGF0ZSBwaWNrZXIgaW5wdXRzIHRoYXQgaGF2ZSBiZWVuIGRpc2FibGVkXG5cdHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gZmFsc2U7IC8vIFRydWUgaWYgdGhlIHBvcHVwIHBpY2tlciBpcyBzaG93aW5nICwgZmFsc2UgaWYgbm90XG5cdHRoaXMuX2luRGlhbG9nID0gZmFsc2U7IC8vIFRydWUgaWYgc2hvd2luZyB3aXRoaW4gYSBcImRpYWxvZ1wiLCBmYWxzZSBpZiBub3Rcblx0dGhpcy5fbWFpbkRpdklkID0gXCJ1aS1kYXRlcGlja2VyLWRpdlwiOyAvLyBUaGUgSUQgb2YgdGhlIG1haW4gZGF0ZXBpY2tlciBkaXZpc2lvblxuXHR0aGlzLl9pbmxpbmVDbGFzcyA9IFwidWktZGF0ZXBpY2tlci1pbmxpbmVcIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGlubGluZSBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fYXBwZW5kQ2xhc3MgPSBcInVpLWRhdGVwaWNrZXItYXBwZW5kXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBhcHBlbmQgbWFya2VyIGNsYXNzXG5cdHRoaXMuX3RyaWdnZXJDbGFzcyA9IFwidWktZGF0ZXBpY2tlci10cmlnZ2VyXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyIG1hcmtlciBjbGFzc1xuXHR0aGlzLl9kaWFsb2dDbGFzcyA9IFwidWktZGF0ZXBpY2tlci1kaWFsb2dcIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGRpYWxvZyBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fZGlzYWJsZUNsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBkaXNhYmxlZCBjb3ZlcmluZyBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MgPSBcInVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSB1bnNlbGVjdGFibGUgY2VsbCBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fY3VycmVudENsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5XCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRheSBtYXJrZXIgY2xhc3Ncblx0dGhpcy5fZGF5T3ZlckNsYXNzID0gXCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCI7IC8vIFRoZSBuYW1lIG9mIHRoZSBkYXkgaG92ZXIgbWFya2VyIGNsYXNzXG5cdHRoaXMucmVnaW9uYWwgPSBbXTsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlIGNvZGVcblx0dGhpcy5yZWdpb25hbFsgXCJcIiBdID0geyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzXG5cdFx0Y2xvc2VUZXh0OiBcIkRvbmVcIiwgLy8gRGlzcGxheSB0ZXh0IGZvciBjbG9zZSBsaW5rXG5cdFx0cHJldlRleHQ6IFwiUHJldlwiLCAvLyBEaXNwbGF5IHRleHQgZm9yIHByZXZpb3VzIG1vbnRoIGxpbmtcblx0XHRuZXh0VGV4dDogXCJOZXh0XCIsIC8vIERpc3BsYXkgdGV4dCBmb3IgbmV4dCBtb250aCBsaW5rXG5cdFx0Y3VycmVudFRleHQ6IFwiVG9kYXlcIiwgLy8gRGlzcGxheSB0ZXh0IGZvciBjdXJyZW50IG1vbnRoIGxpbmtcblx0XHRtb250aE5hbWVzOiBbIFwiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXG5cdFx0XHRcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIiBdLCAvLyBOYW1lcyBvZiBtb250aHMgZm9yIGRyb3AtZG93biBhbmQgZm9ybWF0dGluZ1xuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyBcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXM6IFsgXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyBcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiIF0sIC8vIEZvciBmb3JtYXR0aW5nXG5cdFx0ZGF5TmFtZXNNaW46IFsgXCJTdVwiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiIF0sIC8vIENvbHVtbiBoZWFkaW5ncyBmb3IgZGF5cyBzdGFydGluZyBhdCBTdW5kYXlcblx0XHR3ZWVrSGVhZGVyOiBcIldrXCIsIC8vIENvbHVtbiBoZWFkZXIgZm9yIHdlZWsgb2YgdGhlIHllYXJcblx0XHRkYXRlRm9ybWF0OiBcIm1tL2RkL3l5XCIsIC8vIFNlZSBmb3JtYXQgb3B0aW9ucyBvbiBwYXJzZURhdGVcblx0XHRmaXJzdERheTogMCwgLy8gVGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgU3VuID0gMCwgTW9uID0gMSwgLi4uXG5cdFx0aXNSVEw6IGZhbHNlLCAvLyBUcnVlIGlmIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2UsIGZhbHNlIGlmIGxlZnQtdG8tcmlnaHRcblx0XHRzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLCAvLyBUcnVlIGlmIHRoZSB5ZWFyIHNlbGVjdCBwcmVjZWRlcyBtb250aCwgZmFsc2UgZm9yIG1vbnRoIHRoZW4geWVhclxuXHRcdHllYXJTdWZmaXg6IFwiXCIgLy8gQWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgeWVhciBpbiB0aGUgbW9udGggaGVhZGVyc1xuXHR9O1xuXHR0aGlzLl9kZWZhdWx0cyA9IHsgLy8gR2xvYmFsIGRlZmF1bHRzIGZvciBhbGwgdGhlIGRhdGUgcGlja2VyIGluc3RhbmNlc1xuXHRcdHNob3dPbjogXCJmb2N1c1wiLCAvLyBcImZvY3VzXCIgZm9yIHBvcHVwIG9uIGZvY3VzLFxuXHRcdFx0Ly8gXCJidXR0b25cIiBmb3IgdHJpZ2dlciBidXR0b24sIG9yIFwiYm90aFwiIGZvciBlaXRoZXJcblx0XHRzaG93QW5pbTogXCJmYWRlSW5cIiwgLy8gTmFtZSBvZiBqUXVlcnkgYW5pbWF0aW9uIGZvciBwb3B1cFxuXHRcdHNob3dPcHRpb25zOiB7fSwgLy8gT3B0aW9ucyBmb3IgZW5oYW5jZWQgYW5pbWF0aW9uc1xuXHRcdGRlZmF1bHREYXRlOiBudWxsLCAvLyBVc2VkIHdoZW4gZmllbGQgaXMgYmxhbms6IGFjdHVhbCBkYXRlLFxuXHRcdFx0Ly8gKy8tbnVtYmVyIGZvciBvZmZzZXQgZnJvbSB0b2RheSwgbnVsbCBmb3IgdG9kYXlcblx0XHRhcHBlbmRUZXh0OiBcIlwiLCAvLyBEaXNwbGF5IHRleHQgZm9sbG93aW5nIHRoZSBpbnB1dCBib3gsIGUuZy4gc2hvd2luZyB0aGUgZm9ybWF0XG5cdFx0YnV0dG9uVGV4dDogXCIuLi5cIiwgLy8gVGV4dCBmb3IgdHJpZ2dlciBidXR0b25cblx0XHRidXR0b25JbWFnZTogXCJcIiwgLy8gVVJMIGZvciB0cmlnZ2VyIGJ1dHRvbiBpbWFnZVxuXHRcdGJ1dHRvbkltYWdlT25seTogZmFsc2UsIC8vIFRydWUgaWYgdGhlIGltYWdlIGFwcGVhcnMgYWxvbmUsIGZhbHNlIGlmIGl0IGFwcGVhcnMgb24gYSBidXR0b25cblx0XHRoaWRlSWZOb1ByZXZOZXh0OiBmYWxzZSwgLy8gVHJ1ZSB0byBoaWRlIG5leHQvcHJldmlvdXMgbW9udGggbGlua3Ncblx0XHRcdC8vIGlmIG5vdCBhcHBsaWNhYmxlLCBmYWxzZSB0byBqdXN0IGRpc2FibGUgdGhlbVxuXHRcdG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6IGZhbHNlLCAvLyBUcnVlIGlmIGRhdGUgZm9ybWF0dGluZyBhcHBsaWVkIHRvIHByZXYvdG9kYXkvbmV4dCBsaW5rc1xuXHRcdGdvdG9DdXJyZW50OiBmYWxzZSwgLy8gVHJ1ZSBpZiB0b2RheSBsaW5rIGdvZXMgYmFjayB0byBjdXJyZW50IHNlbGVjdGlvbiBpbnN0ZWFkXG5cdFx0Y2hhbmdlTW9udGg6IGZhbHNlLCAvLyBUcnVlIGlmIG1vbnRoIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHRcblx0XHRjaGFuZ2VZZWFyOiBmYWxzZSwgLy8gVHJ1ZSBpZiB5ZWFyIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHRcblx0XHR5ZWFyUmFuZ2U6IFwiYy0xMDpjKzEwXCIsIC8vIFJhbmdlIG9mIHllYXJzIHRvIGRpc3BsYXkgaW4gZHJvcC1kb3duLFxuXHRcdFx0Ly8gZWl0aGVyIHJlbGF0aXZlIHRvIHRvZGF5J3MgeWVhciAoLW5uOitubiksIHJlbGF0aXZlIHRvIGN1cnJlbnRseSBkaXNwbGF5ZWQgeWVhclxuXHRcdFx0Ly8gKGMtbm46YytubiksIGFic29sdXRlIChubm5uOm5ubm4pLCBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZSAobm5ubjotbilcblx0XHRzaG93T3RoZXJNb250aHM6IGZhbHNlLCAvLyBUcnVlIHRvIHNob3cgZGF0ZXMgaW4gb3RoZXIgbW9udGhzLCBmYWxzZSB0byBsZWF2ZSBibGFua1xuXHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSwgLy8gVHJ1ZSB0byBhbGxvdyBzZWxlY3Rpb24gb2YgZGF0ZXMgaW4gb3RoZXIgbW9udGhzLCBmYWxzZSBmb3IgdW5zZWxlY3RhYmxlXG5cdFx0c2hvd1dlZWs6IGZhbHNlLCAvLyBUcnVlIHRvIHNob3cgd2VlayBvZiB0aGUgeWVhciwgZmFsc2UgdG8gbm90IHNob3cgaXRcblx0XHRjYWxjdWxhdGVXZWVrOiB0aGlzLmlzbzg2MDFXZWVrLCAvLyBIb3cgdG8gY2FsY3VsYXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyLFxuXHRcdFx0Ly8gdGFrZXMgYSBEYXRlIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgZm9yIGl0XG5cdFx0c2hvcnRZZWFyQ3V0b2ZmOiBcIisxMFwiLCAvLyBTaG9ydCB5ZWFyIHZhbHVlcyA8IHRoaXMgYXJlIGluIHRoZSBjdXJyZW50IGNlbnR1cnksXG5cdFx0XHQvLyA+IHRoaXMgYXJlIGluIHRoZSBwcmV2aW91cyBjZW50dXJ5LFxuXHRcdFx0Ly8gc3RyaW5nIHZhbHVlIHN0YXJ0aW5nIHdpdGggXCIrXCIgZm9yIGN1cnJlbnQgeWVhciArIHZhbHVlXG5cdFx0bWluRGF0ZTogbnVsbCwgLy8gVGhlIGVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSwgb3IgbnVsbCBmb3Igbm8gbGltaXRcblx0XHRtYXhEYXRlOiBudWxsLCAvLyBUaGUgbGF0ZXN0IHNlbGVjdGFibGUgZGF0ZSwgb3IgbnVsbCBmb3Igbm8gbGltaXRcblx0XHRkdXJhdGlvbjogXCJmYXN0XCIsIC8vIER1cmF0aW9uIG9mIGRpc3BsYXkvY2xvc3VyZVxuXHRcdGJlZm9yZVNob3dEYXk6IG51bGwsIC8vIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBkYXRlIGFuZCByZXR1cm5zIGFuIGFycmF5IHdpdGhcblx0XHRcdC8vIFswXSA9IHRydWUgaWYgc2VsZWN0YWJsZSwgZmFsc2UgaWYgbm90LCBbMV0gPSBjdXN0b20gQ1NTIGNsYXNzIG5hbWUocykgb3IgXCJcIixcblx0XHRcdC8vIFsyXSA9IGNlbGwgdGl0bGUgKG9wdGlvbmFsKSwgZS5nLiAkLmRhdGVwaWNrZXIubm9XZWVrZW5kc1xuXHRcdGJlZm9yZVNob3c6IG51bGwsIC8vIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gaW5wdXQgZmllbGQgYW5kXG5cdFx0XHQvLyByZXR1cm5zIGEgc2V0IG9mIGN1c3RvbSBzZXR0aW5ncyBmb3IgdGhlIGRhdGUgcGlja2VyXG5cdFx0b25TZWxlY3Q6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkXG5cdFx0b25DaGFuZ2VNb250aFllYXI6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1vbnRoIG9yIHllYXIgaXMgY2hhbmdlZFxuXHRcdG9uQ2xvc2U6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIGRhdGVwaWNrZXIgaXMgY2xvc2VkXG5cdFx0bnVtYmVyT2ZNb250aHM6IDEsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc2hvdyBhdCBhIHRpbWVcblx0XHRzaG93Q3VycmVudEF0UG9zOiAwLCAvLyBUaGUgcG9zaXRpb24gaW4gbXVsdGlwZSBtb250aHMgYXQgd2hpY2ggdG8gc2hvdyB0aGUgY3VycmVudCBtb250aCAoc3RhcnRpbmcgYXQgMClcblx0XHRzdGVwTW9udGhzOiAxLCAvLyBOdW1iZXIgb2YgbW9udGhzIHRvIHN0ZXAgYmFjay9mb3J3YXJkXG5cdFx0c3RlcEJpZ01vbnRoczogMTIsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc3RlcCBiYWNrL2ZvcndhcmQgZm9yIHRoZSBiaWcgbGlua3Ncblx0XHRhbHRGaWVsZDogXCJcIiwgLy8gU2VsZWN0b3IgZm9yIGFuIGFsdGVybmF0ZSBmaWVsZCB0byBzdG9yZSBzZWxlY3RlZCBkYXRlcyBpbnRvXG5cdFx0YWx0Rm9ybWF0OiBcIlwiLCAvLyBUaGUgZGF0ZSBmb3JtYXQgdG8gdXNlIGZvciB0aGUgYWx0ZXJuYXRlIGZpZWxkXG5cdFx0Y29uc3RyYWluSW5wdXQ6IHRydWUsIC8vIFRoZSBpbnB1dCBpcyBjb25zdHJhaW5lZCBieSB0aGUgY3VycmVudCBkYXRlIGZvcm1hdFxuXHRcdHNob3dCdXR0b25QYW5lbDogZmFsc2UsIC8vIFRydWUgdG8gc2hvdyBidXR0b24gcGFuZWwsIGZhbHNlIHRvIG5vdCBzaG93IGl0XG5cdFx0YXV0b1NpemU6IGZhbHNlLCAvLyBUcnVlIHRvIHNpemUgdGhlIGlucHV0IGZvciB0aGUgZGF0ZSBmb3JtYXQsIGZhbHNlIHRvIGxlYXZlIGFzIGlzXG5cdFx0ZGlzYWJsZWQ6IGZhbHNlIC8vIFRoZSBpbml0aWFsIGRpc2FibGVkIHN0YXRlXG5cdH07XG5cdCQuZXh0ZW5kKCB0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsgXCJcIiBdICk7XG5cdHRoaXMucmVnaW9uYWwuZW4gPSAkLmV4dGVuZCggdHJ1ZSwge30sIHRoaXMucmVnaW9uYWxbIFwiXCIgXSApO1xuXHR0aGlzLnJlZ2lvbmFsWyBcImVuLVVTXCIgXSA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgdGhpcy5yZWdpb25hbC5lbiApO1xuXHR0aGlzLmRwRGl2ID0gZGF0ZXBpY2tlcl9iaW5kSG92ZXIoICQoIFwiPGRpdiBpZD0nXCIgKyB0aGlzLl9tYWluRGl2SWQgKyBcIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIiApICk7XG59XG5cbiQuZXh0ZW5kKCBEYXRlcGlja2VyLnByb3RvdHlwZSwge1xuXHQvKiBDbGFzcyBuYW1lIGFkZGVkIHRvIGVsZW1lbnRzIHRvIGluZGljYXRlIGFscmVhZHkgY29uZmlndXJlZCB3aXRoIGEgZGF0ZSBwaWNrZXIuICovXG5cdG1hcmtlckNsYXNzTmFtZTogXCJoYXNEYXRlcGlja2VyXCIsXG5cblx0Ly9LZWVwIHRyYWNrIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIGRpc3BsYXllZCAoc2VlICM3MDQzKVxuXHRtYXhSb3dzOiA0LFxuXG5cdC8vIFRPRE8gcmVuYW1lIHRvIFwid2lkZ2V0XCIgd2hlbiBzd2l0Y2hpbmcgdG8gd2lkZ2V0IGZhY3Rvcnlcblx0X3dpZGdldERhdGVwaWNrZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmRwRGl2O1xuXHR9LFxuXG5cdC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZSBkYXRlIHBpY2tlci5cblx0ICogQHBhcmFtICBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgYXMgZGVmYXVsdHMgKGFub255bW91cyBvYmplY3QpXG5cdCAqIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0XG5cdCAqL1xuXHRzZXREZWZhdWx0czogZnVuY3Rpb24oIHNldHRpbmdzICkge1xuXHRcdGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCB0aGlzLl9kZWZhdWx0cywgc2V0dGluZ3MgfHwge30gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKiBBdHRhY2ggdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHBhcmFtICBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgZm9yIHRoaXMgZGF0ZSBwaWNrZXIgaW5zdGFuY2UgKGFub255bW91cylcblx0ICovXG5cdF9hdHRhY2hEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHR2YXIgbm9kZU5hbWUsIGlubGluZSwgaW5zdDtcblx0XHRub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlubGluZSA9ICggbm9kZU5hbWUgPT09IFwiZGl2XCIgfHwgbm9kZU5hbWUgPT09IFwic3BhblwiICk7XG5cdFx0aWYgKCAhdGFyZ2V0LmlkICkge1xuXHRcdFx0dGhpcy51dWlkICs9IDE7XG5cdFx0XHR0YXJnZXQuaWQgPSBcImRwXCIgKyB0aGlzLnV1aWQ7XG5cdFx0fVxuXHRcdGluc3QgPSB0aGlzLl9uZXdJbnN0KCAkKCB0YXJnZXQgKSwgaW5saW5lICk7XG5cdFx0aW5zdC5zZXR0aW5ncyA9ICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3MgfHwge30gKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHR0aGlzLl9jb25uZWN0RGF0ZXBpY2tlciggdGFyZ2V0LCBpbnN0ICk7XG5cdFx0fSBlbHNlIGlmICggaW5saW5lICkge1xuXHRcdFx0dGhpcy5faW5saW5lRGF0ZXBpY2tlciggdGFyZ2V0LCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvYmplY3QuICovXG5cdF9uZXdJbnN0OiBmdW5jdGlvbiggdGFyZ2V0LCBpbmxpbmUgKSB7XG5cdFx0dmFyIGlkID0gdGFyZ2V0WyAwIF0uaWQucmVwbGFjZSggLyhbXkEtWmEtejAtOV9cXC1dKS9nLCBcIlxcXFxcXFxcJDFcIiApOyAvLyBlc2NhcGUgalF1ZXJ5IG1ldGEgY2hhcnNcblx0XHRyZXR1cm4geyBpZDogaWQsIGlucHV0OiB0YXJnZXQsIC8vIGFzc29jaWF0ZWQgdGFyZ2V0XG5cdFx0XHRzZWxlY3RlZERheTogMCwgc2VsZWN0ZWRNb250aDogMCwgc2VsZWN0ZWRZZWFyOiAwLCAvLyBjdXJyZW50IHNlbGVjdGlvblxuXHRcdFx0ZHJhd01vbnRoOiAwLCBkcmF3WWVhcjogMCwgLy8gbW9udGggYmVpbmcgZHJhd25cblx0XHRcdGlubGluZTogaW5saW5lLCAvLyBpcyBkYXRlcGlja2VyIGlubGluZSBvciBub3Rcblx0XHRcdGRwRGl2OiAoICFpbmxpbmUgPyB0aGlzLmRwRGl2IDogLy8gcHJlc2VudGF0aW9uIGRpdlxuXHRcdFx0ZGF0ZXBpY2tlcl9iaW5kSG92ZXIoICQoIFwiPGRpdiBjbGFzcz0nXCIgKyB0aGlzLl9pbmxpbmVDbGFzcyArIFwiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIiApICkgKSB9O1xuXHR9LFxuXG5cdC8qIEF0dGFjaCB0aGUgZGF0ZSBwaWNrZXIgdG8gYW4gaW5wdXQgZmllbGQuICovXG5cdF9jb25uZWN0RGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCwgaW5zdCApIHtcblx0XHR2YXIgaW5wdXQgPSAkKCB0YXJnZXQgKTtcblx0XHRpbnN0LmFwcGVuZCA9ICQoIFtdICk7XG5cdFx0aW5zdC50cmlnZ2VyID0gJCggW10gKTtcblx0XHRpZiAoIGlucHV0Lmhhc0NsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9hdHRhY2htZW50cyggaW5wdXQsIGluc3QgKTtcblx0XHRpbnB1dC5hZGRDbGFzcyggdGhpcy5tYXJrZXJDbGFzc05hbWUgKS5vbiggXCJrZXlkb3duXCIsIHRoaXMuX2RvS2V5RG93biApLlxuXHRcdFx0b24oIFwia2V5cHJlc3NcIiwgdGhpcy5fZG9LZXlQcmVzcyApLm9uKCBcImtleXVwXCIsIHRoaXMuX2RvS2V5VXAgKTtcblx0XHR0aGlzLl9hdXRvU2l6ZSggaW5zdCApO1xuXHRcdCQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXG5cdFx0Ly9JZiBkaXNhYmxlZCBvcHRpb24gaXMgdHJ1ZSwgZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbmNlIGl0IGhhcyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCAoc2VlIHRpY2tldCAjNTY2NSlcblx0XHRpZiAoIGluc3Quc2V0dGluZ3MuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlciggdGFyZ2V0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIE1ha2UgYXR0YWNobWVudHMgYmFzZWQgb24gc2V0dGluZ3MuICovXG5cdF9hdHRhY2htZW50czogZnVuY3Rpb24oIGlucHV0LCBpbnN0ICkge1xuXHRcdHZhciBzaG93T24sIGJ1dHRvblRleHQsIGJ1dHRvbkltYWdlLFxuXHRcdFx0YXBwZW5kVGV4dCA9IHRoaXMuX2dldCggaW5zdCwgXCJhcHBlbmRUZXh0XCIgKSxcblx0XHRcdGlzUlRMID0gdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKTtcblxuXHRcdGlmICggaW5zdC5hcHBlbmQgKSB7XG5cdFx0XHRpbnN0LmFwcGVuZC5yZW1vdmUoKTtcblx0XHR9XG5cdFx0aWYgKCBhcHBlbmRUZXh0ICkge1xuXHRcdFx0aW5zdC5hcHBlbmQgPSAkKCBcIjxzcGFuIGNsYXNzPSdcIiArIHRoaXMuX2FwcGVuZENsYXNzICsgXCInPlwiICsgYXBwZW5kVGV4dCArIFwiPC9zcGFuPlwiICk7XG5cdFx0XHRpbnB1dFsgaXNSVEwgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiIF0oIGluc3QuYXBwZW5kICk7XG5cdFx0fVxuXG5cdFx0aW5wdXQub2ZmKCBcImZvY3VzXCIsIHRoaXMuX3Nob3dEYXRlcGlja2VyICk7XG5cblx0XHRpZiAoIGluc3QudHJpZ2dlciApIHtcblx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRzaG93T24gPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd09uXCIgKTtcblx0XHRpZiAoIHNob3dPbiA9PT0gXCJmb2N1c1wiIHx8IHNob3dPbiA9PT0gXCJib3RoXCIgKSB7IC8vIHBvcC11cCBkYXRlIHBpY2tlciB3aGVuIGluIHRoZSBtYXJrZWQgZmllbGRcblx0XHRcdGlucHV0Lm9uKCBcImZvY3VzXCIsIHRoaXMuX3Nob3dEYXRlcGlja2VyICk7XG5cdFx0fVxuXHRcdGlmICggc2hvd09uID09PSBcImJ1dHRvblwiIHx8IHNob3dPbiA9PT0gXCJib3RoXCIgKSB7IC8vIHBvcC11cCBkYXRlIHBpY2tlciB3aGVuIGJ1dHRvbiBjbGlja2VkXG5cdFx0XHRidXR0b25UZXh0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImJ1dHRvblRleHRcIiApO1xuXHRcdFx0YnV0dG9uSW1hZ2UgPSB0aGlzLl9nZXQoIGluc3QsIFwiYnV0dG9uSW1hZ2VcIiApO1xuXHRcdFx0aW5zdC50cmlnZ2VyID0gJCggdGhpcy5fZ2V0KCBpbnN0LCBcImJ1dHRvbkltYWdlT25seVwiICkgP1xuXHRcdFx0XHQkKCBcIjxpbWcvPlwiICkuYWRkQ2xhc3MoIHRoaXMuX3RyaWdnZXJDbGFzcyApLlxuXHRcdFx0XHRcdGF0dHIoIHsgc3JjOiBidXR0b25JbWFnZSwgYWx0OiBidXR0b25UZXh0LCB0aXRsZTogYnV0dG9uVGV4dCB9ICkgOlxuXHRcdFx0XHQkKCBcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIiApLmFkZENsYXNzKCB0aGlzLl90cmlnZ2VyQ2xhc3MgKS5cblx0XHRcdFx0XHRodG1sKCAhYnV0dG9uSW1hZ2UgPyBidXR0b25UZXh0IDogJCggXCI8aW1nLz5cIiApLmF0dHIoXG5cdFx0XHRcdFx0eyBzcmM6YnV0dG9uSW1hZ2UsIGFsdDpidXR0b25UZXh0LCB0aXRsZTpidXR0b25UZXh0IH0gKSApICk7XG5cdFx0XHRpbnB1dFsgaXNSVEwgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiIF0oIGluc3QudHJpZ2dlciApO1xuXHRcdFx0aW5zdC50cmlnZ2VyLm9uKCBcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPT09IGlucHV0WyAwIF0gKSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ICE9PSBpbnB1dFsgMCBdICkge1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKCBpbnB1dFsgMCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlciggaW5wdXRbIDAgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0LyogQXBwbHkgdGhlIG1heGltdW0gbGVuZ3RoIGZvciB0aGUgZGF0ZSBmb3JtYXQuICovXG5cdF9hdXRvU2l6ZTogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0aWYgKCB0aGlzLl9nZXQoIGluc3QsIFwiYXV0b1NpemVcIiApICYmICFpbnN0LmlubGluZSApIHtcblx0XHRcdHZhciBmaW5kTWF4LCBtYXgsIG1heEksIGksXG5cdFx0XHRcdGRhdGUgPSBuZXcgRGF0ZSggMjAwOSwgMTIgLSAxLCAyMCApLCAvLyBFbnN1cmUgZG91YmxlIGRpZ2l0c1xuXHRcdFx0XHRkYXRlRm9ybWF0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApO1xuXG5cdFx0XHRpZiAoIGRhdGVGb3JtYXQubWF0Y2goIC9bRE1dLyApICkge1xuXHRcdFx0XHRmaW5kTWF4ID0gZnVuY3Rpb24oIG5hbWVzICkge1xuXHRcdFx0XHRcdG1heCA9IDA7XG5cdFx0XHRcdFx0bWF4SSA9IDA7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGlmICggbmFtZXNbIGkgXS5sZW5ndGggPiBtYXggKSB7XG5cdFx0XHRcdFx0XHRcdG1heCA9IG5hbWVzWyBpIF0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRtYXhJID0gaTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1heEk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGRhdGUuc2V0TW9udGgoIGZpbmRNYXgoIHRoaXMuX2dldCggaW5zdCwgKCBkYXRlRm9ybWF0Lm1hdGNoKCAvTU0vICkgP1xuXHRcdFx0XHRcdFwibW9udGhOYW1lc1wiIDogXCJtb250aE5hbWVzU2hvcnRcIiApICkgKSApO1xuXHRcdFx0XHRkYXRlLnNldERhdGUoIGZpbmRNYXgoIHRoaXMuX2dldCggaW5zdCwgKCBkYXRlRm9ybWF0Lm1hdGNoKCAvREQvICkgP1xuXHRcdFx0XHRcdFwiZGF5TmFtZXNcIiA6IFwiZGF5TmFtZXNTaG9ydFwiICkgKSApICsgMjAgLSBkYXRlLmdldERheSgpICk7XG5cdFx0XHR9XG5cdFx0XHRpbnN0LmlucHV0LmF0dHIoIFwic2l6ZVwiLCB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBkYXRlICkubGVuZ3RoICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEF0dGFjaCBhbiBpbmxpbmUgZGF0ZSBwaWNrZXIgdG8gYSBkaXYuICovXG5cdF9pbmxpbmVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBpbnN0ICkge1xuXHRcdHZhciBkaXZTcGFuID0gJCggdGFyZ2V0ICk7XG5cdFx0aWYgKCBkaXZTcGFuLmhhc0NsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkaXZTcGFuLmFkZENsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApLmFwcGVuZCggaW5zdC5kcERpdiApO1xuXHRcdCQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXHRcdHRoaXMuX3NldERhdGUoIGluc3QsIHRoaXMuX2dldERlZmF1bHREYXRlKCBpbnN0ICksIHRydWUgKTtcblx0XHR0aGlzLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cblx0XHQvL0lmIGRpc2FibGVkIG9wdGlvbiBpcyB0cnVlLCBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIGJlZm9yZSBzaG93aW5nIGl0IChzZWUgdGlja2V0ICM1NjY1KVxuXHRcdGlmICggaW5zdC5zZXR0aW5ncy5kaXNhYmxlZCApIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKCB0YXJnZXQgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgZGlzcGxheTpibG9jayBpbiBwbGFjZSBvZiBpbnN0LmRwRGl2LnNob3coKSB3aGljaCB3b24ndCB3b3JrIG9uIGRpc2Nvbm5lY3RlZCBlbGVtZW50c1xuXHRcdC8vIGh0dHA6Ly9idWdzLmpxdWVyeXVpLmNvbS90aWNrZXQvNzU1MiAtIEEgRGF0ZXBpY2tlciBjcmVhdGVkIG9uIGEgZGV0YWNoZWQgZGl2IGhhcyB6ZXJvIGhlaWdodFxuXHRcdGluc3QuZHBEaXYuY3NzKCBcImRpc3BsYXlcIiwgXCJibG9ja1wiICk7XG5cdH0sXG5cblx0LyogUG9wLXVwIHRoZSBkYXRlIHBpY2tlciBpbiBhIFwiZGlhbG9nXCIgYm94LlxuXHQgKiBAcGFyYW0gIGlucHV0IGVsZW1lbnQgLSBpZ25vcmVkXG5cdCAqIEBwYXJhbSAgZGF0ZVx0c3RyaW5nIG9yIERhdGUgLSB0aGUgaW5pdGlhbCBkYXRlIHRvIGRpc3BsYXlcblx0ICogQHBhcmFtICBvblNlbGVjdCAgZnVuY3Rpb24gLSB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZFxuXHQgKiBAcGFyYW0gIHNldHRpbmdzICBvYmplY3QgLSB1cGRhdGUgdGhlIGRpYWxvZyBkYXRlIHBpY2tlciBpbnN0YW5jZSdzIHNldHRpbmdzIChhbm9ueW1vdXMgb2JqZWN0KVxuXHQgKiBAcGFyYW0gIHBvcyBpbnRbMl0gLSBjb29yZGluYXRlcyBmb3IgdGhlIGRpYWxvZydzIHBvc2l0aW9uIHdpdGhpbiB0aGUgc2NyZWVuIG9yXG5cdCAqXHRcdFx0XHRcdGV2ZW50IC0gd2l0aCB4L3kgY29vcmRpbmF0ZXMgb3Jcblx0ICpcdFx0XHRcdFx0bGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgKHNjcmVlbiBjZW50cmUpXG5cdCAqIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0XG5cdCAqL1xuXHRfZGlhbG9nRGF0ZXBpY2tlcjogZnVuY3Rpb24oIGlucHV0LCBkYXRlLCBvblNlbGVjdCwgc2V0dGluZ3MsIHBvcyApIHtcblx0XHR2YXIgaWQsIGJyb3dzZXJXaWR0aCwgYnJvd3NlckhlaWdodCwgc2Nyb2xsWCwgc2Nyb2xsWSxcblx0XHRcdGluc3QgPSB0aGlzLl9kaWFsb2dJbnN0OyAvLyBpbnRlcm5hbCBpbnN0YW5jZVxuXG5cdFx0aWYgKCAhaW5zdCApIHtcblx0XHRcdHRoaXMudXVpZCArPSAxO1xuXHRcdFx0aWQgPSBcImRwXCIgKyB0aGlzLnV1aWQ7XG5cdFx0XHR0aGlzLl9kaWFsb2dJbnB1dCA9ICQoIFwiPGlucHV0IHR5cGU9J3RleHQnIGlkPSdcIiArIGlkICtcblx0XHRcdFx0XCInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPlwiICk7XG5cdFx0XHR0aGlzLl9kaWFsb2dJbnB1dC5vbiggXCJrZXlkb3duXCIsIHRoaXMuX2RvS2V5RG93biApO1xuXHRcdFx0JCggXCJib2R5XCIgKS5hcHBlbmQoIHRoaXMuX2RpYWxvZ0lucHV0ICk7XG5cdFx0XHRpbnN0ID0gdGhpcy5fZGlhbG9nSW5zdCA9IHRoaXMuX25ld0luc3QoIHRoaXMuX2RpYWxvZ0lucHV0LCBmYWxzZSApO1xuXHRcdFx0aW5zdC5zZXR0aW5ncyA9IHt9O1xuXHRcdFx0JC5kYXRhKCB0aGlzLl9kaWFsb2dJbnB1dFsgMCBdLCBcImRhdGVwaWNrZXJcIiwgaW5zdCApO1xuXHRcdH1cblx0XHRkYXRlcGlja2VyX2V4dGVuZFJlbW92ZSggaW5zdC5zZXR0aW5ncywgc2V0dGluZ3MgfHwge30gKTtcblx0XHRkYXRlID0gKCBkYXRlICYmIGRhdGUuY29uc3RydWN0b3IgPT09IERhdGUgPyB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBkYXRlICkgOiBkYXRlICk7XG5cdFx0dGhpcy5fZGlhbG9nSW5wdXQudmFsKCBkYXRlICk7XG5cblx0XHR0aGlzLl9wb3MgPSAoIHBvcyA/ICggcG9zLmxlbmd0aCA/IHBvcyA6IFsgcG9zLnBhZ2VYLCBwb3MucGFnZVkgXSApIDogbnVsbCApO1xuXHRcdGlmICggIXRoaXMuX3BvcyApIHtcblx0XHRcdGJyb3dzZXJXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblx0XHRcdGJyb3dzZXJIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXHRcdFx0c2Nyb2xsWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDtcblx0XHRcdHNjcm9sbFkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xuXHRcdFx0dGhpcy5fcG9zID0gLy8gc2hvdWxkIHVzZSBhY3R1YWwgd2lkdGgvaGVpZ2h0IGJlbG93XG5cdFx0XHRcdFsgKCBicm93c2VyV2lkdGggLyAyICkgLSAxMDAgKyBzY3JvbGxYLCAoIGJyb3dzZXJIZWlnaHQgLyAyICkgLSAxNTAgKyBzY3JvbGxZIF07XG5cdFx0fVxuXG5cdFx0Ly8gTW92ZSBpbnB1dCBvbiBzY3JlZW4gZm9yIGZvY3VzLCBidXQgaGlkZGVuIGJlaGluZCBkaWFsb2dcblx0XHR0aGlzLl9kaWFsb2dJbnB1dC5jc3MoIFwibGVmdFwiLCAoIHRoaXMuX3Bvc1sgMCBdICsgMjAgKSArIFwicHhcIiApLmNzcyggXCJ0b3BcIiwgdGhpcy5fcG9zWyAxIF0gKyBcInB4XCIgKTtcblx0XHRpbnN0LnNldHRpbmdzLm9uU2VsZWN0ID0gb25TZWxlY3Q7XG5cdFx0dGhpcy5faW5EaWFsb2cgPSB0cnVlO1xuXHRcdHRoaXMuZHBEaXYuYWRkQ2xhc3MoIHRoaXMuX2RpYWxvZ0NsYXNzICk7XG5cdFx0dGhpcy5fc2hvd0RhdGVwaWNrZXIoIHRoaXMuX2RpYWxvZ0lucHV0WyAwIF0gKTtcblx0XHRpZiAoICQuYmxvY2tVSSApIHtcblx0XHRcdCQuYmxvY2tVSSggdGhpcy5kcERpdiApO1xuXHRcdH1cblx0XHQkLmRhdGEoIHRoaXMuX2RpYWxvZ0lucHV0WyAwIF0sIFwiZGF0ZXBpY2tlclwiLCBpbnN0ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyogRGV0YWNoIGEgZGF0ZXBpY2tlciBmcm9tIGl0cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gIHRhcmdldFx0ZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKi9cblx0X2Rlc3Ryb3lEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBub2RlTmFtZSxcblx0XHRcdCR0YXJnZXQgPSAkKCB0YXJnZXQgKSxcblx0XHRcdGluc3QgPSAkLmRhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblxuXHRcdGlmICggISR0YXJnZXQuaGFzQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHQkLnJlbW92ZURhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRpbnN0LmFwcGVuZC5yZW1vdmUoKTtcblx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdCR0YXJnZXQucmVtb3ZlQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkuXG5cdFx0XHRcdG9mZiggXCJmb2N1c1wiLCB0aGlzLl9zaG93RGF0ZXBpY2tlciApLlxuXHRcdFx0XHRvZmYoIFwia2V5ZG93blwiLCB0aGlzLl9kb0tleURvd24gKS5cblx0XHRcdFx0b2ZmKCBcImtleXByZXNzXCIsIHRoaXMuX2RvS2V5UHJlc3MgKS5cblx0XHRcdFx0b2ZmKCBcImtleXVwXCIsIHRoaXMuX2RvS2V5VXAgKTtcblx0XHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJkaXZcIiB8fCBub2RlTmFtZSA9PT0gXCJzcGFuXCIgKSB7XG5cdFx0XHQkdGFyZ2V0LnJlbW92ZUNsYXNzKCB0aGlzLm1hcmtlckNsYXNzTmFtZSApLmVtcHR5KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRlcGlja2VyX2luc3RBY3RpdmUgPT09IGluc3QgKSB7XG5cdFx0XHRkYXRlcGlja2VyX2luc3RBY3RpdmUgPSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKiBFbmFibGUgdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9lbmFibGVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciBub2RlTmFtZSwgaW5saW5lLFxuXHRcdFx0JHRhcmdldCA9ICQoIHRhcmdldCApLFxuXHRcdFx0aW5zdCA9ICQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiApO1xuXG5cdFx0aWYgKCAhJHRhcmdldC5oYXNDbGFzcyggdGhpcy5tYXJrZXJDbGFzc05hbWUgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHRhcmdldC5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlciggXCJidXR0b25cIiApLlxuXHRcdFx0XHRlYWNoKCBmdW5jdGlvbigpIHsgdGhpcy5kaXNhYmxlZCA9IGZhbHNlOyB9ICkuZW5kKCkuXG5cdFx0XHRcdGZpbHRlciggXCJpbWdcIiApLmNzcyggeyBvcGFjaXR5OiBcIjEuMFwiLCBjdXJzb3I6IFwiXCIgfSApO1xuXHRcdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImRpdlwiIHx8IG5vZGVOYW1lID09PSBcInNwYW5cIiApIHtcblx0XHRcdGlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4oIFwiLlwiICsgdGhpcy5faW5saW5lQ2xhc3MgKTtcblx0XHRcdGlubGluZS5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHRcdGlubGluZS5maW5kKCBcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIgKS5cblx0XHRcdFx0cHJvcCggXCJkaXNhYmxlZFwiLCBmYWxzZSApO1xuXHRcdH1cblx0XHR0aGlzLl9kaXNhYmxlZElucHV0cyA9ICQubWFwKCB0aGlzLl9kaXNhYmxlZElucHV0cyxcblx0XHRcdGZ1bmN0aW9uKCB2YWx1ZSApIHsgcmV0dXJuICggdmFsdWUgPT09IHRhcmdldCA/IG51bGwgOiB2YWx1ZSApOyB9ICk7IC8vIGRlbGV0ZSBlbnRyeVxuXHR9LFxuXG5cdC8qIERpc2FibGUgdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9kaXNhYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgbm9kZU5hbWUsIGlubGluZSxcblx0XHRcdCR0YXJnZXQgPSAkKCB0YXJnZXQgKSxcblx0XHRcdGluc3QgPSAkLmRhdGEoIHRhcmdldCwgXCJkYXRlcGlja2VyXCIgKTtcblxuXHRcdGlmICggISR0YXJnZXQuaGFzQ2xhc3MoIHRoaXMubWFya2VyQ2xhc3NOYW1lICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bm9kZU5hbWUgPSB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHR0YXJnZXQuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlciggXCJidXR0b25cIiApLlxuXHRcdFx0XHRlYWNoKCBmdW5jdGlvbigpIHsgdGhpcy5kaXNhYmxlZCA9IHRydWU7IH0gKS5lbmQoKS5cblx0XHRcdFx0ZmlsdGVyKCBcImltZ1wiICkuY3NzKCB7IG9wYWNpdHk6IFwiMC41XCIsIGN1cnNvcjogXCJkZWZhdWx0XCIgfSApO1xuXHRcdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImRpdlwiIHx8IG5vZGVOYW1lID09PSBcInNwYW5cIiApIHtcblx0XHRcdGlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4oIFwiLlwiICsgdGhpcy5faW5saW5lQ2xhc3MgKTtcblx0XHRcdGlubGluZS5jaGlsZHJlbigpLmFkZENsYXNzKCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHRcdGlubGluZS5maW5kKCBcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIgKS5cblx0XHRcdFx0cHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XG5cdFx0fVxuXHRcdHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gJC5tYXAoIHRoaXMuX2Rpc2FibGVkSW5wdXRzLFxuXHRcdFx0ZnVuY3Rpb24oIHZhbHVlICkgeyByZXR1cm4gKCB2YWx1ZSA9PT0gdGFyZ2V0ID8gbnVsbCA6IHZhbHVlICk7IH0gKTsgLy8gZGVsZXRlIGVudHJ5XG5cdFx0dGhpcy5fZGlzYWJsZWRJbnB1dHNbIHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aCBdID0gdGFyZ2V0O1xuXHR9LFxuXG5cdC8qIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cblx0ICogQHBhcmFtICB0YXJnZXRcdGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHJldHVybiBib29sZWFuIC0gdHJ1ZSBpZiBkaXNhYmxlZCwgZmFsc2UgaWYgZW5hYmxlZFxuXHQgKi9cblx0X2lzRGlzYWJsZWREYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdGlmICggIXRhcmdldCApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRpZiAoIHRoaXMuX2Rpc2FibGVkSW5wdXRzWyBpIF0gPT09IHRhcmdldCApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKiBSZXRyaWV2ZSB0aGUgaW5zdGFuY2UgZGF0YSBmb3IgdGhlIHRhcmdldCBjb250cm9sLlxuXHQgKiBAcGFyYW0gIHRhcmdldCAgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKiBAcmV0dXJuICBvYmplY3QgLSB0aGUgYXNzb2NpYXRlZCBpbnN0YW5jZSBkYXRhXG5cdCAqIEB0aHJvd3MgIGVycm9yIGlmIGEgalF1ZXJ5IHByb2JsZW0gZ2V0dGluZyBkYXRhXG5cdCAqL1xuXHRfZ2V0SW5zdDogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuICQuZGF0YSggdGFyZ2V0LCBcImRhdGVwaWNrZXJcIiApO1xuXHRcdH1cblx0XHRjYXRjaCAoIGVyciApIHtcblx0XHRcdHRocm93IFwiTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXJcIjtcblx0XHR9XG5cdH0sXG5cblx0LyogVXBkYXRlIG9yIHJldHJpZXZlIHRoZSBzZXR0aW5ncyBmb3IgYSBkYXRlIHBpY2tlciBhdHRhY2hlZCB0byBhbiBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICogQHBhcmFtICBuYW1lXHRvYmplY3QgLSB0aGUgbmV3IHNldHRpbmdzIHRvIHVwZGF0ZSBvclxuXHQgKlx0XHRcdFx0c3RyaW5nIC0gdGhlIG5hbWUgb2YgdGhlIHNldHRpbmcgdG8gY2hhbmdlIG9yIHJldHJpZXZlLFxuXHQgKlx0XHRcdFx0d2hlbiByZXRyaWV2aW5nIGFsc28gXCJhbGxcIiBmb3IgYWxsIGluc3RhbmNlIHNldHRpbmdzIG9yXG5cdCAqXHRcdFx0XHRcImRlZmF1bHRzXCIgZm9yIGFsbCBnbG9iYWwgZGVmYXVsdHNcblx0ICogQHBhcmFtICB2YWx1ZSAgIGFueSAtIHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBzZXR0aW5nXG5cdCAqXHRcdFx0XHQob21pdCBpZiBhYm92ZSBpcyBhbiBvYmplY3Qgb3IgdG8gcmV0cmlldmUgYSB2YWx1ZSlcblx0ICovXG5cdF9vcHRpb25EYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgc2V0dGluZ3MsIGRhdGUsIG1pbkRhdGUsIG1heERhdGUsXG5cdFx0XHRpbnN0ID0gdGhpcy5fZ2V0SW5zdCggdGFyZ2V0ICk7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gKCBuYW1lID09PSBcImRlZmF1bHRzXCIgPyAkLmV4dGVuZCgge30sICQuZGF0ZXBpY2tlci5fZGVmYXVsdHMgKSA6XG5cdFx0XHRcdCggaW5zdCA/ICggbmFtZSA9PT0gXCJhbGxcIiA/ICQuZXh0ZW5kKCB7fSwgaW5zdC5zZXR0aW5ncyApIDpcblx0XHRcdFx0dGhpcy5fZ2V0KCBpbnN0LCBuYW1lICkgKSA6IG51bGwgKSApO1xuXHRcdH1cblxuXHRcdHNldHRpbmdzID0gbmFtZSB8fCB7fTtcblx0XHRpZiAoIHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0c2V0dGluZ3MgPSB7fTtcblx0XHRcdHNldHRpbmdzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGluc3QgKSB7XG5cdFx0XHRpZiAoIHRoaXMuX2N1ckluc3QgPT09IGluc3QgKSB7XG5cdFx0XHRcdHRoaXMuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGRhdGUgPSB0aGlzLl9nZXREYXRlRGF0ZXBpY2tlciggdGFyZ2V0LCB0cnVlICk7XG5cdFx0XHRtaW5EYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZSggaW5zdCwgXCJtaW5cIiApO1xuXHRcdFx0bWF4RGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWF4XCIgKTtcblx0XHRcdGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCBpbnN0LnNldHRpbmdzLCBzZXR0aW5ncyApO1xuXG5cdFx0XHQvLyByZWZvcm1hdCB0aGUgb2xkIG1pbkRhdGUvbWF4RGF0ZSB2YWx1ZXMgaWYgZGF0ZUZvcm1hdCBjaGFuZ2VzIGFuZCBhIG5ldyBtaW5EYXRlL21heERhdGUgaXNuJ3QgcHJvdmlkZWRcblx0XHRcdGlmICggbWluRGF0ZSAhPT0gbnVsbCAmJiBzZXR0aW5ncy5kYXRlRm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgc2V0dGluZ3MubWluRGF0ZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRpbnN0LnNldHRpbmdzLm1pbkRhdGUgPSB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LCBtaW5EYXRlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG1heERhdGUgIT09IG51bGwgJiYgc2V0dGluZ3MuZGF0ZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIHNldHRpbmdzLm1heERhdGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0aW5zdC5zZXR0aW5ncy5tYXhEYXRlID0gdGhpcy5fZm9ybWF0RGF0ZSggaW5zdCwgbWF4RGF0ZSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBcImRpc2FibGVkXCIgaW4gc2V0dGluZ3MgKSB7XG5cdFx0XHRcdGlmICggc2V0dGluZ3MuZGlzYWJsZWQgKSB7XG5cdFx0XHRcdFx0dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoIHRhcmdldCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX2VuYWJsZURhdGVwaWNrZXIoIHRhcmdldCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9hdHRhY2htZW50cyggJCggdGFyZ2V0ICksIGluc3QgKTtcblx0XHRcdHRoaXMuX2F1dG9TaXplKCBpbnN0ICk7XG5cdFx0XHR0aGlzLl9zZXREYXRlKCBpbnN0LCBkYXRlICk7XG5cdFx0XHR0aGlzLl91cGRhdGVBbHRlcm5hdGUoIGluc3QgKTtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ2hhbmdlIG1ldGhvZCBkZXByZWNhdGVkXG5cdF9jaGFuZ2VEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBuYW1lLCB2YWx1ZSApIHtcblx0XHR0aGlzLl9vcHRpb25EYXRlcGlja2VyKCB0YXJnZXQsIG5hbWUsIHZhbHVlICk7XG5cdH0sXG5cblx0LyogUmVkcmF3IHRoZSBkYXRlIHBpY2tlciBhdHRhY2hlZCB0byBhbiBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW5cblx0ICovXG5cdF9yZWZyZXNoRGF0ZXBpY2tlcjogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldCApO1xuXHRcdGlmICggaW5zdCApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU2V0IHRoZSBkYXRlcyBmb3IgYSBqUXVlcnkgc2VsZWN0aW9uLlxuXHQgKiBAcGFyYW0gIHRhcmdldCBlbGVtZW50IC0gdGhlIHRhcmdldCBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbiBvciBzcGFuXG5cdCAqIEBwYXJhbSAgZGF0ZVx0RGF0ZSAtIHRoZSBuZXcgZGF0ZVxuXHQgKi9cblx0X3NldERhdGVEYXRlcGlja2VyOiBmdW5jdGlvbiggdGFyZ2V0LCBkYXRlICkge1xuXHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCggdGFyZ2V0ICk7XG5cdFx0aWYgKCBpbnN0ICkge1xuXHRcdFx0dGhpcy5fc2V0RGF0ZSggaW5zdCwgZGF0ZSApO1xuXHRcdFx0dGhpcy5fdXBkYXRlRGF0ZXBpY2tlciggaW5zdCApO1xuXHRcdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEdldCB0aGUgZGF0ZShzKSBmb3IgdGhlIGZpcnN0IGVudHJ5IGluIGEgalF1ZXJ5IHNlbGVjdGlvbi5cblx0ICogQHBhcmFtICB0YXJnZXQgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhblxuXHQgKiBAcGFyYW0gIG5vRGVmYXVsdCBib29sZWFuIC0gdHJ1ZSBpZiBubyBkZWZhdWx0IGRhdGUgaXMgdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJuIERhdGUgLSB0aGUgY3VycmVudCBkYXRlXG5cdCAqL1xuXHRfZ2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKCB0YXJnZXQsIG5vRGVmYXVsdCApIHtcblx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldCApO1xuXHRcdGlmICggaW5zdCAmJiAhaW5zdC5pbmxpbmUgKSB7XG5cdFx0XHR0aGlzLl9zZXREYXRlRnJvbUZpZWxkKCBpbnN0LCBub0RlZmF1bHQgKTtcblx0XHR9XG5cdFx0cmV0dXJuICggaW5zdCA/IHRoaXMuX2dldERhdGUoIGluc3QgKSA6IG51bGwgKTtcblx0fSxcblxuXHQvKiBIYW5kbGUga2V5c3Ryb2tlcy4gKi9cblx0X2RvS2V5RG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBvblNlbGVjdCwgZGF0ZVN0ciwgc2VsLFxuXHRcdFx0aW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdCggZXZlbnQudGFyZ2V0ICksXG5cdFx0XHRoYW5kbGVkID0gdHJ1ZSxcblx0XHRcdGlzUlRMID0gaW5zdC5kcERpdi5pcyggXCIudWktZGF0ZXBpY2tlci1ydGxcIiApO1xuXG5cdFx0aW5zdC5fa2V5RXZlbnQgPSB0cnVlO1xuXHRcdGlmICggJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRcdGNhc2UgOTogJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO1xuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7IC8vIGhpZGUgb24gdGFiIG91dFxuXHRcdFx0XHRjYXNlIDEzOiBzZWwgPSAkKCBcInRkLlwiICsgJC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MgKyBcIjpub3QoLlwiICtcblx0XHRcdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzICsgXCIpXCIsIGluc3QuZHBEaXYgKTtcblx0XHRcdFx0XHRcdGlmICggc2VsWyAwIF0gKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KCBldmVudC50YXJnZXQsIGluc3Quc2VsZWN0ZWRNb250aCwgaW5zdC5zZWxlY3RlZFllYXIsIHNlbFsgMCBdICk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdG9uU2VsZWN0ID0gJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwib25TZWxlY3RcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBvblNlbGVjdCApIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZVN0ciA9ICQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZSggaW5zdCApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0LmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksIFsgZGF0ZVN0ciwgaW5zdCBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gZG9uJ3Qgc3VibWl0IHRoZSBmb3JtXG5cdFx0XHRcdGNhc2UgMjc6ICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdFx0XHRcdGJyZWFrOyAvLyBoaWRlIG9uIGVzY2FwZVxuXHRcdFx0XHRjYXNlIDMzOiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoIGV2ZW50LnRhcmdldCwgKCBldmVudC5jdHJsS2V5ID9cblx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gcHJldmlvdXMgbW9udGgveWVhciBvbiBwYWdlIHVwLysgY3RybFxuXHRcdFx0XHRjYXNlIDM0OiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoIGV2ZW50LnRhcmdldCwgKCBldmVudC5jdHJsS2V5ID9cblx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gbmV4dCBtb250aC95ZWFyIG9uIHBhZ2UgZG93bi8rIGN0cmxcblx0XHRcdFx0Y2FzZSAzNTogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKCBldmVudC50YXJnZXQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gY2xlYXIgb24gY3RybCBvciBjb21tYW5kICtlbmRcblx0XHRcdFx0Y2FzZSAzNjogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KCBldmVudC50YXJnZXQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gY3VycmVudCBvbiBjdHJsIG9yIGNvbW1hbmQgK2hvbWVcblx0XHRcdFx0Y2FzZSAzNzogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGlzUlRMID8gKzEgOiAtMSApLCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblxuXHRcdFx0XHRcdFx0Ly8gLTEgZGF5IG9uIGN0cmwgb3IgY29tbWFuZCArbGVmdFxuXHRcdFx0XHRcdFx0aWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LmFsdEtleSApIHtcblx0XHRcdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBldmVudC50YXJnZXQsICggZXZlbnQuY3RybEtleSA/XG5cdFx0XHRcdFx0XHRcdFx0LSQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBCaWdNb250aHNcIiApIDpcblx0XHRcdFx0XHRcdFx0XHQtJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwic3RlcE1vbnRoc1wiICkgKSwgXCJNXCIgKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gbmV4dCBtb250aC95ZWFyIG9uIGFsdCArbGVmdCBvbiBNYWNcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDM4OiBpZiAoIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSApIHtcblx0XHRcdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBldmVudC50YXJnZXQsIC03LCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblx0XHRcdFx0XHRcdGJyZWFrOyAvLyAtMSB3ZWVrIG9uIGN0cmwgb3IgY29tbWFuZCArdXBcblx0XHRcdFx0Y2FzZSAzOTogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGlzUlRMID8gLTEgOiArMSApLCBcIkRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcblxuXHRcdFx0XHRcdFx0Ly8gKzEgZGF5IG9uIGN0cmwgb3IgY29tbWFuZCArcmlnaHRcblx0XHRcdFx0XHRcdGlmICggZXZlbnQub3JpZ2luYWxFdmVudC5hbHRLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCAoIGV2ZW50LmN0cmxLZXkgP1xuXHRcdFx0XHRcdFx0XHRcdCskLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzdGVwQmlnTW9udGhzXCIgKSA6XG5cdFx0XHRcdFx0XHRcdFx0KyQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApICksIFwiTVwiICk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIG5leHQgbW9udGgveWVhciBvbiBhbHQgK3JpZ2h0XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSA0MDogaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggZXZlbnQudGFyZ2V0LCArNywgXCJEXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGhhbmRsZWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG5cdFx0XHRcdFx0XHRicmVhazsgLy8gKzEgd2VlayBvbiBjdHJsIG9yIGNvbW1hbmQgK2Rvd25cblx0XHRcdFx0ZGVmYXVsdDogaGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIGV2ZW50LmtleUNvZGUgPT09IDM2ICYmIGV2ZW50LmN0cmxLZXkgKSB7IC8vIGRpc3BsYXkgdGhlIGRhdGUgcGlja2VyIG9uIGN0cmwraG9tZVxuXHRcdFx0JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlciggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoYW5kbGVkID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCBoYW5kbGVkICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblxuXHQvKiBGaWx0ZXIgZW50ZXJlZCBjaGFyYWN0ZXJzIC0gYmFzZWQgb24gZGF0ZSBmb3JtYXQuICovXG5cdF9kb0tleVByZXNzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGNoYXJzLCBjaHIsXG5cdFx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBldmVudC50YXJnZXQgKTtcblxuXHRcdGlmICggJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwiY29uc3RyYWluSW5wdXRcIiApICkge1xuXHRcdFx0Y2hhcnMgPSAkLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApICk7XG5cdFx0XHRjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCBldmVudC5jaGFyQ29kZSA9PSBudWxsID8gZXZlbnQua2V5Q29kZSA6IGV2ZW50LmNoYXJDb2RlICk7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8ICggY2hyIDwgXCIgXCIgfHwgIWNoYXJzIHx8IGNoYXJzLmluZGV4T2YoIGNociApID4gLTEgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU3luY2hyb25pc2UgbWFudWFsIGVudHJ5IGFuZCBmaWVsZC9hbHRlcm5hdGUgZmllbGQuICovXG5cdF9kb0tleVVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGRhdGUsXG5cdFx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBldmVudC50YXJnZXQgKTtcblxuXHRcdGlmICggaW5zdC5pbnB1dC52YWwoKSAhPT0gaW5zdC5sYXN0VmFsICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0ZSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLFxuXHRcdFx0XHRcdCggaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBudWxsICksXG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXG5cdFx0XHRcdGlmICggZGF0ZSApIHsgLy8gb25seSBpZiB2YWxpZFxuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCggaW5zdCApO1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNhdGNoICggZXJyICkge1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvKiBQb3AtdXAgdGhlIGRhdGUgcGlja2VyIGZvciBhIGdpdmVuIGlucHV0IGZpZWxkLlxuXHQgKiBJZiBmYWxzZSByZXR1cm5lZCBmcm9tIGJlZm9yZVNob3cgZXZlbnQgaGFuZGxlciBkbyBub3Qgc2hvdy5cblx0ICogQHBhcmFtICBpbnB1dCAgZWxlbWVudCAtIHRoZSBpbnB1dCBmaWVsZCBhdHRhY2hlZCB0byB0aGUgZGF0ZSBwaWNrZXIgb3Jcblx0ICpcdFx0XHRcdFx0ZXZlbnQgLSBpZiB0cmlnZ2VyZWQgYnkgZm9jdXNcblx0ICovXG5cdF9zaG93RGF0ZXBpY2tlcjogZnVuY3Rpb24oIGlucHV0ICkge1xuXHRcdGlucHV0ID0gaW5wdXQudGFyZ2V0IHx8IGlucHV0O1xuXHRcdGlmICggaW5wdXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJpbnB1dFwiICkgeyAvLyBmaW5kIGZyb20gYnV0dG9uL2ltYWdlIHRyaWdnZXJcblx0XHRcdGlucHV0ID0gJCggXCJpbnB1dFwiLCBpbnB1dC5wYXJlbnROb2RlIClbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoICQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoIGlucHV0ICkgfHwgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPT09IGlucHV0ICkgeyAvLyBhbHJlYWR5IGhlcmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaW5zdCwgYmVmb3JlU2hvdywgYmVmb3JlU2hvd1NldHRpbmdzLCBpc0ZpeGVkLFxuXHRcdFx0b2Zmc2V0LCBzaG93QW5pbSwgZHVyYXRpb247XG5cblx0XHRpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCBpbnB1dCApO1xuXHRcdGlmICggJC5kYXRlcGlja2VyLl9jdXJJbnN0ICYmICQuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gaW5zdCApIHtcblx0XHRcdCQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCB0cnVlLCB0cnVlICk7XG5cdFx0XHRpZiAoIGluc3QgJiYgJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdFx0JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlciggJC5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WyAwIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRiZWZvcmVTaG93ID0gJC5kYXRlcGlja2VyLl9nZXQoIGluc3QsIFwiYmVmb3JlU2hvd1wiICk7XG5cdFx0YmVmb3JlU2hvd1NldHRpbmdzID0gYmVmb3JlU2hvdyA/IGJlZm9yZVNob3cuYXBwbHkoIGlucHV0LCBbIGlucHV0LCBpbnN0IF0gKSA6IHt9O1xuXHRcdGlmICggYmVmb3JlU2hvd1NldHRpbmdzID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZGF0ZXBpY2tlcl9leHRlbmRSZW1vdmUoIGluc3Quc2V0dGluZ3MsIGJlZm9yZVNob3dTZXR0aW5ncyApO1xuXG5cdFx0aW5zdC5sYXN0VmFsID0gbnVsbDtcblx0XHQkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCA9IGlucHV0O1xuXHRcdCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCggaW5zdCApO1xuXG5cdFx0aWYgKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICkgeyAvLyBoaWRlIGN1cnNvclxuXHRcdFx0aW5wdXQudmFsdWUgPSBcIlwiO1xuXHRcdH1cblx0XHRpZiAoICEkLmRhdGVwaWNrZXIuX3BvcyApIHsgLy8gcG9zaXRpb24gYmVsb3cgaW5wdXRcblx0XHRcdCQuZGF0ZXBpY2tlci5fcG9zID0gJC5kYXRlcGlja2VyLl9maW5kUG9zKCBpbnB1dCApO1xuXHRcdFx0JC5kYXRlcGlja2VyLl9wb3NbIDEgXSArPSBpbnB1dC5vZmZzZXRIZWlnaHQ7IC8vIGFkZCB0aGUgaGVpZ2h0XG5cdFx0fVxuXG5cdFx0aXNGaXhlZCA9IGZhbHNlO1xuXHRcdCQoIGlucHV0ICkucGFyZW50cygpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aXNGaXhlZCB8PSAkKCB0aGlzICkuY3NzKCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiO1xuXHRcdFx0cmV0dXJuICFpc0ZpeGVkO1xuXHRcdH0gKTtcblxuXHRcdG9mZnNldCA9IHsgbGVmdDogJC5kYXRlcGlja2VyLl9wb3NbIDAgXSwgdG9wOiAkLmRhdGVwaWNrZXIuX3Bvc1sgMSBdIH07XG5cdFx0JC5kYXRlcGlja2VyLl9wb3MgPSBudWxsO1xuXG5cdFx0Ly90byBhdm9pZCBmbGFzaGVzIG9uIEZpcmVmb3hcblx0XHRpbnN0LmRwRGl2LmVtcHR5KCk7XG5cblx0XHQvLyBkZXRlcm1pbmUgc2l6aW5nIG9mZnNjcmVlblxuXHRcdGluc3QuZHBEaXYuY3NzKCB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiwgdG9wOiBcIi0xMDAwcHhcIiB9ICk7XG5cdFx0JC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKCBpbnN0ICk7XG5cblx0XHQvLyBmaXggd2lkdGggZm9yIGR5bmFtaWMgbnVtYmVyIG9mIGRhdGUgcGlja2Vyc1xuXHRcdC8vIGFuZCBhZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcblx0XHRvZmZzZXQgPSAkLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KCBpbnN0LCBvZmZzZXQsIGlzRml4ZWQgKTtcblx0XHRpbnN0LmRwRGl2LmNzcyggeyBwb3NpdGlvbjogKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICYmICQuYmxvY2tVSSA/XG5cdFx0XHRcInN0YXRpY1wiIDogKCBpc0ZpeGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiICkgKSwgZGlzcGxheTogXCJub25lXCIsXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCArIFwicHhcIiwgdG9wOiBvZmZzZXQudG9wICsgXCJweFwiIH0gKTtcblxuXHRcdGlmICggIWluc3QuaW5saW5lICkge1xuXHRcdFx0c2hvd0FuaW0gPSAkLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzaG93QW5pbVwiICk7XG5cdFx0XHRkdXJhdGlvbiA9ICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImR1cmF0aW9uXCIgKTtcblx0XHRcdGluc3QuZHBEaXYuY3NzKCBcInotaW5kZXhcIiwgZGF0ZXBpY2tlcl9nZXRaaW5kZXgoICQoIGlucHV0ICkgKSArIDEgKTtcblx0XHRcdCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgPSB0cnVlO1xuXG5cdFx0XHRpZiAoICQuZWZmZWN0cyAmJiAkLmVmZmVjdHMuZWZmZWN0WyBzaG93QW5pbSBdICkge1xuXHRcdFx0XHRpbnN0LmRwRGl2LnNob3coIHNob3dBbmltLCAkLmRhdGVwaWNrZXIuX2dldCggaW5zdCwgXCJzaG93T3B0aW9uc1wiICksIGR1cmF0aW9uICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnN0LmRwRGl2WyBzaG93QW5pbSB8fCBcInNob3dcIiBdKCBzaG93QW5pbSA/IGR1cmF0aW9uIDogbnVsbCApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dCggaW5zdCApICkge1xuXHRcdFx0XHRpbnN0LmlucHV0LnRyaWdnZXIoIFwiZm9jdXNcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQkLmRhdGVwaWNrZXIuX2N1ckluc3QgPSBpbnN0O1xuXHRcdH1cblx0fSxcblxuXHQvKiBHZW5lcmF0ZSB0aGUgZGF0ZSBwaWNrZXIgY29udGVudC4gKi9cblx0X3VwZGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHRoaXMubWF4Um93cyA9IDQ7IC8vUmVzZXQgdGhlIG1heCBudW1iZXIgb2Ygcm93cyBiZWluZyBkaXNwbGF5ZWQgKHNlZSAjNzA0Mylcblx0XHRkYXRlcGlja2VyX2luc3RBY3RpdmUgPSBpbnN0OyAvLyBmb3IgZGVsZWdhdGUgaG92ZXIgZXZlbnRzXG5cdFx0aW5zdC5kcERpdi5lbXB0eSgpLmFwcGVuZCggdGhpcy5fZ2VuZXJhdGVIVE1MKCBpbnN0ICkgKTtcblx0XHR0aGlzLl9hdHRhY2hIYW5kbGVycyggaW5zdCApO1xuXG5cdFx0dmFyIG9yaWd5ZWFyc2h0bWwsXG5cdFx0XHRudW1Nb250aHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyggaW5zdCApLFxuXHRcdFx0Y29scyA9IG51bU1vbnRoc1sgMSBdLFxuXHRcdFx0d2lkdGggPSAxNyxcblx0XHRcdGFjdGl2ZUNlbGwgPSBpbnN0LmRwRGl2LmZpbmQoIFwiLlwiICsgdGhpcy5fZGF5T3ZlckNsYXNzICsgXCIgYVwiICk7XG5cblx0XHRpZiAoIGFjdGl2ZUNlbGwubGVuZ3RoID4gMCApIHtcblx0XHRcdGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyLmFwcGx5KCBhY3RpdmVDZWxsLmdldCggMCApICk7XG5cdFx0fVxuXG5cdFx0aW5zdC5kcERpdi5yZW1vdmVDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNFwiICkud2lkdGgoIFwiXCIgKTtcblx0XHRpZiAoIGNvbHMgPiAxICkge1xuXHRcdFx0aW5zdC5kcERpdi5hZGRDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW11bHRpLVwiICsgY29scyApLmNzcyggXCJ3aWR0aFwiLCAoIHdpZHRoICogY29scyApICsgXCJlbVwiICk7XG5cdFx0fVxuXHRcdGluc3QuZHBEaXZbICggbnVtTW9udGhzWyAwIF0gIT09IDEgfHwgbnVtTW9udGhzWyAxIF0gIT09IDEgPyBcImFkZFwiIDogXCJyZW1vdmVcIiApICtcblx0XHRcdFwiQ2xhc3NcIiBdKCBcInVpLWRhdGVwaWNrZXItbXVsdGlcIiApO1xuXHRcdGluc3QuZHBEaXZbICggdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKSA/IFwiYWRkXCIgOiBcInJlbW92ZVwiICkgK1xuXHRcdFx0XCJDbGFzc1wiIF0oIFwidWktZGF0ZXBpY2tlci1ydGxcIiApO1xuXG5cdFx0aWYgKCBpbnN0ID09PSAkLmRhdGVwaWNrZXIuX2N1ckluc3QgJiYgJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAkLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoIGluc3QgKSApIHtcblx0XHRcdGluc3QuaW5wdXQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gRGVmZmVyZWQgcmVuZGVyIG9mIHRoZSB5ZWFycyBzZWxlY3QgKHRvIGF2b2lkIGZsYXNoZXMgb24gRmlyZWZveClcblx0XHRpZiAoIGluc3QueWVhcnNodG1sICkge1xuXHRcdFx0b3JpZ3llYXJzaHRtbCA9IGluc3QueWVhcnNodG1sO1xuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly9hc3N1cmUgdGhhdCBpbnN0LnllYXJzaHRtbCBkaWRuJ3QgY2hhbmdlLlxuXHRcdFx0XHRpZiAoIG9yaWd5ZWFyc2h0bWwgPT09IGluc3QueWVhcnNodG1sICYmIGluc3QueWVhcnNodG1sICkge1xuXHRcdFx0XHRcdGluc3QuZHBEaXYuZmluZCggXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIgKS5yZXBsYWNlV2l0aCggaW5zdC55ZWFyc2h0bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcmlneWVhcnNodG1sID0gaW5zdC55ZWFyc2h0bWwgPSBudWxsO1xuXHRcdFx0fSwgMCApO1xuXHRcdH1cblx0fSxcblxuXHQvLyAjNjY5NCAtIGRvbid0IGZvY3VzIHRoZSBpbnB1dCBpZiBpdCdzIGFscmVhZHkgZm9jdXNlZFxuXHQvLyB0aGlzIGJyZWFrcyB0aGUgY2hhbmdlIGV2ZW50IGluIElFXG5cdC8vIFN1cHBvcnQ6IElFIGFuZCBqUXVlcnkgPDEuOVxuXHRfc2hvdWxkRm9jdXNJbnB1dDogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0cmV0dXJuIGluc3QuaW5wdXQgJiYgaW5zdC5pbnB1dC5pcyggXCI6dmlzaWJsZVwiICkgJiYgIWluc3QuaW5wdXQuaXMoIFwiOmRpc2FibGVkXCIgKSAmJiAhaW5zdC5pbnB1dC5pcyggXCI6Zm9jdXNcIiApO1xuXHR9LFxuXG5cdC8qIENoZWNrIHBvc2l0aW9uaW5nIHRvIHJlbWFpbiBvbiBzY3JlZW4uICovXG5cdF9jaGVja09mZnNldDogZnVuY3Rpb24oIGluc3QsIG9mZnNldCwgaXNGaXhlZCApIHtcblx0XHR2YXIgZHBXaWR0aCA9IGluc3QuZHBEaXYub3V0ZXJXaWR0aCgpLFxuXHRcdFx0ZHBIZWlnaHQgPSBpbnN0LmRwRGl2Lm91dGVySGVpZ2h0KCksXG5cdFx0XHRpbnB1dFdpZHRoID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJXaWR0aCgpIDogMCxcblx0XHRcdGlucHV0SGVpZ2h0ID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJIZWlnaHQoKSA6IDAsXG5cdFx0XHR2aWV3V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggKyAoIGlzRml4ZWQgPyAwIDogJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgKSxcblx0XHRcdHZpZXdIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgKCBpc0ZpeGVkID8gMCA6ICQoIGRvY3VtZW50ICkuc2Nyb2xsVG9wKCkgKTtcblxuXHRcdG9mZnNldC5sZWZ0IC09ICggdGhpcy5fZ2V0KCBpbnN0LCBcImlzUlRMXCIgKSA/ICggZHBXaWR0aCAtIGlucHV0V2lkdGggKSA6IDAgKTtcblx0XHRvZmZzZXQubGVmdCAtPSAoIGlzRml4ZWQgJiYgb2Zmc2V0LmxlZnQgPT09IGluc3QuaW5wdXQub2Zmc2V0KCkubGVmdCApID8gJCggZG9jdW1lbnQgKS5zY3JvbGxMZWZ0KCkgOiAwO1xuXHRcdG9mZnNldC50b3AgLT0gKCBpc0ZpeGVkICYmIG9mZnNldC50b3AgPT09ICggaW5zdC5pbnB1dC5vZmZzZXQoKS50b3AgKyBpbnB1dEhlaWdodCApICkgPyAkKCBkb2N1bWVudCApLnNjcm9sbFRvcCgpIDogMDtcblxuXHRcdC8vIE5vdyBjaGVjayBpZiBkYXRlcGlja2VyIGlzIHNob3dpbmcgb3V0c2lkZSB3aW5kb3cgdmlld3BvcnQgLSBtb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIGlmIHNvLlxuXHRcdG9mZnNldC5sZWZ0IC09IE1hdGgubWluKCBvZmZzZXQubGVmdCwgKCBvZmZzZXQubGVmdCArIGRwV2lkdGggPiB2aWV3V2lkdGggJiYgdmlld1dpZHRoID4gZHBXaWR0aCApID9cblx0XHRcdE1hdGguYWJzKCBvZmZzZXQubGVmdCArIGRwV2lkdGggLSB2aWV3V2lkdGggKSA6IDAgKTtcblx0XHRvZmZzZXQudG9wIC09IE1hdGgubWluKCBvZmZzZXQudG9wLCAoIG9mZnNldC50b3AgKyBkcEhlaWdodCA+IHZpZXdIZWlnaHQgJiYgdmlld0hlaWdodCA+IGRwSGVpZ2h0ICkgP1xuXHRcdFx0TWF0aC5hYnMoIGRwSGVpZ2h0ICsgaW5wdXRIZWlnaHQgKSA6IDAgKTtcblxuXHRcdHJldHVybiBvZmZzZXQ7XG5cdH0sXG5cblx0LyogRmluZCBhbiBvYmplY3QncyBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuLiAqL1xuXHRfZmluZFBvczogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcG9zaXRpb24sXG5cdFx0XHRpbnN0ID0gdGhpcy5fZ2V0SW5zdCggb2JqICksXG5cdFx0XHRpc1JUTCA9IHRoaXMuX2dldCggaW5zdCwgXCJpc1JUTFwiICk7XG5cblx0XHR3aGlsZSAoIG9iaiAmJiAoIG9iai50eXBlID09PSBcImhpZGRlblwiIHx8IG9iai5ub2RlVHlwZSAhPT0gMSB8fCAkLmV4cHIuZmlsdGVycy5oaWRkZW4oIG9iaiApICkgKSB7XG5cdFx0XHRvYmogPSBvYmpbIGlzUlRMID8gXCJwcmV2aW91c1NpYmxpbmdcIiA6IFwibmV4dFNpYmxpbmdcIiBdO1xuXHRcdH1cblxuXHRcdHBvc2l0aW9uID0gJCggb2JqICkub2Zmc2V0KCk7XG5cdFx0cmV0dXJuIFsgcG9zaXRpb24ubGVmdCwgcG9zaXRpb24udG9wIF07XG5cdH0sXG5cblx0LyogSGlkZSB0aGUgZGF0ZSBwaWNrZXIgZnJvbSB2aWV3LlxuXHQgKiBAcGFyYW0gIGlucHV0ICBlbGVtZW50IC0gdGhlIGlucHV0IGZpZWxkIGF0dGFjaGVkIHRvIHRoZSBkYXRlIHBpY2tlclxuXHQgKi9cblx0X2hpZGVEYXRlcGlja2VyOiBmdW5jdGlvbiggaW5wdXQgKSB7XG5cdFx0dmFyIHNob3dBbmltLCBkdXJhdGlvbiwgcG9zdFByb2Nlc3MsIG9uQ2xvc2UsXG5cdFx0XHRpbnN0ID0gdGhpcy5fY3VySW5zdDtcblxuXHRcdGlmICggIWluc3QgfHwgKCBpbnB1dCAmJiBpbnN0ICE9PSAkLmRhdGEoIGlucHV0LCBcImRhdGVwaWNrZXJcIiApICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9kYXRlcGlja2VyU2hvd2luZyApIHtcblx0XHRcdHNob3dBbmltID0gdGhpcy5fZ2V0KCBpbnN0LCBcInNob3dBbmltXCIgKTtcblx0XHRcdGR1cmF0aW9uID0gdGhpcy5fZ2V0KCBpbnN0LCBcImR1cmF0aW9uXCIgKTtcblx0XHRcdHBvc3RQcm9jZXNzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyggaW5zdCApO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gREVQUkVDQVRFRDogYWZ0ZXIgQkMgZm9yIDEuOC54ICQuZWZmZWN0c1sgc2hvd0FuaW0gXSBpcyBub3QgbmVlZGVkXG5cdFx0XHRpZiAoICQuZWZmZWN0cyAmJiAoICQuZWZmZWN0cy5lZmZlY3RbIHNob3dBbmltIF0gfHwgJC5lZmZlY3RzWyBzaG93QW5pbSBdICkgKSB7XG5cdFx0XHRcdGluc3QuZHBEaXYuaGlkZSggc2hvd0FuaW0sICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcInNob3dPcHRpb25zXCIgKSwgZHVyYXRpb24sIHBvc3RQcm9jZXNzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnN0LmRwRGl2WyAoIHNob3dBbmltID09PSBcInNsaWRlRG93blwiID8gXCJzbGlkZVVwXCIgOlxuXHRcdFx0XHRcdCggc2hvd0FuaW0gPT09IFwiZmFkZUluXCIgPyBcImZhZGVPdXRcIiA6IFwiaGlkZVwiICkgKSBdKCAoIHNob3dBbmltID8gZHVyYXRpb24gOiBudWxsICksIHBvc3RQcm9jZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXNob3dBbmltICkge1xuXHRcdFx0XHRwb3N0UHJvY2VzcygpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcgPSBmYWxzZTtcblxuXHRcdFx0b25DbG9zZSA9IHRoaXMuX2dldCggaW5zdCwgXCJvbkNsb3NlXCIgKTtcblx0XHRcdGlmICggb25DbG9zZSApIHtcblx0XHRcdFx0b25DbG9zZS5hcHBseSggKCBpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFsgMCBdIDogbnVsbCApLCBbICggaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBcIlwiICksIGluc3QgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9sYXN0SW5wdXQgPSBudWxsO1xuXHRcdFx0aWYgKCB0aGlzLl9pbkRpYWxvZyApIHtcblx0XHRcdFx0dGhpcy5fZGlhbG9nSW5wdXQuY3NzKCB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGxlZnQ6IFwiMFwiLCB0b3A6IFwiLTEwMHB4XCIgfSApO1xuXHRcdFx0XHRpZiAoICQuYmxvY2tVSSApIHtcblx0XHRcdFx0XHQkLnVuYmxvY2tVSSgpO1xuXHRcdFx0XHRcdCQoIFwiYm9keVwiICkuYXBwZW5kKCB0aGlzLmRwRGl2ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2luRGlhbG9nID0gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIFRpZHkgdXAgYWZ0ZXIgYSBkaWFsb2cgZGlzcGxheS4gKi9cblx0X3RpZHlEaWFsb2c6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdGluc3QuZHBEaXYucmVtb3ZlQ2xhc3MoIHRoaXMuX2RpYWxvZ0NsYXNzICkub2ZmKCBcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIgKTtcblx0fSxcblxuXHQvKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS4gKi9cblx0X2NoZWNrRXh0ZXJuYWxDbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggISQuZGF0ZXBpY2tlci5fY3VySW5zdCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgJHRhcmdldCA9ICQoIGV2ZW50LnRhcmdldCApLFxuXHRcdFx0aW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdCggJHRhcmdldFsgMCBdICk7XG5cblx0XHRpZiAoICggKCAkdGFyZ2V0WyAwIF0uaWQgIT09ICQuZGF0ZXBpY2tlci5fbWFpbkRpdklkICYmXG5cdFx0XHRcdCR0YXJnZXQucGFyZW50cyggXCIjXCIgKyAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCApLmxlbmd0aCA9PT0gMCAmJlxuXHRcdFx0XHQhJHRhcmdldC5oYXNDbGFzcyggJC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSApICYmXG5cdFx0XHRcdCEkdGFyZ2V0LmNsb3Nlc3QoIFwiLlwiICsgJC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MgKS5sZW5ndGggJiZcblx0XHRcdFx0JC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAhKCAkLmRhdGVwaWNrZXIuX2luRGlhbG9nICYmICQuYmxvY2tVSSApICkgKSB8fFxuXHRcdFx0KCAkdGFyZ2V0Lmhhc0NsYXNzKCAkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lICkgJiYgJC5kYXRlcGlja2VyLl9jdXJJbnN0ICE9PSBpbnN0ICkgKSB7XG5cdFx0XHRcdCQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtcblx0XHR9XG5cdH0sXG5cblx0LyogQWRqdXN0IG9uZSBvZiB0aGUgZGF0ZSBzdWItZmllbGRzLiAqL1xuXHRfYWRqdXN0RGF0ZTogZnVuY3Rpb24oIGlkLCBvZmZzZXQsIHBlcmlvZCApIHtcblx0XHR2YXIgdGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aWYgKCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlciggdGFyZ2V0WyAwIF0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fYWRqdXN0SW5zdERhdGUoIGluc3QsIG9mZnNldCArXG5cdFx0XHQoIHBlcmlvZCA9PT0gXCJNXCIgPyB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0N1cnJlbnRBdFBvc1wiICkgOiAwICksIC8vIHVuZG8gcG9zaXRpb25pbmdcblx0XHRcdHBlcmlvZCApO1xuXHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0fSxcblxuXHQvKiBBY3Rpb24gZm9yIGN1cnJlbnQgbGluay4gKi9cblx0X2dvdG9Ub2RheTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciBkYXRlLFxuXHRcdFx0dGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aWYgKCB0aGlzLl9nZXQoIGluc3QsIFwiZ290b0N1cnJlbnRcIiApICYmIGluc3QuY3VycmVudERheSApIHtcblx0XHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXk7XG5cdFx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoO1xuXHRcdFx0aW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyID0gaW5zdC5jdXJyZW50WWVhcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcblx0XHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHR9XG5cdFx0dGhpcy5fbm90aWZ5Q2hhbmdlKCBpbnN0ICk7XG5cdFx0dGhpcy5fYWRqdXN0RGF0ZSggdGFyZ2V0ICk7XG5cdH0sXG5cblx0LyogQWN0aW9uIGZvciBzZWxlY3RpbmcgYSBuZXcgbW9udGgveWVhci4gKi9cblx0X3NlbGVjdE1vbnRoWWVhcjogZnVuY3Rpb24oIGlkLCBzZWxlY3QsIHBlcmlvZCApIHtcblx0XHR2YXIgdGFyZ2V0ID0gJCggaWQgKSxcblx0XHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXG5cdFx0aW5zdFsgXCJzZWxlY3RlZFwiICsgKCBwZXJpb2QgPT09IFwiTVwiID8gXCJNb250aFwiIDogXCJZZWFyXCIgKSBdID1cblx0XHRpbnN0WyBcImRyYXdcIiArICggcGVyaW9kID09PSBcIk1cIiA/IFwiTW9udGhcIiA6IFwiWWVhclwiICkgXSA9XG5cdFx0XHRwYXJzZUludCggc2VsZWN0Lm9wdGlvbnNbIHNlbGVjdC5zZWxlY3RlZEluZGV4IF0udmFsdWUsIDEwICk7XG5cblx0XHR0aGlzLl9ub3RpZnlDaGFuZ2UoIGluc3QgKTtcblx0XHR0aGlzLl9hZGp1c3REYXRlKCB0YXJnZXQgKTtcblx0fSxcblxuXHQvKiBBY3Rpb24gZm9yIHNlbGVjdGluZyBhIGRheS4gKi9cblx0X3NlbGVjdERheTogZnVuY3Rpb24oIGlkLCBtb250aCwgeWVhciwgdGQgKSB7XG5cdFx0dmFyIGluc3QsXG5cdFx0XHR0YXJnZXQgPSAkKCBpZCApO1xuXG5cdFx0aWYgKCAkKCB0ZCApLmhhc0NsYXNzKCB0aGlzLl91bnNlbGVjdGFibGVDbGFzcyApIHx8IHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKCB0YXJnZXRbIDAgXSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGluc3QgPSB0aGlzLl9nZXRJbnN0KCB0YXJnZXRbIDAgXSApO1xuXHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXkgPSAkKCBcImFcIiwgdGQgKS5odG1sKCk7XG5cdFx0aW5zdC5zZWxlY3RlZE1vbnRoID0gaW5zdC5jdXJyZW50TW9udGggPSBtb250aDtcblx0XHRpbnN0LnNlbGVjdGVkWWVhciA9IGluc3QuY3VycmVudFllYXIgPSB5ZWFyO1xuXHRcdHRoaXMuX3NlbGVjdERhdGUoIGlkLCB0aGlzLl9mb3JtYXREYXRlKCBpbnN0LFxuXHRcdFx0aW5zdC5jdXJyZW50RGF5LCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50WWVhciApICk7XG5cdH0sXG5cblx0LyogRXJhc2UgdGhlIGlucHV0IGZpZWxkIGFuZCBoaWRlIHRoZSBkYXRlIHBpY2tlci4gKi9cblx0X2NsZWFyRGF0ZTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciB0YXJnZXQgPSAkKCBpZCApO1xuXHRcdHRoaXMuX3NlbGVjdERhdGUoIHRhcmdldCwgXCJcIiApO1xuXHR9LFxuXG5cdC8qIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgd2l0aCB0aGUgc2VsZWN0ZWQgZGF0ZS4gKi9cblx0X3NlbGVjdERhdGU6IGZ1bmN0aW9uKCBpZCwgZGF0ZVN0ciApIHtcblx0XHR2YXIgb25TZWxlY3QsXG5cdFx0XHR0YXJnZXQgPSAkKCBpZCApLFxuXHRcdFx0aW5zdCA9IHRoaXMuX2dldEluc3QoIHRhcmdldFsgMCBdICk7XG5cblx0XHRkYXRlU3RyID0gKCBkYXRlU3RyICE9IG51bGwgPyBkYXRlU3RyIDogdGhpcy5fZm9ybWF0RGF0ZSggaW5zdCApICk7XG5cdFx0aWYgKCBpbnN0LmlucHV0ICkge1xuXHRcdFx0aW5zdC5pbnB1dC52YWwoIGRhdGVTdHIgKTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlQWx0ZXJuYXRlKCBpbnN0ICk7XG5cblx0XHRvblNlbGVjdCA9IHRoaXMuX2dldCggaW5zdCwgXCJvblNlbGVjdFwiICk7XG5cdFx0aWYgKCBvblNlbGVjdCApIHtcblx0XHRcdG9uU2VsZWN0LmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksIFsgZGF0ZVN0ciwgaW5zdCBdICk7ICAvLyB0cmlnZ2VyIGN1c3RvbSBjYWxsYmFja1xuXHRcdH0gZWxzZSBpZiAoIGluc3QuaW5wdXQgKSB7XG5cdFx0XHRpbnN0LmlucHV0LnRyaWdnZXIoIFwiY2hhbmdlXCIgKTsgLy8gZmlyZSB0aGUgY2hhbmdlIGV2ZW50XG5cdFx0fVxuXG5cdFx0aWYgKCBpbnN0LmlubGluZSApIHtcblx0XHRcdHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoIGluc3QgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faGlkZURhdGVwaWNrZXIoKTtcblx0XHRcdHRoaXMuX2xhc3RJbnB1dCA9IGluc3QuaW5wdXRbIDAgXTtcblx0XHRcdGlmICggdHlwZW9mKCBpbnN0LmlucHV0WyAwIF0gKSAhPT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0aW5zdC5pbnB1dC50cmlnZ2VyKCBcImZvY3VzXCIgKTsgLy8gcmVzdG9yZSBmb2N1c1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fbGFzdElucHV0ID0gbnVsbDtcblx0XHR9XG5cdH0sXG5cblx0LyogVXBkYXRlIGFueSBhbHRlcm5hdGUgZmllbGQgdG8gc3luY2hyb25pc2Ugd2l0aCB0aGUgbWFpbiBmaWVsZC4gKi9cblx0X3VwZGF0ZUFsdGVybmF0ZTogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIGFsdEZvcm1hdCwgZGF0ZSwgZGF0ZVN0cixcblx0XHRcdGFsdEZpZWxkID0gdGhpcy5fZ2V0KCBpbnN0LCBcImFsdEZpZWxkXCIgKTtcblxuXHRcdGlmICggYWx0RmllbGQgKSB7IC8vIHVwZGF0ZSBhbHRlcm5hdGUgZmllbGQgdG9vXG5cdFx0XHRhbHRGb3JtYXQgPSB0aGlzLl9nZXQoIGluc3QsIFwiYWx0Rm9ybWF0XCIgKSB8fCB0aGlzLl9nZXQoIGluc3QsIFwiZGF0ZUZvcm1hdFwiICk7XG5cdFx0XHRkYXRlID0gdGhpcy5fZ2V0RGF0ZSggaW5zdCApO1xuXHRcdFx0ZGF0ZVN0ciA9IHRoaXMuZm9ybWF0RGF0ZSggYWx0Rm9ybWF0LCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXHRcdFx0JCggYWx0RmllbGQgKS52YWwoIGRhdGVTdHIgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogU2V0IGFzIGJlZm9yZVNob3dEYXkgZnVuY3Rpb24gdG8gcHJldmVudCBzZWxlY3Rpb24gb2Ygd2Vla2VuZHMuXG5cdCAqIEBwYXJhbSAgZGF0ZSAgRGF0ZSAtIHRoZSBkYXRlIHRvIGN1c3RvbWlzZVxuXHQgKiBAcmV0dXJuIFtib29sZWFuLCBzdHJpbmddIC0gaXMgdGhpcyBkYXRlIHNlbGVjdGFibGU/LCB3aGF0IGlzIGl0cyBDU1MgY2xhc3M/XG5cdCAqL1xuXHRub1dlZWtlbmRzOiBmdW5jdGlvbiggZGF0ZSApIHtcblx0XHR2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcblx0XHRyZXR1cm4gWyAoIGRheSA+IDAgJiYgZGF5IDwgNiApLCBcIlwiIF07XG5cdH0sXG5cblx0LyogU2V0IGFzIGNhbGN1bGF0ZVdlZWsgdG8gZGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGJhc2VkIG9uIHRoZSBJU08gODYwMSBkZWZpbml0aW9uLlxuXHQgKiBAcGFyYW0gIGRhdGUgIERhdGUgLSB0aGUgZGF0ZSB0byBnZXQgdGhlIHdlZWsgZm9yXG5cdCAqIEByZXR1cm4gIG51bWJlciAtIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSB5ZWFyIHRoYXQgY29udGFpbnMgdGhpcyBkYXRlXG5cdCAqL1xuXHRpc284NjAxV2VlazogZnVuY3Rpb24oIGRhdGUgKSB7XG5cdFx0dmFyIHRpbWUsXG5cdFx0XHRjaGVja0RhdGUgPSBuZXcgRGF0ZSggZGF0ZS5nZXRUaW1lKCkgKTtcblxuXHRcdC8vIEZpbmQgVGh1cnNkYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIE1vbmRheVxuXHRcdGNoZWNrRGF0ZS5zZXREYXRlKCBjaGVja0RhdGUuZ2V0RGF0ZSgpICsgNCAtICggY2hlY2tEYXRlLmdldERheSgpIHx8IDcgKSApO1xuXG5cdFx0dGltZSA9IGNoZWNrRGF0ZS5nZXRUaW1lKCk7XG5cdFx0Y2hlY2tEYXRlLnNldE1vbnRoKCAwICk7IC8vIENvbXBhcmUgd2l0aCBKYW4gMVxuXHRcdGNoZWNrRGF0ZS5zZXREYXRlKCAxICk7XG5cdFx0cmV0dXJuIE1hdGguZmxvb3IoIE1hdGgucm91bmQoICggdGltZSAtIGNoZWNrRGF0ZSApIC8gODY0MDAwMDAgKSAvIDcgKSArIDE7XG5cdH0sXG5cblx0LyogUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0LlxuXHQgKiBTZWUgZm9ybWF0RGF0ZSBiZWxvdyBmb3IgdGhlIHBvc3NpYmxlIGZvcm1hdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSAgZm9ybWF0IHN0cmluZyAtIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGRhdGVcblx0ICogQHBhcmFtICB2YWx1ZSBzdHJpbmcgLSB0aGUgZGF0ZSBpbiB0aGUgYWJvdmUgZm9ybWF0XG5cdCAqIEBwYXJhbSAgc2V0dGluZ3MgT2JqZWN0IC0gYXR0cmlidXRlcyBpbmNsdWRlOlxuXHQgKlx0XHRcdFx0XHRzaG9ydFllYXJDdXRvZmYgIG51bWJlciAtIHRoZSBjdXRvZmYgeWVhciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNlbnR1cnkgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRkYXlOYW1lc1Nob3J0XHRzdHJpbmdbN10gLSBhYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgZGF5cyBmcm9tIFN1bmRheSAob3B0aW9uYWwpXG5cdCAqXHRcdFx0XHRcdGRheU5hbWVzXHRcdHN0cmluZ1s3XSAtIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0bW9udGhOYW1lc1Nob3J0IHN0cmluZ1sxMl0gLSBhYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzIChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0bW9udGhOYW1lc1x0XHRzdHJpbmdbMTJdIC0gbmFtZXMgb2YgdGhlIG1vbnRocyAob3B0aW9uYWwpXG5cdCAqIEByZXR1cm4gIERhdGUgLSB0aGUgZXh0cmFjdGVkIGRhdGUgdmFsdWUgb3IgbnVsbCBpZiB2YWx1ZSBpcyBibGFua1xuXHQgKi9cblx0cGFyc2VEYXRlOiBmdW5jdGlvbiggZm9ybWF0LCB2YWx1ZSwgc2V0dGluZ3MgKSB7XG5cdFx0aWYgKCBmb3JtYXQgPT0gbnVsbCB8fCB2YWx1ZSA9PSBudWxsICkge1xuXHRcdFx0dGhyb3cgXCJJbnZhbGlkIGFyZ3VtZW50c1wiO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gKCB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUgKyBcIlwiICk7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHZhciBpRm9ybWF0LCBkaW0sIGV4dHJhLFxuXHRcdFx0aVZhbHVlID0gMCxcblx0XHRcdHNob3J0WWVhckN1dG9mZlRlbXAgPSAoIHNldHRpbmdzID8gc2V0dGluZ3Muc2hvcnRZZWFyQ3V0b2ZmIDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZixcblx0XHRcdHNob3J0WWVhckN1dG9mZiA9ICggdHlwZW9mIHNob3J0WWVhckN1dG9mZlRlbXAgIT09IFwic3RyaW5nXCIgPyBzaG9ydFllYXJDdXRvZmZUZW1wIDpcblx0XHRcdFx0bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICUgMTAwICsgcGFyc2VJbnQoIHNob3J0WWVhckN1dG9mZlRlbXAsIDEwICkgKSxcblx0XHRcdGRheU5hbWVzU2hvcnQgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LFxuXHRcdFx0ZGF5TmFtZXMgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXMgOiBudWxsICkgfHwgdGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsXG5cdFx0XHRtb250aE5hbWVzU2hvcnQgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lc1Nob3J0IDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxcblx0XHRcdG1vbnRoTmFtZXMgPSAoIHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lcyA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLFxuXHRcdFx0eWVhciA9IC0xLFxuXHRcdFx0bW9udGggPSAtMSxcblx0XHRcdGRheSA9IC0xLFxuXHRcdFx0ZG95ID0gLTEsXG5cdFx0XHRsaXRlcmFsID0gZmFsc2UsXG5cdFx0XHRkYXRlLFxuXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXG5cdFx0XHRsb29rQWhlYWQgPSBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRcdHZhciBtYXRjaGVzID0gKCBpRm9ybWF0ICsgMSA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0LmNoYXJBdCggaUZvcm1hdCArIDEgKSA9PT0gbWF0Y2ggKTtcblx0XHRcdFx0aWYgKCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdGlGb3JtYXQrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2hlcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIEV4dHJhY3QgYSBudW1iZXIgZnJvbSB0aGUgc3RyaW5nIHZhbHVlXG5cdFx0XHRnZXROdW1iZXIgPSBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRcdHZhciBpc0RvdWJsZWQgPSBsb29rQWhlYWQoIG1hdGNoICksXG5cdFx0XHRcdFx0c2l6ZSA9ICggbWF0Y2ggPT09IFwiQFwiID8gMTQgOiAoIG1hdGNoID09PSBcIiFcIiA/IDIwIDpcblx0XHRcdFx0XHQoIG1hdGNoID09PSBcInlcIiAmJiBpc0RvdWJsZWQgPyA0IDogKCBtYXRjaCA9PT0gXCJvXCIgPyAzIDogMiApICkgKSApLFxuXHRcdFx0XHRcdG1pblNpemUgPSAoIG1hdGNoID09PSBcInlcIiA/IHNpemUgOiAxICksXG5cdFx0XHRcdFx0ZGlnaXRzID0gbmV3IFJlZ0V4cCggXCJeXFxcXGR7XCIgKyBtaW5TaXplICsgXCIsXCIgKyBzaXplICsgXCJ9XCIgKSxcblx0XHRcdFx0XHRudW0gPSB2YWx1ZS5zdWJzdHJpbmcoIGlWYWx1ZSApLm1hdGNoKCBkaWdpdHMgKTtcblx0XHRcdFx0aWYgKCAhbnVtICkge1xuXHRcdFx0XHRcdHRocm93IFwiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gXCIgKyBpVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aVZhbHVlICs9IG51bVsgMCBdLmxlbmd0aDtcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCBudW1bIDAgXSwgMTAgKTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEV4dHJhY3QgYSBuYW1lIGZyb20gdGhlIHN0cmluZyB2YWx1ZSBhbmQgY29udmVydCB0byBhbiBpbmRleFxuXHRcdFx0Z2V0TmFtZSA9IGZ1bmN0aW9uKCBtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAtMSxcblx0XHRcdFx0XHRuYW1lcyA9ICQubWFwKCBsb29rQWhlYWQoIG1hdGNoICkgPyBsb25nTmFtZXMgOiBzaG9ydE5hbWVzLCBmdW5jdGlvbiggdiwgayApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIFsgaywgdiBdIF07XG5cdFx0XHRcdFx0fSApLnNvcnQoIGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIC0oIGFbIDEgXS5sZW5ndGggLSBiWyAxIF0ubGVuZ3RoICk7XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdCQuZWFjaCggbmFtZXMsIGZ1bmN0aW9uKCBpLCBwYWlyICkge1xuXHRcdFx0XHRcdHZhciBuYW1lID0gcGFpclsgMSBdO1xuXHRcdFx0XHRcdGlmICggdmFsdWUuc3Vic3RyKCBpVmFsdWUsIG5hbWUubGVuZ3RoICkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0aW5kZXggPSBwYWlyWyAwIF07XG5cdFx0XHRcdFx0XHRpVmFsdWUgKz0gbmFtZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGlmICggaW5kZXggIT09IC0xICkge1xuXHRcdFx0XHRcdHJldHVybiBpbmRleCArIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgXCJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gXCIgKyBpVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZVxuXHRcdFx0Y2hlY2tMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdmFsdWUuY2hhckF0KCBpVmFsdWUgKSAhPT0gZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApICkge1xuXHRcdFx0XHRcdHRocm93IFwiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIFwiICsgaVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlWYWx1ZSsrO1xuXHRcdFx0fTtcblxuXHRcdGZvciAoIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrICkge1xuXHRcdFx0aWYgKCBsaXRlcmFsICkge1xuXHRcdFx0XHRpZiAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSA9PT0gXCInXCIgJiYgIWxvb2tBaGVhZCggXCInXCIgKSApIHtcblx0XHRcdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2hlY2tMaXRlcmFsKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSApIHtcblx0XHRcdFx0XHRjYXNlIFwiZFwiOlxuXHRcdFx0XHRcdFx0ZGF5ID0gZ2V0TnVtYmVyKCBcImRcIiApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRcIjpcblx0XHRcdFx0XHRcdGdldE5hbWUoIFwiRFwiLCBkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm9cIjpcblx0XHRcdFx0XHRcdGRveSA9IGdldE51bWJlciggXCJvXCIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdFx0XHRtb250aCA9IGdldE51bWJlciggXCJtXCIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJNXCI6XG5cdFx0XHRcdFx0XHRtb250aCA9IGdldE5hbWUoIFwiTVwiLCBtb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXMgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJ5XCI6XG5cdFx0XHRcdFx0XHR5ZWFyID0gZ2V0TnVtYmVyKCBcInlcIiApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkBcIjpcblx0XHRcdFx0XHRcdGRhdGUgPSBuZXcgRGF0ZSggZ2V0TnVtYmVyKCBcIkBcIiApICk7XG5cdFx0XHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXHRcdFx0XHRcdFx0bW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXHRcdFx0XHRcdFx0ZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiIVwiOlxuXHRcdFx0XHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCAoIGdldE51bWJlciggXCIhXCIgKSAtIHRoaXMuX3RpY2tzVG8xOTcwICkgLyAxMDAwMCApO1xuXHRcdFx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHRcdFx0XHRcdG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcblx0XHRcdFx0XHRcdGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdGlmICggbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdFx0XHRjaGVja0xpdGVyYWwoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBpVmFsdWUgPCB2YWx1ZS5sZW5ndGggKSB7XG5cdFx0XHRleHRyYSA9IHZhbHVlLnN1YnN0ciggaVZhbHVlICk7XG5cdFx0XHRpZiAoICEvXlxccysvLnRlc3QoIGV4dHJhICkgKSB7XG5cdFx0XHRcdHRocm93IFwiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiBcIiArIGV4dHJhO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggeWVhciA9PT0gLTEgKSB7XG5cdFx0XHR5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXHRcdH0gZWxzZSBpZiAoIHllYXIgPCAxMDAgKSB7XG5cdFx0XHR5ZWFyICs9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAlIDEwMCArXG5cdFx0XHRcdCggeWVhciA8PSBzaG9ydFllYXJDdXRvZmYgPyAwIDogLTEwMCApO1xuXHRcdH1cblxuXHRcdGlmICggZG95ID4gLTEgKSB7XG5cdFx0XHRtb250aCA9IDE7XG5cdFx0XHRkYXkgPSBkb3k7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGRpbSA9IHRoaXMuX2dldERheXNJbk1vbnRoKCB5ZWFyLCBtb250aCAtIDEgKTtcblx0XHRcdFx0aWYgKCBkYXkgPD0gZGltICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vbnRoKys7XG5cdFx0XHRcdGRheSAtPSBkaW07XG5cdFx0XHR9IHdoaWxlICggdHJ1ZSApO1xuXHRcdH1cblxuXHRcdGRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIHllYXIsIG1vbnRoIC0gMSwgZGF5ICkgKTtcblx0XHRpZiAoIGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0geWVhciB8fCBkYXRlLmdldE1vbnRoKCkgKyAxICE9PSBtb250aCB8fCBkYXRlLmdldERhdGUoKSAhPT0gZGF5ICkge1xuXHRcdFx0dGhyb3cgXCJJbnZhbGlkIGRhdGVcIjsgLy8gRS5nLiAzMS8wMi8wMFxuXHRcdH1cblx0XHRyZXR1cm4gZGF0ZTtcblx0fSxcblxuXHQvKiBTdGFuZGFyZCBkYXRlIGZvcm1hdHMuICovXG5cdEFUT006IFwieXktbW0tZGRcIiwgLy8gUkZDIDMzMzkgKElTTyA4NjAxKVxuXHRDT09LSUU6IFwiRCwgZGQgTSB5eVwiLFxuXHRJU09fODYwMTogXCJ5eS1tbS1kZFwiLFxuXHRSRkNfODIyOiBcIkQsIGQgTSB5XCIsXG5cdFJGQ184NTA6IFwiREQsIGRkLU0teVwiLFxuXHRSRkNfMTAzNjogXCJELCBkIE0geVwiLFxuXHRSRkNfMTEyMzogXCJELCBkIE0geXlcIixcblx0UkZDXzI4MjI6IFwiRCwgZCBNIHl5XCIsXG5cdFJTUzogXCJELCBkIE0geVwiLCAvLyBSRkMgODIyXG5cdFRJQ0tTOiBcIiFcIixcblx0VElNRVNUQU1QOiBcIkBcIixcblx0VzNDOiBcInl5LW1tLWRkXCIsIC8vIElTTyA4NjAxXG5cblx0X3RpY2tzVG8xOTcwOiAoICggKCAxOTcwIC0gMSApICogMzY1ICsgTWF0aC5mbG9vciggMTk3MCAvIDQgKSAtIE1hdGguZmxvb3IoIDE5NzAgLyAxMDAgKSArXG5cdFx0TWF0aC5mbG9vciggMTk3MCAvIDQwMCApICkgKiAyNCAqIDYwICogNjAgKiAxMDAwMDAwMCApLFxuXG5cdC8qIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXG5cdCAqIFRoZSBmb3JtYXQgY2FuIGJlIGNvbWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nOlxuXHQgKiBkICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKVxuXHQgKiBkZCAtIGRheSBvZiBtb250aCAodHdvIGRpZ2l0KVxuXHQgKiBvICAtIGRheSBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm9zKVxuXHQgKiBvbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdClcblx0ICogRCAgLSBkYXkgbmFtZSBzaG9ydFxuXHQgKiBERCAtIGRheSBuYW1lIGxvbmdcblx0ICogbSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pXG5cdCAqIG1tIC0gbW9udGggb2YgeWVhciAodHdvIGRpZ2l0KVxuXHQgKiBNICAtIG1vbnRoIG5hbWUgc2hvcnRcblx0ICogTU0gLSBtb250aCBuYW1lIGxvbmdcblx0ICogeSAgLSB5ZWFyICh0d28gZGlnaXQpXG5cdCAqIHl5IC0geWVhciAoZm91ciBkaWdpdClcblx0ICogQCAtIFVuaXggdGltZXN0YW1wIChtcyBzaW5jZSAwMS8wMS8xOTcwKVxuXHQgKiAhIC0gV2luZG93cyB0aWNrcyAoMTAwbnMgc2luY2UgMDEvMDEvMDAwMSlcblx0ICogXCIuLi5cIiAtIGxpdGVyYWwgdGV4dFxuXHQgKiAnJyAtIHNpbmdsZSBxdW90ZVxuXHQgKlxuXHQgKiBAcGFyYW0gIGZvcm1hdCBzdHJpbmcgLSB0aGUgZGVzaXJlZCBmb3JtYXQgb2YgdGhlIGRhdGVcblx0ICogQHBhcmFtICBkYXRlIERhdGUgLSB0aGUgZGF0ZSB2YWx1ZSB0byBmb3JtYXRcblx0ICogQHBhcmFtICBzZXR0aW5ncyBPYmplY3QgLSBhdHRyaWJ1dGVzIGluY2x1ZGU6XG5cdCAqXHRcdFx0XHRcdGRheU5hbWVzU2hvcnRcdHN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbClcblx0ICpcdFx0XHRcdFx0ZGF5TmFtZXNcdFx0c3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRtb250aE5hbWVzU2hvcnQgc3RyaW5nWzEyXSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMgKG9wdGlvbmFsKVxuXHQgKlx0XHRcdFx0XHRtb250aE5hbWVzXHRcdHN0cmluZ1sxMl0gLSBuYW1lcyBvZiB0aGUgbW9udGhzIChvcHRpb25hbClcblx0ICogQHJldHVybiAgc3RyaW5nIC0gdGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdFxuXHQgKi9cblx0Zm9ybWF0RGF0ZTogZnVuY3Rpb24oIGZvcm1hdCwgZGF0ZSwgc2V0dGluZ3MgKSB7XG5cdFx0aWYgKCAhZGF0ZSApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblxuXHRcdHZhciBpRm9ybWF0LFxuXHRcdFx0ZGF5TmFtZXNTaG9ydCA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lc1Nob3J0IDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsXG5cdFx0XHRkYXlOYW1lcyA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5kYXlOYW1lcyA6IG51bGwgKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxcblx0XHRcdG1vbnRoTmFtZXNTaG9ydCA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzU2hvcnQgOiBudWxsICkgfHwgdGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LFxuXHRcdFx0bW9udGhOYW1lcyA9ICggc2V0dGluZ3MgPyBzZXR0aW5ncy5tb250aE5hbWVzIDogbnVsbCApIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsXG5cblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgYSBmb3JtYXQgY2hhcmFjdGVyIGlzIGRvdWJsZWRcblx0XHRcdGxvb2tBaGVhZCA9IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdFx0dmFyIG1hdGNoZXMgPSAoIGlGb3JtYXQgKyAxIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICsgMSApID09PSBtYXRjaCApO1xuXHRcdFx0XHRpZiAoIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0aUZvcm1hdCsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXRjaGVzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9ybWF0IGEgbnVtYmVyLCB3aXRoIGxlYWRpbmcgemVybyBpZiBuZWNlc3Nhcnlcblx0XHRcdGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uKCBtYXRjaCwgdmFsdWUsIGxlbiApIHtcblx0XHRcdFx0dmFyIG51bSA9IFwiXCIgKyB2YWx1ZTtcblx0XHRcdFx0aWYgKCBsb29rQWhlYWQoIG1hdGNoICkgKSB7XG5cdFx0XHRcdFx0d2hpbGUgKCBudW0ubGVuZ3RoIDwgbGVuICkge1xuXHRcdFx0XHRcdFx0bnVtID0gXCIwXCIgKyBudW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudW07XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3JtYXQgYSBuYW1lLCBzaG9ydCBvciBsb25nIGFzIHJlcXVlc3RlZFxuXHRcdFx0Zm9ybWF0TmFtZSA9IGZ1bmN0aW9uKCBtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcyApIHtcblx0XHRcdFx0cmV0dXJuICggbG9va0FoZWFkKCBtYXRjaCApID8gbG9uZ05hbWVzWyB2YWx1ZSBdIDogc2hvcnROYW1lc1sgdmFsdWUgXSApO1xuXHRcdFx0fSxcblx0XHRcdG91dHB1dCA9IFwiXCIsXG5cdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cblx0XHRpZiAoIGRhdGUgKSB7XG5cdFx0XHRmb3IgKCBpRm9ybWF0ID0gMDsgaUZvcm1hdCA8IGZvcm1hdC5sZW5ndGg7IGlGb3JtYXQrKyApIHtcblx0XHRcdFx0aWYgKCBsaXRlcmFsICkge1xuXHRcdFx0XHRcdGlmICggZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApID09PSBcIidcIiAmJiAhbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzd2l0Y2ggKCBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICkgKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiZFwiOlxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCBcImRcIiwgZGF0ZS5nZXREYXRlKCksIDIgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRFwiOlxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0TmFtZSggXCJEXCIsIGRhdGUuZ2V0RGF5KCksIGRheU5hbWVzU2hvcnQsIGRheU5hbWVzICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIm9cIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdE51bWJlciggXCJvXCIsXG5cdFx0XHRcdFx0XHRcdFx0TWF0aC5yb3VuZCggKCBuZXcgRGF0ZSggZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICkuZ2V0VGltZSgpIC0gbmV3IERhdGUoIGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCApLmdldFRpbWUoKSApIC8gODY0MDAwMDAgKSwgMyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSBmb3JtYXROdW1iZXIoIFwibVwiLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAyICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdE5hbWUoIFwiTVwiLCBkYXRlLmdldE1vbnRoKCksIG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ5XCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSAoIGxvb2tBaGVhZCggXCJ5XCIgKSA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6XG5cdFx0XHRcdFx0XHRcdFx0KCBkYXRlLmdldEZ1bGxZZWFyKCkgJSAxMDAgPCAxMCA/IFwiMFwiIDogXCJcIiApICsgZGF0ZS5nZXRGdWxsWWVhcigpICUgMTAwICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkBcIjpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCIhXCI6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSBkYXRlLmdldFRpbWUoKSAqIDEwMDAwICsgdGhpcy5fdGlja3NUbzE5NzA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdFx0aWYgKCBsb29rQWhlYWQoIFwiJ1wiICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IFwiJ1wiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fSxcblxuXHQvKiBFeHRyYWN0IGFsbCBwb3NzaWJsZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGRhdGUgZm9ybWF0LiAqL1xuXHRfcG9zc2libGVDaGFyczogZnVuY3Rpb24oIGZvcm1hdCApIHtcblx0XHR2YXIgaUZvcm1hdCxcblx0XHRcdGNoYXJzID0gXCJcIixcblx0XHRcdGxpdGVyYWwgPSBmYWxzZSxcblxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91YmxlZFxuXHRcdFx0bG9va0FoZWFkID0gZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9ICggaUZvcm1hdCArIDEgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKyAxICkgPT09IG1hdGNoICk7XG5cdFx0XHRcdGlmICggbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRpRm9ybWF0Kys7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoZXM7XG5cdFx0XHR9O1xuXG5cdFx0Zm9yICggaUZvcm1hdCA9IDA7IGlGb3JtYXQgPCBmb3JtYXQubGVuZ3RoOyBpRm9ybWF0KysgKSB7XG5cdFx0XHRpZiAoIGxpdGVyYWwgKSB7XG5cdFx0XHRcdGlmICggZm9ybWF0LmNoYXJBdCggaUZvcm1hdCApID09PSBcIidcIiAmJiAhbG9va0FoZWFkKCBcIidcIiApICkge1xuXHRcdFx0XHRcdGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjaGFycyArPSBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAoIGZvcm1hdC5jaGFyQXQoIGlGb3JtYXQgKSApIHtcblx0XHRcdFx0XHRjYXNlIFwiZFwiOiBjYXNlIFwibVwiOiBjYXNlIFwieVwiOiBjYXNlIFwiQFwiOlxuXHRcdFx0XHRcdFx0Y2hhcnMgKz0gXCIwMTIzNDU2Nzg5XCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRFwiOiBjYXNlIFwiTVwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZ1xuXHRcdFx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRcdFx0XHRpZiAoIGxvb2tBaGVhZCggXCInXCIgKSApIHtcblx0XHRcdFx0XHRcdFx0Y2hhcnMgKz0gXCInXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFycyArPSBmb3JtYXQuY2hhckF0KCBpRm9ybWF0ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJzO1xuXHR9LFxuXG5cdC8qIEdldCBhIHNldHRpbmcgdmFsdWUsIGRlZmF1bHRpbmcgaWYgbmVjZXNzYXJ5LiAqL1xuXHRfZ2V0OiBmdW5jdGlvbiggaW5zdCwgbmFtZSApIHtcblx0XHRyZXR1cm4gaW5zdC5zZXR0aW5nc1sgbmFtZSBdICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0aW5zdC5zZXR0aW5nc1sgbmFtZSBdIDogdGhpcy5fZGVmYXVsdHNbIG5hbWUgXTtcblx0fSxcblxuXHQvKiBQYXJzZSBleGlzdGluZyBkYXRlIGFuZCBpbml0aWFsaXNlIGRhdGUgcGlja2VyLiAqL1xuXHRfc2V0RGF0ZUZyb21GaWVsZDogZnVuY3Rpb24oIGluc3QsIG5vRGVmYXVsdCApIHtcblx0XHRpZiAoIGluc3QuaW5wdXQudmFsKCkgPT09IGluc3QubGFzdFZhbCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgZGF0ZUZvcm1hdCA9IHRoaXMuX2dldCggaW5zdCwgXCJkYXRlRm9ybWF0XCIgKSxcblx0XHRcdGRhdGVzID0gaW5zdC5sYXN0VmFsID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQudmFsKCkgOiBudWxsLFxuXHRcdFx0ZGVmYXVsdERhdGUgPSB0aGlzLl9nZXREZWZhdWx0RGF0ZSggaW5zdCApLFxuXHRcdFx0ZGF0ZSA9IGRlZmF1bHREYXRlLFxuXHRcdFx0c2V0dGluZ3MgPSB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRkYXRlID0gdGhpcy5wYXJzZURhdGUoIGRhdGVGb3JtYXQsIGRhdGVzLCBzZXR0aW5ncyApIHx8IGRlZmF1bHREYXRlO1xuXHRcdH0gY2F0Y2ggKCBldmVudCApIHtcblx0XHRcdGRhdGVzID0gKCBub0RlZmF1bHQgPyBcIlwiIDogZGF0ZXMgKTtcblx0XHR9XG5cdFx0aW5zdC5zZWxlY3RlZERheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuXHRcdGluc3QuZHJhd01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuXHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHRpbnN0LmN1cnJlbnREYXkgPSAoIGRhdGVzID8gZGF0ZS5nZXREYXRlKCkgOiAwICk7XG5cdFx0aW5zdC5jdXJyZW50TW9udGggPSAoIGRhdGVzID8gZGF0ZS5nZXRNb250aCgpIDogMCApO1xuXHRcdGluc3QuY3VycmVudFllYXIgPSAoIGRhdGVzID8gZGF0ZS5nZXRGdWxsWWVhcigpIDogMCApO1xuXHRcdHRoaXMuX2FkanVzdEluc3REYXRlKCBpbnN0ICk7XG5cdH0sXG5cblx0LyogUmV0cmlldmUgdGhlIGRlZmF1bHQgZGF0ZSBzaG93biBvbiBvcGVuaW5nLiAqL1xuXHRfZ2V0RGVmYXVsdERhdGU6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHJldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heCggaW5zdCxcblx0XHRcdHRoaXMuX2RldGVybWluZURhdGUoIGluc3QsIHRoaXMuX2dldCggaW5zdCwgXCJkZWZhdWx0RGF0ZVwiICksIG5ldyBEYXRlKCkgKSApO1xuXHR9LFxuXG5cdC8qIEEgZGF0ZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIGV4YWN0IHZhbHVlIG9yIGEgcmVsYXRpdmUgb25lLiAqL1xuXHRfZGV0ZXJtaW5lRGF0ZTogZnVuY3Rpb24oIGluc3QsIGRhdGUsIGRlZmF1bHREYXRlICkge1xuXHRcdHZhciBvZmZzZXROdW1lcmljID0gZnVuY3Rpb24oIG9mZnNldCApIHtcblx0XHRcdFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRkYXRlLnNldERhdGUoIGRhdGUuZ2V0RGF0ZSgpICsgb2Zmc2V0ICk7XG5cdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0fSxcblx0XHRcdG9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKCBvZmZzZXQgKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmV0dXJuICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoICQuZGF0ZXBpY2tlci5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLFxuXHRcdFx0XHRcdFx0b2Zmc2V0LCAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyggaW5zdCApICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZGF0ZSA9ICggb2Zmc2V0LnRvTG93ZXJDYXNlKCkubWF0Y2goIC9eYy8gKSA/XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9nZXREYXRlKCBpbnN0ICkgOiBudWxsICkgfHwgbmV3IERhdGUoKSxcblx0XHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLFxuXHRcdFx0XHRcdG1vbnRoID0gZGF0ZS5nZXRNb250aCgpLFxuXHRcdFx0XHRcdGRheSA9IGRhdGUuZ2V0RGF0ZSgpLFxuXHRcdFx0XHRcdHBhdHRlcm4gPSAvKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLFxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMoIG9mZnNldCApO1xuXG5cdFx0XHRcdHdoaWxlICggbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRzd2l0Y2ggKCBtYXRjaGVzWyAyIF0gfHwgXCJkXCIgKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiZFwiIDogY2FzZSBcIkRcIiA6XG5cdFx0XHRcdFx0XHRcdGRheSArPSBwYXJzZUludCggbWF0Y2hlc1sgMSBdLCAxMCApOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ3XCIgOiBjYXNlIFwiV1wiIDpcblx0XHRcdFx0XHRcdFx0ZGF5ICs9IHBhcnNlSW50KCBtYXRjaGVzWyAxIF0sIDEwICkgKiA3OyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtXCIgOiBjYXNlIFwiTVwiIDpcblx0XHRcdFx0XHRcdFx0bW9udGggKz0gcGFyc2VJbnQoIG1hdGNoZXNbIDEgXSwgMTAgKTtcblx0XHRcdFx0XHRcdFx0ZGF5ID0gTWF0aC5taW4oIGRheSwgJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aCggeWVhciwgbW9udGggKSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJ5XCI6IGNhc2UgXCJZXCIgOlxuXHRcdFx0XHRcdFx0XHR5ZWFyICs9IHBhcnNlSW50KCBtYXRjaGVzWyAxIF0sIDEwICk7XG5cdFx0XHRcdFx0XHRcdGRheSA9IE1hdGgubWluKCBkYXksICQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoIHllYXIsIG1vbnRoICkgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMoIG9mZnNldCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZSggeWVhciwgbW9udGgsIGRheSApO1xuXHRcdFx0fSxcblx0XHRcdG5ld0RhdGUgPSAoIGRhdGUgPT0gbnVsbCB8fCBkYXRlID09PSBcIlwiID8gZGVmYXVsdERhdGUgOiAoIHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gb2Zmc2V0U3RyaW5nKCBkYXRlICkgOlxuXHRcdFx0XHQoIHR5cGVvZiBkYXRlID09PSBcIm51bWJlclwiID8gKCBpc05hTiggZGF0ZSApID8gZGVmYXVsdERhdGUgOiBvZmZzZXROdW1lcmljKCBkYXRlICkgKSA6IG5ldyBEYXRlKCBkYXRlLmdldFRpbWUoKSApICkgKSApO1xuXG5cdFx0bmV3RGF0ZSA9ICggbmV3RGF0ZSAmJiBuZXdEYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgPyBkZWZhdWx0RGF0ZSA6IG5ld0RhdGUgKTtcblx0XHRpZiAoIG5ld0RhdGUgKSB7XG5cdFx0XHRuZXdEYXRlLnNldEhvdXJzKCAwICk7XG5cdFx0XHRuZXdEYXRlLnNldE1pbnV0ZXMoIDAgKTtcblx0XHRcdG5ld0RhdGUuc2V0U2Vjb25kcyggMCApO1xuXHRcdFx0bmV3RGF0ZS5zZXRNaWxsaXNlY29uZHMoIDAgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXdEYXRlICk7XG5cdH0sXG5cblx0LyogSGFuZGxlIHN3aXRjaCB0by9mcm9tIGRheWxpZ2h0IHNhdmluZy5cblx0ICogSG91cnMgbWF5IGJlIG5vbi16ZXJvIG9uIGRheWxpZ2h0IHNhdmluZyBjdXQtb3Zlcjpcblx0ICogPiAxMiB3aGVuIG1pZG5pZ2h0IGNoYW5nZW92ZXIsIGJ1dCB0aGVuIGNhbm5vdCBnZW5lcmF0ZVxuXHQgKiBtaWRuaWdodCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC5cblx0ICogQHBhcmFtICBkYXRlICAoRGF0ZSkgdGhlIGRhdGUgdG8gY2hlY2tcblx0ICogQHJldHVybiAgKERhdGUpIHRoZSBjb3JyZWN0ZWQgZGF0ZVxuXHQgKi9cblx0X2RheWxpZ2h0U2F2aW5nQWRqdXN0OiBmdW5jdGlvbiggZGF0ZSApIHtcblx0XHRpZiAoICFkYXRlICkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGRhdGUuc2V0SG91cnMoIGRhdGUuZ2V0SG91cnMoKSA+IDEyID8gZGF0ZS5nZXRIb3VycygpICsgMiA6IDAgKTtcblx0XHRyZXR1cm4gZGF0ZTtcblx0fSxcblxuXHQvKiBTZXQgdGhlIGRhdGUocykgZGlyZWN0bHkuICovXG5cdF9zZXREYXRlOiBmdW5jdGlvbiggaW5zdCwgZGF0ZSwgbm9DaGFuZ2UgKSB7XG5cdFx0dmFyIGNsZWFyID0gIWRhdGUsXG5cdFx0XHRvcmlnTW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGgsXG5cdFx0XHRvcmlnWWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyLFxuXHRcdFx0bmV3RGF0ZSA9IHRoaXMuX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCB0aGlzLl9kZXRlcm1pbmVEYXRlKCBpbnN0LCBkYXRlLCBuZXcgRGF0ZSgpICkgKTtcblxuXHRcdGluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXkgPSBuZXdEYXRlLmdldERhdGUoKTtcblx0XHRpbnN0LmRyYXdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoID0gbmV3RGF0ZS5nZXRNb250aCgpO1xuXHRcdGluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGluc3QuY3VycmVudFllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0aWYgKCAoIG9yaWdNb250aCAhPT0gaW5zdC5zZWxlY3RlZE1vbnRoIHx8IG9yaWdZZWFyICE9PSBpbnN0LnNlbGVjdGVkWWVhciApICYmICFub0NoYW5nZSApIHtcblx0XHRcdHRoaXMuX25vdGlmeUNoYW5nZSggaW5zdCApO1xuXHRcdH1cblx0XHR0aGlzLl9hZGp1c3RJbnN0RGF0ZSggaW5zdCApO1xuXHRcdGlmICggaW5zdC5pbnB1dCApIHtcblx0XHRcdGluc3QuaW5wdXQudmFsKCBjbGVhciA/IFwiXCIgOiB0aGlzLl9mb3JtYXREYXRlKCBpbnN0ICkgKTtcblx0XHR9XG5cdH0sXG5cblx0LyogUmV0cmlldmUgdGhlIGRhdGUocykgZGlyZWN0bHkuICovXG5cdF9nZXREYXRlOiBmdW5jdGlvbiggaW5zdCApIHtcblx0XHR2YXIgc3RhcnREYXRlID0gKCAhaW5zdC5jdXJyZW50WWVhciB8fCAoIGluc3QuaW5wdXQgJiYgaW5zdC5pbnB1dC52YWwoKSA9PT0gXCJcIiApID8gbnVsbCA6XG5cdFx0XHR0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoXG5cdFx0XHRpbnN0LmN1cnJlbnRZZWFyLCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50RGF5ICkgKSApO1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGF0ZTtcblx0fSxcblxuXHQvKiBBdHRhY2ggdGhlIG9ueHh4IGhhbmRsZXJzLiAgVGhlc2UgYXJlIGRlY2xhcmVkIHN0YXRpY2FsbHkgc29cblx0ICogdGhleSB3b3JrIHdpdGggc3RhdGljIGNvZGUgdHJhbnNmb3JtZXJzIGxpa2UgQ2FqYS5cblx0ICovXG5cdF9hdHRhY2hIYW5kbGVyczogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIHN0ZXBNb250aHMgPSB0aGlzLl9nZXQoIGluc3QsIFwic3RlcE1vbnRoc1wiICksXG5cdFx0XHRpZCA9IFwiI1wiICsgaW5zdC5pZC5yZXBsYWNlKCAvXFxcXFxcXFwvZywgXCJcXFxcXCIgKTtcblx0XHRpbnN0LmRwRGl2LmZpbmQoIFwiW2RhdGEtaGFuZGxlcl1cIiApLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaGFuZGxlciA9IHtcblx0XHRcdFx0cHJldjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKCBpZCwgLXN0ZXBNb250aHMsIFwiTVwiICk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5leHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSggaWQsICtzdGVwTW9udGhzLCBcIk1cIiApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSggaWQgKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2VsZWN0RGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdERheSggaWQsICt0aGlzLmdldEF0dHJpYnV0ZSggXCJkYXRhLW1vbnRoXCIgKSwgK3RoaXMuZ2V0QXR0cmlidXRlKCBcImRhdGEteWVhclwiICksIHRoaXMgKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNlbGVjdE1vbnRoOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhciggaWQsIHRoaXMsIFwiTVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZWxlY3RZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhciggaWQsIHRoaXMsIFwiWVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0JCggdGhpcyApLm9uKCB0aGlzLmdldEF0dHJpYnV0ZSggXCJkYXRhLWV2ZW50XCIgKSwgaGFuZGxlclsgdGhpcy5nZXRBdHRyaWJ1dGUoIFwiZGF0YS1oYW5kbGVyXCIgKSBdICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdC8qIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGF0ZSBwaWNrZXIuICovXG5cdF9nZW5lcmF0ZUhUTUw6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHZhciBtYXhEcmF3LCBwcmV2VGV4dCwgcHJldiwgbmV4dFRleHQsIG5leHQsIGN1cnJlbnRUZXh0LCBnb3RvRGF0ZSxcblx0XHRcdGNvbnRyb2xzLCBidXR0b25QYW5lbCwgZmlyc3REYXksIHNob3dXZWVrLCBkYXlOYW1lcywgZGF5TmFtZXNNaW4sXG5cdFx0XHRtb250aE5hbWVzLCBtb250aE5hbWVzU2hvcnQsIGJlZm9yZVNob3dEYXksIHNob3dPdGhlck1vbnRocyxcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzLCBkZWZhdWx0RGF0ZSwgaHRtbCwgZG93LCByb3csIGdyb3VwLCBjb2wsIHNlbGVjdGVkRGF0ZSxcblx0XHRcdGNvcm5lckNsYXNzLCBjYWxlbmRlciwgdGhlYWQsIGRheSwgZGF5c0luTW9udGgsIGxlYWREYXlzLCBjdXJSb3dzLCBudW1Sb3dzLFxuXHRcdFx0cHJpbnREYXRlLCBkUm93LCB0Ym9keSwgZGF5U2V0dGluZ3MsIG90aGVyTW9udGgsIHVuc2VsZWN0YWJsZSxcblx0XHRcdHRlbXBEYXRlID0gbmV3IERhdGUoKSxcblx0XHRcdHRvZGF5ID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoXG5cdFx0XHRcdG5ldyBEYXRlKCB0ZW1wRGF0ZS5nZXRGdWxsWWVhcigpLCB0ZW1wRGF0ZS5nZXRNb250aCgpLCB0ZW1wRGF0ZS5nZXREYXRlKCkgKSApLCAvLyBjbGVhciB0aW1lXG5cdFx0XHRpc1JUTCA9IHRoaXMuX2dldCggaW5zdCwgXCJpc1JUTFwiICksXG5cdFx0XHRzaG93QnV0dG9uUGFuZWwgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0J1dHRvblBhbmVsXCIgKSxcblx0XHRcdGhpZGVJZk5vUHJldk5leHQgPSB0aGlzLl9nZXQoIGluc3QsIFwiaGlkZUlmTm9QcmV2TmV4dFwiICksXG5cdFx0XHRuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXRcIiApLFxuXHRcdFx0bnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoIGluc3QgKSxcblx0XHRcdHNob3dDdXJyZW50QXRQb3MgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd0N1cnJlbnRBdFBvc1wiICksXG5cdFx0XHRzdGVwTW9udGhzID0gdGhpcy5fZ2V0KCBpbnN0LCBcInN0ZXBNb250aHNcIiApLFxuXHRcdFx0aXNNdWx0aU1vbnRoID0gKCBudW1Nb250aHNbIDAgXSAhPT0gMSB8fCBudW1Nb250aHNbIDEgXSAhPT0gMSApLFxuXHRcdFx0Y3VycmVudERhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggKCAhaW5zdC5jdXJyZW50RGF5ID8gbmV3IERhdGUoIDk5OTksIDksIDkgKSA6XG5cdFx0XHRcdG5ldyBEYXRlKCBpbnN0LmN1cnJlbnRZZWFyLCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50RGF5ICkgKSApLFxuXHRcdFx0bWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRkcmF3TW9udGggPSBpbnN0LmRyYXdNb250aCAtIHNob3dDdXJyZW50QXRQb3MsXG5cdFx0XHRkcmF3WWVhciA9IGluc3QuZHJhd1llYXI7XG5cblx0XHRpZiAoIGRyYXdNb250aCA8IDAgKSB7XG5cdFx0XHRkcmF3TW9udGggKz0gMTI7XG5cdFx0XHRkcmF3WWVhci0tO1xuXHRcdH1cblx0XHRpZiAoIG1heERhdGUgKSB7XG5cdFx0XHRtYXhEcmF3ID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBtYXhEYXRlLmdldEZ1bGxZZWFyKCksXG5cdFx0XHRcdG1heERhdGUuZ2V0TW9udGgoKSAtICggbnVtTW9udGhzWyAwIF0gKiBudW1Nb250aHNbIDEgXSApICsgMSwgbWF4RGF0ZS5nZXREYXRlKCkgKSApO1xuXHRcdFx0bWF4RHJhdyA9ICggbWluRGF0ZSAmJiBtYXhEcmF3IDwgbWluRGF0ZSA/IG1pbkRhdGUgOiBtYXhEcmF3ICk7XG5cdFx0XHR3aGlsZSAoIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggZHJhd1llYXIsIGRyYXdNb250aCwgMSApICkgPiBtYXhEcmF3ICkge1xuXHRcdFx0XHRkcmF3TW9udGgtLTtcblx0XHRcdFx0aWYgKCBkcmF3TW9udGggPCAwICkge1xuXHRcdFx0XHRcdGRyYXdNb250aCA9IDExO1xuXHRcdFx0XHRcdGRyYXdZZWFyLS07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aW5zdC5kcmF3TW9udGggPSBkcmF3TW9udGg7XG5cdFx0aW5zdC5kcmF3WWVhciA9IGRyYXdZZWFyO1xuXG5cdFx0cHJldlRleHQgPSB0aGlzLl9nZXQoIGluc3QsIFwicHJldlRleHRcIiApO1xuXHRcdHByZXZUZXh0ID0gKCAhbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCA/IHByZXZUZXh0IDogdGhpcy5mb3JtYXREYXRlKCBwcmV2VGV4dCxcblx0XHRcdHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggZHJhd1llYXIsIGRyYXdNb250aCAtIHN0ZXBNb250aHMsIDEgKSApLFxuXHRcdFx0dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKCBpbnN0ICkgKSApO1xuXG5cdFx0cHJldiA9ICggdGhpcy5fY2FuQWRqdXN0TW9udGgoIGluc3QsIC0xLCBkcmF3WWVhciwgZHJhd01vbnRoICkgP1xuXHRcdFx0XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snXCIgK1xuXHRcdFx0XCIgdGl0bGU9J1wiICsgcHJldlRleHQgKyBcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIgKyAoIGlzUlRMID8gXCJlXCIgOiBcIndcIiApICsgXCInPlwiICsgcHJldlRleHQgKyBcIjwvc3Bhbj48L2E+XCIgOlxuXHRcdFx0KCBoaWRlSWZOb1ByZXZOZXh0ID8gXCJcIiA6IFwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIgKyBwcmV2VGV4dCArIFwiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIiArICggaXNSVEwgPyBcImVcIiA6IFwid1wiICkgKyBcIic+XCIgKyBwcmV2VGV4dCArIFwiPC9zcGFuPjwvYT5cIiApICk7XG5cblx0XHRuZXh0VGV4dCA9IHRoaXMuX2dldCggaW5zdCwgXCJuZXh0VGV4dFwiICk7XG5cdFx0bmV4dFRleHQgPSAoICFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gbmV4dFRleHQgOiB0aGlzLmZvcm1hdERhdGUoIG5leHRUZXh0LFxuXHRcdFx0dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBkcmF3WWVhciwgZHJhd01vbnRoICsgc3RlcE1vbnRocywgMSApICksXG5cdFx0XHR0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApICk7XG5cblx0XHRuZXh0ID0gKCB0aGlzLl9jYW5BZGp1c3RNb250aCggaW5zdCwgKzEsIGRyYXdZZWFyLCBkcmF3TW9udGggKSA/XG5cdFx0XHRcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaydcIiArXG5cdFx0XHRcIiB0aXRsZT0nXCIgKyBuZXh0VGV4dCArIFwiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIiArICggaXNSVEwgPyBcIndcIiA6IFwiZVwiICkgKyBcIic+XCIgKyBuZXh0VGV4dCArIFwiPC9zcGFuPjwvYT5cIiA6XG5cdFx0XHQoIGhpZGVJZk5vUHJldk5leHQgPyBcIlwiIDogXCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIiArIG5leHRUZXh0ICsgXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiICsgKCBpc1JUTCA/IFwid1wiIDogXCJlXCIgKSArIFwiJz5cIiArIG5leHRUZXh0ICsgXCI8L3NwYW4+PC9hPlwiICkgKTtcblxuXHRcdGN1cnJlbnRUZXh0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcImN1cnJlbnRUZXh0XCIgKTtcblx0XHRnb3RvRGF0ZSA9ICggdGhpcy5fZ2V0KCBpbnN0LCBcImdvdG9DdXJyZW50XCIgKSAmJiBpbnN0LmN1cnJlbnREYXkgPyBjdXJyZW50RGF0ZSA6IHRvZGF5ICk7XG5cdFx0Y3VycmVudFRleHQgPSAoICFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gY3VycmVudFRleHQgOlxuXHRcdFx0dGhpcy5mb3JtYXREYXRlKCBjdXJyZW50VGV4dCwgZ290b0RhdGUsIHRoaXMuX2dldEZvcm1hdENvbmZpZyggaW5zdCApICkgKTtcblxuXHRcdGNvbnRyb2xzID0gKCAhaW5zdC5pbmxpbmUgPyBcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdoaWRlJyBkYXRhLWV2ZW50PSdjbGljayc+XCIgK1xuXHRcdFx0dGhpcy5fZ2V0KCBpbnN0LCBcImNsb3NlVGV4dFwiICkgKyBcIjwvYnV0dG9uPlwiIDogXCJcIiApO1xuXG5cdFx0YnV0dG9uUGFuZWwgPSAoIHNob3dCdXR0b25QYW5lbCApID8gXCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPlwiICsgKCBpc1JUTCA/IGNvbnRyb2xzIDogXCJcIiApICtcblx0XHRcdCggdGhpcy5faXNJblJhbmdlKCBpbnN0LCBnb3RvRGF0ZSApID8gXCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3RvZGF5JyBkYXRhLWV2ZW50PSdjbGljaydcIiArXG5cdFx0XHRcIj5cIiArIGN1cnJlbnRUZXh0ICsgXCI8L2J1dHRvbj5cIiA6IFwiXCIgKSArICggaXNSVEwgPyBcIlwiIDogY29udHJvbHMgKSArIFwiPC9kaXY+XCIgOiBcIlwiO1xuXG5cdFx0Zmlyc3REYXkgPSBwYXJzZUludCggdGhpcy5fZ2V0KCBpbnN0LCBcImZpcnN0RGF5XCIgKSwgMTAgKTtcblx0XHRmaXJzdERheSA9ICggaXNOYU4oIGZpcnN0RGF5ICkgPyAwIDogZmlyc3REYXkgKTtcblxuXHRcdHNob3dXZWVrID0gdGhpcy5fZ2V0KCBpbnN0LCBcInNob3dXZWVrXCIgKTtcblx0XHRkYXlOYW1lcyA9IHRoaXMuX2dldCggaW5zdCwgXCJkYXlOYW1lc1wiICk7XG5cdFx0ZGF5TmFtZXNNaW4gPSB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNNaW5cIiApO1xuXHRcdG1vbnRoTmFtZXMgPSB0aGlzLl9nZXQoIGluc3QsIFwibW9udGhOYW1lc1wiICk7XG5cdFx0bW9udGhOYW1lc1Nob3J0ID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm1vbnRoTmFtZXNTaG9ydFwiICk7XG5cdFx0YmVmb3JlU2hvd0RheSA9IHRoaXMuX2dldCggaW5zdCwgXCJiZWZvcmVTaG93RGF5XCIgKTtcblx0XHRzaG93T3RoZXJNb250aHMgPSB0aGlzLl9nZXQoIGluc3QsIFwic2hvd090aGVyTW9udGhzXCIgKTtcblx0XHRzZWxlY3RPdGhlck1vbnRocyA9IHRoaXMuX2dldCggaW5zdCwgXCJzZWxlY3RPdGhlck1vbnRoc1wiICk7XG5cdFx0ZGVmYXVsdERhdGUgPSB0aGlzLl9nZXREZWZhdWx0RGF0ZSggaW5zdCApO1xuXHRcdGh0bWwgPSBcIlwiO1xuXG5cdFx0Zm9yICggcm93ID0gMDsgcm93IDwgbnVtTW9udGhzWyAwIF07IHJvdysrICkge1xuXHRcdFx0Z3JvdXAgPSBcIlwiO1xuXHRcdFx0dGhpcy5tYXhSb3dzID0gNDtcblx0XHRcdGZvciAoIGNvbCA9IDA7IGNvbCA8IG51bU1vbnRoc1sgMSBdOyBjb2wrKyApIHtcblx0XHRcdFx0c2VsZWN0ZWREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIG5ldyBEYXRlKCBkcmF3WWVhciwgZHJhd01vbnRoLCBpbnN0LnNlbGVjdGVkRGF5ICkgKTtcblx0XHRcdFx0Y29ybmVyQ2xhc3MgPSBcIiB1aS1jb3JuZXItYWxsXCI7XG5cdFx0XHRcdGNhbGVuZGVyID0gXCJcIjtcblx0XHRcdFx0aWYgKCBpc011bHRpTW9udGggKSB7XG5cdFx0XHRcdFx0Y2FsZW5kZXIgKz0gXCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwXCI7XG5cdFx0XHRcdFx0aWYgKCBudW1Nb250aHNbIDEgXSA+IDEgKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKCBjb2wgKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMDogY2FsZW5kZXIgKz0gXCIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdFwiO1xuXHRcdFx0XHRcdFx0XHRcdGNvcm5lckNsYXNzID0gXCIgdWktY29ybmVyLVwiICsgKCBpc1JUTCA/IFwicmlnaHRcIiA6IFwibGVmdFwiICk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIG51bU1vbnRoc1sgMSBdIC0gMTogY2FsZW5kZXIgKz0gXCIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0XCI7XG5cdFx0XHRcdFx0XHRcdFx0Y29ybmVyQ2xhc3MgPSBcIiB1aS1jb3JuZXItXCIgKyAoIGlzUlRMID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIgKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGNhbGVuZGVyICs9IFwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlXCI7IGNvcm5lckNsYXNzID0gXCJcIjsgYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhbGVuZGVyICs9IFwiJz5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYWxlbmRlciArPSBcIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIgKyBjb3JuZXJDbGFzcyArIFwiJz5cIiArXG5cdFx0XHRcdFx0KCAvYWxsfGxlZnQvLnRlc3QoIGNvcm5lckNsYXNzICkgJiYgcm93ID09PSAwID8gKCBpc1JUTCA/IG5leHQgOiBwcmV2ICkgOiBcIlwiICkgK1xuXHRcdFx0XHRcdCggL2FsbHxyaWdodC8udGVzdCggY29ybmVyQ2xhc3MgKSAmJiByb3cgPT09IDAgPyAoIGlzUlRMID8gcHJldiA6IG5leHQgKSA6IFwiXCIgKSArXG5cdFx0XHRcdFx0dGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoIGluc3QsIGRyYXdNb250aCwgZHJhd1llYXIsIG1pbkRhdGUsIG1heERhdGUsXG5cdFx0XHRcdFx0cm93ID4gMCB8fCBjb2wgPiAwLCBtb250aE5hbWVzLCBtb250aE5hbWVzU2hvcnQgKSArIC8vIGRyYXcgbW9udGggaGVhZGVyc1xuXHRcdFx0XHRcdFwiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+XCIgK1xuXHRcdFx0XHRcdFwiPHRyPlwiO1xuXHRcdFx0XHR0aGVhZCA9ICggc2hvd1dlZWsgPyBcIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIgKyB0aGlzLl9nZXQoIGluc3QsIFwid2Vla0hlYWRlclwiICkgKyBcIjwvdGg+XCIgOiBcIlwiICk7XG5cdFx0XHRcdGZvciAoIGRvdyA9IDA7IGRvdyA8IDc7IGRvdysrICkgeyAvLyBkYXlzIG9mIHRoZSB3ZWVrXG5cdFx0XHRcdFx0ZGF5ID0gKCBkb3cgKyBmaXJzdERheSApICUgNztcblx0XHRcdFx0XHR0aGVhZCArPSBcIjx0aCBzY29wZT0nY29sJ1wiICsgKCAoIGRvdyArIGZpcnN0RGF5ICsgNiApICUgNyA+PSA1ID8gXCIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnXCIgOiBcIlwiICkgKyBcIj5cIiArXG5cdFx0XHRcdFx0XHRcIjxzcGFuIHRpdGxlPSdcIiArIGRheU5hbWVzWyBkYXkgXSArIFwiJz5cIiArIGRheU5hbWVzTWluWyBkYXkgXSArIFwiPC9zcGFuPjwvdGg+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FsZW5kZXIgKz0gdGhlYWQgKyBcIjwvdHI+PC90aGVhZD48dGJvZHk+XCI7XG5cdFx0XHRcdGRheXNJbk1vbnRoID0gdGhpcy5fZ2V0RGF5c0luTW9udGgoIGRyYXdZZWFyLCBkcmF3TW9udGggKTtcblx0XHRcdFx0aWYgKCBkcmF3WWVhciA9PT0gaW5zdC5zZWxlY3RlZFllYXIgJiYgZHJhd01vbnRoID09PSBpbnN0LnNlbGVjdGVkTW9udGggKSB7XG5cdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERheSA9IE1hdGgubWluKCBpbnN0LnNlbGVjdGVkRGF5LCBkYXlzSW5Nb250aCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxlYWREYXlzID0gKCB0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoIGRyYXdZZWFyLCBkcmF3TW9udGggKSAtIGZpcnN0RGF5ICsgNyApICUgNztcblx0XHRcdFx0Y3VyUm93cyA9IE1hdGguY2VpbCggKCBsZWFkRGF5cyArIGRheXNJbk1vbnRoICkgLyA3ICk7IC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHJvd3MgdG8gZ2VuZXJhdGVcblx0XHRcdFx0bnVtUm93cyA9ICggaXNNdWx0aU1vbnRoID8gdGhpcy5tYXhSb3dzID4gY3VyUm93cyA/IHRoaXMubWF4Um93cyA6IGN1clJvd3MgOiBjdXJSb3dzICk7IC8vSWYgbXVsdGlwbGUgbW9udGhzLCB1c2UgdGhlIGhpZ2hlciBudW1iZXIgb2Ygcm93cyAoc2VlICM3MDQzKVxuXHRcdFx0XHR0aGlzLm1heFJvd3MgPSBudW1Sb3dzO1xuXHRcdFx0XHRwcmludERhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGRyYXdZZWFyLCBkcmF3TW9udGgsIDEgLSBsZWFkRGF5cyApICk7XG5cdFx0XHRcdGZvciAoIGRSb3cgPSAwOyBkUm93IDwgbnVtUm93czsgZFJvdysrICkgeyAvLyBjcmVhdGUgZGF0ZSBwaWNrZXIgcm93c1xuXHRcdFx0XHRcdGNhbGVuZGVyICs9IFwiPHRyPlwiO1xuXHRcdFx0XHRcdHRib2R5ID0gKCAhc2hvd1dlZWsgPyBcIlwiIDogXCI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPlwiICtcblx0XHRcdFx0XHRcdHRoaXMuX2dldCggaW5zdCwgXCJjYWxjdWxhdGVXZWVrXCIgKSggcHJpbnREYXRlICkgKyBcIjwvdGQ+XCIgKTtcblx0XHRcdFx0XHRmb3IgKCBkb3cgPSAwOyBkb3cgPCA3OyBkb3crKyApIHsgLy8gY3JlYXRlIGRhdGUgcGlja2VyIGRheXNcblx0XHRcdFx0XHRcdGRheVNldHRpbmdzID0gKCBiZWZvcmVTaG93RGF5ID9cblx0XHRcdFx0XHRcdFx0YmVmb3JlU2hvd0RheS5hcHBseSggKCBpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFsgMCBdIDogbnVsbCApLCBbIHByaW50RGF0ZSBdICkgOiBbIHRydWUsIFwiXCIgXSApO1xuXHRcdFx0XHRcdFx0b3RoZXJNb250aCA9ICggcHJpbnREYXRlLmdldE1vbnRoKCkgIT09IGRyYXdNb250aCApO1xuXHRcdFx0XHRcdFx0dW5zZWxlY3RhYmxlID0gKCBvdGhlck1vbnRoICYmICFzZWxlY3RPdGhlck1vbnRocyApIHx8ICFkYXlTZXR0aW5nc1sgMCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggbWluRGF0ZSAmJiBwcmludERhdGUgPCBtaW5EYXRlICkgfHwgKCBtYXhEYXRlICYmIHByaW50RGF0ZSA+IG1heERhdGUgKTtcblx0XHRcdFx0XHRcdHRib2R5ICs9IFwiPHRkIGNsYXNzPSdcIiArXG5cdFx0XHRcdFx0XHRcdCggKCBkb3cgKyBmaXJzdERheSArIDYgKSAlIDcgPj0gNSA/IFwiIHVpLWRhdGVwaWNrZXItd2Vlay1lbmRcIiA6IFwiXCIgKSArIC8vIGhpZ2hsaWdodCB3ZWVrZW5kc1xuXHRcdFx0XHRcdFx0XHQoIG90aGVyTW9udGggPyBcIiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoXCIgOiBcIlwiICkgKyAvLyBoaWdobGlnaHQgZGF5cyBmcm9tIG90aGVyIG1vbnRoc1xuXHRcdFx0XHRcdFx0XHQoICggcHJpbnREYXRlLmdldFRpbWUoKSA9PT0gc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAmJiBkcmF3TW9udGggPT09IGluc3Quc2VsZWN0ZWRNb250aCAmJiBpbnN0Ll9rZXlFdmVudCApIHx8IC8vIHVzZXIgcHJlc3NlZCBrZXlcblx0XHRcdFx0XHRcdFx0KCBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkgPT09IHByaW50RGF0ZS5nZXRUaW1lKCkgJiYgZGVmYXVsdERhdGUuZ2V0VGltZSgpID09PSBzZWxlY3RlZERhdGUuZ2V0VGltZSgpICkgP1xuXG5cdFx0XHRcdFx0XHRcdC8vIG9yIGRlZmF1bHREYXRlIGlzIGN1cnJlbnQgcHJpbnRlZERhdGUgYW5kIGRlZmF1bHREYXRlIGlzIHNlbGVjdGVkRGF0ZVxuXHRcdFx0XHRcdFx0XHRcIiBcIiArIHRoaXMuX2RheU92ZXJDbGFzcyA6IFwiXCIgKSArIC8vIGhpZ2hsaWdodCBzZWxlY3RlZCBkYXlcblx0XHRcdFx0XHRcdFx0KCB1bnNlbGVjdGFibGUgPyBcIiBcIiArIHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzICsgXCIgdWktc3RhdGUtZGlzYWJsZWRcIiA6IFwiXCIgKSArICAvLyBoaWdobGlnaHQgdW5zZWxlY3RhYmxlIGRheXNcblx0XHRcdFx0XHRcdFx0KCBvdGhlck1vbnRoICYmICFzaG93T3RoZXJNb250aHMgPyBcIlwiIDogXCIgXCIgKyBkYXlTZXR0aW5nc1sgMSBdICsgLy8gaGlnaGxpZ2h0IGN1c3RvbSBkYXRlc1xuXHRcdFx0XHRcdFx0XHQoIHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IGN1cnJlbnREYXRlLmdldFRpbWUoKSA/IFwiIFwiICsgdGhpcy5fY3VycmVudENsYXNzIDogXCJcIiApICsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGRheVxuXHRcdFx0XHRcdFx0XHQoIHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IHRvZGF5LmdldFRpbWUoKSA/IFwiIHVpLWRhdGVwaWNrZXItdG9kYXlcIiA6IFwiXCIgKSApICsgXCInXCIgKyAvLyBoaWdobGlnaHQgdG9kYXkgKGlmIGRpZmZlcmVudClcblx0XHRcdFx0XHRcdFx0KCAoICFvdGhlck1vbnRoIHx8IHNob3dPdGhlck1vbnRocyApICYmIGRheVNldHRpbmdzWyAyIF0gPyBcIiB0aXRsZT0nXCIgKyBkYXlTZXR0aW5nc1sgMiBdLnJlcGxhY2UoIC8nL2csIFwiJiMzOTtcIiApICsgXCInXCIgOiBcIlwiICkgKyAvLyBjZWxsIHRpdGxlXG5cdFx0XHRcdFx0XHRcdCggdW5zZWxlY3RhYmxlID8gXCJcIiA6IFwiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nXCIgKyBwcmludERhdGUuZ2V0TW9udGgoKSArIFwiJyBkYXRhLXllYXI9J1wiICsgcHJpbnREYXRlLmdldEZ1bGxZZWFyKCkgKyBcIidcIiApICsgXCI+XCIgKyAvLyBhY3Rpb25zXG5cdFx0XHRcdFx0XHRcdCggb3RoZXJNb250aCAmJiAhc2hvd090aGVyTW9udGhzID8gXCImI3hhMDtcIiA6IC8vIGRpc3BsYXkgZm9yIG90aGVyIG1vbnRoc1xuXHRcdFx0XHRcdFx0XHQoIHVuc2VsZWN0YWJsZSA/IFwiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiICsgcHJpbnREYXRlLmdldERhdGUoKSArIFwiPC9zcGFuPlwiIDogXCI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdFwiICtcblx0XHRcdFx0XHRcdFx0KCBwcmludERhdGUuZ2V0VGltZSgpID09PSB0b2RheS5nZXRUaW1lKCkgPyBcIiB1aS1zdGF0ZS1oaWdobGlnaHRcIiA6IFwiXCIgKSArXG5cdFx0XHRcdFx0XHRcdCggcHJpbnREYXRlLmdldFRpbWUoKSA9PT0gY3VycmVudERhdGUuZ2V0VGltZSgpID8gXCIgdWktc3RhdGUtYWN0aXZlXCIgOiBcIlwiICkgKyAvLyBoaWdobGlnaHQgc2VsZWN0ZWQgZGF5XG5cdFx0XHRcdFx0XHRcdCggb3RoZXJNb250aCA/IFwiIHVpLXByaW9yaXR5LXNlY29uZGFyeVwiIDogXCJcIiApICsgLy8gZGlzdGluZ3Vpc2ggZGF0ZXMgZnJvbSBvdGhlciBtb250aHNcblx0XHRcdFx0XHRcdFx0XCInIGhyZWY9JyMnPlwiICsgcHJpbnREYXRlLmdldERhdGUoKSArIFwiPC9hPlwiICkgKSArIFwiPC90ZD5cIjsgLy8gZGlzcGxheSBzZWxlY3RhYmxlIGRhdGVcblx0XHRcdFx0XHRcdHByaW50RGF0ZS5zZXREYXRlKCBwcmludERhdGUuZ2V0RGF0ZSgpICsgMSApO1xuXHRcdFx0XHRcdFx0cHJpbnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoIHByaW50RGF0ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYWxlbmRlciArPSB0Ym9keSArIFwiPC90cj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcmF3TW9udGgrKztcblx0XHRcdFx0aWYgKCBkcmF3TW9udGggPiAxMSApIHtcblx0XHRcdFx0XHRkcmF3TW9udGggPSAwO1xuXHRcdFx0XHRcdGRyYXdZZWFyKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2FsZW5kZXIgKz0gXCI8L3Rib2R5PjwvdGFibGU+XCIgKyAoIGlzTXVsdGlNb250aCA/IFwiPC9kaXY+XCIgK1xuXHRcdFx0XHRcdFx0XHQoICggbnVtTW9udGhzWyAwIF0gPiAwICYmIGNvbCA9PT0gbnVtTW9udGhzWyAxIF0gLSAxICkgPyBcIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj5cIiA6IFwiXCIgKSA6IFwiXCIgKTtcblx0XHRcdFx0Z3JvdXAgKz0gY2FsZW5kZXI7XG5cdFx0XHR9XG5cdFx0XHRodG1sICs9IGdyb3VwO1xuXHRcdH1cblx0XHRodG1sICs9IGJ1dHRvblBhbmVsO1xuXHRcdGluc3QuX2tleUV2ZW50ID0gZmFsc2U7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0LyogR2VuZXJhdGUgdGhlIG1vbnRoIGFuZCB5ZWFyIGhlYWRlci4gKi9cblx0X2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOiBmdW5jdGlvbiggaW5zdCwgZHJhd01vbnRoLCBkcmF3WWVhciwgbWluRGF0ZSwgbWF4RGF0ZSxcblx0XHRcdHNlY29uZGFyeSwgbW9udGhOYW1lcywgbW9udGhOYW1lc1Nob3J0ICkge1xuXG5cdFx0dmFyIGluTWluWWVhciwgaW5NYXhZZWFyLCBtb250aCwgeWVhcnMsIHRoaXNZZWFyLCBkZXRlcm1pbmVZZWFyLCB5ZWFyLCBlbmRZZWFyLFxuXHRcdFx0Y2hhbmdlTW9udGggPSB0aGlzLl9nZXQoIGluc3QsIFwiY2hhbmdlTW9udGhcIiApLFxuXHRcdFx0Y2hhbmdlWWVhciA9IHRoaXMuX2dldCggaW5zdCwgXCJjaGFuZ2VZZWFyXCIgKSxcblx0XHRcdHNob3dNb250aEFmdGVyWWVhciA9IHRoaXMuX2dldCggaW5zdCwgXCJzaG93TW9udGhBZnRlclllYXJcIiApLFxuXHRcdFx0aHRtbCA9IFwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+XCIsXG5cdFx0XHRtb250aEh0bWwgPSBcIlwiO1xuXG5cdFx0Ly8gTW9udGggc2VsZWN0aW9uXG5cdFx0aWYgKCBzZWNvbmRhcnkgfHwgIWNoYW5nZU1vbnRoICkge1xuXHRcdFx0bW9udGhIdG1sICs9IFwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPlwiICsgbW9udGhOYW1lc1sgZHJhd01vbnRoIF0gKyBcIjwvc3Bhbj5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5NaW5ZZWFyID0gKCBtaW5EYXRlICYmIG1pbkRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gZHJhd1llYXIgKTtcblx0XHRcdGluTWF4WWVhciA9ICggbWF4RGF0ZSAmJiBtYXhEYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRyYXdZZWFyICk7XG5cdFx0XHRtb250aEh0bWwgKz0gXCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiO1xuXHRcdFx0Zm9yICggbW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrICkge1xuXHRcdFx0XHRpZiAoICggIWluTWluWWVhciB8fCBtb250aCA+PSBtaW5EYXRlLmdldE1vbnRoKCkgKSAmJiAoICFpbk1heFllYXIgfHwgbW9udGggPD0gbWF4RGF0ZS5nZXRNb250aCgpICkgKSB7XG5cdFx0XHRcdFx0bW9udGhIdG1sICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyBtb250aCArIFwiJ1wiICtcblx0XHRcdFx0XHRcdCggbW9udGggPT09IGRyYXdNb250aCA/IFwiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIiA6IFwiXCIgKSArXG5cdFx0XHRcdFx0XHRcIj5cIiArIG1vbnRoTmFtZXNTaG9ydFsgbW9udGggXSArIFwiPC9vcHRpb24+XCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1vbnRoSHRtbCArPSBcIjwvc2VsZWN0PlwiO1xuXHRcdH1cblxuXHRcdGlmICggIXNob3dNb250aEFmdGVyWWVhciApIHtcblx0XHRcdGh0bWwgKz0gbW9udGhIdG1sICsgKCBzZWNvbmRhcnkgfHwgISggY2hhbmdlTW9udGggJiYgY2hhbmdlWWVhciApID8gXCImI3hhMDtcIiA6IFwiXCIgKTtcblx0XHR9XG5cblx0XHQvLyBZZWFyIHNlbGVjdGlvblxuXHRcdGlmICggIWluc3QueWVhcnNodG1sICkge1xuXHRcdFx0aW5zdC55ZWFyc2h0bWwgPSBcIlwiO1xuXHRcdFx0aWYgKCBzZWNvbmRhcnkgfHwgIWNoYW5nZVllYXIgKSB7XG5cdFx0XHRcdGh0bWwgKz0gXCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz5cIiArIGRyYXdZZWFyICsgXCI8L3NwYW4+XCI7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIGRldGVybWluZSByYW5nZSBvZiB5ZWFycyB0byBkaXNwbGF5XG5cdFx0XHRcdHllYXJzID0gdGhpcy5fZ2V0KCBpbnN0LCBcInllYXJSYW5nZVwiICkuc3BsaXQoIFwiOlwiICk7XG5cdFx0XHRcdHRoaXNZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXHRcdFx0XHRkZXRlcm1pbmVZZWFyID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHZhciB5ZWFyID0gKCB2YWx1ZS5tYXRjaCggL2NbK1xcLV0uKi8gKSA/IGRyYXdZZWFyICsgcGFyc2VJbnQoIHZhbHVlLnN1YnN0cmluZyggMSApLCAxMCApIDpcblx0XHRcdFx0XHRcdCggdmFsdWUubWF0Y2goIC9bK1xcLV0uKi8gKSA/IHRoaXNZZWFyICsgcGFyc2VJbnQoIHZhbHVlLCAxMCApIDpcblx0XHRcdFx0XHRcdHBhcnNlSW50KCB2YWx1ZSwgMTAgKSApICk7XG5cdFx0XHRcdFx0cmV0dXJuICggaXNOYU4oIHllYXIgKSA/IHRoaXNZZWFyIDogeWVhciApO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR5ZWFyID0gZGV0ZXJtaW5lWWVhciggeWVhcnNbIDAgXSApO1xuXHRcdFx0XHRlbmRZZWFyID0gTWF0aC5tYXgoIHllYXIsIGRldGVybWluZVllYXIoIHllYXJzWyAxIF0gfHwgXCJcIiApICk7XG5cdFx0XHRcdHllYXIgPSAoIG1pbkRhdGUgPyBNYXRoLm1heCggeWVhciwgbWluRGF0ZS5nZXRGdWxsWWVhcigpICkgOiB5ZWFyICk7XG5cdFx0XHRcdGVuZFllYXIgPSAoIG1heERhdGUgPyBNYXRoLm1pbiggZW5kWWVhciwgbWF4RGF0ZS5nZXRGdWxsWWVhcigpICkgOiBlbmRZZWFyICk7XG5cdFx0XHRcdGluc3QueWVhcnNodG1sICs9IFwiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCI7XG5cdFx0XHRcdGZvciAoIDsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKysgKSB7XG5cdFx0XHRcdFx0aW5zdC55ZWFyc2h0bWwgKz0gXCI8b3B0aW9uIHZhbHVlPSdcIiArIHllYXIgKyBcIidcIiArXG5cdFx0XHRcdFx0XHQoIHllYXIgPT09IGRyYXdZZWFyID8gXCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJ1wiIDogXCJcIiApICtcblx0XHRcdFx0XHRcdFwiPlwiICsgeWVhciArIFwiPC9vcHRpb24+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC55ZWFyc2h0bWwgKz0gXCI8L3NlbGVjdD5cIjtcblxuXHRcdFx0XHRodG1sICs9IGluc3QueWVhcnNodG1sO1xuXHRcdFx0XHRpbnN0LnllYXJzaHRtbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aHRtbCArPSB0aGlzLl9nZXQoIGluc3QsIFwieWVhclN1ZmZpeFwiICk7XG5cdFx0aWYgKCBzaG93TW9udGhBZnRlclllYXIgKSB7XG5cdFx0XHRodG1sICs9ICggc2Vjb25kYXJ5IHx8ICEoIGNoYW5nZU1vbnRoICYmIGNoYW5nZVllYXIgKSA/IFwiJiN4YTA7XCIgOiBcIlwiICkgKyBtb250aEh0bWw7XG5cdFx0fVxuXHRcdGh0bWwgKz0gXCI8L2Rpdj5cIjsgLy8gQ2xvc2UgZGF0ZXBpY2tlcl9oZWFkZXJcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHQvKiBBZGp1c3Qgb25lIG9mIHRoZSBkYXRlIHN1Yi1maWVsZHMuICovXG5cdF9hZGp1c3RJbnN0RGF0ZTogZnVuY3Rpb24oIGluc3QsIG9mZnNldCwgcGVyaW9kICkge1xuXHRcdHZhciB5ZWFyID0gaW5zdC5zZWxlY3RlZFllYXIgKyAoIHBlcmlvZCA9PT0gXCJZXCIgPyBvZmZzZXQgOiAwICksXG5cdFx0XHRtb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCArICggcGVyaW9kID09PSBcIk1cIiA/IG9mZnNldCA6IDAgKSxcblx0XHRcdGRheSA9IE1hdGgubWluKCBpbnN0LnNlbGVjdGVkRGF5LCB0aGlzLl9nZXREYXlzSW5Nb250aCggeWVhciwgbW9udGggKSApICsgKCBwZXJpb2QgPT09IFwiRFwiID8gb2Zmc2V0IDogMCApLFxuXHRcdFx0ZGF0ZSA9IHRoaXMuX3Jlc3RyaWN0TWluTWF4KCBpbnN0LCB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIHllYXIsIG1vbnRoLCBkYXkgKSApICk7XG5cblx0XHRpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXREYXRlKCk7XG5cdFx0aW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG5cdFx0aW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXHRcdGlmICggcGVyaW9kID09PSBcIk1cIiB8fCBwZXJpb2QgPT09IFwiWVwiICkge1xuXHRcdFx0dGhpcy5fbm90aWZ5Q2hhbmdlKCBpbnN0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qIEVuc3VyZSBhIGRhdGUgaXMgd2l0aGluIGFueSBtaW4vbWF4IGJvdW5kcy4gKi9cblx0X3Jlc3RyaWN0TWluTWF4OiBmdW5jdGlvbiggaW5zdCwgZGF0ZSApIHtcblx0XHR2YXIgbWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRuZXdEYXRlID0gKCBtaW5EYXRlICYmIGRhdGUgPCBtaW5EYXRlID8gbWluRGF0ZSA6IGRhdGUgKTtcblx0XHRyZXR1cm4gKCBtYXhEYXRlICYmIG5ld0RhdGUgPiBtYXhEYXRlID8gbWF4RGF0ZSA6IG5ld0RhdGUgKTtcblx0fSxcblxuXHQvKiBOb3RpZnkgY2hhbmdlIG9mIG1vbnRoL3llYXIuICovXG5cdF9ub3RpZnlDaGFuZ2U6IGZ1bmN0aW9uKCBpbnN0ICkge1xuXHRcdHZhciBvbkNoYW5nZSA9IHRoaXMuX2dldCggaW5zdCwgXCJvbkNoYW5nZU1vbnRoWWVhclwiICk7XG5cdFx0aWYgKCBvbkNoYW5nZSApIHtcblx0XHRcdG9uQ2hhbmdlLmFwcGx5KCAoIGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WyAwIF0gOiBudWxsICksXG5cdFx0XHRcdFsgaW5zdC5zZWxlY3RlZFllYXIsIGluc3Quc2VsZWN0ZWRNb250aCArIDEsIGluc3QgXSApO1xuXHRcdH1cblx0fSxcblxuXHQvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBtb250aHMgdG8gc2hvdy4gKi9cblx0X2dldE51bWJlck9mTW9udGhzOiBmdW5jdGlvbiggaW5zdCApIHtcblx0XHR2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0KCBpbnN0LCBcIm51bWJlck9mTW9udGhzXCIgKTtcblx0XHRyZXR1cm4gKCBudW1Nb250aHMgPT0gbnVsbCA/IFsgMSwgMSBdIDogKCB0eXBlb2YgbnVtTW9udGhzID09PSBcIm51bWJlclwiID8gWyAxLCBudW1Nb250aHMgXSA6IG51bU1vbnRocyApICk7XG5cdH0sXG5cblx0LyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IG1heGltdW0gZGF0ZSAtIGVuc3VyZSBubyB0aW1lIGNvbXBvbmVudHMgYXJlIHNldC4gKi9cblx0X2dldE1pbk1heERhdGU6IGZ1bmN0aW9uKCBpbnN0LCBtaW5NYXggKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoIGluc3QsIHRoaXMuX2dldCggaW5zdCwgbWluTWF4ICsgXCJEYXRlXCIgKSwgbnVsbCApO1xuXHR9LFxuXG5cdC8qIEZpbmQgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGguICovXG5cdF9nZXREYXlzSW5Nb250aDogZnVuY3Rpb24oIHllYXIsIG1vbnRoICkge1xuXHRcdHJldHVybiAzMiAtIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggeWVhciwgbW9udGgsIDMyICkgKS5nZXREYXRlKCk7XG5cdH0sXG5cblx0LyogRmluZCB0aGUgZGF5IG9mIHRoZSB3ZWVrIG9mIHRoZSBmaXJzdCBvZiBhIG1vbnRoLiAqL1xuXHRfZ2V0Rmlyc3REYXlPZk1vbnRoOiBmdW5jdGlvbiggeWVhciwgbW9udGggKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKCB5ZWFyLCBtb250aCwgMSApLmdldERheSgpO1xuXHR9LFxuXG5cdC8qIERldGVybWluZXMgaWYgd2Ugc2hvdWxkIGFsbG93IGEgXCJuZXh0L3ByZXZcIiBtb250aCBkaXNwbGF5IGNoYW5nZS4gKi9cblx0X2NhbkFkanVzdE1vbnRoOiBmdW5jdGlvbiggaW5zdCwgb2Zmc2V0LCBjdXJZZWFyLCBjdXJNb250aCApIHtcblx0XHR2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoIGluc3QgKSxcblx0XHRcdGRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGN1clllYXIsXG5cdFx0XHRjdXJNb250aCArICggb2Zmc2V0IDwgMCA/IG9mZnNldCA6IG51bU1vbnRoc1sgMCBdICogbnVtTW9udGhzWyAxIF0gKSwgMSApICk7XG5cblx0XHRpZiAoIG9mZnNldCA8IDAgKSB7XG5cdFx0XHRkYXRlLnNldERhdGUoIHRoaXMuX2dldERheXNJbk1vbnRoKCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSApICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9pc0luUmFuZ2UoIGluc3QsIGRhdGUgKTtcblx0fSxcblxuXHQvKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgYWNjZXB0ZWQgcmFuZ2U/ICovXG5cdF9pc0luUmFuZ2U6IGZ1bmN0aW9uKCBpbnN0LCBkYXRlICkge1xuXHRcdHZhciB5ZWFyU3BsaXQsIGN1cnJlbnRZZWFyLFxuXHRcdFx0bWluRGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoIGluc3QsIFwibWluXCIgKSxcblx0XHRcdG1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKCBpbnN0LCBcIm1heFwiICksXG5cdFx0XHRtaW5ZZWFyID0gbnVsbCxcblx0XHRcdG1heFllYXIgPSBudWxsLFxuXHRcdFx0eWVhcnMgPSB0aGlzLl9nZXQoIGluc3QsIFwieWVhclJhbmdlXCIgKTtcblx0XHRcdGlmICggeWVhcnMgKSB7XG5cdFx0XHRcdHllYXJTcGxpdCA9IHllYXJzLnNwbGl0KCBcIjpcIiApO1xuXHRcdFx0XHRjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblx0XHRcdFx0bWluWWVhciA9IHBhcnNlSW50KCB5ZWFyU3BsaXRbIDAgXSwgMTAgKTtcblx0XHRcdFx0bWF4WWVhciA9IHBhcnNlSW50KCB5ZWFyU3BsaXRbIDEgXSwgMTAgKTtcblx0XHRcdFx0aWYgKCB5ZWFyU3BsaXRbIDAgXS5tYXRjaCggL1srXFwtXS4qLyApICkge1xuXHRcdFx0XHRcdG1pblllYXIgKz0gY3VycmVudFllYXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCB5ZWFyU3BsaXRbIDEgXS5tYXRjaCggL1srXFwtXS4qLyApICkge1xuXHRcdFx0XHRcdG1heFllYXIgKz0gY3VycmVudFllYXI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdHJldHVybiAoICggIW1pbkRhdGUgfHwgZGF0ZS5nZXRUaW1lKCkgPj0gbWluRGF0ZS5nZXRUaW1lKCkgKSAmJlxuXHRcdFx0KCAhbWF4RGF0ZSB8fCBkYXRlLmdldFRpbWUoKSA8PSBtYXhEYXRlLmdldFRpbWUoKSApICYmXG5cdFx0XHQoICFtaW5ZZWFyIHx8IGRhdGUuZ2V0RnVsbFllYXIoKSA+PSBtaW5ZZWFyICkgJiZcblx0XHRcdCggIW1heFllYXIgfHwgZGF0ZS5nZXRGdWxsWWVhcigpIDw9IG1heFllYXIgKSApO1xuXHR9LFxuXG5cdC8qIFByb3ZpZGUgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGZvcm1hdHRpbmcvcGFyc2luZy4gKi9cblx0X2dldEZvcm1hdENvbmZpZzogZnVuY3Rpb24oIGluc3QgKSB7XG5cdFx0dmFyIHNob3J0WWVhckN1dG9mZiA9IHRoaXMuX2dldCggaW5zdCwgXCJzaG9ydFllYXJDdXRvZmZcIiApO1xuXHRcdHNob3J0WWVhckN1dG9mZiA9ICggdHlwZW9mIHNob3J0WWVhckN1dG9mZiAhPT0gXCJzdHJpbmdcIiA/IHNob3J0WWVhckN1dG9mZiA6XG5cdFx0XHRuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKyBwYXJzZUludCggc2hvcnRZZWFyQ3V0b2ZmLCAxMCApICk7XG5cdFx0cmV0dXJuIHsgc2hvcnRZZWFyQ3V0b2ZmOiBzaG9ydFllYXJDdXRvZmYsXG5cdFx0XHRkYXlOYW1lc1Nob3J0OiB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNTaG9ydFwiICksIGRheU5hbWVzOiB0aGlzLl9nZXQoIGluc3QsIFwiZGF5TmFtZXNcIiApLFxuXHRcdFx0bW9udGhOYW1lc1Nob3J0OiB0aGlzLl9nZXQoIGluc3QsIFwibW9udGhOYW1lc1Nob3J0XCIgKSwgbW9udGhOYW1lczogdGhpcy5fZ2V0KCBpbnN0LCBcIm1vbnRoTmFtZXNcIiApIH07XG5cdH0sXG5cblx0LyogRm9ybWF0IHRoZSBnaXZlbiBkYXRlIGZvciBkaXNwbGF5LiAqL1xuXHRfZm9ybWF0RGF0ZTogZnVuY3Rpb24oIGluc3QsIGRheSwgbW9udGgsIHllYXIgKSB7XG5cdFx0aWYgKCAhZGF5ICkge1xuXHRcdFx0aW5zdC5jdXJyZW50RGF5ID0gaW5zdC5zZWxlY3RlZERheTtcblx0XHRcdGluc3QuY3VycmVudE1vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoO1xuXHRcdFx0aW5zdC5jdXJyZW50WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyO1xuXHRcdH1cblx0XHR2YXIgZGF0ZSA9ICggZGF5ID8gKCB0eXBlb2YgZGF5ID09PSBcIm9iamVjdFwiID8gZGF5IDpcblx0XHRcdHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KCBuZXcgRGF0ZSggeWVhciwgbW9udGgsIGRheSApICkgKSA6XG5cdFx0XHR0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCggbmV3IERhdGUoIGluc3QuY3VycmVudFllYXIsIGluc3QuY3VycmVudE1vbnRoLCBpbnN0LmN1cnJlbnREYXkgKSApICk7XG5cdFx0cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSggdGhpcy5fZ2V0KCBpbnN0LCBcImRhdGVGb3JtYXRcIiApLCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoIGluc3QgKSApO1xuXHR9XG59ICk7XG5cbi8qXG4gKiBCaW5kIGhvdmVyIGV2ZW50cyBmb3IgZGF0ZXBpY2tlciBlbGVtZW50cy5cbiAqIERvbmUgdmlhIGRlbGVnYXRlIHNvIHRoZSBiaW5kaW5nIG9ubHkgb2NjdXJzIG9uY2UgaW4gdGhlIGxpZmV0aW1lIG9mIHRoZSBwYXJlbnQgZGl2LlxuICogR2xvYmFsIGRhdGVwaWNrZXJfaW5zdEFjdGl2ZSwgc2V0IGJ5IF91cGRhdGVEYXRlcGlja2VyIGFsbG93cyB0aGUgaGFuZGxlcnMgdG8gZmluZCB0aGVpciB3YXkgYmFjayB0byB0aGUgYWN0aXZlIHBpY2tlci5cbiAqL1xuZnVuY3Rpb24gZGF0ZXBpY2tlcl9iaW5kSG92ZXIoIGRwRGl2ICkge1xuXHR2YXIgc2VsZWN0b3IgPSBcImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYVwiO1xuXHRyZXR1cm4gZHBEaXYub24oIFwibW91c2VvdXRcIiwgc2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuXHRcdFx0JCggdGhpcyApLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHRcdGlmICggdGhpcy5jbGFzc05hbWUuaW5kZXhPZiggXCJ1aS1kYXRlcGlja2VyLXByZXZcIiApICE9PSAtMSApIHtcblx0XHRcdFx0JCggdGhpcyApLnJlbW92ZUNsYXNzKCBcInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlclwiICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoIFwidWktZGF0ZXBpY2tlci1uZXh0XCIgKSAhPT0gLTEgKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5yZW1vdmVDbGFzcyggXCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXJcIiApO1xuXHRcdFx0fVxuXHRcdH0gKVxuXHRcdC5vbiggXCJtb3VzZW92ZXJcIiwgc2VsZWN0b3IsIGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyICk7XG59XG5cbmZ1bmN0aW9uIGRhdGVwaWNrZXJfaGFuZGxlTW91c2VvdmVyKCkge1xuXHRpZiAoICEkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKCBkYXRlcGlja2VyX2luc3RBY3RpdmUuaW5saW5lID8gZGF0ZXBpY2tlcl9pbnN0QWN0aXZlLmRwRGl2LnBhcmVudCgpWyAwIF0gOiBkYXRlcGlja2VyX2luc3RBY3RpdmUuaW5wdXRbIDAgXSApICkge1xuXHRcdCQoIHRoaXMgKS5wYXJlbnRzKCBcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIgKS5maW5kKCBcImFcIiApLnJlbW92ZUNsYXNzKCBcInVpLXN0YXRlLWhvdmVyXCIgKTtcblx0XHQkKCB0aGlzICkuYWRkQ2xhc3MoIFwidWktc3RhdGUtaG92ZXJcIiApO1xuXHRcdGlmICggdGhpcy5jbGFzc05hbWUuaW5kZXhPZiggXCJ1aS1kYXRlcGlja2VyLXByZXZcIiApICE9PSAtMSApIHtcblx0XHRcdCQoIHRoaXMgKS5hZGRDbGFzcyggXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiApO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoIFwidWktZGF0ZXBpY2tlci1uZXh0XCIgKSAhPT0gLTEgKSB7XG5cdFx0XHQkKCB0aGlzICkuYWRkQ2xhc3MoIFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIgKTtcblx0XHR9XG5cdH1cbn1cblxuLyogalF1ZXJ5IGV4dGVuZCBub3cgaWdub3JlcyBudWxscyEgKi9cbmZ1bmN0aW9uIGRhdGVwaWNrZXJfZXh0ZW5kUmVtb3ZlKCB0YXJnZXQsIHByb3BzICkge1xuXHQkLmV4dGVuZCggdGFyZ2V0LCBwcm9wcyApO1xuXHRmb3IgKCB2YXIgbmFtZSBpbiBwcm9wcyApIHtcblx0XHRpZiAoIHByb3BzWyBuYW1lIF0gPT0gbnVsbCApIHtcblx0XHRcdHRhcmdldFsgbmFtZSBdID0gcHJvcHNbIG5hbWUgXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSW52b2tlIHRoZSBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHkuXG4gICBAcGFyYW0gIG9wdGlvbnMgIHN0cmluZyAtIGEgY29tbWFuZCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb3Jcblx0XHRcdFx0XHRPYmplY3QgLSBzZXR0aW5ncyBmb3IgYXR0YWNoaW5nIG5ldyBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHlcbiAgIEByZXR1cm4gIGpRdWVyeSBvYmplY3QgKi9cbiQuZm4uZGF0ZXBpY2tlciA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8qIFZlcmlmeSBhbiBlbXB0eSBjb2xsZWN0aW9uIHdhc24ndCBwYXNzZWQgLSBGaXhlcyAjNjk3NiAqL1xuXHRpZiAoICF0aGlzLmxlbmd0aCApIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qIEluaXRpYWxpc2UgdGhlIGRhdGUgcGlja2VyLiAqL1xuXHRpZiAoICEkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgKSB7XG5cdFx0JCggZG9jdW1lbnQgKS5vbiggXCJtb3VzZWRvd25cIiwgJC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2sgKTtcblx0XHQkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHR9XG5cblx0LyogQXBwZW5kIGRhdGVwaWNrZXIgbWFpbiBjb250YWluZXIgdG8gYm9keSBpZiBub3QgZXhpc3QuICovXG5cdGlmICggJCggXCIjXCIgKyAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCApLmxlbmd0aCA9PT0gMCApIHtcblx0XHQkKCBcImJvZHlcIiApLmFwcGVuZCggJC5kYXRlcGlja2VyLmRwRGl2ICk7XG5cdH1cblxuXHR2YXIgb3RoZXJBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICYmICggb3B0aW9ucyA9PT0gXCJpc0Rpc2FibGVkXCIgfHwgb3B0aW9ucyA9PT0gXCJnZXREYXRlXCIgfHwgb3B0aW9ucyA9PT0gXCJ3aWRnZXRcIiApICkge1xuXHRcdHJldHVybiAkLmRhdGVwaWNrZXJbIFwiX1wiICsgb3B0aW9ucyArIFwiRGF0ZXBpY2tlclwiIF0uXG5cdFx0XHRhcHBseSggJC5kYXRlcGlja2VyLCBbIHRoaXNbIDAgXSBdLmNvbmNhdCggb3RoZXJBcmdzICkgKTtcblx0fVxuXHRpZiAoIG9wdGlvbnMgPT09IFwib3B0aW9uXCIgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgYXJndW1lbnRzWyAxIF0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuICQuZGF0ZXBpY2tlclsgXCJfXCIgKyBvcHRpb25zICsgXCJEYXRlcGlja2VyXCIgXS5cblx0XHRcdGFwcGx5KCAkLmRhdGVwaWNrZXIsIFsgdGhpc1sgMCBdIF0uY29uY2F0KCBvdGhlckFyZ3MgKSApO1xuXHR9XG5cdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRcdCQuZGF0ZXBpY2tlclsgXCJfXCIgKyBvcHRpb25zICsgXCJEYXRlcGlja2VyXCIgXS5cblx0XHRcdFx0YXBwbHkoICQuZGF0ZXBpY2tlciwgWyB0aGlzIF0uY29uY2F0KCBvdGhlckFyZ3MgKSApIDpcblx0XHRcdCQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlciggdGhpcywgb3B0aW9ucyApO1xuXHR9ICk7XG59O1xuXG4kLmRhdGVwaWNrZXIgPSBuZXcgRGF0ZXBpY2tlcigpOyAvLyBzaW5nbGV0b24gaW5zdGFuY2VcbiQuZGF0ZXBpY2tlci5pbml0aWFsaXplZCA9IGZhbHNlO1xuJC5kYXRlcGlja2VyLnV1aWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiQuZGF0ZXBpY2tlci52ZXJzaW9uID0gXCIxLjEyLjFcIjtcblxudmFyIHdpZGdldHNEYXRlcGlja2VyID0gJC5kYXRlcGlja2VyO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIERpYWxvZyAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRGlhbG9nXG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vPj5kZXNjcmlwdGlvbjogRGlzcGxheXMgY3VzdG9taXphYmxlIGRpYWxvZyB3aW5kb3dzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2RpYWxvZy9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9kaWFsb2cvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9kaWFsb2cuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbiQud2lkZ2V0KCBcInVpLmRpYWxvZ1wiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRhcHBlbmRUbzogXCJib2R5XCIsXG5cdFx0YXV0b09wZW46IHRydWUsXG5cdFx0YnV0dG9uczogW10sXG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1kaWFsb2dcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLWRpYWxvZy10aXRsZWJhclwiOiBcInVpLWNvcm5lci1hbGxcIlxuXHRcdH0sXG5cdFx0Y2xvc2VPbkVzY2FwZTogdHJ1ZSxcblx0XHRjbG9zZVRleHQ6IFwiQ2xvc2VcIixcblx0XHRkcmFnZ2FibGU6IHRydWUsXG5cdFx0aGlkZTogbnVsbCxcblx0XHRoZWlnaHQ6IFwiYXV0b1wiLFxuXHRcdG1heEhlaWdodDogbnVsbCxcblx0XHRtYXhXaWR0aDogbnVsbCxcblx0XHRtaW5IZWlnaHQ6IDE1MCxcblx0XHRtaW5XaWR0aDogMTUwLFxuXHRcdG1vZGFsOiBmYWxzZSxcblx0XHRwb3NpdGlvbjoge1xuXHRcdFx0bXk6IFwiY2VudGVyXCIsXG5cdFx0XHRhdDogXCJjZW50ZXJcIixcblx0XHRcdG9mOiB3aW5kb3csXG5cdFx0XHRjb2xsaXNpb246IFwiZml0XCIsXG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgdGl0bGViYXIgaXMgYWx3YXlzIHZpc2libGVcblx0XHRcdHVzaW5nOiBmdW5jdGlvbiggcG9zICkge1xuXHRcdFx0XHR2YXIgdG9wT2Zmc2V0ID0gJCggdGhpcyApLmNzcyggcG9zICkub2Zmc2V0KCkudG9wO1xuXHRcdFx0XHRpZiAoIHRvcE9mZnNldCA8IDAgKSB7XG5cdFx0XHRcdFx0JCggdGhpcyApLmNzcyggXCJ0b3BcIiwgcG9zLnRvcCAtIHRvcE9mZnNldCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0c2hvdzogbnVsbCxcblx0XHR0aXRsZTogbnVsbCxcblx0XHR3aWR0aDogMzAwLFxuXG5cdFx0Ly8gQ2FsbGJhY2tzXG5cdFx0YmVmb3JlQ2xvc2U6IG51bGwsXG5cdFx0Y2xvc2U6IG51bGwsXG5cdFx0ZHJhZzogbnVsbCxcblx0XHRkcmFnU3RhcnQ6IG51bGwsXG5cdFx0ZHJhZ1N0b3A6IG51bGwsXG5cdFx0Zm9jdXM6IG51bGwsXG5cdFx0b3BlbjogbnVsbCxcblx0XHRyZXNpemU6IG51bGwsXG5cdFx0cmVzaXplU3RhcnQ6IG51bGwsXG5cdFx0cmVzaXplU3RvcDogbnVsbFxuXHR9LFxuXG5cdHNpemVSZWxhdGVkT3B0aW9uczoge1xuXHRcdGJ1dHRvbnM6IHRydWUsXG5cdFx0aGVpZ2h0OiB0cnVlLFxuXHRcdG1heEhlaWdodDogdHJ1ZSxcblx0XHRtYXhXaWR0aDogdHJ1ZSxcblx0XHRtaW5IZWlnaHQ6IHRydWUsXG5cdFx0bWluV2lkdGg6IHRydWUsXG5cdFx0d2lkdGg6IHRydWVcblx0fSxcblxuXHRyZXNpemFibGVSZWxhdGVkT3B0aW9uczoge1xuXHRcdG1heEhlaWdodDogdHJ1ZSxcblx0XHRtYXhXaWR0aDogdHJ1ZSxcblx0XHRtaW5IZWlnaHQ6IHRydWUsXG5cdFx0bWluV2lkdGg6IHRydWVcblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9yaWdpbmFsQ3NzID0ge1xuXHRcdFx0ZGlzcGxheTogdGhpcy5lbGVtZW50WyAwIF0uc3R5bGUuZGlzcGxheSxcblx0XHRcdHdpZHRoOiB0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS53aWR0aCxcblx0XHRcdG1pbkhlaWdodDogdGhpcy5lbGVtZW50WyAwIF0uc3R5bGUubWluSGVpZ2h0LFxuXHRcdFx0bWF4SGVpZ2h0OiB0aGlzLmVsZW1lbnRbIDAgXS5zdHlsZS5tYXhIZWlnaHQsXG5cdFx0XHRoZWlnaHQ6IHRoaXMuZWxlbWVudFsgMCBdLnN0eWxlLmhlaWdodFxuXHRcdH07XG5cdFx0dGhpcy5vcmlnaW5hbFBvc2l0aW9uID0ge1xuXHRcdFx0cGFyZW50OiB0aGlzLmVsZW1lbnQucGFyZW50KCksXG5cdFx0XHRpbmRleDogdGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgoIHRoaXMuZWxlbWVudCApXG5cdFx0fTtcblx0XHR0aGlzLm9yaWdpbmFsVGl0bGUgPSB0aGlzLmVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMudGl0bGUgPT0gbnVsbCAmJiB0aGlzLm9yaWdpbmFsVGl0bGUgIT0gbnVsbCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy50aXRsZSA9IHRoaXMub3JpZ2luYWxUaXRsZTtcblx0XHR9XG5cblx0XHQvLyBEaWFsb2dzIGNhbid0IGJlIGRpc2FibGVkXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLl9jcmVhdGVXcmFwcGVyKCk7XG5cblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5zaG93KClcblx0XHRcdC5yZW1vdmVBdHRyKCBcInRpdGxlXCIgKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLnVpRGlhbG9nICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggXCJ1aS1kaWFsb2ctY29udGVudFwiLCBcInVpLXdpZGdldC1jb250ZW50XCIgKTtcblxuXHRcdHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCk7XG5cdFx0dGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlICYmICQuZm4uZHJhZ2dhYmxlICkge1xuXHRcdFx0dGhpcy5fbWFrZURyYWdnYWJsZSgpO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5yZXNpemFibGUgJiYgJC5mbi5yZXNpemFibGUgKSB7XG5cdFx0XHR0aGlzLl9tYWtlUmVzaXphYmxlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5faXNPcGVuID0gZmFsc2U7XG5cblx0XHR0aGlzLl90cmFja0ZvY3VzKCk7XG5cdH0sXG5cblx0X2luaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmF1dG9PcGVuICkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9hcHBlbmRUbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB0aGlzLm9wdGlvbnMuYXBwZW5kVG87XG5cdFx0aWYgKCBlbGVtZW50ICYmICggZWxlbWVudC5qcXVlcnkgfHwgZWxlbWVudC5ub2RlVHlwZSApICkge1xuXHRcdFx0cmV0dXJuICQoIGVsZW1lbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZG9jdW1lbnQuZmluZCggZWxlbWVudCB8fCBcImJvZHlcIiApLmVxKCAwICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXh0LFxuXHRcdFx0b3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMub3JpZ2luYWxQb3NpdGlvbjtcblxuXHRcdHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XG5cblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5yZW1vdmVVbmlxdWVJZCgpXG5cdFx0XHQuY3NzKCB0aGlzLm9yaWdpbmFsQ3NzIClcblxuXHRcdFx0Ly8gV2l0aG91dCBkZXRhY2hpbmcgZmlyc3QsIHRoZSBmb2xsb3dpbmcgYmVjb21lcyByZWFsbHkgc2xvd1xuXHRcdFx0LmRldGFjaCgpO1xuXG5cdFx0dGhpcy51aURpYWxvZy5yZW1vdmUoKTtcblxuXHRcdGlmICggdGhpcy5vcmlnaW5hbFRpdGxlICkge1xuXHRcdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiwgdGhpcy5vcmlnaW5hbFRpdGxlICk7XG5cdFx0fVxuXG5cdFx0bmV4dCA9IG9yaWdpbmFsUG9zaXRpb24ucGFyZW50LmNoaWxkcmVuKCkuZXEoIG9yaWdpbmFsUG9zaXRpb24uaW5kZXggKTtcblxuXHRcdC8vIERvbid0IHRyeSB0byBwbGFjZSB0aGUgZGlhbG9nIG5leHQgdG8gaXRzZWxmICgjODYxMylcblx0XHRpZiAoIG5leHQubGVuZ3RoICYmIG5leHRbIDAgXSAhPT0gdGhpcy5lbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRuZXh0LmJlZm9yZSggdGhpcy5lbGVtZW50ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9yaWdpbmFsUG9zaXRpb24ucGFyZW50LmFwcGVuZCggdGhpcy5lbGVtZW50ICk7XG5cdFx0fVxuXHR9LFxuXG5cdHdpZGdldDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudWlEaWFsb2c7XG5cdH0sXG5cblx0ZGlzYWJsZTogJC5ub29wLFxuXHRlbmFibGU6ICQubm9vcCxcblxuXHRjbG9zZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdGlmICggIXRoaXMuX2lzT3BlbiB8fCB0aGlzLl90cmlnZ2VyKCBcImJlZm9yZUNsb3NlXCIsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMuX2ZvY3VzZWRFbGVtZW50ID0gbnVsbDtcblx0XHR0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xuXHRcdHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpO1xuXG5cdFx0aWYgKCAhdGhpcy5vcGVuZXIuZmlsdGVyKCBcIjpmb2N1c2FibGVcIiApLnRyaWdnZXIoIFwiZm9jdXNcIiApLmxlbmd0aCApIHtcblxuXHRcdFx0Ly8gSGlkaW5nIGEgZm9jdXNlZCBlbGVtZW50IGRvZXNuJ3QgdHJpZ2dlciBibHVyIGluIFdlYktpdFxuXHRcdFx0Ly8gc28gaW4gY2FzZSB3ZSBoYXZlIG5vdGhpbmcgdG8gZm9jdXMgb24sIGV4cGxpY2l0bHkgYmx1ciB0aGUgYWN0aXZlIGVsZW1lbnRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzE4MlxuXHRcdFx0JC51aS5zYWZlQmx1ciggJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9oaWRlKCB0aGlzLnVpRGlhbG9nLCB0aGlzLm9wdGlvbnMuaGlkZSwgZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImNsb3NlXCIsIGV2ZW50ICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGlzT3BlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzT3Blbjtcblx0fSxcblxuXHRtb3ZlVG9Ub3A6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX21vdmVUb1RvcCgpO1xuXHR9LFxuXG5cdF9tb3ZlVG9Ub3A6IGZ1bmN0aW9uKCBldmVudCwgc2lsZW50ICkge1xuXHRcdHZhciBtb3ZlZCA9IGZhbHNlLFxuXHRcdFx0ekluZGljZXMgPSB0aGlzLnVpRGlhbG9nLnNpYmxpbmdzKCBcIi51aS1mcm9udDp2aXNpYmxlXCIgKS5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gKyQoIHRoaXMgKS5jc3MoIFwiei1pbmRleFwiICk7XG5cdFx0XHR9ICkuZ2V0KCksXG5cdFx0XHR6SW5kZXhNYXggPSBNYXRoLm1heC5hcHBseSggbnVsbCwgekluZGljZXMgKTtcblxuXHRcdGlmICggekluZGV4TWF4ID49ICt0aGlzLnVpRGlhbG9nLmNzcyggXCJ6LWluZGV4XCIgKSApIHtcblx0XHRcdHRoaXMudWlEaWFsb2cuY3NzKCBcInotaW5kZXhcIiwgekluZGV4TWF4ICsgMSApO1xuXHRcdFx0bW92ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggbW92ZWQgJiYgIXNpbGVudCApIHtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiZm9jdXNcIiwgZXZlbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vdmVkO1xuXHR9LFxuXG5cdG9wZW46IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHRpZiAoIHRoaXMuX2lzT3BlbiApIHtcblx0XHRcdGlmICggdGhpcy5fbW92ZVRvVG9wKCkgKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzVGFiYmFibGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9pc09wZW4gPSB0cnVlO1xuXHRcdHRoaXMub3BlbmVyID0gJCggJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgKTtcblxuXHRcdHRoaXMuX3NpemUoKTtcblx0XHR0aGlzLl9wb3NpdGlvbigpO1xuXHRcdHRoaXMuX2NyZWF0ZU92ZXJsYXkoKTtcblx0XHR0aGlzLl9tb3ZlVG9Ub3AoIG51bGwsIHRydWUgKTtcblxuXHRcdC8vIEVuc3VyZSB0aGUgb3ZlcmxheSBpcyBtb3ZlZCB0byB0aGUgdG9wIHdpdGggdGhlIGRpYWxvZywgYnV0IG9ubHkgd2hlblxuXHRcdC8vIG9wZW5pbmcuIFRoZSBvdmVybGF5IHNob3VsZG4ndCBtb3ZlIGFmdGVyIHRoZSBkaWFsb2cgaXMgb3BlbiBzbyB0aGF0XG5cdFx0Ly8gbW9kZWxlc3MgZGlhbG9ncyBvcGVuZWQgYWZ0ZXIgdGhlIG1vZGFsIGRpYWxvZyBzdGFjayBwcm9wZXJseS5cblx0XHRpZiAoIHRoaXMub3ZlcmxheSApIHtcblx0XHRcdHRoaXMub3ZlcmxheS5jc3MoIFwiei1pbmRleFwiLCB0aGlzLnVpRGlhbG9nLmNzcyggXCJ6LWluZGV4XCIgKSAtIDEgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9zaG93KCB0aGlzLnVpRGlhbG9nLCB0aGlzLm9wdGlvbnMuc2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGF0Ll9mb2N1c1RhYmJhYmxlKCk7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHR9ICk7XG5cblx0XHQvLyBUcmFjayB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IHVwb24gb3BlbmVuaW5nIGluIGNhc2UgYSBmb2N1cyBldmVudFxuXHRcdC8vIHNvbWVob3cgb2NjdXJzIG91dHNpZGUgb2YgdGhlIGRpYWxvZyBiZWZvcmUgYW4gZWxlbWVudCBpbnNpZGUgdGhlXG5cdFx0Ly8gZGlhbG9nIGlzIGZvY3VzZWQgKCMxMDE1Milcblx0XHR0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKTtcblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwib3BlblwiICk7XG5cdH0sXG5cblx0X2ZvY3VzVGFiYmFibGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gU2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBtYXRjaDpcblx0XHQvLyAxLiBBbiBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgcHJldmlvdXNseVxuXHRcdC8vIDIuIEZpcnN0IGVsZW1lbnQgaW5zaWRlIHRoZSBkaWFsb2cgbWF0Y2hpbmcgW2F1dG9mb2N1c11cblx0XHQvLyAzLiBUYWJiYWJsZSBlbGVtZW50IGluc2lkZSB0aGUgY29udGVudCBlbGVtZW50XG5cdFx0Ly8gNC4gVGFiYmFibGUgZWxlbWVudCBpbnNpZGUgdGhlIGJ1dHRvbnBhbmVcblx0XHQvLyA1LiBUaGUgY2xvc2UgYnV0dG9uXG5cdFx0Ly8gNi4gVGhlIGRpYWxvZyBpdHNlbGZcblx0XHR2YXIgaGFzRm9jdXMgPSB0aGlzLl9mb2N1c2VkRWxlbWVudDtcblx0XHRpZiAoICFoYXNGb2N1cyApIHtcblx0XHRcdGhhc0ZvY3VzID0gdGhpcy5lbGVtZW50LmZpbmQoIFwiW2F1dG9mb2N1c11cIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMuZWxlbWVudC5maW5kKCBcIjp0YWJiYWJsZVwiICk7XG5cdFx0fVxuXHRcdGlmICggIWhhc0ZvY3VzLmxlbmd0aCApIHtcblx0XHRcdGhhc0ZvY3VzID0gdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCggXCI6dGFiYmFibGVcIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmZpbHRlciggXCI6dGFiYmFibGVcIiApO1xuXHRcdH1cblx0XHRpZiAoICFoYXNGb2N1cy5sZW5ndGggKSB7XG5cdFx0XHRoYXNGb2N1cyA9IHRoaXMudWlEaWFsb2c7XG5cdFx0fVxuXHRcdGhhc0ZvY3VzLmVxKCAwICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdH0sXG5cblx0X2tlZXBGb2N1czogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGZ1bmN0aW9uIGNoZWNrRm9jdXMoKSB7XG5cdFx0XHR2YXIgYWN0aXZlRWxlbWVudCA9ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApLFxuXHRcdFx0XHRpc0FjdGl2ZSA9IHRoaXMudWlEaWFsb2dbIDAgXSA9PT0gYWN0aXZlRWxlbWVudCB8fFxuXHRcdFx0XHRcdCQuY29udGFpbnMoIHRoaXMudWlEaWFsb2dbIDAgXSwgYWN0aXZlRWxlbWVudCApO1xuXHRcdFx0aWYgKCAhaXNBY3RpdmUgKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzVGFiYmFibGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjaGVja0ZvY3VzLmNhbGwoIHRoaXMgKTtcblxuXHRcdC8vIHN1cHBvcnQ6IElFXG5cdFx0Ly8gSUUgPD0gOCBkb2Vzbid0IHByZXZlbnQgbW92aW5nIGZvY3VzIGV2ZW4gd2l0aCBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0Ly8gc28gd2UgY2hlY2sgYWdhaW4gbGF0ZXJcblx0XHR0aGlzLl9kZWxheSggY2hlY2tGb2N1cyApO1xuXHR9LFxuXG5cdF9jcmVhdGVXcmFwcGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVpRGlhbG9nID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5hdHRyKCB7XG5cblx0XHRcdFx0Ly8gU2V0dGluZyB0YWJJbmRleCBtYWtlcyB0aGUgZGl2IGZvY3VzYWJsZVxuXHRcdFx0XHR0YWJJbmRleDogLTEsXG5cdFx0XHRcdHJvbGU6IFwiZGlhbG9nXCJcblx0XHRcdH0gKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZywgXCJ1aS1kaWFsb2dcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIiApO1xuXHRcdHRoaXMuX29uKCB0aGlzLnVpRGlhbG9nLCB7XG5cdFx0XHRrZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggdGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5FU0NBUEUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCBldmVudCApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByZXZlbnQgdGFiYmluZyBvdXQgb2YgZGlhbG9nc1xuXHRcdFx0XHRpZiAoIGV2ZW50LmtleUNvZGUgIT09ICQudWkua2V5Q29kZS5UQUIgfHwgZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0YWJiYWJsZXMgPSB0aGlzLnVpRGlhbG9nLmZpbmQoIFwiOnRhYmJhYmxlXCIgKSxcblx0XHRcdFx0XHRmaXJzdCA9IHRhYmJhYmxlcy5maWx0ZXIoIFwiOmZpcnN0XCIgKSxcblx0XHRcdFx0XHRsYXN0ID0gdGFiYmFibGVzLmZpbHRlciggXCI6bGFzdFwiICk7XG5cblx0XHRcdFx0aWYgKCAoIGV2ZW50LnRhcmdldCA9PT0gbGFzdFsgMCBdIHx8IGV2ZW50LnRhcmdldCA9PT0gdGhpcy51aURpYWxvZ1sgMCBdICkgJiZcblx0XHRcdFx0XHRcdCFldmVudC5zaGlmdEtleSApIHtcblx0XHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRmaXJzdC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fSBlbHNlIGlmICggKCBldmVudC50YXJnZXQgPT09IGZpcnN0WyAwIF0gfHxcblx0XHRcdFx0XHRcdGV2ZW50LnRhcmdldCA9PT0gdGhpcy51aURpYWxvZ1sgMCBdICkgJiYgZXZlbnQuc2hpZnRLZXkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bGFzdC50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG1vdXNlZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuX21vdmVUb1RvcCggZXZlbnQgKSApIHtcblx0XHRcdFx0XHR0aGlzLl9mb2N1c1RhYmJhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBhbnkgZXhpc3RpbmcgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgbWVhbnNcblx0XHQvLyB0aGF0IHRoZSBkaWFsb2cgY29udGVudCBpcyBtYXJrZWQgdXAgcHJvcGVybHlcblx0XHQvLyBvdGhlcndpc2Ugd2UgYnJ1dGUgZm9yY2UgdGhlIGNvbnRlbnQgYXMgdGhlIGRlc2NyaXB0aW9uXG5cdFx0aWYgKCAhdGhpcy5lbGVtZW50LmZpbmQoIFwiW2FyaWEtZGVzY3JpYmVkYnldXCIgKS5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9jcmVhdGVUaXRsZWJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVpRGlhbG9nVGl0bGU7XG5cblx0XHR0aGlzLnVpRGlhbG9nVGl0bGViYXIgPSAkKCBcIjxkaXY+XCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZ1RpdGxlYmFyLFxuXHRcdFx0XCJ1aS1kaWFsb2ctdGl0bGViYXJcIiwgXCJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cdFx0dGhpcy5fb24oIHRoaXMudWlEaWFsb2dUaXRsZWJhciwge1xuXHRcdFx0bW91c2Vkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgcHJldmVudCBjbGljayBvbiBjbG9zZSBidXR0b24gKCM4ODM4KVxuXHRcdFx0XHQvLyBGb2N1c2luZyBhIGRpYWxvZyB0aGF0IGlzIHBhcnRpYWxseSBzY3JvbGxlZCBvdXQgb2Ygdmlld1xuXHRcdFx0XHQvLyBjYXVzZXMgdGhlIGJyb3dzZXIgdG8gc2Nyb2xsIGl0IGludG8gdmlldywgcHJldmVudGluZyB0aGUgY2xpY2sgZXZlbnRcblx0XHRcdFx0aWYgKCAhJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIERpYWxvZyBpc24ndCBnZXR0aW5nIGZvY3VzIHdoZW4gZHJhZ2dpbmcgKCM4MDYzKVxuXHRcdFx0XHRcdHRoaXMudWlEaWFsb2cudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdC8vIFVzZSB0eXBlPVwiYnV0dG9uXCIgdG8gcHJldmVudCBlbnRlciBrZXlwcmVzc2VzIGluIHRleHRib3hlcyBmcm9tIGNsb3NpbmcgdGhlXG5cdFx0Ly8gZGlhbG9nIGluIElFICgjOTMxMilcblx0XHR0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSA9ICQoIFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiIClcblx0XHRcdC5idXR0b24oIHtcblx0XHRcdFx0bGFiZWw6ICQoIFwiPGE+XCIgKS50ZXh0KCB0aGlzLm9wdGlvbnMuY2xvc2VUZXh0ICkuaHRtbCgpLFxuXHRcdFx0XHRpY29uOiBcInVpLWljb24tY2xvc2V0aGlja1wiLFxuXHRcdFx0XHRzaG93TGFiZWw6IGZhbHNlXG5cdFx0XHR9IClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy51aURpYWxvZ1RpdGxlYmFyICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsIFwidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIgKTtcblx0XHR0aGlzLl9vbiggdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsIHtcblx0XHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0dWlEaWFsb2dUaXRsZSA9ICQoIFwiPHNwYW4+XCIgKS51bmlxdWVJZCgpLnByZXBlbmRUbyggdGhpcy51aURpYWxvZ1RpdGxlYmFyICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHVpRGlhbG9nVGl0bGUsIFwidWktZGlhbG9nLXRpdGxlXCIgKTtcblx0XHR0aGlzLl90aXRsZSggdWlEaWFsb2dUaXRsZSApO1xuXG5cdFx0dGhpcy51aURpYWxvZ1RpdGxlYmFyLnByZXBlbmRUbyggdGhpcy51aURpYWxvZyApO1xuXG5cdFx0dGhpcy51aURpYWxvZy5hdHRyKCB7XG5cdFx0XHRcImFyaWEtbGFiZWxsZWRieVwiOiB1aURpYWxvZ1RpdGxlLmF0dHIoIFwiaWRcIiApXG5cdFx0fSApO1xuXHR9LFxuXG5cdF90aXRsZTogZnVuY3Rpb24oIHRpdGxlICkge1xuXHRcdGlmICggdGhpcy5vcHRpb25zLnRpdGxlICkge1xuXHRcdFx0dGl0bGUudGV4dCggdGhpcy5vcHRpb25zLnRpdGxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlLmh0bWwoIFwiJiMxNjA7XCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X2NyZWF0ZUJ1dHRvblBhbmU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudWlEaWFsb2dCdXR0b25QYW5lID0gJCggXCI8ZGl2PlwiICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLCBcInVpLWRpYWxvZy1idXR0b25wYW5lXCIsXG5cdFx0XHRcInVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeFwiICk7XG5cblx0XHR0aGlzLnVpQnV0dG9uU2V0ID0gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5hcHBlbmRUbyggdGhpcy51aURpYWxvZ0J1dHRvblBhbmUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aUJ1dHRvblNldCwgXCJ1aS1kaWFsb2ctYnV0dG9uc2V0XCIgKTtcblxuXHRcdHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKTtcblx0fSxcblxuXHRfY3JlYXRlQnV0dG9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0YnV0dG9ucyA9IHRoaXMub3B0aW9ucy5idXR0b25zO1xuXG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgYnV0dG9uIHBhbmUsIHJlbW92ZSBpdFxuXHRcdHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpO1xuXHRcdHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKTtcblxuXHRcdGlmICggJC5pc0VtcHR5T2JqZWN0KCBidXR0b25zICkgfHwgKCAkLmlzQXJyYXkoIGJ1dHRvbnMgKSAmJiAhYnV0dG9ucy5sZW5ndGggKSApIHtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLnVpRGlhbG9nLCBcInVpLWRpYWxvZy1idXR0b25zXCIgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQkLmVhY2goIGJ1dHRvbnMsIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0XHRcdHZhciBjbGljaywgYnV0dG9uT3B0aW9ucztcblx0XHRcdHByb3BzID0gJC5pc0Z1bmN0aW9uKCBwcm9wcyApID9cblx0XHRcdFx0eyBjbGljazogcHJvcHMsIHRleHQ6IG5hbWUgfSA6XG5cdFx0XHRcdHByb3BzO1xuXG5cdFx0XHQvLyBEZWZhdWx0IHRvIGEgbm9uLXN1Ym1pdHRpbmcgYnV0dG9uXG5cdFx0XHRwcm9wcyA9ICQuZXh0ZW5kKCB7IHR5cGU6IFwiYnV0dG9uXCIgfSwgcHJvcHMgKTtcblxuXHRcdFx0Ly8gQ2hhbmdlIHRoZSBjb250ZXh0IGZvciB0aGUgY2xpY2sgY2FsbGJhY2sgdG8gYmUgdGhlIG1haW4gZWxlbWVudFxuXHRcdFx0Y2xpY2sgPSBwcm9wcy5jbGljaztcblx0XHRcdGJ1dHRvbk9wdGlvbnMgPSB7XG5cdFx0XHRcdGljb246IHByb3BzLmljb24sXG5cdFx0XHRcdGljb25Qb3NpdGlvbjogcHJvcHMuaWNvblBvc2l0aW9uLFxuXHRcdFx0XHRzaG93TGFiZWw6IHByb3BzLnNob3dMYWJlbCxcblxuXHRcdFx0XHQvLyBEZXByZWNhdGVkIG9wdGlvbnNcblx0XHRcdFx0aWNvbnM6IHByb3BzLmljb25zLFxuXHRcdFx0XHR0ZXh0OiBwcm9wcy50ZXh0XG5cdFx0XHR9O1xuXG5cdFx0XHRkZWxldGUgcHJvcHMuY2xpY2s7XG5cdFx0XHRkZWxldGUgcHJvcHMuaWNvbjtcblx0XHRcdGRlbGV0ZSBwcm9wcy5pY29uUG9zaXRpb247XG5cdFx0XHRkZWxldGUgcHJvcHMuc2hvd0xhYmVsO1xuXG5cdFx0XHQvLyBEZXByZWNhdGVkIG9wdGlvbnNcblx0XHRcdGRlbGV0ZSBwcm9wcy5pY29ucztcblx0XHRcdGlmICggdHlwZW9mIHByb3BzLnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRkZWxldGUgcHJvcHMudGV4dDtcblx0XHRcdH1cblxuXHRcdFx0JCggXCI8YnV0dG9uPjwvYnV0dG9uPlwiLCBwcm9wcyApXG5cdFx0XHRcdC5idXR0b24oIGJ1dHRvbk9wdGlvbnMgKVxuXHRcdFx0XHQuYXBwZW5kVG8oIHRoYXQudWlCdXR0b25TZXQgKVxuXHRcdFx0XHQub24oIFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y2xpY2suYXBwbHkoIHRoYXQuZWxlbWVudFsgMCBdLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy51aURpYWxvZywgXCJ1aS1kaWFsb2ctYnV0dG9uc1wiICk7XG5cdFx0dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8oIHRoaXMudWlEaWFsb2cgKTtcblx0fSxcblxuXHRfbWFrZURyYWdnYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGZ1bmN0aW9uIGZpbHRlcmVkVWkoIHVpICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cG9zaXRpb246IHVpLnBvc2l0aW9uLFxuXHRcdFx0XHRvZmZzZXQ6IHVpLm9mZnNldFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSgge1xuXHRcdFx0Y2FuY2VsOiBcIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiLFxuXHRcdFx0aGFuZGxlOiBcIi51aS1kaWFsb2ctdGl0bGViYXJcIixcblx0XHRcdGNvbnRhaW5tZW50OiBcImRvY3VtZW50XCIsXG5cdFx0XHRzdGFydDogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoICQoIHRoaXMgKSwgXCJ1aS1kaWFsb2ctZHJhZ2dpbmdcIiApO1xuXHRcdFx0XHR0aGF0Ll9ibG9ja0ZyYW1lcygpO1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImRyYWdTdGFydFwiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fSxcblx0XHRcdGRyYWc6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwiZHJhZ1wiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHZhciBsZWZ0ID0gdWkub2Zmc2V0LmxlZnQgLSB0aGF0LmRvY3VtZW50LnNjcm9sbExlZnQoKSxcblx0XHRcdFx0XHR0b3AgPSB1aS5vZmZzZXQudG9wIC0gdGhhdC5kb2N1bWVudC5zY3JvbGxUb3AoKTtcblxuXHRcdFx0XHRvcHRpb25zLnBvc2l0aW9uID0ge1xuXHRcdFx0XHRcdG15OiBcImxlZnQgdG9wXCIsXG5cdFx0XHRcdFx0YXQ6IFwibGVmdFwiICsgKCBsZWZ0ID49IDAgPyBcIitcIiA6IFwiXCIgKSArIGxlZnQgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcInRvcFwiICsgKCB0b3AgPj0gMCA/IFwiK1wiIDogXCJcIiApICsgdG9wLFxuXHRcdFx0XHRcdG9mOiB0aGF0LndpbmRvd1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGF0Ll9yZW1vdmVDbGFzcyggJCggdGhpcyApLCBcInVpLWRpYWxvZy1kcmFnZ2luZ1wiICk7XG5cdFx0XHRcdHRoYXQuX3VuYmxvY2tGcmFtZXMoKTtcblx0XHRcdFx0dGhhdC5fdHJpZ2dlciggXCJkcmFnU3RvcFwiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfbWFrZVJlc2l6YWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGhhbmRsZXMgPSBvcHRpb25zLnJlc2l6YWJsZSxcblxuXHRcdFx0Ly8gLnVpLXJlc2l6YWJsZSBoYXMgcG9zaXRpb246IHJlbGF0aXZlIGRlZmluZWQgaW4gdGhlIHN0eWxlc2hlZXRcblx0XHRcdC8vIGJ1dCBkaWFsb2dzIGhhdmUgdG8gdXNlIGFic29sdXRlIG9yIGZpeGVkIHBvc2l0aW9uaW5nXG5cdFx0XHRwb3NpdGlvbiA9IHRoaXMudWlEaWFsb2cuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdHJlc2l6ZUhhbmRsZXMgPSB0eXBlb2YgaGFuZGxlcyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdGhhbmRsZXMgOlxuXHRcdFx0XHRcIm4sZSxzLHcsc2Usc3csbmUsbndcIjtcblxuXHRcdGZ1bmN0aW9uIGZpbHRlcmVkVWkoIHVpICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0b3JpZ2luYWxQb3NpdGlvbjogdWkub3JpZ2luYWxQb3NpdGlvbixcblx0XHRcdFx0b3JpZ2luYWxTaXplOiB1aS5vcmlnaW5hbFNpemUsXG5cdFx0XHRcdHBvc2l0aW9uOiB1aS5wb3NpdGlvbixcblx0XHRcdFx0c2l6ZTogdWkuc2l6ZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgge1xuXHRcdFx0Y2FuY2VsOiBcIi51aS1kaWFsb2ctY29udGVudFwiLFxuXHRcdFx0Y29udGFpbm1lbnQ6IFwiZG9jdW1lbnRcIixcblx0XHRcdGFsc29SZXNpemU6IHRoaXMuZWxlbWVudCxcblx0XHRcdG1heFdpZHRoOiBvcHRpb25zLm1heFdpZHRoLFxuXHRcdFx0bWF4SGVpZ2h0OiBvcHRpb25zLm1heEhlaWdodCxcblx0XHRcdG1pbldpZHRoOiBvcHRpb25zLm1pbldpZHRoLFxuXHRcdFx0bWluSGVpZ2h0OiB0aGlzLl9taW5IZWlnaHQoKSxcblx0XHRcdGhhbmRsZXM6IHJlc2l6ZUhhbmRsZXMsXG5cdFx0XHRzdGFydDogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoICQoIHRoaXMgKSwgXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiApO1xuXHRcdFx0XHR0aGF0Ll9ibG9ja0ZyYW1lcygpO1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInJlc2l6ZVN0YXJ0XCIsIGV2ZW50LCBmaWx0ZXJlZFVpKCB1aSApICk7XG5cdFx0XHR9LFxuXHRcdFx0cmVzaXplOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcInJlc2l6ZVwiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSB0aGF0LnVpRGlhbG9nLm9mZnNldCgpLFxuXHRcdFx0XHRcdGxlZnQgPSBvZmZzZXQubGVmdCAtIHRoYXQuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLFxuXHRcdFx0XHRcdHRvcCA9IG9mZnNldC50b3AgLSB0aGF0LmRvY3VtZW50LnNjcm9sbFRvcCgpO1xuXG5cdFx0XHRcdG9wdGlvbnMuaGVpZ2h0ID0gdGhhdC51aURpYWxvZy5oZWlnaHQoKTtcblx0XHRcdFx0b3B0aW9ucy53aWR0aCA9IHRoYXQudWlEaWFsb2cud2lkdGgoKTtcblx0XHRcdFx0b3B0aW9ucy5wb3NpdGlvbiA9IHtcblx0XHRcdFx0XHRteTogXCJsZWZ0IHRvcFwiLFxuXHRcdFx0XHRcdGF0OiBcImxlZnRcIiArICggbGVmdCA+PSAwID8gXCIrXCIgOiBcIlwiICkgKyBsZWZ0ICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XCJ0b3BcIiArICggdG9wID49IDAgPyBcIitcIiA6IFwiXCIgKSArIHRvcCxcblx0XHRcdFx0XHRvZjogdGhhdC53aW5kb3dcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoICQoIHRoaXMgKSwgXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiApO1xuXHRcdFx0XHR0aGF0Ll91bmJsb2NrRnJhbWVzKCk7XG5cdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwicmVzaXplU3RvcFwiLCBldmVudCwgZmlsdGVyZWRVaSggdWkgKSApO1xuXHRcdFx0fVxuXHRcdH0gKVxuXHRcdFx0LmNzcyggXCJwb3NpdGlvblwiLCBwb3NpdGlvbiApO1xuXHR9LFxuXG5cdF90cmFja0ZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9vbiggdGhpcy53aWRnZXQoKSwge1xuXHRcdFx0Zm9jdXNpbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKTtcblx0XHRcdFx0dGhpcy5fZm9jdXNlZEVsZW1lbnQgPSAkKCBldmVudC50YXJnZXQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X21ha2VGb2N1c1RhcmdldDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fdW50cmFja0luc3RhbmNlKCk7XG5cdFx0dGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKS51bnNoaWZ0KCB0aGlzICk7XG5cdH0sXG5cblx0X3VudHJhY2tJbnN0YW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGluc3RhbmNlcyA9IHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksXG5cdFx0XHRleGlzdHMgPSAkLmluQXJyYXkoIHRoaXMsIGluc3RhbmNlcyApO1xuXHRcdGlmICggZXhpc3RzICE9PSAtMSApIHtcblx0XHRcdGluc3RhbmNlcy5zcGxpY2UoIGV4aXN0cywgMSApO1xuXHRcdH1cblx0fSxcblxuXHRfdHJhY2tpbmdJbnN0YW5jZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZXMgPSB0aGlzLmRvY3VtZW50LmRhdGEoIFwidWktZGlhbG9nLWluc3RhbmNlc1wiICk7XG5cdFx0aWYgKCAhaW5zdGFuY2VzICkge1xuXHRcdFx0aW5zdGFuY2VzID0gW107XG5cdFx0XHR0aGlzLmRvY3VtZW50LmRhdGEoIFwidWktZGlhbG9nLWluc3RhbmNlc1wiLCBpbnN0YW5jZXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGluc3RhbmNlcztcblx0fSxcblxuXHRfbWluSGVpZ2h0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdHJldHVybiBvcHRpb25zLmhlaWdodCA9PT0gXCJhdXRvXCIgP1xuXHRcdFx0b3B0aW9ucy5taW5IZWlnaHQgOlxuXHRcdFx0TWF0aC5taW4oIG9wdGlvbnMubWluSGVpZ2h0LCBvcHRpb25zLmhlaWdodCApO1xuXHR9LFxuXG5cdF9wb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBOZWVkIHRvIHNob3cgdGhlIGRpYWxvZyB0byBnZXQgdGhlIGFjdHVhbCBvZmZzZXQgaW4gdGhlIHBvc2l0aW9uIHBsdWdpblxuXHRcdHZhciBpc1Zpc2libGUgPSB0aGlzLnVpRGlhbG9nLmlzKCBcIjp2aXNpYmxlXCIgKTtcblx0XHRpZiAoICFpc1Zpc2libGUgKSB7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLnNob3coKTtcblx0XHR9XG5cdFx0dGhpcy51aURpYWxvZy5wb3NpdGlvbiggdGhpcy5vcHRpb25zLnBvc2l0aW9uICk7XG5cdFx0aWYgKCAhaXNWaXNpYmxlICkge1xuXHRcdFx0dGhpcy51aURpYWxvZy5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRyZXNpemUgPSBmYWxzZSxcblx0XHRcdHJlc2l6YWJsZU9wdGlvbnMgPSB7fTtcblxuXHRcdCQuZWFjaCggb3B0aW9ucywgZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0XHR0aGF0Ll9zZXRPcHRpb24oIGtleSwgdmFsdWUgKTtcblxuXHRcdFx0aWYgKCBrZXkgaW4gdGhhdC5zaXplUmVsYXRlZE9wdGlvbnMgKSB7XG5cdFx0XHRcdHJlc2l6ZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGtleSBpbiB0aGF0LnJlc2l6YWJsZVJlbGF0ZWRPcHRpb25zICkge1xuXHRcdFx0XHRyZXNpemFibGVPcHRpb25zWyBrZXkgXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggcmVzaXplICkge1xuXHRcdFx0dGhpcy5fc2l6ZSgpO1xuXHRcdFx0dGhpcy5fcG9zaXRpb24oKTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLnVpRGlhbG9nLmlzKCBcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIiApICkge1xuXHRcdFx0dGhpcy51aURpYWxvZy5yZXNpemFibGUoIFwib3B0aW9uXCIsIHJlc2l6YWJsZU9wdGlvbnMgKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGlzRHJhZ2dhYmxlLCBpc1Jlc2l6YWJsZSxcblx0XHRcdHVpRGlhbG9nID0gdGhpcy51aURpYWxvZztcblxuXHRcdGlmICgga2V5ID09PSBcImRpc2FibGVkXCIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImFwcGVuZFRvXCIgKSB7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiYnV0dG9uc1wiICkge1xuXHRcdFx0dGhpcy5fY3JlYXRlQnV0dG9ucygpO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImNsb3NlVGV4dFwiICkge1xuXHRcdFx0dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuYnV0dG9uKCB7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoYXQgd2UgYWx3YXlzIHBhc3MgYSBzdHJpbmdcblx0XHRcdFx0bGFiZWw6ICQoIFwiPGE+XCIgKS50ZXh0KCBcIlwiICsgdGhpcy5vcHRpb25zLmNsb3NlVGV4dCApLmh0bWwoKVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImRyYWdnYWJsZVwiICkge1xuXHRcdFx0aXNEcmFnZ2FibGUgPSB1aURpYWxvZy5pcyggXCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCIgKTtcblx0XHRcdGlmICggaXNEcmFnZ2FibGUgJiYgIXZhbHVlICkge1xuXHRcdFx0XHR1aURpYWxvZy5kcmFnZ2FibGUoIFwiZGVzdHJveVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIWlzRHJhZ2dhYmxlICYmIHZhbHVlICkge1xuXHRcdFx0XHR0aGlzLl9tYWtlRHJhZ2dhYmxlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwicG9zaXRpb25cIiApIHtcblx0XHRcdHRoaXMuX3Bvc2l0aW9uKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwicmVzaXphYmxlXCIgKSB7XG5cblx0XHRcdC8vIGN1cnJlbnRseSByZXNpemFibGUsIGJlY29taW5nIG5vbi1yZXNpemFibGVcblx0XHRcdGlzUmVzaXphYmxlID0gdWlEaWFsb2cuaXMoIFwiOmRhdGEodWktcmVzaXphYmxlKVwiICk7XG5cdFx0XHRpZiAoIGlzUmVzaXphYmxlICYmICF2YWx1ZSApIHtcblx0XHRcdFx0dWlEaWFsb2cucmVzaXphYmxlKCBcImRlc3Ryb3lcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50bHkgcmVzaXphYmxlLCBjaGFuZ2luZyBoYW5kbGVzXG5cdFx0XHRpZiAoIGlzUmVzaXphYmxlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0dWlEaWFsb2cucmVzaXphYmxlKCBcIm9wdGlvblwiLCBcImhhbmRsZXNcIiwgdmFsdWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3VycmVudGx5IG5vbi1yZXNpemFibGUsIGJlY29taW5nIHJlc2l6YWJsZVxuXHRcdFx0aWYgKCAhaXNSZXNpemFibGUgJiYgdmFsdWUgIT09IGZhbHNlICkge1xuXHRcdFx0XHR0aGlzLl9tYWtlUmVzaXphYmxlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwidGl0bGVcIiApIHtcblx0XHRcdHRoaXMuX3RpdGxlKCB0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZCggXCIudWktZGlhbG9nLXRpdGxlXCIgKSApO1xuXHRcdH1cblx0fSxcblxuXHRfc2l6ZTogZnVuY3Rpb24oKSB7XG5cblx0XHQvLyBJZiB0aGUgdXNlciBoYXMgcmVzaXplZCB0aGUgZGlhbG9nLCB0aGUgLnVpLWRpYWxvZyBhbmQgLnVpLWRpYWxvZy1jb250ZW50XG5cdFx0Ly8gZGl2cyB3aWxsIGJvdGggaGF2ZSB3aWR0aCBhbmQgaGVpZ2h0IHNldCwgc28gd2UgbmVlZCB0byByZXNldCB0aGVtXG5cdFx0dmFyIG5vbkNvbnRlbnRIZWlnaHQsIG1pbkNvbnRlbnRIZWlnaHQsIG1heENvbnRlbnRIZWlnaHQsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0Ly8gUmVzZXQgY29udGVudCBzaXppbmdcblx0XHR0aGlzLmVsZW1lbnQuc2hvdygpLmNzcygge1xuXHRcdFx0d2lkdGg6IFwiYXV0b1wiLFxuXHRcdFx0bWluSGVpZ2h0OiAwLFxuXHRcdFx0bWF4SGVpZ2h0OiBcIm5vbmVcIixcblx0XHRcdGhlaWdodDogMFxuXHRcdH0gKTtcblxuXHRcdGlmICggb3B0aW9ucy5taW5XaWR0aCA+IG9wdGlvbnMud2lkdGggKSB7XG5cdFx0XHRvcHRpb25zLndpZHRoID0gb3B0aW9ucy5taW5XaWR0aDtcblx0XHR9XG5cblx0XHQvLyBSZXNldCB3cmFwcGVyIHNpemluZ1xuXHRcdC8vIGRldGVybWluZSB0aGUgaGVpZ2h0IG9mIGFsbCB0aGUgbm9uLWNvbnRlbnQgZWxlbWVudHNcblx0XHRub25Db250ZW50SGVpZ2h0ID0gdGhpcy51aURpYWxvZy5jc3MoIHtcblx0XHRcdGhlaWdodDogXCJhdXRvXCIsXG5cdFx0XHR3aWR0aDogb3B0aW9ucy53aWR0aFxuXHRcdH0gKVxuXHRcdFx0Lm91dGVySGVpZ2h0KCk7XG5cdFx0bWluQ29udGVudEhlaWdodCA9IE1hdGgubWF4KCAwLCBvcHRpb25zLm1pbkhlaWdodCAtIG5vbkNvbnRlbnRIZWlnaHQgKTtcblx0XHRtYXhDb250ZW50SGVpZ2h0ID0gdHlwZW9mIG9wdGlvbnMubWF4SGVpZ2h0ID09PSBcIm51bWJlclwiID9cblx0XHRcdE1hdGgubWF4KCAwLCBvcHRpb25zLm1heEhlaWdodCAtIG5vbkNvbnRlbnRIZWlnaHQgKSA6XG5cdFx0XHRcIm5vbmVcIjtcblxuXHRcdGlmICggb3B0aW9ucy5oZWlnaHQgPT09IFwiYXV0b1wiICkge1xuXHRcdFx0dGhpcy5lbGVtZW50LmNzcygge1xuXHRcdFx0XHRtaW5IZWlnaHQ6IG1pbkNvbnRlbnRIZWlnaHQsXG5cdFx0XHRcdG1heEhlaWdodDogbWF4Q29udGVudEhlaWdodCxcblx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0fSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQuaGVpZ2h0KCBNYXRoLm1heCggMCwgb3B0aW9ucy5oZWlnaHQgLSBub25Db250ZW50SGVpZ2h0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMudWlEaWFsb2cuaXMoIFwiOmRhdGEodWktcmVzaXphYmxlKVwiICkgKSB7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSggXCJvcHRpb25cIiwgXCJtaW5IZWlnaHRcIiwgdGhpcy5fbWluSGVpZ2h0KCkgKTtcblx0XHR9XG5cdH0sXG5cblx0X2Jsb2NrRnJhbWVzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmlmcmFtZUJsb2NrcyA9IHRoaXMuZG9jdW1lbnQuZmluZCggXCJpZnJhbWVcIiApLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaWZyYW1lID0gJCggdGhpcyApO1xuXG5cdFx0XHRyZXR1cm4gJCggXCI8ZGl2PlwiIClcblx0XHRcdFx0LmNzcygge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG5cdFx0XHRcdFx0d2lkdGg6IGlmcmFtZS5vdXRlcldpZHRoKCksXG5cdFx0XHRcdFx0aGVpZ2h0OiBpZnJhbWUub3V0ZXJIZWlnaHQoKVxuXHRcdFx0XHR9IClcblx0XHRcdFx0LmFwcGVuZFRvKCBpZnJhbWUucGFyZW50KCkgKVxuXHRcdFx0XHQub2Zmc2V0KCBpZnJhbWUub2Zmc2V0KCkgKVsgMCBdO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfdW5ibG9ja0ZyYW1lczogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLmlmcmFtZUJsb2NrcyApIHtcblx0XHRcdHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpO1xuXHRcdFx0ZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzO1xuXHRcdH1cblx0fSxcblxuXHRfYWxsb3dJbnRlcmFjdGlvbjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggJCggZXZlbnQudGFyZ2V0ICkuY2xvc2VzdCggXCIudWktZGlhbG9nXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBUT0RPOiBSZW1vdmUgaGFjayB3aGVuIGRhdGVwaWNrZXIgaW1wbGVtZW50c1xuXHRcdC8vIHRoZSAudWktZnJvbnQgbG9naWMgKCM4OTg5KVxuXHRcdHJldHVybiAhISQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIFwiLnVpLWRhdGVwaWNrZXJcIiApLmxlbmd0aDtcblx0fSxcblxuXHRfY3JlYXRlT3ZlcmxheTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpcy5vcHRpb25zLm1vZGFsICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFdlIHVzZSBhIGRlbGF5IGluIGNhc2UgdGhlIG92ZXJsYXkgaXMgY3JlYXRlZCBmcm9tIGFuXG5cdFx0Ly8gZXZlbnQgdGhhdCB3ZSdyZSBnb2luZyB0byBiZSBjYW5jZWxsaW5nICgjMjgwNClcblx0XHR2YXIgaXNPcGVuaW5nID0gdHJ1ZTtcblx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRpc09wZW5pbmcgPSBmYWxzZTtcblx0XHR9ICk7XG5cblx0XHRpZiAoICF0aGlzLmRvY3VtZW50LmRhdGEoIFwidWktZGlhbG9nLW92ZXJsYXlzXCIgKSApIHtcblxuXHRcdFx0Ly8gUHJldmVudCB1c2Ugb2YgYW5jaG9ycyBhbmQgaW5wdXRzXG5cdFx0XHQvLyBVc2luZyBfb24oKSBmb3IgYW4gZXZlbnQgaGFuZGxlciBzaGFyZWQgYWNyb3NzIG1hbnkgaW5zdGFuY2VzIGlzXG5cdFx0XHQvLyBzYWZlIGJlY2F1c2UgdGhlIGRpYWxvZ3Mgc3RhY2sgYW5kIG11c3QgYmUgY2xvc2VkIGluIHJldmVyc2Ugb3JkZXJcblx0XHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB7XG5cdFx0XHRcdGZvY3VzaW46IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0XHRpZiAoIGlzT3BlbmluZyApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoICF0aGlzLl9hbGxvd0ludGVyYWN0aW9uKCBldmVudCApICkge1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKClbIDAgXS5fZm9jdXNUYWJiYWJsZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRoaXMub3ZlcmxheSA9ICQoIFwiPGRpdj5cIiApXG5cdFx0XHQuYXBwZW5kVG8oIHRoaXMuX2FwcGVuZFRvKCkgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLm92ZXJsYXksIG51bGwsIFwidWktd2lkZ2V0LW92ZXJsYXkgdWktZnJvbnRcIiApO1xuXHRcdHRoaXMuX29uKCB0aGlzLm92ZXJsYXksIHtcblx0XHRcdG1vdXNlZG93bjogXCJfa2VlcEZvY3VzXCJcblx0XHR9ICk7XG5cdFx0dGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1vdmVybGF5c1wiLFxuXHRcdFx0KCB0aGlzLmRvY3VtZW50LmRhdGEoIFwidWktZGlhbG9nLW92ZXJsYXlzXCIgKSB8fCAwICkgKyAxICk7XG5cdH0sXG5cblx0X2Rlc3Ryb3lPdmVybGF5OiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzLm9wdGlvbnMubW9kYWwgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm92ZXJsYXkgKSB7XG5cdFx0XHR2YXIgb3ZlcmxheXMgPSB0aGlzLmRvY3VtZW50LmRhdGEoIFwidWktZGlhbG9nLW92ZXJsYXlzXCIgKSAtIDE7XG5cblx0XHRcdGlmICggIW92ZXJsYXlzICkge1xuXHRcdFx0XHR0aGlzLl9vZmYoIHRoaXMuZG9jdW1lbnQsIFwiZm9jdXNpblwiICk7XG5cdFx0XHRcdHRoaXMuZG9jdW1lbnQucmVtb3ZlRGF0YSggXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kb2N1bWVudC5kYXRhKCBcInVpLWRpYWxvZy1vdmVybGF5c1wiLCBvdmVybGF5cyApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLm92ZXJsYXkucmVtb3ZlKCk7XG5cdFx0XHR0aGlzLm92ZXJsYXkgPSBudWxsO1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBERVBSRUNBVEVEXG4vLyBUT0RPOiBzd2l0Y2ggcmV0dXJuIGJhY2sgdG8gd2lkZ2V0IGRlY2xhcmF0aW9uIGF0IHRvcCBvZiBmaWxlIHdoZW4gdGhpcyBpcyByZW1vdmVkXG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblxuXHQvLyBCYWNrY29tcGF0IGZvciBkaWFsb2dDbGFzcyBvcHRpb25cblx0JC53aWRnZXQoIFwidWkuZGlhbG9nXCIsICQudWkuZGlhbG9nLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0ZGlhbG9nQ2xhc3M6IFwiXCJcblx0XHR9LFxuXHRcdF9jcmVhdGVXcmFwcGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0XHR0aGlzLnVpRGlhbG9nLmFkZENsYXNzKCB0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MgKTtcblx0XHR9LFxuXHRcdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdFx0aWYgKCBrZXkgPT09IFwiZGlhbG9nQ2xhc3NcIiApIHtcblx0XHRcdFx0dGhpcy51aURpYWxvZ1xuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcyggdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzIClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zdXBlckFwcGx5KCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxudmFyIHdpZGdldHNEaWFsb2cgPSAkLnVpLmRpYWxvZztcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBQcm9ncmVzc2JhciAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogUHJvZ3Jlc3NiYXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8ganNjczpkaXNhYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vLz4+ZGVzY3JpcHRpb246IERpc3BsYXlzIGEgc3RhdHVzIGluZGljYXRvciBmb3IgbG9hZGluZyBzdGF0ZSwgc3RhbmRhcmQgcGVyY2VudGFnZSwgYW5kIG90aGVyIHByb2dyZXNzIGluZGljYXRvcnMuXG4vLyBqc2NzOmVuYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3Byb2dyZXNzYmFyL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3Byb2dyZXNzYmFyL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvcHJvZ3Jlc3NiYXIuY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzUHJvZ3Jlc3NiYXIgPSAkLndpZGdldCggXCJ1aS5wcm9ncmVzc2JhclwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdG9wdGlvbnM6IHtcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXByb2dyZXNzYmFyXCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS1wcm9ncmVzc2Jhci12YWx1ZVwiOiBcInVpLWNvcm5lci1sZWZ0XCIsXG5cdFx0XHRcInVpLXByb2dyZXNzYmFyLWNvbXBsZXRlXCI6IFwidWktY29ybmVyLXJpZ2h0XCJcblx0XHR9LFxuXHRcdG1heDogMTAwLFxuXHRcdHZhbHVlOiAwLFxuXG5cdFx0Y2hhbmdlOiBudWxsLFxuXHRcdGNvbXBsZXRlOiBudWxsXG5cdH0sXG5cblx0bWluOiAwLFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gQ29uc3RyYWluIGluaXRpYWwgdmFsdWVcblx0XHR0aGlzLm9sZFZhbHVlID0gdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpO1xuXG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIHtcblxuXHRcdFx0Ly8gT25seSBzZXQgc3RhdGljIHZhbHVlczsgYXJpYS12YWx1ZW5vdyBhbmQgYXJpYS12YWx1ZW1heCBhcmVcblx0XHRcdC8vIHNldCBpbnNpZGUgX3JlZnJlc2hWYWx1ZSgpXG5cdFx0XHRyb2xlOiBcInByb2dyZXNzYmFyXCIsXG5cdFx0XHRcImFyaWEtdmFsdWVtaW5cIjogdGhpcy5taW5cblx0XHR9ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktcHJvZ3Jlc3NiYXJcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXG5cdFx0dGhpcy52YWx1ZURpdiA9ICQoIFwiPGRpdj5cIiApLmFwcGVuZFRvKCB0aGlzLmVsZW1lbnQgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy52YWx1ZURpdiwgXCJ1aS1wcm9ncmVzc2Jhci12YWx1ZVwiLCBcInVpLXdpZGdldC1oZWFkZXJcIiApO1xuXHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJyb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIgKTtcblxuXHRcdHRoaXMudmFsdWVEaXYucmVtb3ZlKCk7XG5cdH0sXG5cblx0dmFsdWU6IGZ1bmN0aW9uKCBuZXdWYWx1ZSApIHtcblx0XHRpZiAoIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoIG5ld1ZhbHVlICk7XG5cdFx0dGhpcy5fcmVmcmVzaFZhbHVlKCk7XG5cdH0sXG5cblx0X2NvbnN0cmFpbmVkVmFsdWU6IGZ1bmN0aW9uKCBuZXdWYWx1ZSApIHtcblx0XHRpZiAoIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZTtcblx0XHR9XG5cblx0XHR0aGlzLmluZGV0ZXJtaW5hdGUgPSBuZXdWYWx1ZSA9PT0gZmFsc2U7XG5cblx0XHQvLyBTYW5pdGl6ZSB2YWx1ZVxuXHRcdGlmICggdHlwZW9mIG5ld1ZhbHVlICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0bmV3VmFsdWUgPSAwO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGUgPyBmYWxzZSA6XG5cdFx0XHRNYXRoLm1pbiggdGhpcy5vcHRpb25zLm1heCwgTWF0aC5tYXgoIHRoaXMubWluLCBuZXdWYWx1ZSApICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbnM6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gRW5zdXJlIFwidmFsdWVcIiBvcHRpb24gaXMgc2V0IGFmdGVyIG90aGVyIHZhbHVlcyAobGlrZSBtYXgpXG5cdFx0dmFyIHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0XHRkZWxldGUgb3B0aW9ucy52YWx1ZTtcblxuXHRcdHRoaXMuX3N1cGVyKCBvcHRpb25zICk7XG5cblx0XHR0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl9jb25zdHJhaW5lZFZhbHVlKCB2YWx1ZSApO1xuXHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcIm1heFwiICkge1xuXG5cdFx0XHQvLyBEb24ndCBhbGxvdyBhIG1heCBsZXNzIHRoYW4gbWluXG5cdFx0XHR2YWx1ZSA9IE1hdGgubWF4KCB0aGlzLm1pbiwgdmFsdWUgKTtcblx0XHR9XG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlciggdmFsdWUgKTtcblxuXHRcdHRoaXMuZWxlbWVudC5hdHRyKCBcImFyaWEtZGlzYWJsZWRcIiwgdmFsdWUgKTtcblx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdH0sXG5cblx0X3BlcmNlbnRhZ2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGUgP1xuXHRcdFx0MTAwIDpcblx0XHRcdDEwMCAqICggdGhpcy5vcHRpb25zLnZhbHVlIC0gdGhpcy5taW4gKSAvICggdGhpcy5vcHRpb25zLm1heCAtIHRoaXMubWluICk7XG5cdH0sXG5cblx0X3JlZnJlc2hWYWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZhbHVlID0gdGhpcy5vcHRpb25zLnZhbHVlLFxuXHRcdFx0cGVyY2VudGFnZSA9IHRoaXMuX3BlcmNlbnRhZ2UoKTtcblxuXHRcdHRoaXMudmFsdWVEaXZcblx0XHRcdC50b2dnbGUoIHRoaXMuaW5kZXRlcm1pbmF0ZSB8fCB2YWx1ZSA+IHRoaXMubWluIClcblx0XHRcdC53aWR0aCggcGVyY2VudGFnZS50b0ZpeGVkKCAwICkgKyBcIiVcIiApO1xuXG5cdFx0dGhpc1xuXHRcdFx0Ll90b2dnbGVDbGFzcyggdGhpcy52YWx1ZURpdiwgXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiLCBudWxsLFxuXHRcdFx0XHR2YWx1ZSA9PT0gdGhpcy5vcHRpb25zLm1heCApXG5cdFx0XHQuX3RvZ2dsZUNsYXNzKCBcInVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGVcIiwgbnVsbCwgdGhpcy5pbmRldGVybWluYXRlICk7XG5cblx0XHRpZiAoIHRoaXMuaW5kZXRlcm1pbmF0ZSApIHtcblx0XHRcdHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCBcImFyaWEtdmFsdWVub3dcIiApO1xuXHRcdFx0aWYgKCAhdGhpcy5vdmVybGF5RGl2ICkge1xuXHRcdFx0XHR0aGlzLm92ZXJsYXlEaXYgPSAkKCBcIjxkaXY+XCIgKS5hcHBlbmRUbyggdGhpcy52YWx1ZURpdiApO1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5vdmVybGF5RGl2LCBcInVpLXByb2dyZXNzYmFyLW92ZXJsYXlcIiApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQuYXR0cigge1xuXHRcdFx0XHRcImFyaWEtdmFsdWVtYXhcIjogdGhpcy5vcHRpb25zLm1heCxcblx0XHRcdFx0XCJhcmlhLXZhbHVlbm93XCI6IHZhbHVlXG5cdFx0XHR9ICk7XG5cdFx0XHRpZiAoIHRoaXMub3ZlcmxheURpdiApIHtcblx0XHRcdFx0dGhpcy5vdmVybGF5RGl2LnJlbW92ZSgpO1xuXHRcdFx0XHR0aGlzLm92ZXJsYXlEaXYgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vbGRWYWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHR0aGlzLm9sZFZhbHVlID0gdmFsdWU7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImNoYW5nZVwiICk7XG5cdFx0fVxuXHRcdGlmICggdmFsdWUgPT09IHRoaXMub3B0aW9ucy5tYXggKSB7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImNvbXBsZXRlXCIgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBTZWxlY3RtZW51IDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBTZWxlY3RtZW51XG4vLz4+Z3JvdXA6IFdpZGdldHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBEdXBsaWNhdGVzIGFuZCBleHRlbmRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGEgbmF0aXZlIEhUTUwgc2VsZWN0IGVsZW1lbnQsIGFsbG93aW5nIGl0IHRvIGJlIGN1c3RvbWl6YWJsZSBpbiBiZWhhdmlvciBhbmQgYXBwZWFyYW5jZSBmYXIgYmV5b25kIHRoZSBsaW1pdGF0aW9ucyBvZiBhIG5hdGl2ZSBzZWxlY3QuXG4vLyBqc2NzOmVuYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3NlbGVjdG1lbnUvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vc2VsZWN0bWVudS9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL3NlbGVjdG1lbnUuY3NzLCAuLi8uLi90aGVtZXMvYmFzZS9idXR0b24uY3NzXG4vLz4+Y3NzLnRoZW1lOiAuLi8uLi90aGVtZXMvYmFzZS90aGVtZS5jc3NcblxuXG5cbnZhciB3aWRnZXRzU2VsZWN0bWVudSA9ICQud2lkZ2V0KCBcInVpLnNlbGVjdG1lbnVcIiwgWyAkLnVpLmZvcm1SZXNldE1peGluLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdGRlZmF1bHRFbGVtZW50OiBcIjxzZWxlY3Q+XCIsXG5cdG9wdGlvbnM6IHtcblx0XHRhcHBlbmRUbzogbnVsbCxcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjogXCJ1aS1jb3JuZXItdG9wXCIsXG5cdFx0XHRcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOiBcInVpLWNvcm5lci1hbGxcIlxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IG51bGwsXG5cdFx0aWNvbnM6IHtcblx0XHRcdGJ1dHRvbjogXCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wiXG5cdFx0fSxcblx0XHRwb3NpdGlvbjoge1xuXHRcdFx0bXk6IFwibGVmdCB0b3BcIixcblx0XHRcdGF0OiBcImxlZnQgYm90dG9tXCIsXG5cdFx0XHRjb2xsaXNpb246IFwibm9uZVwiXG5cdFx0fSxcblx0XHR3aWR0aDogZmFsc2UsXG5cblx0XHQvLyBDYWxsYmFja3Ncblx0XHRjaGFuZ2U6IG51bGwsXG5cdFx0Y2xvc2U6IG51bGwsXG5cdFx0Zm9jdXM6IG51bGwsXG5cdFx0b3BlbjogbnVsbCxcblx0XHRzZWxlY3Q6IG51bGxcblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0bWVudUlkID0gdGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0ciggXCJpZFwiICk7XG5cdFx0dGhpcy5pZHMgPSB7XG5cdFx0XHRlbGVtZW50OiBzZWxlY3RtZW51SWQsXG5cdFx0XHRidXR0b246IHNlbGVjdG1lbnVJZCArIFwiLWJ1dHRvblwiLFxuXHRcdFx0bWVudTogc2VsZWN0bWVudUlkICsgXCItbWVudVwiXG5cdFx0fTtcblxuXHRcdHRoaXMuX2RyYXdCdXR0b24oKTtcblx0XHR0aGlzLl9kcmF3TWVudSgpO1xuXHRcdHRoaXMuX2JpbmRGb3JtUmVzZXRIYW5kbGVyKCk7XG5cblx0XHR0aGlzLl9yZW5kZXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMubWVudUl0ZW1zID0gJCgpO1xuXHR9LFxuXG5cdF9kcmF3QnV0dG9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWNvbixcblx0XHRcdHRoYXQgPSB0aGlzLFxuXHRcdFx0aXRlbSA9IHRoaXMuX3BhcnNlT3B0aW9uKFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQuZmluZCggXCJvcHRpb246c2VsZWN0ZWRcIiApLFxuXHRcdFx0XHR0aGlzLmVsZW1lbnRbIDAgXS5zZWxlY3RlZEluZGV4XG5cdFx0XHQpO1xuXG5cdFx0Ly8gQXNzb2NpYXRlIGV4aXN0aW5nIGxhYmVsIHdpdGggdGhlIG5ldyBidXR0b25cblx0XHR0aGlzLmxhYmVscyA9IHRoaXMuZWxlbWVudC5sYWJlbHMoKS5hdHRyKCBcImZvclwiLCB0aGlzLmlkcy5idXR0b24gKTtcblx0XHR0aGlzLl9vbiggdGhpcy5sYWJlbHMsIHtcblx0XHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHRoaXMuYnV0dG9uLmZvY3VzKCk7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0Ly8gSGlkZSBvcmlnaW5hbCBzZWxlY3QgZWxlbWVudFxuXHRcdHRoaXMuZWxlbWVudC5oaWRlKCk7XG5cblx0XHQvLyBDcmVhdGUgYnV0dG9uXG5cdFx0dGhpcy5idXR0b24gPSAkKCBcIjxzcGFuPlwiLCB7XG5cdFx0XHR0YWJpbmRleDogdGhpcy5vcHRpb25zLmRpc2FibGVkID8gLTEgOiAwLFxuXHRcdFx0aWQ6IHRoaXMuaWRzLmJ1dHRvbixcblx0XHRcdHJvbGU6IFwiY29tYm9ib3hcIixcblx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcImFyaWEtYXV0b2NvbXBsZXRlXCI6IFwibGlzdFwiLFxuXHRcdFx0XCJhcmlhLW93bnNcIjogdGhpcy5pZHMubWVudSxcblx0XHRcdFwiYXJpYS1oYXNwb3B1cFwiOiBcInRydWVcIixcblx0XHRcdHRpdGxlOiB0aGlzLmVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiIClcblx0XHR9IClcblx0XHRcdC5pbnNlcnRBZnRlciggdGhpcy5lbGVtZW50ICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5idXR0b24sIFwidWktc2VsZWN0bWVudS1idXR0b24gdWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCIsXG5cdFx0XHRcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiApO1xuXG5cdFx0aWNvbiA9ICQoIFwiPHNwYW4+XCIgKS5hcHBlbmRUbyggdGhpcy5idXR0b24gKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggaWNvbiwgXCJ1aS1zZWxlY3RtZW51LWljb25cIiwgXCJ1aS1pY29uIFwiICsgdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbiApO1xuXHRcdHRoaXMuYnV0dG9uSXRlbSA9IHRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0oIGl0ZW0gKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLmJ1dHRvbiApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMud2lkdGggIT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5fcmVzaXplQnV0dG9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb24oIHRoaXMuYnV0dG9uLCB0aGlzLl9idXR0b25FdmVudHMgKTtcblx0XHR0aGlzLmJ1dHRvbi5vbmUoIFwiZm9jdXNpblwiLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRGVsYXkgcmVuZGVyaW5nIHRoZSBtZW51IGl0ZW1zIHVudGlsIHRoZSBidXR0b24gcmVjZWl2ZXMgZm9jdXMuXG5cdFx0XHQvLyBUaGUgbWVudSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVuZGVyZWQgdmlhIGEgcHJvZ3JhbW1hdGljIG9wZW4uXG5cdFx0XHRpZiAoICF0aGF0Ll9yZW5kZXJlZCApIHtcblx0XHRcdFx0dGhhdC5fcmVmcmVzaE1lbnUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0X2RyYXdNZW51OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cblx0XHQvLyBDcmVhdGUgbWVudVxuXHRcdHRoaXMubWVudSA9ICQoIFwiPHVsPlwiLCB7XG5cdFx0XHRcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XCJhcmlhLWxhYmVsbGVkYnlcIjogdGhpcy5pZHMuYnV0dG9uLFxuXHRcdFx0aWQ6IHRoaXMuaWRzLm1lbnVcblx0XHR9ICk7XG5cblx0XHQvLyBXcmFwIG1lbnVcblx0XHR0aGlzLm1lbnVXcmFwID0gJCggXCI8ZGl2PlwiICkuYXBwZW5kKCB0aGlzLm1lbnUgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5tZW51V3JhcCwgXCJ1aS1zZWxlY3RtZW51LW1lbnVcIiwgXCJ1aS1mcm9udFwiICk7XG5cdFx0dGhpcy5tZW51V3JhcC5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oKSApO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBtZW51IHdpZGdldFxuXHRcdHRoaXMubWVudUluc3RhbmNlID0gdGhpcy5tZW51XG5cdFx0XHQubWVudSgge1xuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0XCJ1aS1tZW51XCI6IFwidWktY29ybmVyLWJvdHRvbVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvbGU6IFwibGlzdGJveFwiLFxuXHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0XHRcdC8vIElmIHRoZSBpdGVtIHdhcyBzZWxlY3RlZCB2aWEgYSBjbGljaywgdGhlIHRleHQgc2VsZWN0aW9uXG5cdFx0XHRcdFx0Ly8gd2lsbCBiZSBkZXN0cm95ZWQgaW4gSUVcblx0XHRcdFx0XHR0aGF0Ll9zZXRTZWxlY3Rpb24oKTtcblxuXHRcdFx0XHRcdHRoYXQuX3NlbGVjdCggdWkuaXRlbS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiICksIGV2ZW50ICk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvY3VzOiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHRcdHZhciBpdGVtID0gdWkuaXRlbS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiICk7XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IGluaXRhbCBmb2N1cyBmcm9tIGZpcmluZyBhbmQgY2hlY2sgaWYgaXRzIGEgbmV3bHkgZm9jdXNlZCBpdGVtXG5cdFx0XHRcdFx0aWYgKCB0aGF0LmZvY3VzSW5kZXggIT0gbnVsbCAmJiBpdGVtLmluZGV4ICE9PSB0aGF0LmZvY3VzSW5kZXggKSB7XG5cdFx0XHRcdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImZvY3VzXCIsIGV2ZW50LCB7IGl0ZW06IGl0ZW0gfSApO1xuXHRcdFx0XHRcdFx0aWYgKCAhdGhhdC5pc09wZW4gKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQuX3NlbGVjdCggaXRlbSwgZXZlbnQgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhhdC5mb2N1c0luZGV4ID0gaXRlbS5pbmRleDtcblxuXHRcdFx0XHRcdHRoYXQuYnV0dG9uLmF0dHIoIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsXG5cdFx0XHRcdFx0XHR0aGF0Lm1lbnVJdGVtcy5lcSggaXRlbS5pbmRleCApLmF0dHIoIFwiaWRcIiApICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKVxuXHRcdFx0Lm1lbnUoIFwiaW5zdGFuY2VcIiApO1xuXG5cdFx0Ly8gRG9uJ3QgY2xvc2UgdGhlIG1lbnUgb24gbW91c2VsZWF2ZVxuXHRcdHRoaXMubWVudUluc3RhbmNlLl9vZmYoIHRoaXMubWVudSwgXCJtb3VzZWxlYXZlXCIgKTtcblxuXHRcdC8vIENhbmNlbCB0aGUgbWVudSdzIGNvbGxhcHNlQWxsIG9uIGRvY3VtZW50IGNsaWNrXG5cdFx0dGhpcy5tZW51SW5zdGFuY2UuX2Nsb3NlT25Eb2N1bWVudENsaWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdC8vIFNlbGVjdHMgb2Z0ZW4gY29udGFpbiBlbXB0eSBpdGVtcywgYnV0IG5ldmVyIGNvbnRhaW4gZGl2aWRlcnNcblx0XHR0aGlzLm1lbnVJbnN0YW5jZS5faXNEaXZpZGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9yZWZyZXNoTWVudSgpO1xuXHRcdHRoaXMuYnV0dG9uSXRlbS5yZXBsYWNlV2l0aChcblx0XHRcdHRoaXMuYnV0dG9uSXRlbSA9IHRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0oXG5cblx0XHRcdFx0Ly8gRmFsbCBiYWNrIHRvIGFuIGVtcHR5IG9iamVjdCBpbiBjYXNlIHRoZXJlIGFyZSBubyBvcHRpb25zXG5cdFx0XHRcdHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLmRhdGEoIFwidWktc2VsZWN0bWVudS1pdGVtXCIgKSB8fCB7fVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMud2lkdGggPT09IG51bGwgKSB7XG5cdFx0XHR0aGlzLl9yZXNpemVCdXR0b24oKTtcblx0XHR9XG5cdH0sXG5cblx0X3JlZnJlc2hNZW51OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaXRlbSxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLmVsZW1lbnQuZmluZCggXCJvcHRpb25cIiApO1xuXG5cdFx0dGhpcy5tZW51LmVtcHR5KCk7XG5cblx0XHR0aGlzLl9wYXJzZU9wdGlvbnMoIG9wdGlvbnMgKTtcblx0XHR0aGlzLl9yZW5kZXJNZW51KCB0aGlzLm1lbnUsIHRoaXMuaXRlbXMgKTtcblxuXHRcdHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKTtcblx0XHR0aGlzLm1lbnVJdGVtcyA9IHRoaXMubWVudS5maW5kKCBcImxpXCIgKVxuXHRcdFx0Lm5vdCggXCIudWktc2VsZWN0bWVudS1vcHRncm91cFwiIClcblx0XHRcdFx0LmZpbmQoIFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIgKTtcblxuXHRcdHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcblxuXHRcdGlmICggIW9wdGlvbnMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGl0ZW0gPSB0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgbWVudSB0byBoYXZlIHRoZSBjb3JyZWN0IGl0ZW0gZm9jdXNlZFxuXHRcdHRoaXMubWVudUluc3RhbmNlLmZvY3VzKCBudWxsLCBpdGVtICk7XG5cdFx0dGhpcy5fc2V0QXJpYSggaXRlbS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiICkgKTtcblxuXHRcdC8vIFNldCBkaXNhYmxlZCBzdGF0ZVxuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJkaXNhYmxlZFwiLCB0aGlzLmVsZW1lbnQucHJvcCggXCJkaXNhYmxlZFwiICkgKTtcblx0fSxcblxuXHRvcGVuOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgbWVudSBpcyBiZWluZyBvcGVuZWQsIHJlbmRlciB0aGUgaXRlbXNcblx0XHRpZiAoICF0aGlzLl9yZW5kZXJlZCApIHtcblx0XHRcdHRoaXMuX3JlZnJlc2hNZW51KCk7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gTWVudSBjbGVhcnMgZm9jdXMgb24gY2xvc2UsIHJlc2V0IGZvY3VzIHRvIHNlbGVjdGVkIGl0ZW1cblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCB0aGlzLm1lbnUuZmluZCggXCIudWktc3RhdGUtYWN0aXZlXCIgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0dGhpcy5tZW51SW5zdGFuY2UuZm9jdXMoIG51bGwsIHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMsIGRvbid0IG9wZW4gdGhlIG1lbnVcblx0XHRpZiAoICF0aGlzLm1lbnVJdGVtcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc09wZW4gPSB0cnVlO1xuXHRcdHRoaXMuX3RvZ2dsZUF0dHIoKTtcblx0XHR0aGlzLl9yZXNpemVNZW51KCk7XG5cdFx0dGhpcy5fcG9zaXRpb24oKTtcblxuXHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB0aGlzLl9kb2N1bWVudENsaWNrICk7XG5cblx0XHR0aGlzLl90cmlnZ2VyKCBcIm9wZW5cIiwgZXZlbnQgKTtcblx0fSxcblxuXHRfcG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubWVudVdyYXAucG9zaXRpb24oICQuZXh0ZW5kKCB7IG9mOiB0aGlzLmJ1dHRvbiB9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24gKSApO1xuXHR9LFxuXG5cdGNsb3NlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCAhdGhpcy5pc09wZW4gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc09wZW4gPSBmYWxzZTtcblx0XHR0aGlzLl90b2dnbGVBdHRyKCk7XG5cblx0XHR0aGlzLnJhbmdlID0gbnVsbDtcblx0XHR0aGlzLl9vZmYoIHRoaXMuZG9jdW1lbnQgKTtcblxuXHRcdHRoaXMuX3RyaWdnZXIoIFwiY2xvc2VcIiwgZXZlbnQgKTtcblx0fSxcblxuXHR3aWRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1dHRvbjtcblx0fSxcblxuXHRtZW51V2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tZW51O1xuXHR9LFxuXG5cdF9yZW5kZXJCdXR0b25JdGVtOiBmdW5jdGlvbiggaXRlbSApIHtcblx0XHR2YXIgYnV0dG9uSXRlbSA9ICQoIFwiPHNwYW4+XCIgKTtcblxuXHRcdHRoaXMuX3NldFRleHQoIGJ1dHRvbkl0ZW0sIGl0ZW0ubGFiZWwgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggYnV0dG9uSXRlbSwgXCJ1aS1zZWxlY3RtZW51LXRleHRcIiApO1xuXG5cdFx0cmV0dXJuIGJ1dHRvbkl0ZW07XG5cdH0sXG5cblx0X3JlbmRlck1lbnU6IGZ1bmN0aW9uKCB1bCwgaXRlbXMgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0Y3VycmVudE9wdGdyb3VwID0gXCJcIjtcblxuXHRcdCQuZWFjaCggaXRlbXMsIGZ1bmN0aW9uKCBpbmRleCwgaXRlbSApIHtcblx0XHRcdHZhciBsaTtcblxuXHRcdFx0aWYgKCBpdGVtLm9wdGdyb3VwICE9PSBjdXJyZW50T3B0Z3JvdXAgKSB7XG5cdFx0XHRcdGxpID0gJCggXCI8bGk+XCIsIHtcblx0XHRcdFx0XHR0ZXh0OiBpdGVtLm9wdGdyb3VwXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0dGhhdC5fYWRkQ2xhc3MoIGxpLCBcInVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIiwgXCJ1aS1tZW51LWRpdmlkZXJcIiArXG5cdFx0XHRcdFx0KCBpdGVtLmVsZW1lbnQucGFyZW50KCBcIm9wdGdyb3VwXCIgKS5wcm9wKCBcImRpc2FibGVkXCIgKSA/XG5cdFx0XHRcdFx0XHRcIiB1aS1zdGF0ZS1kaXNhYmxlZFwiIDpcblx0XHRcdFx0XHRcdFwiXCIgKSApO1xuXG5cdFx0XHRcdGxpLmFwcGVuZFRvKCB1bCApO1xuXG5cdFx0XHRcdGN1cnJlbnRPcHRncm91cCA9IGl0ZW0ub3B0Z3JvdXA7XG5cdFx0XHR9XG5cblx0XHRcdHRoYXQuX3JlbmRlckl0ZW1EYXRhKCB1bCwgaXRlbSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRfcmVuZGVySXRlbURhdGE6IGZ1bmN0aW9uKCB1bCwgaXRlbSApIHtcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSggdWwsIGl0ZW0gKS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiLCBpdGVtICk7XG5cdH0sXG5cblx0X3JlbmRlckl0ZW06IGZ1bmN0aW9uKCB1bCwgaXRlbSApIHtcblx0XHR2YXIgbGkgPSAkKCBcIjxsaT5cIiApLFxuXHRcdFx0d3JhcHBlciA9ICQoIFwiPGRpdj5cIiwge1xuXHRcdFx0XHR0aXRsZTogaXRlbS5lbGVtZW50LmF0dHIoIFwidGl0bGVcIiApXG5cdFx0XHR9ICk7XG5cblx0XHRpZiAoIGl0ZW0uZGlzYWJsZWQgKSB7XG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggbGksIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiApO1xuXHRcdH1cblx0XHR0aGlzLl9zZXRUZXh0KCB3cmFwcGVyLCBpdGVtLmxhYmVsICk7XG5cblx0XHRyZXR1cm4gbGkuYXBwZW5kKCB3cmFwcGVyICkuYXBwZW5kVG8oIHVsICk7XG5cdH0sXG5cblx0X3NldFRleHQ6IGZ1bmN0aW9uKCBlbGVtZW50LCB2YWx1ZSApIHtcblx0XHRpZiAoIHZhbHVlICkge1xuXHRcdFx0ZWxlbWVudC50ZXh0KCB2YWx1ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtZW50Lmh0bWwoIFwiJiMxNjA7XCIgKTtcblx0XHR9XG5cdH0sXG5cblx0X21vdmU6IGZ1bmN0aW9uKCBkaXJlY3Rpb24sIGV2ZW50ICkge1xuXHRcdHZhciBpdGVtLCBuZXh0LFxuXHRcdFx0ZmlsdGVyID0gXCIudWktbWVudS1pdGVtXCI7XG5cblx0XHRpZiAoIHRoaXMuaXNPcGVuICkge1xuXHRcdFx0aXRlbSA9IHRoaXMubWVudUl0ZW1zLmVxKCB0aGlzLmZvY3VzSW5kZXggKS5wYXJlbnQoIFwibGlcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpdGVtID0gdGhpcy5tZW51SXRlbXMuZXEoIHRoaXMuZWxlbWVudFsgMCBdLnNlbGVjdGVkSW5kZXggKS5wYXJlbnQoIFwibGlcIiApO1xuXHRcdFx0ZmlsdGVyICs9IFwiOm5vdCgudWktc3RhdGUtZGlzYWJsZWQpXCI7XG5cdFx0fVxuXG5cdFx0aWYgKCBkaXJlY3Rpb24gPT09IFwiZmlyc3RcIiB8fCBkaXJlY3Rpb24gPT09IFwibGFzdFwiICkge1xuXHRcdFx0bmV4dCA9IGl0ZW1bIGRpcmVjdGlvbiA9PT0gXCJmaXJzdFwiID8gXCJwcmV2QWxsXCIgOiBcIm5leHRBbGxcIiBdKCBmaWx0ZXIgKS5lcSggLTEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV4dCA9IGl0ZW1bIGRpcmVjdGlvbiArIFwiQWxsXCIgXSggZmlsdGVyICkuZXEoIDAgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5leHQubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5tZW51SW5zdGFuY2UuZm9jdXMoIGV2ZW50LCBuZXh0ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRTZWxlY3RlZEl0ZW06IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1lbnVJdGVtcy5lcSggdGhpcy5lbGVtZW50WyAwIF0uc2VsZWN0ZWRJbmRleCApLnBhcmVudCggXCJsaVwiICk7XG5cdH0sXG5cblx0X3RvZ2dsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXNbIHRoaXMuaXNPcGVuID8gXCJjbG9zZVwiIDogXCJvcGVuXCIgXSggZXZlbnQgKTtcblx0fSxcblxuXHRfc2V0U2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0aW9uO1xuXG5cdFx0aWYgKCAhdGhpcy5yYW5nZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHdpbmRvdy5nZXRTZWxlY3Rpb24gKSB7XG5cdFx0XHRzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHRzZWxlY3Rpb24uYWRkUmFuZ2UoIHRoaXMucmFuZ2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJhbmdlLnNlbGVjdCgpO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFXG5cdFx0Ly8gU2V0dGluZyB0aGUgdGV4dCBzZWxlY3Rpb24ga2lsbHMgdGhlIGJ1dHRvbiBmb2N1cyBpbiBJRSwgYnV0XG5cdFx0Ly8gcmVzdG9yaW5nIHRoZSBmb2N1cyBkb2Vzbid0IGtpbGwgdGhlIHNlbGVjdGlvbi5cblx0XHR0aGlzLmJ1dHRvbi5mb2N1cygpO1xuXHR9LFxuXG5cdF9kb2N1bWVudENsaWNrOiB7XG5cdFx0bW91c2Vkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRpZiAoICF0aGlzLmlzT3BlbiApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICEkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCBcIi51aS1zZWxlY3RtZW51LW1lbnUsICNcIiArXG5cdFx0XHRcdFx0JC51aS5lc2NhcGVTZWxlY3RvciggdGhpcy5pZHMuYnV0dG9uICkgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdF9idXR0b25FdmVudHM6IHtcblxuXHRcdC8vIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gZnJvbSBiZWluZyByZXNldCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHNlbGVjdG1lbnUgKCMxMDE0NClcblx0XHRtb3VzZWRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGVjdGlvbjtcblxuXHRcdFx0aWYgKCB3aW5kb3cuZ2V0U2VsZWN0aW9uICkge1xuXHRcdFx0XHRzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRcdGlmICggc2VsZWN0aW9uLnJhbmdlQ291bnQgKSB7XG5cdFx0XHRcdFx0dGhpcy5yYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KCAwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR0aGlzLl9zZXRTZWxlY3Rpb24oKTtcblx0XHRcdHRoaXMuX3RvZ2dsZSggZXZlbnQgKTtcblx0XHR9LFxuXG5cdFx0a2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcblx0XHRcdHN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRjYXNlICQudWkua2V5Q29kZS5UQUI6XG5cdFx0XHRjYXNlICQudWkua2V5Q29kZS5FU0NBUEU6XG5cdFx0XHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdFx0XHRcdHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5URVI6XG5cdFx0XHRcdGlmICggdGhpcy5pc09wZW4gKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0oIGV2ZW50ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICQudWkua2V5Q29kZS5VUDpcblx0XHRcdFx0aWYgKCBldmVudC5hbHRLZXkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlKCBldmVudCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwicHJldlwiLCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRE9XTjpcblx0XHRcdFx0aWYgKCBldmVudC5hbHRLZXkgKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlKCBldmVudCApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX21vdmUoIFwibmV4dFwiLCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuU1BBQ0U6XG5cdFx0XHRcdGlmICggdGhpcy5pc09wZW4gKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0oIGV2ZW50ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9nZ2xlKCBldmVudCApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuTEVGVDpcblx0XHRcdFx0dGhpcy5fbW92ZSggXCJwcmV2XCIsIGV2ZW50ICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuUklHSFQ6XG5cdFx0XHRcdHRoaXMuX21vdmUoIFwibmV4dFwiLCBldmVudCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLkhPTUU6XG5cdFx0XHRjYXNlICQudWkua2V5Q29kZS5QQUdFX1VQOlxuXHRcdFx0XHR0aGlzLl9tb3ZlKCBcImZpcnN0XCIsIGV2ZW50ICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuRU5EOlxuXHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuUEFHRV9ET1dOOlxuXHRcdFx0XHR0aGlzLl9tb3ZlKCBcImxhc3RcIiwgZXZlbnQgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLm1lbnUudHJpZ2dlciggZXZlbnQgKTtcblx0XHRcdFx0cHJldmVudERlZmF1bHQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBwcmV2ZW50RGVmYXVsdCApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X3NlbGVjdEZvY3VzZWRJdGVtOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5lcSggdGhpcy5mb2N1c0luZGV4ICkucGFyZW50KCBcImxpXCIgKTtcblx0XHRpZiAoICFpdGVtLmhhc0NsYXNzKCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKSApIHtcblx0XHRcdHRoaXMuX3NlbGVjdCggaXRlbS5kYXRhKCBcInVpLXNlbGVjdG1lbnUtaXRlbVwiICksIGV2ZW50ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZWxlY3Q6IGZ1bmN0aW9uKCBpdGVtLCBldmVudCApIHtcblx0XHR2YXIgb2xkSW5kZXggPSB0aGlzLmVsZW1lbnRbIDAgXS5zZWxlY3RlZEluZGV4O1xuXG5cdFx0Ly8gQ2hhbmdlIG5hdGl2ZSBzZWxlY3QgZWxlbWVudFxuXHRcdHRoaXMuZWxlbWVudFsgMCBdLnNlbGVjdGVkSW5kZXggPSBpdGVtLmluZGV4O1xuXHRcdHRoaXMuYnV0dG9uSXRlbS5yZXBsYWNlV2l0aCggdGhpcy5idXR0b25JdGVtID0gdGhpcy5fcmVuZGVyQnV0dG9uSXRlbSggaXRlbSApICk7XG5cdFx0dGhpcy5fc2V0QXJpYSggaXRlbSApO1xuXHRcdHRoaXMuX3RyaWdnZXIoIFwic2VsZWN0XCIsIGV2ZW50LCB7IGl0ZW06IGl0ZW0gfSApO1xuXG5cdFx0aWYgKCBpdGVtLmluZGV4ICE9PSBvbGRJbmRleCApIHtcblx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50LCB7IGl0ZW06IGl0ZW0gfSApO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xvc2UoIGV2ZW50ICk7XG5cdH0sXG5cblx0X3NldEFyaWE6IGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdHZhciBpZCA9IHRoaXMubWVudUl0ZW1zLmVxKCBpdGVtLmluZGV4ICkuYXR0ciggXCJpZFwiICk7XG5cblx0XHR0aGlzLmJ1dHRvbi5hdHRyKCB7XG5cdFx0XHRcImFyaWEtbGFiZWxsZWRieVwiOiBpZCxcblx0XHRcdFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IGlkXG5cdFx0fSApO1xuXHRcdHRoaXMubWVudS5hdHRyKCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLCBpZCApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImljb25zXCIgKSB7XG5cdFx0XHR2YXIgaWNvbiA9IHRoaXMuYnV0dG9uLmZpbmQoIFwic3Bhbi51aS1pY29uXCIgKTtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBpY29uLCBudWxsLCB0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uIClcblx0XHRcdFx0Ll9hZGRDbGFzcyggaWNvbiwgbnVsbCwgdmFsdWUuYnV0dG9uICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImFwcGVuZFRvXCIgKSB7XG5cdFx0XHR0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKCB0aGlzLl9hcHBlbmRUbygpICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwid2lkdGhcIiApIHtcblx0XHRcdHRoaXMuX3Jlc2l6ZUJ1dHRvbigpO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlciggdmFsdWUgKTtcblxuXHRcdHRoaXMubWVudUluc3RhbmNlLm9wdGlvbiggXCJkaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdHRoaXMuYnV0dG9uLmF0dHIoIFwiYXJpYS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLmJ1dHRvbiwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCB2YWx1ZSApO1xuXG5cdFx0dGhpcy5lbGVtZW50LnByb3AoIFwiZGlzYWJsZWRcIiwgdmFsdWUgKTtcblx0XHRpZiAoIHZhbHVlICkge1xuXHRcdFx0dGhpcy5idXR0b24uYXR0ciggXCJ0YWJpbmRleFwiLCAtMSApO1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJ1dHRvbi5hdHRyKCBcInRhYmluZGV4XCIsIDAgKTtcblx0XHR9XG5cdH0sXG5cblx0X2FwcGVuZFRvOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbWVudCA9IHRoaXMub3B0aW9ucy5hcHBlbmRUbztcblxuXHRcdGlmICggZWxlbWVudCApIHtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LmpxdWVyeSB8fCBlbGVtZW50Lm5vZGVUeXBlID9cblx0XHRcdFx0JCggZWxlbWVudCApIDpcblx0XHRcdFx0dGhpcy5kb2N1bWVudC5maW5kKCBlbGVtZW50ICkuZXEoIDAgKTtcblx0XHR9XG5cblx0XHRpZiAoICFlbGVtZW50IHx8ICFlbGVtZW50WyAwIF0gKSB7XG5cdFx0XHRlbGVtZW50ID0gdGhpcy5lbGVtZW50LmNsb3Nlc3QoIFwiLnVpLWZyb250LCBkaWFsb2dcIiApO1xuXHRcdH1cblxuXHRcdGlmICggIWVsZW1lbnQubGVuZ3RoICkge1xuXHRcdFx0ZWxlbWVudCA9IHRoaXMuZG9jdW1lbnRbIDAgXS5ib2R5O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9LFxuXG5cdF90b2dnbGVBdHRyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmJ1dHRvbi5hdHRyKCBcImFyaWEtZXhwYW5kZWRcIiwgdGhpcy5pc09wZW4gKTtcblxuXHRcdC8vIFdlIGNhbid0IHVzZSB0d28gX3RvZ2dsZUNsYXNzKCkgY2FsbHMgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZVxuXHRcdC8vIHdlIGFsd2F5cyByZW1vdmUgY2xhc3NlcyBmaXJzdCBhbmQgYWRkIHRoZW0gc2Vjb25kLCBvdGhlcndpc2UgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlXG5cdFx0Ly8gc2FtZSB0aGVtZSBjbGFzcywgaXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIHdlIGFkZCBpdC5cblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5idXR0b24sIFwidWktc2VsZWN0bWVudS1idXR0b24tXCIgK1xuXHRcdFx0KCB0aGlzLmlzT3BlbiA/IFwiY2xvc2VkXCIgOiBcIm9wZW5cIiApIClcblx0XHRcdC5fYWRkQ2xhc3MoIHRoaXMuYnV0dG9uLCBcInVpLXNlbGVjdG1lbnUtYnV0dG9uLVwiICtcblx0XHRcdFx0KCB0aGlzLmlzT3BlbiA/IFwib3BlblwiIDogXCJjbG9zZWRcIiApIClcblx0XHRcdC5fdG9nZ2xlQ2xhc3MoIHRoaXMubWVudVdyYXAsIFwidWktc2VsZWN0bWVudS1vcGVuXCIsIG51bGwsIHRoaXMuaXNPcGVuICk7XG5cblx0XHR0aGlzLm1lbnUuYXR0ciggXCJhcmlhLWhpZGRlblwiLCAhdGhpcy5pc09wZW4gKTtcblx0fSxcblxuXHRfcmVzaXplQnV0dG9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgd2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGg7XG5cblx0XHQvLyBGb3IgYHdpZHRoOiBmYWxzZWAsIGp1c3QgcmVtb3ZlIGlubGluZSBzdHlsZSBhbmQgc3RvcFxuXHRcdGlmICggd2lkdGggPT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5idXR0b24uY3NzKCBcIndpZHRoXCIsIFwiXCIgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgYHdpZHRoOiBudWxsYCwgbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBvcmlnaW5hbCBlbGVtZW50XG5cdFx0aWYgKCB3aWR0aCA9PT0gbnVsbCApIHtcblx0XHRcdHdpZHRoID0gdGhpcy5lbGVtZW50LnNob3coKS5vdXRlcldpZHRoKCk7XG5cdFx0XHR0aGlzLmVsZW1lbnQuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoIHdpZHRoICk7XG5cdH0sXG5cblx0X3Jlc2l6ZU1lbnU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubWVudS5vdXRlcldpZHRoKCBNYXRoLm1heChcblx0XHRcdHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoKSxcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxuXHRcdFx0Ly8gSUUxMCB3cmFwcyBsb25nIHRleHQgKHBvc3NpYmx5IGEgcm91bmRpbmcgYnVnKVxuXHRcdFx0Ly8gc28gd2UgYWRkIDFweCB0byBhdm9pZCB0aGUgd3JhcHBpbmdcblx0XHRcdHRoaXMubWVudS53aWR0aCggXCJcIiApLm91dGVyV2lkdGgoKSArIDFcblx0XHQpICk7XG5cdH0sXG5cblx0X2dldENyZWF0ZU9wdGlvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5fc3VwZXIoKTtcblxuXHRcdG9wdGlvbnMuZGlzYWJsZWQgPSB0aGlzLmVsZW1lbnQucHJvcCggXCJkaXNhYmxlZFwiICk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fSxcblxuXHRfcGFyc2VPcHRpb25zOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRkYXRhID0gW107XG5cdFx0b3B0aW9ucy5lYWNoKCBmdW5jdGlvbiggaW5kZXgsIGl0ZW0gKSB7XG5cdFx0XHRkYXRhLnB1c2goIHRoYXQuX3BhcnNlT3B0aW9uKCAkKCBpdGVtICksIGluZGV4ICkgKTtcblx0XHR9ICk7XG5cdFx0dGhpcy5pdGVtcyA9IGRhdGE7XG5cdH0sXG5cblx0X3BhcnNlT3B0aW9uOiBmdW5jdGlvbiggb3B0aW9uLCBpbmRleCApIHtcblx0XHR2YXIgb3B0Z3JvdXAgPSBvcHRpb24ucGFyZW50KCBcIm9wdGdyb3VwXCIgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbGVtZW50OiBvcHRpb24sXG5cdFx0XHRpbmRleDogaW5kZXgsXG5cdFx0XHR2YWx1ZTogb3B0aW9uLnZhbCgpLFxuXHRcdFx0bGFiZWw6IG9wdGlvbi50ZXh0KCksXG5cdFx0XHRvcHRncm91cDogb3B0Z3JvdXAuYXR0ciggXCJsYWJlbFwiICkgfHwgXCJcIixcblx0XHRcdGRpc2FibGVkOiBvcHRncm91cC5wcm9wKCBcImRpc2FibGVkXCIgKSB8fCBvcHRpb24ucHJvcCggXCJkaXNhYmxlZFwiIClcblx0XHR9O1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl91bmJpbmRGb3JtUmVzZXRIYW5kbGVyKCk7XG5cdFx0dGhpcy5tZW51V3JhcC5yZW1vdmUoKTtcblx0XHR0aGlzLmJ1dHRvbi5yZW1vdmUoKTtcblx0XHR0aGlzLmVsZW1lbnQuc2hvdygpO1xuXHRcdHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpO1xuXHRcdHRoaXMubGFiZWxzLmF0dHIoIFwiZm9yXCIsIHRoaXMuaWRzLmVsZW1lbnQgKTtcblx0fVxufSBdICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgU2xpZGVyIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBTbGlkZXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIGZsZXhpYmxlIHNsaWRlciB3aXRoIHJhbmdlcyBhbmQgYWNjZXNzaWJpbGl0eSB2aWEga2V5Ym9hcmQuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2xpZGVyL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3NsaWRlci9cbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS9jb3JlLmNzc1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL3NsaWRlci5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxudmFyIHdpZGdldHNTbGlkZXIgPSAkLndpZGdldCggXCJ1aS5zbGlkZXJcIiwgJC51aS5tb3VzZSwge1xuXHR2ZXJzaW9uOiBcIjEuMTIuMVwiLFxuXHR3aWRnZXRFdmVudFByZWZpeDogXCJzbGlkZVwiLFxuXG5cdG9wdGlvbnM6IHtcblx0XHRhbmltYXRlOiBmYWxzZSxcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXNsaWRlclwiOiBcInVpLWNvcm5lci1hbGxcIixcblx0XHRcdFwidWktc2xpZGVyLWhhbmRsZVwiOiBcInVpLWNvcm5lci1hbGxcIixcblxuXHRcdFx0Ly8gTm90ZTogdWktd2lkZ2V0LWhlYWRlciBpc24ndCB0aGUgbW9zdCBmaXR0aW5nbHkgc2VtYW50aWMgZnJhbWV3b3JrIGNsYXNzIGZvciB0aGlzXG5cdFx0XHQvLyBlbGVtZW50LCBidXQgd29ya2VkIGJlc3QgdmlzdWFsbHkgd2l0aCBhIHZhcmlldHkgb2YgdGhlbWVzXG5cdFx0XHRcInVpLXNsaWRlci1yYW5nZVwiOiBcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWhlYWRlclwiXG5cdFx0fSxcblx0XHRkaXN0YW5jZTogMCxcblx0XHRtYXg6IDEwMCxcblx0XHRtaW46IDAsXG5cdFx0b3JpZW50YXRpb246IFwiaG9yaXpvbnRhbFwiLFxuXHRcdHJhbmdlOiBmYWxzZSxcblx0XHRzdGVwOiAxLFxuXHRcdHZhbHVlOiAwLFxuXHRcdHZhbHVlczogbnVsbCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGNoYW5nZTogbnVsbCxcblx0XHRzbGlkZTogbnVsbCxcblx0XHRzdGFydDogbnVsbCxcblx0XHRzdG9wOiBudWxsXG5cdH0sXG5cblx0Ly8gTnVtYmVyIG9mIHBhZ2VzIGluIGEgc2xpZGVyXG5cdC8vIChob3cgbWFueSB0aW1lcyBjYW4geW91IHBhZ2UgdXAvZG93biB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSByYW5nZSlcblx0bnVtUGFnZXM6IDUsXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fa2V5U2xpZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX21vdXNlU2xpZGluZyA9IGZhbHNlO1xuXHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdHRoaXMuX2hhbmRsZUluZGV4ID0gbnVsbDtcblx0XHR0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpO1xuXHRcdHRoaXMuX21vdXNlSW5pdCgpO1xuXHRcdHRoaXMuX2NhbGN1bGF0ZU5ld01heCgpO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktc2xpZGVyIHVpLXNsaWRlci1cIiArIHRoaXMub3JpZW50YXRpb24sXG5cdFx0XHRcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiICk7XG5cblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cblx0XHR0aGlzLl9hbmltYXRlT2ZmID0gZmFsc2U7XG5cdH0sXG5cblx0X3JlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX2NyZWF0ZVJhbmdlKCk7XG5cdFx0dGhpcy5fY3JlYXRlSGFuZGxlcygpO1xuXHRcdHRoaXMuX3NldHVwRXZlbnRzKCk7XG5cdFx0dGhpcy5fcmVmcmVzaFZhbHVlKCk7XG5cdH0sXG5cblx0X2NyZWF0ZUhhbmRsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpLCBoYW5kbGVDb3VudCxcblx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRleGlzdGluZ0hhbmRsZXMgPSB0aGlzLmVsZW1lbnQuZmluZCggXCIudWktc2xpZGVyLWhhbmRsZVwiICksXG5cdFx0XHRoYW5kbGUgPSBcIjxzcGFuIHRhYmluZGV4PScwJz48L3NwYW4+XCIsXG5cdFx0XHRoYW5kbGVzID0gW107XG5cblx0XHRoYW5kbGVDb3VudCA9ICggb3B0aW9ucy52YWx1ZXMgJiYgb3B0aW9ucy52YWx1ZXMubGVuZ3RoICkgfHwgMTtcblxuXHRcdGlmICggZXhpc3RpbmdIYW5kbGVzLmxlbmd0aCA+IGhhbmRsZUNvdW50ICkge1xuXHRcdFx0ZXhpc3RpbmdIYW5kbGVzLnNsaWNlKCBoYW5kbGVDb3VudCApLnJlbW92ZSgpO1xuXHRcdFx0ZXhpc3RpbmdIYW5kbGVzID0gZXhpc3RpbmdIYW5kbGVzLnNsaWNlKCAwLCBoYW5kbGVDb3VudCApO1xuXHRcdH1cblxuXHRcdGZvciAoIGkgPSBleGlzdGluZ0hhbmRsZXMubGVuZ3RoOyBpIDwgaGFuZGxlQ291bnQ7IGkrKyApIHtcblx0XHRcdGhhbmRsZXMucHVzaCggaGFuZGxlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVzID0gZXhpc3RpbmdIYW5kbGVzLmFkZCggJCggaGFuZGxlcy5qb2luKCBcIlwiICkgKS5hcHBlbmRUbyggdGhpcy5lbGVtZW50ICkgKTtcblxuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmhhbmRsZXMsIFwidWktc2xpZGVyLWhhbmRsZVwiLCBcInVpLXN0YXRlLWRlZmF1bHRcIiApO1xuXG5cdFx0dGhpcy5oYW5kbGUgPSB0aGlzLmhhbmRsZXMuZXEoIDAgKTtcblxuXHRcdHRoaXMuaGFuZGxlcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdCQoIHRoaXMgKVxuXHRcdFx0XHQuZGF0YSggXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIsIGkgKVxuXHRcdFx0XHQuYXR0ciggXCJ0YWJJbmRleFwiLCAwICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdF9jcmVhdGVSYW5nZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoIG9wdGlvbnMucmFuZ2UgKSB7XG5cdFx0XHRpZiAoIG9wdGlvbnMucmFuZ2UgPT09IHRydWUgKSB7XG5cdFx0XHRcdGlmICggIW9wdGlvbnMudmFsdWVzICkge1xuXHRcdFx0XHRcdG9wdGlvbnMudmFsdWVzID0gWyB0aGlzLl92YWx1ZU1pbigpLCB0aGlzLl92YWx1ZU1pbigpIF07XG5cdFx0XHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMudmFsdWVzLmxlbmd0aCAmJiBvcHRpb25zLnZhbHVlcy5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy52YWx1ZXMgPSBbIG9wdGlvbnMudmFsdWVzWyAwIF0sIG9wdGlvbnMudmFsdWVzWyAwIF0gXTtcblx0XHRcdFx0fSBlbHNlIGlmICggJC5pc0FycmF5KCBvcHRpb25zLnZhbHVlcyApICkge1xuXHRcdFx0XHRcdG9wdGlvbnMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXMuc2xpY2UoIDAgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoICF0aGlzLnJhbmdlIHx8ICF0aGlzLnJhbmdlLmxlbmd0aCApIHtcblx0XHRcdFx0dGhpcy5yYW5nZSA9ICQoIFwiPGRpdj5cIiApXG5cdFx0XHRcdFx0LmFwcGVuZFRvKCB0aGlzLmVsZW1lbnQgKTtcblxuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5yYW5nZSwgXCJ1aS1zbGlkZXItcmFuZ2VcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMucmFuZ2UsIFwidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4XCIgKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgcmFuZ2Ugc3dpdGNoaW5nIGZyb20gdHJ1ZSB0byBtaW4vbWF4XG5cdFx0XHRcdHRoaXMucmFuZ2UuY3NzKCB7XG5cdFx0XHRcdFx0XCJsZWZ0XCI6IFwiXCIsXG5cdFx0XHRcdFx0XCJib3R0b21cIjogXCJcIlxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9wdGlvbnMucmFuZ2UgPT09IFwibWluXCIgfHwgb3B0aW9ucy5yYW5nZSA9PT0gXCJtYXhcIiApIHtcblx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMucmFuZ2UsIFwidWktc2xpZGVyLXJhbmdlLVwiICsgb3B0aW9ucy5yYW5nZSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIHRoaXMucmFuZ2UgKSB7XG5cdFx0XHRcdHRoaXMucmFuZ2UucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJhbmdlID0gbnVsbDtcblx0XHR9XG5cdH0sXG5cblx0X3NldHVwRXZlbnRzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9vZmYoIHRoaXMuaGFuZGxlcyApO1xuXHRcdHRoaXMuX29uKCB0aGlzLmhhbmRsZXMsIHRoaXMuX2hhbmRsZUV2ZW50cyApO1xuXHRcdHRoaXMuX2hvdmVyYWJsZSggdGhpcy5oYW5kbGVzICk7XG5cdFx0dGhpcy5fZm9jdXNhYmxlKCB0aGlzLmhhbmRsZXMgKTtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5oYW5kbGVzLnJlbW92ZSgpO1xuXHRcdGlmICggdGhpcy5yYW5nZSApIHtcblx0XHRcdHRoaXMucmFuZ2UucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fbW91c2VEZXN0cm95KCk7XG5cdH0sXG5cblx0X21vdXNlQ2FwdHVyZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBwb3NpdGlvbiwgbm9ybVZhbHVlLCBkaXN0YW5jZSwgY2xvc2VzdEhhbmRsZSwgaW5kZXgsIGFsbG93ZWQsIG9mZnNldCwgbW91c2VPdmVySGFuZGxlLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKCBvLmRpc2FibGVkICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuZWxlbWVudFNpemUgPSB7XG5cdFx0XHR3aWR0aDogdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxcblx0XHRcdGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KClcblx0XHR9O1xuXHRcdHRoaXMuZWxlbWVudE9mZnNldCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcblxuXHRcdHBvc2l0aW9uID0geyB4OiBldmVudC5wYWdlWCwgeTogZXZlbnQucGFnZVkgfTtcblx0XHRub3JtVmFsdWUgPSB0aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoIHBvc2l0aW9uICk7XG5cdFx0ZGlzdGFuY2UgPSB0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKSArIDE7XG5cdFx0dGhpcy5oYW5kbGVzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHRoaXNEaXN0YW5jZSA9IE1hdGguYWJzKCBub3JtVmFsdWUgLSB0aGF0LnZhbHVlcyggaSApICk7XG5cdFx0XHRpZiAoICggZGlzdGFuY2UgPiB0aGlzRGlzdGFuY2UgKSB8fFxuXHRcdFx0XHQoIGRpc3RhbmNlID09PSB0aGlzRGlzdGFuY2UgJiZcblx0XHRcdFx0XHQoIGkgPT09IHRoYXQuX2xhc3RDaGFuZ2VkVmFsdWUgfHwgdGhhdC52YWx1ZXMoIGkgKSA9PT0gby5taW4gKSApICkge1xuXHRcdFx0XHRkaXN0YW5jZSA9IHRoaXNEaXN0YW5jZTtcblx0XHRcdFx0Y2xvc2VzdEhhbmRsZSA9ICQoIHRoaXMgKTtcblx0XHRcdFx0aW5kZXggPSBpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGFsbG93ZWQgPSB0aGlzLl9zdGFydCggZXZlbnQsIGluZGV4ICk7XG5cdFx0aWYgKCBhbGxvd2VkID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5fbW91c2VTbGlkaW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuX2hhbmRsZUluZGV4ID0gaW5kZXg7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggY2xvc2VzdEhhbmRsZSwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdGNsb3Nlc3RIYW5kbGUudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cblx0XHRvZmZzZXQgPSBjbG9zZXN0SGFuZGxlLm9mZnNldCgpO1xuXHRcdG1vdXNlT3ZlckhhbmRsZSA9ICEkKCBldmVudC50YXJnZXQgKS5wYXJlbnRzKCkuYWRkQmFjaygpLmlzKCBcIi51aS1zbGlkZXItaGFuZGxlXCIgKTtcblx0XHR0aGlzLl9jbGlja09mZnNldCA9IG1vdXNlT3ZlckhhbmRsZSA/IHsgbGVmdDogMCwgdG9wOiAwIH0gOiB7XG5cdFx0XHRsZWZ0OiBldmVudC5wYWdlWCAtIG9mZnNldC5sZWZ0IC0gKCBjbG9zZXN0SGFuZGxlLndpZHRoKCkgLyAyICksXG5cdFx0XHR0b3A6IGV2ZW50LnBhZ2VZIC0gb2Zmc2V0LnRvcCAtXG5cdFx0XHRcdCggY2xvc2VzdEhhbmRsZS5oZWlnaHQoKSAvIDIgKSAtXG5cdFx0XHRcdCggcGFyc2VJbnQoIGNsb3Nlc3RIYW5kbGUuY3NzKCBcImJvcmRlclRvcFdpZHRoXCIgKSwgMTAgKSB8fCAwICkgLVxuXHRcdFx0XHQoIHBhcnNlSW50KCBjbG9zZXN0SGFuZGxlLmNzcyggXCJib3JkZXJCb3R0b21XaWR0aFwiICksIDEwICkgfHwgMCApICtcblx0XHRcdFx0KCBwYXJzZUludCggY2xvc2VzdEhhbmRsZS5jc3MoIFwibWFyZ2luVG9wXCIgKSwgMTAgKSB8fCAwIClcblx0XHR9O1xuXG5cdFx0aWYgKCAhdGhpcy5oYW5kbGVzLmhhc0NsYXNzKCBcInVpLXN0YXRlLWhvdmVyXCIgKSApIHtcblx0XHRcdHRoaXMuX3NsaWRlKCBldmVudCwgaW5kZXgsIG5vcm1WYWx1ZSApO1xuXHRcdH1cblx0XHR0aGlzLl9hbmltYXRlT2ZmID0gdHJ1ZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHRfbW91c2VTdGFydDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X21vdXNlRHJhZzogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBwb3NpdGlvbiA9IHsgeDogZXZlbnQucGFnZVgsIHk6IGV2ZW50LnBhZ2VZIH0sXG5cdFx0XHRub3JtVmFsdWUgPSB0aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoIHBvc2l0aW9uICk7XG5cblx0XHR0aGlzLl9zbGlkZSggZXZlbnQsIHRoaXMuX2hhbmRsZUluZGV4LCBub3JtVmFsdWUgKTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfbW91c2VTdG9wOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIHRoaXMuaGFuZGxlcywgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdHRoaXMuX21vdXNlU2xpZGluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5fc3RvcCggZXZlbnQsIHRoaXMuX2hhbmRsZUluZGV4ICk7XG5cdFx0dGhpcy5fY2hhbmdlKCBldmVudCwgdGhpcy5faGFuZGxlSW5kZXggKTtcblxuXHRcdHRoaXMuX2hhbmRsZUluZGV4ID0gbnVsbDtcblx0XHR0aGlzLl9jbGlja09mZnNldCA9IG51bGw7XG5cdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdF9kZXRlY3RPcmllbnRhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vcmllbnRhdGlvbiA9ICggdGhpcy5vcHRpb25zLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgKSA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiO1xuXHR9LFxuXG5cdF9ub3JtVmFsdWVGcm9tTW91c2U6IGZ1bmN0aW9uKCBwb3NpdGlvbiApIHtcblx0XHR2YXIgcGl4ZWxUb3RhbCxcblx0XHRcdHBpeGVsTW91c2UsXG5cdFx0XHRwZXJjZW50TW91c2UsXG5cdFx0XHR2YWx1ZVRvdGFsLFxuXHRcdFx0dmFsdWVNb3VzZTtcblxuXHRcdGlmICggdGhpcy5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgKSB7XG5cdFx0XHRwaXhlbFRvdGFsID0gdGhpcy5lbGVtZW50U2l6ZS53aWR0aDtcblx0XHRcdHBpeGVsTW91c2UgPSBwb3NpdGlvbi54IC0gdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQgLVxuXHRcdFx0XHQoIHRoaXMuX2NsaWNrT2Zmc2V0ID8gdGhpcy5fY2xpY2tPZmZzZXQubGVmdCA6IDAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGl4ZWxUb3RhbCA9IHRoaXMuZWxlbWVudFNpemUuaGVpZ2h0O1xuXHRcdFx0cGl4ZWxNb3VzZSA9IHBvc2l0aW9uLnkgLSB0aGlzLmVsZW1lbnRPZmZzZXQudG9wIC1cblx0XHRcdFx0KCB0aGlzLl9jbGlja09mZnNldCA/IHRoaXMuX2NsaWNrT2Zmc2V0LnRvcCA6IDAgKTtcblx0XHR9XG5cblx0XHRwZXJjZW50TW91c2UgPSAoIHBpeGVsTW91c2UgLyBwaXhlbFRvdGFsICk7XG5cdFx0aWYgKCBwZXJjZW50TW91c2UgPiAxICkge1xuXHRcdFx0cGVyY2VudE1vdXNlID0gMTtcblx0XHR9XG5cdFx0aWYgKCBwZXJjZW50TW91c2UgPCAwICkge1xuXHRcdFx0cGVyY2VudE1vdXNlID0gMDtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgKSB7XG5cdFx0XHRwZXJjZW50TW91c2UgPSAxIC0gcGVyY2VudE1vdXNlO1xuXHRcdH1cblxuXHRcdHZhbHVlVG90YWwgPSB0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKTtcblx0XHR2YWx1ZU1vdXNlID0gdGhpcy5fdmFsdWVNaW4oKSArIHBlcmNlbnRNb3VzZSAqIHZhbHVlVG90YWw7XG5cblx0XHRyZXR1cm4gdGhpcy5fdHJpbUFsaWduVmFsdWUoIHZhbHVlTW91c2UgKTtcblx0fSxcblxuXHRfdWlIYXNoOiBmdW5jdGlvbiggaW5kZXgsIHZhbHVlLCB2YWx1ZXMgKSB7XG5cdFx0dmFyIHVpSGFzaCA9IHtcblx0XHRcdGhhbmRsZTogdGhpcy5oYW5kbGVzWyBpbmRleCBdLFxuXHRcdFx0aGFuZGxlSW5kZXg6IGluZGV4LFxuXHRcdFx0dmFsdWU6IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHRoaXMudmFsdWUoKVxuXHRcdH07XG5cblx0XHRpZiAoIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkgKSB7XG5cdFx0XHR1aUhhc2gudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB0aGlzLnZhbHVlcyggaW5kZXggKTtcblx0XHRcdHVpSGFzaC52YWx1ZXMgPSB2YWx1ZXMgfHwgdGhpcy52YWx1ZXMoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdWlIYXNoO1xuXHR9LFxuXG5cdF9oYXNNdWx0aXBsZVZhbHVlczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg7XG5cdH0sXG5cblx0X3N0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIGluZGV4ICkge1xuXHRcdHJldHVybiB0aGlzLl90cmlnZ2VyKCBcInN0YXJ0XCIsIGV2ZW50LCB0aGlzLl91aUhhc2goIGluZGV4ICkgKTtcblx0fSxcblxuXHRfc2xpZGU6IGZ1bmN0aW9uKCBldmVudCwgaW5kZXgsIG5ld1ZhbCApIHtcblx0XHR2YXIgYWxsb3dlZCwgb3RoZXJWYWwsXG5cdFx0XHRjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCksXG5cdFx0XHRuZXdWYWx1ZXMgPSB0aGlzLnZhbHVlcygpO1xuXG5cdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0b3RoZXJWYWwgPSB0aGlzLnZhbHVlcyggaW5kZXggPyAwIDogMSApO1xuXHRcdFx0Y3VycmVudFZhbHVlID0gdGhpcy52YWx1ZXMoIGluZGV4ICk7XG5cblx0XHRcdGlmICggdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggPT09IDIgJiYgdGhpcy5vcHRpb25zLnJhbmdlID09PSB0cnVlICkge1xuXHRcdFx0XHRuZXdWYWwgPSAgaW5kZXggPT09IDAgPyBNYXRoLm1pbiggb3RoZXJWYWwsIG5ld1ZhbCApIDogTWF0aC5tYXgoIG90aGVyVmFsLCBuZXdWYWwgKTtcblx0XHRcdH1cblxuXHRcdFx0bmV3VmFsdWVzWyBpbmRleCBdID0gbmV3VmFsO1xuXHRcdH1cblxuXHRcdGlmICggbmV3VmFsID09PSBjdXJyZW50VmFsdWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YWxsb3dlZCA9IHRoaXMuX3RyaWdnZXIoIFwic2xpZGVcIiwgZXZlbnQsIHRoaXMuX3VpSGFzaCggaW5kZXgsIG5ld1ZhbCwgbmV3VmFsdWVzICkgKTtcblxuXHRcdC8vIEEgc2xpZGUgY2FuIGJlIGNhbmNlbGVkIGJ5IHJldHVybmluZyBmYWxzZSBmcm9tIHRoZSBzbGlkZSBjYWxsYmFja1xuXHRcdGlmICggYWxsb3dlZCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0dGhpcy52YWx1ZXMoIGluZGV4LCBuZXdWYWwgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52YWx1ZSggbmV3VmFsICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zdG9wOiBmdW5jdGlvbiggZXZlbnQsIGluZGV4ICkge1xuXHRcdHRoaXMuX3RyaWdnZXIoIFwic3RvcFwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCBpbmRleCApICk7XG5cdH0sXG5cblx0X2NoYW5nZTogZnVuY3Rpb24oIGV2ZW50LCBpbmRleCApIHtcblx0XHRpZiAoICF0aGlzLl9rZXlTbGlkaW5nICYmICF0aGlzLl9tb3VzZVNsaWRpbmcgKSB7XG5cblx0XHRcdC8vc3RvcmUgdGhlIGxhc3QgY2hhbmdlZCB2YWx1ZSBpbmRleCBmb3IgcmVmZXJlbmNlIHdoZW4gaGFuZGxlcyBvdmVybGFwXG5cdFx0XHR0aGlzLl9sYXN0Q2hhbmdlZFZhbHVlID0gaW5kZXg7XG5cdFx0XHR0aGlzLl90cmlnZ2VyKCBcImNoYW5nZVwiLCBldmVudCwgdGhpcy5fdWlIYXNoKCBpbmRleCApICk7XG5cdFx0fVxuXHR9LFxuXG5cdHZhbHVlOiBmdW5jdGlvbiggbmV3VmFsdWUgKSB7XG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fdHJpbUFsaWduVmFsdWUoIG5ld1ZhbHVlICk7XG5cdFx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0XHRcdHRoaXMuX2NoYW5nZSggbnVsbCwgMCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl92YWx1ZSgpO1xuXHR9LFxuXG5cdHZhbHVlczogZnVuY3Rpb24oIGluZGV4LCBuZXdWYWx1ZSApIHtcblx0XHR2YXIgdmFscyxcblx0XHRcdG5ld1ZhbHVlcyxcblx0XHRcdGk7XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPiAxICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnZhbHVlc1sgaW5kZXggXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKCBuZXdWYWx1ZSApO1xuXHRcdFx0dGhpcy5fcmVmcmVzaFZhbHVlKCk7XG5cdFx0XHR0aGlzLl9jaGFuZ2UoIG51bGwsIGluZGV4ICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCAkLmlzQXJyYXkoIGFyZ3VtZW50c1sgMCBdICkgKSB7XG5cdFx0XHRcdHZhbHMgPSB0aGlzLm9wdGlvbnMudmFsdWVzO1xuXHRcdFx0XHRuZXdWYWx1ZXMgPSBhcmd1bWVudHNbIDAgXTtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSArPSAxICkge1xuXHRcdFx0XHRcdHZhbHNbIGkgXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKCBuZXdWYWx1ZXNbIGkgXSApO1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZSggbnVsbCwgaSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLl92YWx1ZXMoIGluZGV4ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudmFsdWUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWVzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLFxuXHRcdFx0dmFsc0xlbmd0aCA9IDA7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJyYW5nZVwiICYmIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gdHJ1ZSApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IFwibWluXCIgKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX3ZhbHVlcyggMCApO1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbDtcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSBcIm1heFwiICkge1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl92YWx1ZXMoIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoIC0gMSApO1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICQuaXNBcnJheSggdGhpcy5vcHRpb25zLnZhbHVlcyApICkge1xuXHRcdFx0dmFsc0xlbmd0aCA9IHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRzd2l0Y2ggKCBrZXkgKSB7XG5cdFx0XHRjYXNlIFwib3JpZW50YXRpb25cIjpcblx0XHRcdFx0dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKTtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIFwidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsXCIgKVxuXHRcdFx0XHRcdC5fYWRkQ2xhc3MoIFwidWktc2xpZGVyLVwiICsgdGhpcy5vcmllbnRhdGlvbiApO1xuXHRcdFx0XHR0aGlzLl9yZWZyZXNoVmFsdWUoKTtcblx0XHRcdFx0aWYgKCB0aGlzLm9wdGlvbnMucmFuZ2UgKSB7XG5cdFx0XHRcdFx0dGhpcy5fcmVmcmVzaFJhbmdlKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzZXQgcG9zaXRpb25pbmcgZnJvbSBwcmV2aW91cyBvcmllbnRhdGlvblxuXHRcdFx0XHR0aGlzLmhhbmRsZXMuY3NzKCB2YWx1ZSA9PT0gXCJob3Jpem9udGFsXCIgPyBcImJvdHRvbVwiIDogXCJsZWZ0XCIsIFwiXCIgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidmFsdWVcIjpcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2UoIG51bGwsIDAgKTtcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ2YWx1ZXNcIjpcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2hWYWx1ZSgpO1xuXG5cdFx0XHRcdC8vIFN0YXJ0IGZyb20gdGhlIGxhc3QgaGFuZGxlIHRvIHByZXZlbnQgdW5yZWFjaGFibGUgaGFuZGxlcyAoIzkwNDYpXG5cdFx0XHRcdGZvciAoIGkgPSB2YWxzTGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG5cdFx0XHRcdFx0dGhpcy5fY2hhbmdlKCBudWxsLCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzdGVwXCI6XG5cdFx0XHRjYXNlIFwibWluXCI6XG5cdFx0XHRjYXNlIFwibWF4XCI6XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKTtcblx0XHRcdFx0dGhpcy5fcmVmcmVzaFZhbHVlKCk7XG5cdFx0XHRcdHRoaXMuX2FuaW1hdGVPZmYgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicmFuZ2VcIjpcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IHRydWU7XG5cdFx0XHRcdHRoaXMuX3JlZnJlc2goKTtcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZU9mZiA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy5fc3VwZXIoIHZhbHVlICk7XG5cblx0XHR0aGlzLl90b2dnbGVDbGFzcyggbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdH0sXG5cblx0Ly9pbnRlcm5hbCB2YWx1ZSBnZXR0ZXJcblx0Ly8gX3ZhbHVlKCkgcmV0dXJucyB2YWx1ZSB0cmltbWVkIGJ5IG1pbiBhbmQgbWF4LCBhbGlnbmVkIGJ5IHN0ZXBcblx0X3ZhbHVlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmFsID0gdGhpcy5vcHRpb25zLnZhbHVlO1xuXHRcdHZhbCA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKCB2YWwgKTtcblxuXHRcdHJldHVybiB2YWw7XG5cdH0sXG5cblx0Ly9pbnRlcm5hbCB2YWx1ZXMgZ2V0dGVyXG5cdC8vIF92YWx1ZXMoKSByZXR1cm5zIGFycmF5IG9mIHZhbHVlcyB0cmltbWVkIGJ5IG1pbiBhbmQgbWF4LCBhbGlnbmVkIGJ5IHN0ZXBcblx0Ly8gX3ZhbHVlcyggaW5kZXggKSByZXR1cm5zIHNpbmdsZSB2YWx1ZSB0cmltbWVkIGJ5IG1pbiBhbmQgbWF4LCBhbGlnbmVkIGJ5IHN0ZXBcblx0X3ZhbHVlczogZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdHZhciB2YWwsXG5cdFx0XHR2YWxzLFxuXHRcdFx0aTtcblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHZhbCA9IHRoaXMub3B0aW9ucy52YWx1ZXNbIGluZGV4IF07XG5cdFx0XHR2YWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggdmFsICk7XG5cblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fSBlbHNlIGlmICggdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSApIHtcblxuXHRcdFx0Ly8gLnNsaWNlKCkgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGFycmF5XG5cdFx0XHQvLyB0aGlzIGNvcHkgZ2V0cyB0cmltbWVkIGJ5IG1pbiBhbmQgbWF4IGFuZCB0aGVuIHJldHVybmVkXG5cdFx0XHR2YWxzID0gdGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpO1xuXHRcdFx0Zm9yICggaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSArPSAxICkge1xuXHRcdFx0XHR2YWxzWyBpIF0gPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggdmFsc1sgaSBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFJldHVybnMgdGhlIHN0ZXAtYWxpZ25lZCB2YWx1ZSB0aGF0IHZhbCBpcyBjbG9zZXN0IHRvLCBiZXR3ZWVuIChpbmNsdXNpdmUpIG1pbiBhbmQgbWF4XG5cdF90cmltQWxpZ25WYWx1ZTogZnVuY3Rpb24oIHZhbCApIHtcblx0XHRpZiAoIHZhbCA8PSB0aGlzLl92YWx1ZU1pbigpICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7XG5cdFx0fVxuXHRcdGlmICggdmFsID49IHRoaXMuX3ZhbHVlTWF4KCkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTtcblx0XHR9XG5cdFx0dmFyIHN0ZXAgPSAoIHRoaXMub3B0aW9ucy5zdGVwID4gMCApID8gdGhpcy5vcHRpb25zLnN0ZXAgOiAxLFxuXHRcdFx0dmFsTW9kU3RlcCA9ICggdmFsIC0gdGhpcy5fdmFsdWVNaW4oKSApICUgc3RlcCxcblx0XHRcdGFsaWduVmFsdWUgPSB2YWwgLSB2YWxNb2RTdGVwO1xuXG5cdFx0aWYgKCBNYXRoLmFicyggdmFsTW9kU3RlcCApICogMiA+PSBzdGVwICkge1xuXHRcdFx0YWxpZ25WYWx1ZSArPSAoIHZhbE1vZFN0ZXAgPiAwICkgPyBzdGVwIDogKCAtc3RlcCApO1xuXHRcdH1cblxuXHRcdC8vIFNpbmNlIEphdmFTY3JpcHQgaGFzIHByb2JsZW1zIHdpdGggbGFyZ2UgZmxvYXRzLCByb3VuZFxuXHRcdC8vIHRoZSBmaW5hbCB2YWx1ZSB0byA1IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCAoc2VlICM0MTI0KVxuXHRcdHJldHVybiBwYXJzZUZsb2F0KCBhbGlnblZhbHVlLnRvRml4ZWQoIDUgKSApO1xuXHR9LFxuXG5cdF9jYWxjdWxhdGVOZXdNYXg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtYXggPSB0aGlzLm9wdGlvbnMubWF4LFxuXHRcdFx0bWluID0gdGhpcy5fdmFsdWVNaW4oKSxcblx0XHRcdHN0ZXAgPSB0aGlzLm9wdGlvbnMuc3RlcCxcblx0XHRcdGFib3ZlTWluID0gTWF0aC5yb3VuZCggKCBtYXggLSBtaW4gKSAvIHN0ZXAgKSAqIHN0ZXA7XG5cdFx0bWF4ID0gYWJvdmVNaW4gKyBtaW47XG5cdFx0aWYgKCBtYXggPiB0aGlzLm9wdGlvbnMubWF4ICkge1xuXG5cdFx0XHQvL0lmIG1heCBpcyBub3QgZGl2aXNpYmxlIGJ5IHN0ZXAsIHJvdW5kaW5nIG9mZiBtYXkgaW5jcmVhc2UgaXRzIHZhbHVlXG5cdFx0XHRtYXggLT0gc3RlcDtcblx0XHR9XG5cdFx0dGhpcy5tYXggPSBwYXJzZUZsb2F0KCBtYXgudG9GaXhlZCggdGhpcy5fcHJlY2lzaW9uKCkgKSApO1xuXHR9LFxuXG5cdF9wcmVjaXNpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwcmVjaXNpb24gPSB0aGlzLl9wcmVjaXNpb25PZiggdGhpcy5vcHRpb25zLnN0ZXAgKTtcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5taW4gIT09IG51bGwgKSB7XG5cdFx0XHRwcmVjaXNpb24gPSBNYXRoLm1heCggcHJlY2lzaW9uLCB0aGlzLl9wcmVjaXNpb25PZiggdGhpcy5vcHRpb25zLm1pbiApICk7XG5cdFx0fVxuXHRcdHJldHVybiBwcmVjaXNpb247XG5cdH0sXG5cblx0X3ByZWNpc2lvbk9mOiBmdW5jdGlvbiggbnVtICkge1xuXHRcdHZhciBzdHIgPSBudW0udG9TdHJpbmcoKSxcblx0XHRcdGRlY2ltYWwgPSBzdHIuaW5kZXhPZiggXCIuXCIgKTtcblx0XHRyZXR1cm4gZGVjaW1hbCA9PT0gLTEgPyAwIDogc3RyLmxlbmd0aCAtIGRlY2ltYWwgLSAxO1xuXHR9LFxuXG5cdF92YWx1ZU1pbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5taW47XG5cdH0sXG5cblx0X3ZhbHVlTWF4OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXg7XG5cdH0sXG5cblx0X3JlZnJlc2hSYW5nZTogZnVuY3Rpb24oIG9yaWVudGF0aW9uICkge1xuXHRcdGlmICggb3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiApIHtcblx0XHRcdHRoaXMucmFuZ2UuY3NzKCB7IFwid2lkdGhcIjogXCJcIiwgXCJsZWZ0XCI6IFwiXCIgfSApO1xuXHRcdH1cblx0XHRpZiAoIG9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdHRoaXMucmFuZ2UuY3NzKCB7IFwiaGVpZ2h0XCI6IFwiXCIsIFwiYm90dG9tXCI6IFwiXCIgfSApO1xuXHRcdH1cblx0fSxcblxuXHRfcmVmcmVzaFZhbHVlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGFzdFZhbFBlcmNlbnQsIHZhbFBlcmNlbnQsIHZhbHVlLCB2YWx1ZU1pbiwgdmFsdWVNYXgsXG5cdFx0XHRvUmFuZ2UgPSB0aGlzLm9wdGlvbnMucmFuZ2UsXG5cdFx0XHRvID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0dGhhdCA9IHRoaXMsXG5cdFx0XHRhbmltYXRlID0gKCAhdGhpcy5fYW5pbWF0ZU9mZiApID8gby5hbmltYXRlIDogZmFsc2UsXG5cdFx0XHRfc2V0ID0ge307XG5cblx0XHRpZiAoIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkgKSB7XG5cdFx0XHR0aGlzLmhhbmRsZXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHZhbFBlcmNlbnQgPSAoIHRoYXQudmFsdWVzKCBpICkgLSB0aGF0Ll92YWx1ZU1pbigpICkgLyAoIHRoYXQuX3ZhbHVlTWF4KCkgLVxuXHRcdFx0XHRcdHRoYXQuX3ZhbHVlTWluKCkgKSAqIDEwMDtcblx0XHRcdFx0X3NldFsgdGhhdC5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgPyBcImxlZnRcIiA6IFwiYm90dG9tXCIgXSA9IHZhbFBlcmNlbnQgKyBcIiVcIjtcblx0XHRcdFx0JCggdGhpcyApLnN0b3AoIDEsIDEgKVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCBfc2V0LCBvLmFuaW1hdGUgKTtcblx0XHRcdFx0aWYgKCB0aGF0Lm9wdGlvbnMucmFuZ2UgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGF0Lm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIiApIHtcblx0XHRcdFx0XHRcdGlmICggaSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0dGhhdC5yYW5nZS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IHZhbFBlcmNlbnQgKyBcIiVcIlxuXHRcdFx0XHRcdFx0XHR9LCBvLmFuaW1hdGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggaSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0dGhhdC5yYW5nZVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCB7XG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg6ICggdmFsUGVyY2VudCAtIGxhc3RWYWxQZXJjZW50ICkgKyBcIiVcIlxuXHRcdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdFx0cXVldWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiBvLmFuaW1hdGVcblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIGkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQucmFuZ2Uuc3RvcCggMSwgMSApWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIHtcblx0XHRcdFx0XHRcdFx0XHRib3R0b206ICggdmFsUGVyY2VudCApICsgXCIlXCJcblx0XHRcdFx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIGkgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQucmFuZ2VbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdFx0XHRcdGhlaWdodDogKCB2YWxQZXJjZW50IC0gbGFzdFZhbFBlcmNlbnQgKSArIFwiJVwiXG5cdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IG8uYW5pbWF0ZVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGxhc3RWYWxQZXJjZW50ID0gdmFsUGVyY2VudDtcblx0XHRcdH0gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSB0aGlzLnZhbHVlKCk7XG5cdFx0XHR2YWx1ZU1pbiA9IHRoaXMuX3ZhbHVlTWluKCk7XG5cdFx0XHR2YWx1ZU1heCA9IHRoaXMuX3ZhbHVlTWF4KCk7XG5cdFx0XHR2YWxQZXJjZW50ID0gKCB2YWx1ZU1heCAhPT0gdmFsdWVNaW4gKSA/XG5cdFx0XHRcdFx0KCB2YWx1ZSAtIHZhbHVlTWluICkgLyAoIHZhbHVlTWF4IC0gdmFsdWVNaW4gKSAqIDEwMCA6XG5cdFx0XHRcdFx0MDtcblx0XHRcdF9zZXRbIHRoaXMub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiID8gXCJsZWZ0XCIgOiBcImJvdHRvbVwiIF0gPSB2YWxQZXJjZW50ICsgXCIlXCI7XG5cdFx0XHR0aGlzLmhhbmRsZS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSggX3NldCwgby5hbmltYXRlICk7XG5cblx0XHRcdGlmICggb1JhbmdlID09PSBcIm1pblwiICYmIHRoaXMub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiICkge1xuXHRcdFx0XHR0aGlzLnJhbmdlLnN0b3AoIDEsIDEgKVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCB7XG5cdFx0XHRcdFx0d2lkdGg6IHZhbFBlcmNlbnQgKyBcIiVcIlxuXHRcdFx0XHR9LCBvLmFuaW1hdGUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggb1JhbmdlID09PSBcIm1heFwiICYmIHRoaXMub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiICkge1xuXHRcdFx0XHR0aGlzLnJhbmdlLnN0b3AoIDEsIDEgKVsgYW5pbWF0ZSA/IFwiYW5pbWF0ZVwiIDogXCJjc3NcIiBdKCB7XG5cdFx0XHRcdFx0d2lkdGg6ICggMTAwIC0gdmFsUGVyY2VudCApICsgXCIlXCJcblx0XHRcdFx0fSwgby5hbmltYXRlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9SYW5nZSA9PT0gXCJtaW5cIiAmJiB0aGlzLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIgKSB7XG5cdFx0XHRcdHRoaXMucmFuZ2Uuc3RvcCggMSwgMSApWyBhbmltYXRlID8gXCJhbmltYXRlXCIgOiBcImNzc1wiIF0oIHtcblx0XHRcdFx0XHRoZWlnaHQ6IHZhbFBlcmNlbnQgKyBcIiVcIlxuXHRcdFx0XHR9LCBvLmFuaW1hdGUgKTtcblx0XHRcdH1cblx0XHRcdGlmICggb1JhbmdlID09PSBcIm1heFwiICYmIHRoaXMub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIiApIHtcblx0XHRcdFx0dGhpcy5yYW5nZS5zdG9wKCAxLCAxIClbIGFuaW1hdGUgPyBcImFuaW1hdGVcIiA6IFwiY3NzXCIgXSgge1xuXHRcdFx0XHRcdGhlaWdodDogKCAxMDAgLSB2YWxQZXJjZW50ICkgKyBcIiVcIlxuXHRcdFx0XHR9LCBvLmFuaW1hdGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZUV2ZW50czoge1xuXHRcdGtleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBhbGxvd2VkLCBjdXJWYWwsIG5ld1ZhbCwgc3RlcCxcblx0XHRcdFx0aW5kZXggPSAkKCBldmVudC50YXJnZXQgKS5kYXRhKCBcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIiApO1xuXG5cdFx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5IT01FOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5FTkQ6XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfVVA6XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuVVA6XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlJJR0hUOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5ET1dOOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5MRUZUOlxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0aWYgKCAhdGhpcy5fa2V5U2xpZGluZyApIHtcblx0XHRcdFx0XHRcdHRoaXMuX2tleVNsaWRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5fYWRkQ2xhc3MoICQoIGV2ZW50LnRhcmdldCApLCBudWxsLCBcInVpLXN0YXRlLWFjdGl2ZVwiICk7XG5cdFx0XHRcdFx0XHRhbGxvd2VkID0gdGhpcy5fc3RhcnQoIGV2ZW50LCBpbmRleCApO1xuXHRcdFx0XHRcdFx0aWYgKCBhbGxvd2VkID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0c3RlcCA9IHRoaXMub3B0aW9ucy5zdGVwO1xuXHRcdFx0aWYgKCB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpICkge1xuXHRcdFx0XHRjdXJWYWwgPSBuZXdWYWwgPSB0aGlzLnZhbHVlcyggaW5kZXggKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1clZhbCA9IG5ld1ZhbCA9IHRoaXMudmFsdWUoKTtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuSE9NRTpcblx0XHRcdFx0XHRuZXdWYWwgPSB0aGlzLl92YWx1ZU1pbigpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5FTkQ6XG5cdFx0XHRcdFx0bmV3VmFsID0gdGhpcy5fdmFsdWVNYXgoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuUEFHRV9VUDpcblx0XHRcdFx0XHRuZXdWYWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZShcblx0XHRcdFx0XHRcdGN1clZhbCArICggKCB0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKSApIC8gdGhpcy5udW1QYWdlcyApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuUEFHRV9ET1dOOlxuXHRcdFx0XHRcdG5ld1ZhbCA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKFxuXHRcdFx0XHRcdFx0Y3VyVmFsIC0gKCAoIHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpICkgLyB0aGlzLm51bVBhZ2VzICkgKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAkLnVpLmtleUNvZGUuVVA6XG5cdFx0XHRcdGNhc2UgJC51aS5rZXlDb2RlLlJJR0hUOlxuXHRcdFx0XHRcdGlmICggY3VyVmFsID09PSB0aGlzLl92YWx1ZU1heCgpICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdWYWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggY3VyVmFsICsgc3RlcCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5ET1dOOlxuXHRcdFx0XHRjYXNlICQudWkua2V5Q29kZS5MRUZUOlxuXHRcdFx0XHRcdGlmICggY3VyVmFsID09PSB0aGlzLl92YWx1ZU1pbigpICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdWYWwgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSggY3VyVmFsIC0gc3RlcCApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9zbGlkZSggZXZlbnQsIGluZGV4LCBuZXdWYWwgKTtcblx0XHR9LFxuXHRcdGtleXVwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgaW5kZXggPSAkKCBldmVudC50YXJnZXQgKS5kYXRhKCBcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIiApO1xuXG5cdFx0XHRpZiAoIHRoaXMuX2tleVNsaWRpbmcgKSB7XG5cdFx0XHRcdHRoaXMuX2tleVNsaWRpbmcgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5fc3RvcCggZXZlbnQsIGluZGV4ICk7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZSggZXZlbnQsIGluZGV4ICk7XG5cdFx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCAkKCBldmVudC50YXJnZXQgKSwgbnVsbCwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFNwaW5uZXIgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNwaW5uZXJcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBidXR0b25zIHRvIGVhc2lseSBpbnB1dCBudW1iZXJzIHZpYSB0aGUga2V5Ym9hcmQgb3IgbW91c2UuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc3Bpbm5lci9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9zcGlubmVyL1xuLy8+PmNzcy5zdHJ1Y3R1cmU6IC4uLy4uL3RoZW1lcy9iYXNlL2NvcmUuY3NzXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2Uvc3Bpbm5lci5jc3Ncbi8vPj5jc3MudGhlbWU6IC4uLy4uL3RoZW1lcy9iYXNlL3RoZW1lLmNzc1xuXG5cblxuZnVuY3Rpb24gc3Bpbm5lck1vZGlmZXIoIGZuICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZXZpb3VzID0gdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cdFx0aWYgKCBwcmV2aW91cyAhPT0gdGhpcy5lbGVtZW50LnZhbCgpICkge1xuXHRcdFx0dGhpcy5fdHJpZ2dlciggXCJjaGFuZ2VcIiApO1xuXHRcdH1cblx0fTtcbn1cblxuJC53aWRnZXQoIFwidWkuc3Bpbm5lclwiLCB7XG5cdHZlcnNpb246IFwiMS4xMi4xXCIsXG5cdGRlZmF1bHRFbGVtZW50OiBcIjxpbnB1dD5cIixcblx0d2lkZ2V0RXZlbnRQcmVmaXg6IFwic3BpblwiLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2xhc3Nlczoge1xuXHRcdFx0XCJ1aS1zcGlubmVyXCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS1zcGlubmVyLWRvd25cIjogXCJ1aS1jb3JuZXItYnJcIixcblx0XHRcdFwidWktc3Bpbm5lci11cFwiOiBcInVpLWNvcm5lci10clwiXG5cdFx0fSxcblx0XHRjdWx0dXJlOiBudWxsLFxuXHRcdGljb25zOiB7XG5cdFx0XHRkb3duOiBcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsXG5cdFx0XHR1cDogXCJ1aS1pY29uLXRyaWFuZ2xlLTEtblwiXG5cdFx0fSxcblx0XHRpbmNyZW1lbnRhbDogdHJ1ZSxcblx0XHRtYXg6IG51bGwsXG5cdFx0bWluOiBudWxsLFxuXHRcdG51bWJlckZvcm1hdDogbnVsbCxcblx0XHRwYWdlOiAxMCxcblx0XHRzdGVwOiAxLFxuXG5cdFx0Y2hhbmdlOiBudWxsLFxuXHRcdHNwaW46IG51bGwsXG5cdFx0c3RhcnQ6IG51bGwsXG5cdFx0c3RvcDogbnVsbFxuXHR9LFxuXG5cdF9jcmVhdGU6IGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gaGFuZGxlIHN0cmluZyB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHBhcnNlZFxuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJtYXhcIiwgdGhpcy5vcHRpb25zLm1heCApO1xuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJtaW5cIiwgdGhpcy5vcHRpb25zLm1pbiApO1xuXHRcdHRoaXMuX3NldE9wdGlvbiggXCJzdGVwXCIsIHRoaXMub3B0aW9ucy5zdGVwICk7XG5cblx0XHQvLyBPbmx5IGZvcm1hdCBpZiB0aGVyZSBpcyBhIHZhbHVlLCBwcmV2ZW50cyB0aGUgZmllbGQgZnJvbSBiZWluZyBtYXJrZWRcblx0XHQvLyBhcyBpbnZhbGlkIGluIEZpcmVmb3gsIHNlZSAjOTU3My5cblx0XHRpZiAoIHRoaXMudmFsdWUoKSAhPT0gXCJcIiApIHtcblxuXHRcdFx0Ly8gRm9ybWF0IHRoZSB2YWx1ZSwgYnV0IGRvbid0IGNvbnN0cmFpbi5cblx0XHRcdHRoaXMuX3ZhbHVlKCB0aGlzLmVsZW1lbnQudmFsKCksIHRydWUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9kcmF3KCk7XG5cdFx0dGhpcy5fb24oIHRoaXMuX2V2ZW50cyApO1xuXHRcdHRoaXMuX3JlZnJlc2goKTtcblxuXHRcdC8vIFR1cm5pbmcgb2ZmIGF1dG9jb21wbGV0ZSBwcmV2ZW50cyB0aGUgYnJvd3NlciBmcm9tIHJlbWVtYmVyaW5nIHRoZVxuXHRcdC8vIHZhbHVlIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIGhpc3RvcnksIHNvIHdlIHJlLWVuYWJsZSBhdXRvY29tcGxldGVcblx0XHQvLyBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQuICM3NzkwXG5cdFx0dGhpcy5fb24oIHRoaXMud2luZG93LCB7XG5cdFx0XHRiZWZvcmV1bmxvYWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQXR0ciggXCJhdXRvY29tcGxldGVcIiApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRfZ2V0Q3JlYXRlT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLl9zdXBlcigpO1xuXHRcdHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuXG5cdFx0JC5lYWNoKCBbIFwibWluXCIsIFwibWF4XCIsIFwic3RlcFwiIF0sIGZ1bmN0aW9uKCBpLCBvcHRpb24gKSB7XG5cdFx0XHR2YXIgdmFsdWUgPSBlbGVtZW50LmF0dHIoIG9wdGlvbiApO1xuXHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9uc1sgb3B0aW9uIF0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucztcblx0fSxcblxuXHRfZXZlbnRzOiB7XG5cdFx0a2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0aWYgKCB0aGlzLl9zdGFydCggZXZlbnQgKSAmJiB0aGlzLl9rZXlkb3duKCBldmVudCApICkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0a2V5dXA6IFwiX3N0b3BcIixcblx0XHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnByZXZpb3VzID0gdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdH0sXG5cdFx0Ymx1cjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0aWYgKCB0aGlzLmNhbmNlbEJsdXIgKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fc3RvcCgpO1xuXHRcdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHRcdFx0aWYgKCB0aGlzLnByZXZpb3VzICE9PSB0aGlzLmVsZW1lbnQudmFsKCkgKSB7XG5cdFx0XHRcdHRoaXMuX3RyaWdnZXIoIFwiY2hhbmdlXCIsIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtb3VzZXdoZWVsOiBmdW5jdGlvbiggZXZlbnQsIGRlbHRhICkge1xuXHRcdFx0aWYgKCAhZGVsdGEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmICggIXRoaXMuc3Bpbm5pbmcgJiYgIXRoaXMuX3N0YXJ0KCBldmVudCApICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3NwaW4oICggZGVsdGEgPiAwID8gMSA6IC0xICkgKiB0aGlzLm9wdGlvbnMuc3RlcCwgZXZlbnQgKTtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5tb3VzZXdoZWVsVGltZXIgKTtcblx0XHRcdHRoaXMubW91c2V3aGVlbFRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMuc3Bpbm5pbmcgKSB7XG5cdFx0XHRcdFx0dGhpcy5fc3RvcCggZXZlbnQgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwICk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH0sXG5cdFx0XCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uXCI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBwcmV2aW91cztcblxuXHRcdFx0Ly8gV2UgbmV2ZXIgd2FudCB0aGUgYnV0dG9ucyB0byBoYXZlIGZvY3VzOyB3aGVuZXZlciB0aGUgdXNlciBpc1xuXHRcdFx0Ly8gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3Bpbm5lciwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgaW5wdXQuXG5cdFx0XHQvLyBJZiB0aGUgaW5wdXQgaXMgZm9jdXNlZCB0aGVuIHRoaXMucHJldmlvdXMgaXMgcHJvcGVybHkgc2V0IGZyb21cblx0XHRcdC8vIHdoZW4gdGhlIGlucHV0IGZpcnN0IHJlY2VpdmVkIGZvY3VzLiBJZiB0aGUgaW5wdXQgaXMgbm90IGZvY3VzZWRcblx0XHRcdC8vIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhpcy5wcmV2aW91cyBiYXNlZCBvbiB0aGUgdmFsdWUgYmVmb3JlIHNwaW5uaW5nLlxuXHRcdFx0cHJldmlvdXMgPSB0aGlzLmVsZW1lbnRbIDAgXSA9PT0gJC51aS5zYWZlQWN0aXZlRWxlbWVudCggdGhpcy5kb2N1bWVudFsgMCBdICkgP1xuXHRcdFx0XHR0aGlzLnByZXZpb3VzIDogdGhpcy5lbGVtZW50LnZhbCgpO1xuXHRcdFx0ZnVuY3Rpb24gY2hlY2tGb2N1cygpIHtcblx0XHRcdFx0dmFyIGlzQWN0aXZlID0gdGhpcy5lbGVtZW50WyAwIF0gPT09ICQudWkuc2FmZUFjdGl2ZUVsZW1lbnQoIHRoaXMuZG9jdW1lbnRbIDAgXSApO1xuXHRcdFx0XHRpZiAoICFpc0FjdGl2ZSApIHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IHByZXZpb3VzO1xuXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydDogSUVcblx0XHRcdFx0XHQvLyBJRSBzZXRzIGZvY3VzIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGlmIGZvY3VzXG5cdFx0XHRcdFx0Ly8gbW92ZWQgb2ZmIG9mIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSB1c2VyIGNsaWNrZWQgb24gdGhlIGJ1dHRvbi5cblx0XHRcdFx0XHR0aGlzLl9kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVuc3VyZSBmb2N1cyBpcyBvbiAob3Igc3RheXMgb24pIHRoZSB0ZXh0IGZpZWxkXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0Y2hlY2tGb2N1cy5jYWxsKCB0aGlzICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFXG5cdFx0XHQvLyBJRSBkb2Vzbid0IHByZXZlbnQgbW92aW5nIGZvY3VzIGV2ZW4gd2l0aCBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHQvLyBzbyB3ZSBzZXQgYSBmbGFnIHRvIGtub3cgd2hlbiB3ZSBzaG91bGQgaWdub3JlIHRoZSBibHVyIGV2ZW50XG5cdFx0XHQvLyBhbmQgY2hlY2sgKGFnYWluKSBpZiBmb2N1cyBtb3ZlZCBvZmYgb2YgdGhlIGlucHV0LlxuXHRcdFx0dGhpcy5jYW5jZWxCbHVyID0gdHJ1ZTtcblx0XHRcdHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjtcblx0XHRcdFx0Y2hlY2tGb2N1cy5jYWxsKCB0aGlzICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdGlmICggdGhpcy5fc3RhcnQoIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgJCggZXZlbnQuY3VycmVudFRhcmdldCApXG5cdFx0XHRcdC5oYXNDbGFzcyggXCJ1aS1zcGlubmVyLXVwXCIgKSA/IDEgOiAtMSwgZXZlbnQgKTtcblx0XHR9LFxuXHRcdFwibW91c2V1cCAudWktc3Bpbm5lci1idXR0b25cIjogXCJfc3RvcFwiLFxuXHRcdFwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b25cIjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBidXR0b24gd2lsbCBhZGQgdWktc3RhdGUtYWN0aXZlIGlmIG1vdXNlIHdhcyBkb3duIHdoaWxlIG1vdXNlbGVhdmUgYW5kIGtlcHQgZG93blxuXHRcdFx0aWYgKCAhJCggZXZlbnQuY3VycmVudFRhcmdldCApLmhhc0NsYXNzKCBcInVpLXN0YXRlLWFjdGl2ZVwiICkgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLl9zdGFydCggZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgJCggZXZlbnQuY3VycmVudFRhcmdldCApXG5cdFx0XHRcdC5oYXNDbGFzcyggXCJ1aS1zcGlubmVyLXVwXCIgKSA/IDEgOiAtMSwgZXZlbnQgKTtcblx0XHR9LFxuXG5cdFx0Ly8gVE9ETzogZG8gd2UgcmVhbGx5IHdhbnQgdG8gY29uc2lkZXIgdGhpcyBhIHN0b3A/XG5cdFx0Ly8gc2hvdWxkbid0IHdlIGp1c3Qgc3RvcCB0aGUgcmVwZWF0ZXIgYW5kIHdhaXQgdW50aWwgbW91c2V1cCBiZWZvcmVcblx0XHQvLyB3ZSB0cmlnZ2VyIHRoZSBzdG9wIGV2ZW50P1xuXHRcdFwibW91c2VsZWF2ZSAudWktc3Bpbm5lci1idXR0b25cIjogXCJfc3RvcFwiXG5cdH0sXG5cblx0Ly8gU3VwcG9ydCBtb2JpbGUgZW5oYW5jZWQgb3B0aW9uIGFuZCBtYWtlIGJhY2tjb21wYXQgbW9yZSBzYW5lXG5cdF9lbmhhbmNlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVpU3Bpbm5lciA9IHRoaXMuZWxlbWVudFxuXHRcdFx0LmF0dHIoIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIgKVxuXHRcdFx0LndyYXAoIFwiPHNwYW4+XCIgKVxuXHRcdFx0LnBhcmVudCgpXG5cblx0XHRcdFx0Ly8gQWRkIGJ1dHRvbnNcblx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHRcIjxhPjwvYT48YT48L2E+XCJcblx0XHRcdFx0KTtcblx0fSxcblxuXHRfZHJhdzogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fZW5oYW5jZSgpO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudWlTcGlubmVyLCBcInVpLXNwaW5uZXJcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCBcInVpLXNwaW5uZXItaW5wdXRcIiApO1xuXG5cdFx0dGhpcy5lbGVtZW50LmF0dHIoIFwicm9sZVwiLCBcInNwaW5idXR0b25cIiApO1xuXG5cdFx0Ly8gQnV0dG9uIGJpbmRpbmdzXG5cdFx0dGhpcy5idXR0b25zID0gdGhpcy51aVNwaW5uZXIuY2hpbGRyZW4oIFwiYVwiIClcblx0XHRcdC5hdHRyKCBcInRhYkluZGV4XCIsIC0xIClcblx0XHRcdC5hdHRyKCBcImFyaWEtaGlkZGVuXCIsIHRydWUgKVxuXHRcdFx0LmJ1dHRvbigge1xuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0XCJ1aS1idXR0b25cIjogXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHQvLyBUT0RPOiBSaWdodCBub3cgYnV0dG9uIGRvZXMgbm90IHN1cHBvcnQgY2xhc3NlcyB0aGlzIGlzIGFscmVhZHkgdXBkYXRlZCBpbiBidXR0b24gUFJcblx0XHR0aGlzLl9yZW1vdmVDbGFzcyggdGhpcy5idXR0b25zLCBcInVpLWNvcm5lci1hbGxcIiApO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYnV0dG9ucy5maXJzdCgpLCBcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXBcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmJ1dHRvbnMubGFzdCgpLCBcInVpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93blwiICk7XG5cdFx0dGhpcy5idXR0b25zLmZpcnN0KCkuYnV0dG9uKCB7XG5cdFx0XHRcImljb25cIjogdGhpcy5vcHRpb25zLmljb25zLnVwLFxuXHRcdFx0XCJzaG93TGFiZWxcIjogZmFsc2Vcblx0XHR9ICk7XG5cdFx0dGhpcy5idXR0b25zLmxhc3QoKS5idXR0b24oIHtcblx0XHRcdFwiaWNvblwiOiB0aGlzLm9wdGlvbnMuaWNvbnMuZG93bixcblx0XHRcdFwic2hvd0xhYmVsXCI6IGZhbHNlXG5cdFx0fSApO1xuXG5cdFx0Ly8gSUUgNiBkb2Vzbid0IHVuZGVyc3RhbmQgaGVpZ2h0OiA1MCUgZm9yIHRoZSBidXR0b25zXG5cdFx0Ly8gdW5sZXNzIHRoZSB3cmFwcGVyIGhhcyBhbiBleHBsaWNpdCBoZWlnaHRcblx0XHRpZiAoIHRoaXMuYnV0dG9ucy5oZWlnaHQoKSA+IE1hdGguY2VpbCggdGhpcy51aVNwaW5uZXIuaGVpZ2h0KCkgKiAwLjUgKSAmJlxuXHRcdFx0XHR0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSA+IDAgKSB7XG5cdFx0XHR0aGlzLnVpU3Bpbm5lci5oZWlnaHQoIHRoaXMudWlTcGlubmVyLmhlaWdodCgpICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9rZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRrZXlDb2RlID0gJC51aS5rZXlDb2RlO1xuXG5cdFx0c3dpdGNoICggZXZlbnQua2V5Q29kZSApIHtcblx0XHRjYXNlIGtleUNvZGUuVVA6XG5cdFx0XHR0aGlzLl9yZXBlYXQoIG51bGwsIDEsIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRjYXNlIGtleUNvZGUuRE9XTjpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgLTEsIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRjYXNlIGtleUNvZGUuUEFHRV9VUDpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgb3B0aW9ucy5wYWdlLCBldmVudCApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0Y2FzZSBrZXlDb2RlLlBBR0VfRE9XTjpcblx0XHRcdHRoaXMuX3JlcGVhdCggbnVsbCwgLW9wdGlvbnMucGFnZSwgZXZlbnQgKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfc3RhcnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nICYmIHRoaXMuX3RyaWdnZXIoIFwic3RhcnRcIiwgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKCAhdGhpcy5jb3VudGVyICkge1xuXHRcdFx0dGhpcy5jb3VudGVyID0gMTtcblx0XHR9XG5cdFx0dGhpcy5zcGlubmluZyA9IHRydWU7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0X3JlcGVhdDogZnVuY3Rpb24oIGksIHN0ZXBzLCBldmVudCApIHtcblx0XHRpID0gaSB8fCA1MDA7XG5cblx0XHRjbGVhclRpbWVvdXQoIHRoaXMudGltZXIgKTtcblx0XHR0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5fcmVwZWF0KCA0MCwgc3RlcHMsIGV2ZW50ICk7XG5cdFx0fSwgaSApO1xuXG5cdFx0dGhpcy5fc3Bpbiggc3RlcHMgKiB0aGlzLm9wdGlvbnMuc3RlcCwgZXZlbnQgKTtcblx0fSxcblxuXHRfc3BpbjogZnVuY3Rpb24oIHN0ZXAsIGV2ZW50ICkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKSB8fCAwO1xuXG5cdFx0aWYgKCAhdGhpcy5jb3VudGVyICkge1xuXHRcdFx0dGhpcy5jb3VudGVyID0gMTtcblx0XHR9XG5cblx0XHR2YWx1ZSA9IHRoaXMuX2FkanVzdFZhbHVlKCB2YWx1ZSArIHN0ZXAgKiB0aGlzLl9pbmNyZW1lbnQoIHRoaXMuY291bnRlciApICk7XG5cblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nIHx8IHRoaXMuX3RyaWdnZXIoIFwic3BpblwiLCBldmVudCwgeyB2YWx1ZTogdmFsdWUgfSApICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMuX3ZhbHVlKCB2YWx1ZSApO1xuXHRcdFx0dGhpcy5jb3VudGVyKys7XG5cdFx0fVxuXHR9LFxuXG5cdF9pbmNyZW1lbnQ6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBpbmNyZW1lbnRhbCA9IHRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtcblxuXHRcdGlmICggaW5jcmVtZW50YWwgKSB7XG5cdFx0XHRyZXR1cm4gJC5pc0Z1bmN0aW9uKCBpbmNyZW1lbnRhbCApID9cblx0XHRcdFx0aW5jcmVtZW50YWwoIGkgKSA6XG5cdFx0XHRcdE1hdGguZmxvb3IoIGkgKiBpICogaSAvIDUwMDAwIC0gaSAqIGkgLyA1MDAgKyAxNyAqIGkgLyAyMDAgKyAxICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH0sXG5cblx0X3ByZWNpc2lvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZWNpc2lvbiA9IHRoaXMuX3ByZWNpc2lvbk9mKCB0aGlzLm9wdGlvbnMuc3RlcCApO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLm1pbiAhPT0gbnVsbCApIHtcblx0XHRcdHByZWNpc2lvbiA9IE1hdGgubWF4KCBwcmVjaXNpb24sIHRoaXMuX3ByZWNpc2lvbk9mKCB0aGlzLm9wdGlvbnMubWluICkgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHByZWNpc2lvbjtcblx0fSxcblxuXHRfcHJlY2lzaW9uT2Y6IGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0dmFyIHN0ciA9IG51bS50b1N0cmluZygpLFxuXHRcdFx0ZGVjaW1hbCA9IHN0ci5pbmRleE9mKCBcIi5cIiApO1xuXHRcdHJldHVybiBkZWNpbWFsID09PSAtMSA/IDAgOiBzdHIubGVuZ3RoIC0gZGVjaW1hbCAtIDE7XG5cdH0sXG5cblx0X2FkanVzdFZhbHVlOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGJhc2UsIGFib3ZlTWluLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSdyZSBhdCBhIHZhbGlkIHN0ZXBcblx0XHQvLyAtIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSAobWluIG9yIDApXG5cdFx0YmFzZSA9IG9wdGlvbnMubWluICE9PSBudWxsID8gb3B0aW9ucy5taW4gOiAwO1xuXHRcdGFib3ZlTWluID0gdmFsdWUgLSBiYXNlO1xuXG5cdFx0Ly8gLSByb3VuZCB0byB0aGUgbmVhcmVzdCBzdGVwXG5cdFx0YWJvdmVNaW4gPSBNYXRoLnJvdW5kKCBhYm92ZU1pbiAvIG9wdGlvbnMuc3RlcCApICogb3B0aW9ucy5zdGVwO1xuXG5cdFx0Ly8gLSByb3VuZGluZyBpcyBiYXNlZCBvbiAwLCBzbyBhZGp1c3QgYmFjayB0byBvdXIgYmFzZVxuXHRcdHZhbHVlID0gYmFzZSArIGFib3ZlTWluO1xuXG5cdFx0Ly8gRml4IHByZWNpc2lvbiBmcm9tIGJhZCBKUyBmbG9hdGluZyBwb2ludCBtYXRoXG5cdFx0dmFsdWUgPSBwYXJzZUZsb2F0KCB2YWx1ZS50b0ZpeGVkKCB0aGlzLl9wcmVjaXNpb24oKSApICk7XG5cblx0XHQvLyBDbGFtcCB0aGUgdmFsdWVcblx0XHRpZiAoIG9wdGlvbnMubWF4ICE9PSBudWxsICYmIHZhbHVlID4gb3B0aW9ucy5tYXggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucy5tYXg7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5taW4gIT09IG51bGwgJiYgdmFsdWUgPCBvcHRpb25zLm1pbiApIHtcblx0XHRcdHJldHVybiBvcHRpb25zLm1pbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cblx0X3N0b3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICF0aGlzLnNwaW5uaW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCggdGhpcy50aW1lciApO1xuXHRcdGNsZWFyVGltZW91dCggdGhpcy5tb3VzZXdoZWVsVGltZXIgKTtcblx0XHR0aGlzLmNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuc3Bpbm5pbmcgPSBmYWxzZTtcblx0XHR0aGlzLl90cmlnZ2VyKCBcInN0b3BcIiwgZXZlbnQgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgcHJldlZhbHVlLCBmaXJzdCwgbGFzdDtcblxuXHRcdGlmICgga2V5ID09PSBcImN1bHR1cmVcIiB8fCBrZXkgPT09IFwibnVtYmVyRm9ybWF0XCIgKSB7XG5cdFx0XHRwcmV2VmFsdWUgPSB0aGlzLl9wYXJzZSggdGhpcy5lbGVtZW50LnZhbCgpICk7XG5cdFx0XHR0aGlzLm9wdGlvbnNbIGtleSBdID0gdmFsdWU7XG5cdFx0XHR0aGlzLmVsZW1lbnQudmFsKCB0aGlzLl9mb3JtYXQoIHByZXZWYWx1ZSApICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwibWF4XCIgfHwga2V5ID09PSBcIm1pblwiIHx8IGtleSA9PT0gXCJzdGVwXCIgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0dmFsdWUgPSB0aGlzLl9wYXJzZSggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBrZXkgPT09IFwiaWNvbnNcIiApIHtcblx0XHRcdGZpcnN0ID0gdGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCggXCIudWktaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggZmlyc3QsIG51bGwsIHRoaXMub3B0aW9ucy5pY29ucy51cCApO1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIGZpcnN0LCBudWxsLCB2YWx1ZS51cCApO1xuXHRcdFx0bGFzdCA9IHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCggXCIudWktaWNvblwiICk7XG5cdFx0XHR0aGlzLl9yZW1vdmVDbGFzcyggbGFzdCwgbnVsbCwgdGhpcy5vcHRpb25zLmljb25zLmRvd24gKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCBsYXN0LCBudWxsLCB2YWx1ZS5kb3duICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblx0fSxcblxuXHRfc2V0T3B0aW9uRGlzYWJsZWQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR0aGlzLl9zdXBlciggdmFsdWUgKTtcblxuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLnVpU3Bpbm5lciwgbnVsbCwgXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCAhIXZhbHVlICk7XG5cdFx0dGhpcy5lbGVtZW50LnByb3AoIFwiZGlzYWJsZWRcIiwgISF2YWx1ZSApO1xuXHRcdHRoaXMuYnV0dG9ucy5idXR0b24oIHZhbHVlID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbnM6IHNwaW5uZXJNb2RpZmVyKCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLl9zdXBlciggb3B0aW9ucyApO1xuXHR9ICksXG5cblx0X3BhcnNlOiBmdW5jdGlvbiggdmFsICkge1xuXHRcdGlmICggdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiB2YWwgIT09IFwiXCIgKSB7XG5cdFx0XHR2YWwgPSB3aW5kb3cuR2xvYmFsaXplICYmIHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQgP1xuXHRcdFx0XHRHbG9iYWxpemUucGFyc2VGbG9hdCggdmFsLCAxMCwgdGhpcy5vcHRpb25zLmN1bHR1cmUgKSA6ICt2YWw7XG5cdFx0fVxuXHRcdHJldHVybiB2YWwgPT09IFwiXCIgfHwgaXNOYU4oIHZhbCApID8gbnVsbCA6IHZhbDtcblx0fSxcblxuXHRfZm9ybWF0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHRyZXR1cm4gd2luZG93Lkdsb2JhbGl6ZSAmJiB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0ID9cblx0XHRcdEdsb2JhbGl6ZS5mb3JtYXQoIHZhbHVlLCB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LCB0aGlzLm9wdGlvbnMuY3VsdHVyZSApIDpcblx0XHRcdHZhbHVlO1xuXHR9LFxuXG5cdF9yZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnQuYXR0cigge1xuXHRcdFx0XCJhcmlhLXZhbHVlbWluXCI6IHRoaXMub3B0aW9ucy5taW4sXG5cdFx0XHRcImFyaWEtdmFsdWVtYXhcIjogdGhpcy5vcHRpb25zLm1heCxcblxuXHRcdFx0Ly8gVE9ETzogd2hhdCBzaG91bGQgd2UgZG8gd2l0aCB2YWx1ZXMgdGhhdCBjYW4ndCBiZSBwYXJzZWQ/XG5cdFx0XHRcImFyaWEtdmFsdWVub3dcIjogdGhpcy5fcGFyc2UoIHRoaXMuZWxlbWVudC52YWwoKSApXG5cdFx0fSApO1xuXHR9LFxuXG5cdGlzVmFsaWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcblxuXHRcdC8vIE51bGwgaXMgaW52YWxpZFxuXHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdmFsdWUgZ2V0cyBhZGp1c3RlZCwgaXQncyBpbnZhbGlkXG5cdFx0cmV0dXJuIHZhbHVlID09PSB0aGlzLl9hZGp1c3RWYWx1ZSggdmFsdWUgKTtcblx0fSxcblxuXHQvLyBVcGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgdHJpZ2dlcmluZyBjaGFuZ2Vcblx0X3ZhbHVlOiBmdW5jdGlvbiggdmFsdWUsIGFsbG93QW55ICkge1xuXHRcdHZhciBwYXJzZWQ7XG5cdFx0aWYgKCB2YWx1ZSAhPT0gXCJcIiApIHtcblx0XHRcdHBhcnNlZCA9IHRoaXMuX3BhcnNlKCB2YWx1ZSApO1xuXHRcdFx0aWYgKCBwYXJzZWQgIT09IG51bGwgKSB7XG5cdFx0XHRcdGlmICggIWFsbG93QW55ICkge1xuXHRcdFx0XHRcdHBhcnNlZCA9IHRoaXMuX2FkanVzdFZhbHVlKCBwYXJzZWQgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZSA9IHRoaXMuX2Zvcm1hdCggcGFyc2VkICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuZWxlbWVudC52YWwoIHZhbHVlICk7XG5cdFx0dGhpcy5fcmVmcmVzaCgpO1xuXHR9LFxuXG5cdF9kZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdC5wcm9wKCBcImRpc2FibGVkXCIsIGZhbHNlIClcblx0XHRcdC5yZW1vdmVBdHRyKCBcImF1dG9jb21wbGV0ZSByb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIgKTtcblxuXHRcdHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKCB0aGlzLmVsZW1lbnQgKTtcblx0fSxcblxuXHRzdGVwVXA6IHNwaW5uZXJNb2RpZmVyKCBmdW5jdGlvbiggc3RlcHMgKSB7XG5cdFx0dGhpcy5fc3RlcFVwKCBzdGVwcyApO1xuXHR9ICksXG5cdF9zdGVwVXA6IGZ1bmN0aW9uKCBzdGVwcyApIHtcblx0XHRpZiAoIHRoaXMuX3N0YXJ0KCkgKSB7XG5cdFx0XHR0aGlzLl9zcGluKCAoIHN0ZXBzIHx8IDEgKSAqIHRoaXMub3B0aW9ucy5zdGVwICk7XG5cdFx0XHR0aGlzLl9zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHN0ZXBEb3duOiBzcGlubmVyTW9kaWZlciggZnVuY3Rpb24oIHN0ZXBzICkge1xuXHRcdHRoaXMuX3N0ZXBEb3duKCBzdGVwcyApO1xuXHR9ICksXG5cdF9zdGVwRG93bjogZnVuY3Rpb24oIHN0ZXBzICkge1xuXHRcdGlmICggdGhpcy5fc3RhcnQoKSApIHtcblx0XHRcdHRoaXMuX3NwaW4oICggc3RlcHMgfHwgMSApICogLXRoaXMub3B0aW9ucy5zdGVwICk7XG5cdFx0XHR0aGlzLl9zdG9wKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHBhZ2VVcDogc3Bpbm5lck1vZGlmZXIoIGZ1bmN0aW9uKCBwYWdlcyApIHtcblx0XHR0aGlzLl9zdGVwVXAoICggcGFnZXMgfHwgMSApICogdGhpcy5vcHRpb25zLnBhZ2UgKTtcblx0fSApLFxuXG5cdHBhZ2VEb3duOiBzcGlubmVyTW9kaWZlciggZnVuY3Rpb24oIHBhZ2VzICkge1xuXHRcdHRoaXMuX3N0ZXBEb3duKCAoIHBhZ2VzIHx8IDEgKSAqIHRoaXMub3B0aW9ucy5wYWdlICk7XG5cdH0gKSxcblxuXHR2YWx1ZTogZnVuY3Rpb24oIG5ld1ZhbCApIHtcblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnNlKCB0aGlzLmVsZW1lbnQudmFsKCkgKTtcblx0XHR9XG5cdFx0c3Bpbm5lck1vZGlmZXIoIHRoaXMuX3ZhbHVlICkuY2FsbCggdGhpcywgbmV3VmFsICk7XG5cdH0sXG5cblx0d2lkZ2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy51aVNwaW5uZXI7XG5cdH1cbn0gKTtcblxuLy8gREVQUkVDQVRFRFxuLy8gVE9ETzogc3dpdGNoIHJldHVybiBiYWNrIHRvIHdpZGdldCBkZWNsYXJhdGlvbiBhdCB0b3Agb2YgZmlsZSB3aGVuIHRoaXMgaXMgcmVtb3ZlZFxuaWYgKCAkLnVpQmFja0NvbXBhdCAhPT0gZmFsc2UgKSB7XG5cblx0Ly8gQmFja2NvbXBhdCBmb3Igc3Bpbm5lciBodG1sIGV4dGVuc2lvbiBwb2ludHNcblx0JC53aWRnZXQoIFwidWkuc3Bpbm5lclwiLCAkLnVpLnNwaW5uZXIsIHtcblx0XHRfZW5oYW5jZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnVpU3Bpbm5lciA9IHRoaXMuZWxlbWVudFxuXHRcdFx0XHQuYXR0ciggXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIiApXG5cdFx0XHRcdC53cmFwKCB0aGlzLl91aVNwaW5uZXJIdG1sKCkgKVxuXHRcdFx0XHQucGFyZW50KClcblxuXHRcdFx0XHRcdC8vIEFkZCBidXR0b25zXG5cdFx0XHRcdFx0LmFwcGVuZCggdGhpcy5fYnV0dG9uSHRtbCgpICk7XG5cdFx0fSxcblx0XHRfdWlTcGlubmVySHRtbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gXCI8c3Bhbj5cIjtcblx0XHR9LFxuXG5cdFx0X2J1dHRvbkh0bWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFwiPGE+PC9hPjxhPjwvYT5cIjtcblx0XHR9XG5cdH0gKTtcbn1cblxudmFyIHdpZGdldHNTcGlubmVyID0gJC51aS5zcGlubmVyO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFRhYnMgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFRhYnNcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBUcmFuc2Zvcm1zIGEgc2V0IG9mIGNvbnRhaW5lciBlbGVtZW50cyBpbnRvIGEgdGFiIHN0cnVjdHVyZS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS90YWJzL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3RhYnMvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS90YWJzLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS50YWJzXCIsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0ZGVsYXk6IDMwMCxcblx0b3B0aW9uczoge1xuXHRcdGFjdGl2ZTogbnVsbCxcblx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcInVpLXRhYnNcIjogXCJ1aS1jb3JuZXItYWxsXCIsXG5cdFx0XHRcInVpLXRhYnMtbmF2XCI6IFwidWktY29ybmVyLWFsbFwiLFxuXHRcdFx0XCJ1aS10YWJzLXBhbmVsXCI6IFwidWktY29ybmVyLWJvdHRvbVwiLFxuXHRcdFx0XCJ1aS10YWJzLXRhYlwiOiBcInVpLWNvcm5lci10b3BcIlxuXHRcdH0sXG5cdFx0Y29sbGFwc2libGU6IGZhbHNlLFxuXHRcdGV2ZW50OiBcImNsaWNrXCIsXG5cdFx0aGVpZ2h0U3R5bGU6IFwiY29udGVudFwiLFxuXHRcdGhpZGU6IG51bGwsXG5cdFx0c2hvdzogbnVsbCxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZUFjdGl2YXRlOiBudWxsLFxuXHRcdGJlZm9yZUxvYWQ6IG51bGwsXG5cdFx0bG9hZDogbnVsbFxuXHR9LFxuXG5cdF9pc0xvY2FsOiAoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciByaGFzaCA9IC8jLiokLztcblxuXHRcdHJldHVybiBmdW5jdGlvbiggYW5jaG9yICkge1xuXHRcdFx0dmFyIGFuY2hvclVybCwgbG9jYXRpb25Vcmw7XG5cblx0XHRcdGFuY2hvclVybCA9IGFuY2hvci5ocmVmLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cdFx0XHRsb2NhdGlvblVybCA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRGVjb2RpbmcgbWF5IHRocm93IGFuIGVycm9yIGlmIHRoZSBVUkwgaXNuJ3QgVVRGLTggKCM5NTE4KVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YW5jaG9yVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KCBhbmNob3JVcmwgKTtcblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHt9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhdGlvblVybCA9IGRlY29kZVVSSUNvbXBvbmVudCggbG9jYXRpb25VcmwgKTtcblx0XHRcdH0gY2F0Y2ggKCBlcnJvciApIHt9XG5cblx0XHRcdHJldHVybiBhbmNob3IuaGFzaC5sZW5ndGggPiAxICYmIGFuY2hvclVybCA9PT0gbG9jYXRpb25Vcmw7XG5cdFx0fTtcblx0fSApKCksXG5cblx0X2NyZWF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdHRoaXMucnVubmluZyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5fYWRkQ2xhc3MoIFwidWktdGFic1wiLCBcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiICk7XG5cdFx0dGhpcy5fdG9nZ2xlQ2xhc3MoIFwidWktdGFicy1jb2xsYXBzaWJsZVwiLCBudWxsLCBvcHRpb25zLmNvbGxhcHNpYmxlICk7XG5cblx0XHR0aGlzLl9wcm9jZXNzVGFicygpO1xuXHRcdG9wdGlvbnMuYWN0aXZlID0gdGhpcy5faW5pdGlhbEFjdGl2ZSgpO1xuXG5cdFx0Ly8gVGFrZSBkaXNhYmxpbmcgdGFicyB2aWEgY2xhc3MgYXR0cmlidXRlIGZyb20gSFRNTFxuXHRcdC8vIGludG8gYWNjb3VudCBhbmQgdXBkYXRlIG9wdGlvbiBwcm9wZXJseS5cblx0XHRpZiAoICQuaXNBcnJheSggb3B0aW9ucy5kaXNhYmxlZCApICkge1xuXHRcdFx0b3B0aW9ucy5kaXNhYmxlZCA9ICQudW5pcXVlKCBvcHRpb25zLmRpc2FibGVkLmNvbmNhdChcblx0XHRcdFx0JC5tYXAoIHRoaXMudGFicy5maWx0ZXIoIFwiLnVpLXN0YXRlLWRpc2FibGVkXCIgKSwgZnVuY3Rpb24oIGxpICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGF0LnRhYnMuaW5kZXgoIGxpICk7XG5cdFx0XHRcdH0gKVxuXHRcdFx0KSApLnNvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBmb3IgbGVuZ3RoIGF2b2lkcyBlcnJvciB3aGVuIGluaXRpYWxpemluZyBlbXB0eSBsaXN0XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuYWN0aXZlICE9PSBmYWxzZSAmJiB0aGlzLmFuY2hvcnMubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5hY3RpdmUgPSB0aGlzLl9maW5kQWN0aXZlKCBvcHRpb25zLmFjdGl2ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFjdGl2ZSA9ICQoKTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cblx0XHRpZiAoIHRoaXMuYWN0aXZlLmxlbmd0aCApIHtcblx0XHRcdHRoaXMubG9hZCggb3B0aW9ucy5hY3RpdmUgKTtcblx0XHR9XG5cdH0sXG5cblx0X2luaXRpYWxBY3RpdmU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhY3RpdmUgPSB0aGlzLm9wdGlvbnMuYWN0aXZlLFxuXHRcdFx0Y29sbGFwc2libGUgPSB0aGlzLm9wdGlvbnMuY29sbGFwc2libGUsXG5cdFx0XHRsb2NhdGlvbkhhc2ggPSBsb2NhdGlvbi5oYXNoLnN1YnN0cmluZyggMSApO1xuXG5cdFx0aWYgKCBhY3RpdmUgPT09IG51bGwgKSB7XG5cblx0XHRcdC8vIGNoZWNrIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGluIHRoZSBVUkxcblx0XHRcdGlmICggbG9jYXRpb25IYXNoICkge1xuXHRcdFx0XHR0aGlzLnRhYnMuZWFjaCggZnVuY3Rpb24oIGksIHRhYiApIHtcblx0XHRcdFx0XHRpZiAoICQoIHRhYiApLmF0dHIoIFwiYXJpYS1jb250cm9sc1wiICkgPT09IGxvY2F0aW9uSGFzaCApIHtcblx0XHRcdFx0XHRcdGFjdGl2ZSA9IGk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGZvciBhIHRhYiBtYXJrZWQgYWN0aXZlIHZpYSBhIGNsYXNzXG5cdFx0XHRpZiAoIGFjdGl2ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0YWN0aXZlID0gdGhpcy50YWJzLmluZGV4KCB0aGlzLnRhYnMuZmlsdGVyKCBcIi51aS10YWJzLWFjdGl2ZVwiICkgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTm8gYWN0aXZlIHRhYiwgc2V0IHRvIGZhbHNlXG5cdFx0XHRpZiAoIGFjdGl2ZSA9PT0gbnVsbCB8fCBhY3RpdmUgPT09IC0xICkge1xuXHRcdFx0XHRhY3RpdmUgPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBudW1iZXJzOiBuZWdhdGl2ZSwgb3V0IG9mIHJhbmdlXG5cdFx0aWYgKCBhY3RpdmUgIT09IGZhbHNlICkge1xuXHRcdFx0YWN0aXZlID0gdGhpcy50YWJzLmluZGV4KCB0aGlzLnRhYnMuZXEoIGFjdGl2ZSApICk7XG5cdFx0XHRpZiAoIGFjdGl2ZSA9PT0gLTEgKSB7XG5cdFx0XHRcdGFjdGl2ZSA9IGNvbGxhcHNpYmxlID8gZmFsc2UgOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIERvbid0IGFsbG93IGNvbGxhcHNpYmxlOiBmYWxzZSBhbmQgYWN0aXZlOiBmYWxzZVxuXHRcdGlmICggIWNvbGxhcHNpYmxlICYmIGFjdGl2ZSA9PT0gZmFsc2UgJiYgdGhpcy5hbmNob3JzLmxlbmd0aCApIHtcblx0XHRcdGFjdGl2ZSA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjdGl2ZTtcblx0fSxcblxuXHRfZ2V0Q3JlYXRlRXZlbnREYXRhOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFiOiB0aGlzLmFjdGl2ZSxcblx0XHRcdHBhbmVsOiAhdGhpcy5hY3RpdmUubGVuZ3RoID8gJCgpIDogdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRoaXMuYWN0aXZlIClcblx0XHR9O1xuXHR9LFxuXG5cdF90YWJLZXlkb3duOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGZvY3VzZWRUYWIgPSAkKCAkLnVpLnNhZmVBY3RpdmVFbGVtZW50KCB0aGlzLmRvY3VtZW50WyAwIF0gKSApLmNsb3Nlc3QoIFwibGlcIiApLFxuXHRcdFx0c2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleCggZm9jdXNlZFRhYiApLFxuXHRcdFx0Z29pbmdGb3J3YXJkID0gdHJ1ZTtcblxuXHRcdGlmICggdGhpcy5faGFuZGxlUGFnZU5hdiggZXZlbnQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKCBldmVudC5rZXlDb2RlICkge1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLlJJR0hUOlxuXHRcdGNhc2UgJC51aS5rZXlDb2RlLkRPV046XG5cdFx0XHRzZWxlY3RlZEluZGV4Kys7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5VUDpcblx0XHRjYXNlICQudWkua2V5Q29kZS5MRUZUOlxuXHRcdFx0Z29pbmdGb3J3YXJkID0gZmFsc2U7XG5cdFx0XHRzZWxlY3RlZEluZGV4LS07XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5FTkQ6XG5cdFx0XHRzZWxlY3RlZEluZGV4ID0gdGhpcy5hbmNob3JzLmxlbmd0aCAtIDE7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5IT01FOlxuXHRcdFx0c2VsZWN0ZWRJbmRleCA9IDA7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICQudWkua2V5Q29kZS5TUEFDRTpcblxuXHRcdFx0Ly8gQWN0aXZhdGUgb25seSwgbm8gY29sbGFwc2luZ1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGNsZWFyVGltZW91dCggdGhpcy5hY3RpdmF0aW5nICk7XG5cdFx0XHR0aGlzLl9hY3RpdmF0ZSggc2VsZWN0ZWRJbmRleCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdGNhc2UgJC51aS5rZXlDb2RlLkVOVEVSOlxuXG5cdFx0XHQvLyBUb2dnbGUgKGNhbmNlbCBkZWxheWVkIGFjdGl2YXRpb24sIGFsbG93IGNvbGxhcHNpbmcpXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLmFjdGl2YXRpbmcgKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBjb2xsYXBzZSBvciBhY3RpdmF0ZVxuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHNlbGVjdGVkSW5kZXggPT09IHRoaXMub3B0aW9ucy5hY3RpdmUgPyBmYWxzZSA6IHNlbGVjdGVkSW5kZXggKTtcblx0XHRcdHJldHVybjtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvY3VzIHRoZSBhcHByb3ByaWF0ZSB0YWIsIGJhc2VkIG9uIHdoaWNoIGtleSB3YXMgcHJlc3NlZFxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y2xlYXJUaW1lb3V0KCB0aGlzLmFjdGl2YXRpbmcgKTtcblx0XHRzZWxlY3RlZEluZGV4ID0gdGhpcy5fZm9jdXNOZXh0VGFiKCBzZWxlY3RlZEluZGV4LCBnb2luZ0ZvcndhcmQgKTtcblxuXHRcdC8vIE5hdmlnYXRpbmcgd2l0aCBjb250cm9sL2NvbW1hbmQga2V5IHdpbGwgcHJldmVudCBhdXRvbWF0aWMgYWN0aXZhdGlvblxuXHRcdGlmICggIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgKSB7XG5cblx0XHRcdC8vIFVwZGF0ZSBhcmlhLXNlbGVjdGVkIGltbWVkaWF0ZWx5IHNvIHRoYXQgQVQgdGhpbmsgdGhlIHRhYiBpcyBhbHJlYWR5IHNlbGVjdGVkLlxuXHRcdFx0Ly8gT3RoZXJ3aXNlIEFUIG1heSBjb25mdXNlIHRoZSB1c2VyIGJ5IHN0YXRpbmcgdGhhdCB0aGV5IG5lZWQgdG8gYWN0aXZhdGUgdGhlIHRhYixcblx0XHRcdC8vIGJ1dCB0aGUgdGFiIHdpbGwgYWxyZWFkeSBiZSBhY3RpdmF0ZWQgYnkgdGhlIHRpbWUgdGhlIGFubm91bmNlbWVudCBmaW5pc2hlcy5cblx0XHRcdGZvY3VzZWRUYWIuYXR0ciggXCJhcmlhLXNlbGVjdGVkXCIsIFwiZmFsc2VcIiApO1xuXHRcdFx0dGhpcy50YWJzLmVxKCBzZWxlY3RlZEluZGV4ICkuYXR0ciggXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiICk7XG5cblx0XHRcdHRoaXMuYWN0aXZhdGluZyA9IHRoaXMuX2RlbGF5KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5vcHRpb24oIFwiYWN0aXZlXCIsIHNlbGVjdGVkSW5kZXggKTtcblx0XHRcdH0sIHRoaXMuZGVsYXkgKTtcblx0XHR9XG5cdH0sXG5cblx0X3BhbmVsS2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggdGhpcy5faGFuZGxlUGFnZU5hdiggZXZlbnQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDdHJsK3VwIG1vdmVzIGZvY3VzIHRvIHRoZSBjdXJyZW50IHRhYlxuXHRcdGlmICggZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuVVAgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5hY3RpdmUudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIEFsdCtwYWdlIHVwL2Rvd24gbW92ZXMgZm9jdXMgdG8gdGhlIHByZXZpb3VzL25leHQgdGFiIChhbmQgYWN0aXZhdGVzKVxuXHRfaGFuZGxlUGFnZU5hdjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5QQUdFX1VQICkge1xuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHRoaXMuX2ZvY3VzTmV4dFRhYiggdGhpcy5vcHRpb25zLmFjdGl2ZSAtIDEsIGZhbHNlICkgKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAoIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuUEFHRV9ET1dOICkge1xuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHRoaXMuX2ZvY3VzTmV4dFRhYiggdGhpcy5vcHRpb25zLmFjdGl2ZSArIDEsIHRydWUgKSApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdF9maW5kTmV4dFRhYjogZnVuY3Rpb24oIGluZGV4LCBnb2luZ0ZvcndhcmQgKSB7XG5cdFx0dmFyIGxhc3RUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xuXG5cdFx0ZnVuY3Rpb24gY29uc3RyYWluKCkge1xuXHRcdFx0aWYgKCBpbmRleCA+IGxhc3RUYWJJbmRleCApIHtcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdGluZGV4ID0gbGFzdFRhYkluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGluZGV4O1xuXHRcdH1cblxuXHRcdHdoaWxlICggJC5pbkFycmF5KCBjb25zdHJhaW4oKSwgdGhpcy5vcHRpb25zLmRpc2FibGVkICkgIT09IC0xICkge1xuXHRcdFx0aW5kZXggPSBnb2luZ0ZvcndhcmQgPyBpbmRleCArIDEgOiBpbmRleCAtIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9LFxuXG5cdF9mb2N1c05leHRUYWI6IGZ1bmN0aW9uKCBpbmRleCwgZ29pbmdGb3J3YXJkICkge1xuXHRcdGluZGV4ID0gdGhpcy5fZmluZE5leHRUYWIoIGluZGV4LCBnb2luZ0ZvcndhcmQgKTtcblx0XHR0aGlzLnRhYnMuZXEoIGluZGV4ICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdGlmICgga2V5ID09PSBcImFjdGl2ZVwiICkge1xuXG5cdFx0XHQvLyBfYWN0aXZhdGUoKSB3aWxsIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBhbmQgdXBkYXRlIHRoaXMub3B0aW9uc1xuXHRcdFx0dGhpcy5fYWN0aXZhdGUoIHZhbHVlICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTtcblxuXHRcdGlmICgga2V5ID09PSBcImNvbGxhcHNpYmxlXCIgKSB7XG5cdFx0XHR0aGlzLl90b2dnbGVDbGFzcyggXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsIG51bGwsIHZhbHVlICk7XG5cblx0XHRcdC8vIFNldHRpbmcgY29sbGFwc2libGU6IGZhbHNlIHdoaWxlIGNvbGxhcHNlZDsgb3BlbiBmaXJzdCBwYW5lbFxuXHRcdFx0aWYgKCAhdmFsdWUgJiYgdGhpcy5vcHRpb25zLmFjdGl2ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHRoaXMuX2FjdGl2YXRlKCAwICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgPT09IFwiZXZlbnRcIiApIHtcblx0XHRcdHRoaXMuX3NldHVwRXZlbnRzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSBcImhlaWdodFN0eWxlXCIgKSB7XG5cdFx0XHR0aGlzLl9zZXR1cEhlaWdodFN0eWxlKCB2YWx1ZSApO1xuXHRcdH1cblx0fSxcblxuXHRfc2FuaXRpemVTZWxlY3RvcjogZnVuY3Rpb24oIGhhc2ggKSB7XG5cdFx0cmV0dXJuIGhhc2ggPyBoYXNoLnJlcGxhY2UoIC9bIVwiJCUmJygpKissLlxcLzo7PD0+P0BcXFtcXF1cXF5ge3x9fl0vZywgXCJcXFxcJCZcIiApIDogXCJcIjtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGxpcyA9IHRoaXMudGFibGlzdC5jaGlsZHJlbiggXCI6aGFzKGFbaHJlZl0pXCIgKTtcblxuXHRcdC8vIEdldCBkaXNhYmxlZCB0YWJzIGZyb20gY2xhc3MgYXR0cmlidXRlIGZyb20gSFRNTFxuXHRcdC8vIHRoaXMgd2lsbCBnZXQgY29udmVydGVkIHRvIGEgYm9vbGVhbiBpZiBuZWVkZWQgaW4gX3JlZnJlc2goKVxuXHRcdG9wdGlvbnMuZGlzYWJsZWQgPSAkLm1hcCggbGlzLmZpbHRlciggXCIudWktc3RhdGUtZGlzYWJsZWRcIiApLCBmdW5jdGlvbiggdGFiICkge1xuXHRcdFx0cmV0dXJuIGxpcy5pbmRleCggdGFiICk7XG5cdFx0fSApO1xuXG5cdFx0dGhpcy5fcHJvY2Vzc1RhYnMoKTtcblxuXHRcdC8vIFdhcyBjb2xsYXBzZWQgb3Igbm8gdGFic1xuXHRcdGlmICggb3B0aW9ucy5hY3RpdmUgPT09IGZhbHNlIHx8ICF0aGlzLmFuY2hvcnMubGVuZ3RoICkge1xuXHRcdFx0b3B0aW9ucy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdHRoaXMuYWN0aXZlID0gJCgpO1xuXG5cdFx0Ly8gd2FzIGFjdGl2ZSwgYnV0IGFjdGl2ZSB0YWIgaXMgZ29uZVxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuYWN0aXZlLmxlbmd0aCAmJiAhJC5jb250YWlucyggdGhpcy50YWJsaXN0WyAwIF0sIHRoaXMuYWN0aXZlWyAwIF0gKSApIHtcblxuXHRcdFx0Ly8gYWxsIHJlbWFpbmluZyB0YWJzIGFyZSBkaXNhYmxlZFxuXHRcdFx0aWYgKCB0aGlzLnRhYnMubGVuZ3RoID09PSBvcHRpb25zLmRpc2FibGVkLmxlbmd0aCApIHtcblx0XHRcdFx0b3B0aW9ucy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5hY3RpdmUgPSAkKCk7XG5cblx0XHRcdC8vIGFjdGl2YXRlIHByZXZpb3VzIHRhYlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fYWN0aXZhdGUoIHRoaXMuX2ZpbmROZXh0VGFiKCBNYXRoLm1heCggMCwgb3B0aW9ucy5hY3RpdmUgLSAxICksIGZhbHNlICkgKTtcblx0XHRcdH1cblxuXHRcdC8vIHdhcyBhY3RpdmUsIGFjdGl2ZSB0YWIgc3RpbGwgZXhpc3RzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gbWFrZSBzdXJlIGFjdGl2ZSBpbmRleCBpcyBjb3JyZWN0XG5cdFx0XHRvcHRpb25zLmFjdGl2ZSA9IHRoaXMudGFicy5pbmRleCggdGhpcy5hY3RpdmUgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9yZWZyZXNoKCk7XG5cdH0sXG5cblx0X3JlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKTtcblx0XHR0aGlzLl9zZXR1cEV2ZW50cyggdGhpcy5vcHRpb25zLmV2ZW50ICk7XG5cdFx0dGhpcy5fc2V0dXBIZWlnaHRTdHlsZSggdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlICk7XG5cblx0XHR0aGlzLnRhYnMubm90KCB0aGlzLmFjdGl2ZSApLmF0dHIoIHtcblx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiLFxuXHRcdFx0dGFiSW5kZXg6IC0xXG5cdFx0fSApO1xuXHRcdHRoaXMucGFuZWxzLm5vdCggdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRoaXMuYWN0aXZlICkgKVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuXHRcdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIG9uZSB0YWIgaXMgaW4gdGhlIHRhYiBvcmRlclxuXHRcdGlmICggIXRoaXMuYWN0aXZlLmxlbmd0aCApIHtcblx0XHRcdHRoaXMudGFicy5lcSggMCApLmF0dHIoIFwidGFiSW5kZXhcIiwgMCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFjdGl2ZVxuXHRcdFx0XHQuYXR0cigge1xuXHRcdFx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcInRydWVcIixcblx0XHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJ0cnVlXCIsXG5cdFx0XHRcdFx0dGFiSW5kZXg6IDBcblx0XHRcdFx0fSApO1xuXHRcdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYWN0aXZlLCBcInVpLXRhYnMtYWN0aXZlXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0aGlzLmFjdGl2ZSApXG5cdFx0XHRcdC5zaG93KClcblx0XHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0XHRcImFyaWEtaGlkZGVuXCI6IFwiZmFsc2VcIlxuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9wcm9jZXNzVGFiczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0cHJldlRhYnMgPSB0aGlzLnRhYnMsXG5cdFx0XHRwcmV2QW5jaG9ycyA9IHRoaXMuYW5jaG9ycyxcblx0XHRcdHByZXZQYW5lbHMgPSB0aGlzLnBhbmVscztcblxuXHRcdHRoaXMudGFibGlzdCA9IHRoaXMuX2dldExpc3QoKS5hdHRyKCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy50YWJsaXN0LCBcInVpLXRhYnMtbmF2XCIsXG5cdFx0XHRcInVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlclwiICk7XG5cblx0XHQvLyBQcmV2ZW50IHVzZXJzIGZyb20gZm9jdXNpbmcgZGlzYWJsZWQgdGFicyB2aWEgY2xpY2tcblx0XHR0aGlzLnRhYmxpc3Rcblx0XHRcdC5vbiggXCJtb3VzZWRvd25cIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIFwiPiBsaVwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGlmICggJCggdGhpcyApLmlzKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5XG5cdFx0XHQvLyBQcmV2ZW50aW5nIHRoZSBkZWZhdWx0IGFjdGlvbiBpbiBtb3VzZWRvd24gZG9lc24ndCBwcmV2ZW50IElFXG5cdFx0XHQvLyBmcm9tIGZvY3VzaW5nIHRoZSBlbGVtZW50LCBzbyBpZiB0aGUgYW5jaG9yIGdldHMgZm9jdXNlZCwgYmx1ci5cblx0XHRcdC8vIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZm9jdXNpbmcgdGhlIHByZXZpb3VzbHkgZm9jdXNlZFxuXHRcdFx0Ly8gZWxlbWVudCBzaW5jZSBjbGlja2luZyBvbiBhIG5vbi1mb2N1c2FibGUgZWxlbWVudCBzaG91bGQgZm9jdXNcblx0XHRcdC8vIHRoZSBib2R5IGFueXdheS5cblx0XHRcdC5vbiggXCJmb2N1c1wiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgXCIudWktdGFicy1hbmNob3JcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggJCggdGhpcyApLmNsb3Nlc3QoIFwibGlcIiApLmlzKCBcIi51aS1zdGF0ZS1kaXNhYmxlZFwiICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdHRoaXMudGFicyA9IHRoaXMudGFibGlzdC5maW5kKCBcIj4gbGk6aGFzKGFbaHJlZl0pXCIgKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0cm9sZTogXCJ0YWJcIixcblx0XHRcdFx0dGFiSW5kZXg6IC0xXG5cdFx0XHR9ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMudGFicywgXCJ1aS10YWJzLXRhYlwiLCBcInVpLXN0YXRlLWRlZmF1bHRcIiApO1xuXG5cdFx0dGhpcy5hbmNob3JzID0gdGhpcy50YWJzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gJCggXCJhXCIsIHRoaXMgKVsgMCBdO1xuXHRcdH0gKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0cm9sZTogXCJwcmVzZW50YXRpb25cIixcblx0XHRcdFx0dGFiSW5kZXg6IC0xXG5cdFx0XHR9ICk7XG5cdFx0dGhpcy5fYWRkQ2xhc3MoIHRoaXMuYW5jaG9ycywgXCJ1aS10YWJzLWFuY2hvclwiICk7XG5cblx0XHR0aGlzLnBhbmVscyA9ICQoKTtcblxuXHRcdHRoaXMuYW5jaG9ycy5lYWNoKCBmdW5jdGlvbiggaSwgYW5jaG9yICkge1xuXHRcdFx0dmFyIHNlbGVjdG9yLCBwYW5lbCwgcGFuZWxJZCxcblx0XHRcdFx0YW5jaG9ySWQgPSAkKCBhbmNob3IgKS51bmlxdWVJZCgpLmF0dHIoIFwiaWRcIiApLFxuXHRcdFx0XHR0YWIgPSAkKCBhbmNob3IgKS5jbG9zZXN0KCBcImxpXCIgKSxcblx0XHRcdFx0b3JpZ2luYWxBcmlhQ29udHJvbHMgPSB0YWIuYXR0ciggXCJhcmlhLWNvbnRyb2xzXCIgKTtcblxuXHRcdFx0Ly8gSW5saW5lIHRhYlxuXHRcdFx0aWYgKCB0aGF0Ll9pc0xvY2FsKCBhbmNob3IgKSApIHtcblx0XHRcdFx0c2VsZWN0b3IgPSBhbmNob3IuaGFzaDtcblx0XHRcdFx0cGFuZWxJZCA9IHNlbGVjdG9yLnN1YnN0cmluZyggMSApO1xuXHRcdFx0XHRwYW5lbCA9IHRoYXQuZWxlbWVudC5maW5kKCB0aGF0Ll9zYW5pdGl6ZVNlbGVjdG9yKCBzZWxlY3RvciApICk7XG5cblx0XHRcdC8vIHJlbW90ZSB0YWJcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIHRhYiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhcmlhLWNvbnRyb2xzLFxuXHRcdFx0XHQvLyBnZW5lcmF0ZSBhbiBpZCBieSB1c2luZyBhIHRocm93LWF3YXkgZWxlbWVudFxuXHRcdFx0XHRwYW5lbElkID0gdGFiLmF0dHIoIFwiYXJpYS1jb250cm9sc1wiICkgfHwgJCgge30gKS51bmlxdWVJZCgpWyAwIF0uaWQ7XG5cdFx0XHRcdHNlbGVjdG9yID0gXCIjXCIgKyBwYW5lbElkO1xuXHRcdFx0XHRwYW5lbCA9IHRoYXQuZWxlbWVudC5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0XHRpZiAoICFwYW5lbC5sZW5ndGggKSB7XG5cdFx0XHRcdFx0cGFuZWwgPSB0aGF0Ll9jcmVhdGVQYW5lbCggcGFuZWxJZCApO1xuXHRcdFx0XHRcdHBhbmVsLmluc2VydEFmdGVyKCB0aGF0LnBhbmVsc1sgaSAtIDEgXSB8fCB0aGF0LnRhYmxpc3QgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYW5lbC5hdHRyKCBcImFyaWEtbGl2ZVwiLCBcInBvbGl0ZVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggcGFuZWwubGVuZ3RoICkge1xuXHRcdFx0XHR0aGF0LnBhbmVscyA9IHRoYXQucGFuZWxzLmFkZCggcGFuZWwgKTtcblx0XHRcdH1cblx0XHRcdGlmICggb3JpZ2luYWxBcmlhQ29udHJvbHMgKSB7XG5cdFx0XHRcdHRhYi5kYXRhKCBcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiLCBvcmlnaW5hbEFyaWFDb250cm9scyApO1xuXHRcdFx0fVxuXHRcdFx0dGFiLmF0dHIoIHtcblx0XHRcdFx0XCJhcmlhLWNvbnRyb2xzXCI6IHBhbmVsSWQsXG5cdFx0XHRcdFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFuY2hvcklkXG5cdFx0XHR9ICk7XG5cdFx0XHRwYW5lbC5hdHRyKCBcImFyaWEtbGFiZWxsZWRieVwiLCBhbmNob3JJZCApO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMucGFuZWxzLmF0dHIoIFwicm9sZVwiLCBcInRhYnBhbmVsXCIgKTtcblx0XHR0aGlzLl9hZGRDbGFzcyggdGhpcy5wYW5lbHMsIFwidWktdGFicy1wYW5lbFwiLCBcInVpLXdpZGdldC1jb250ZW50XCIgKTtcblxuXHRcdC8vIEF2b2lkIG1lbW9yeSBsZWFrcyAoIzEwMDU2KVxuXHRcdGlmICggcHJldlRhYnMgKSB7XG5cdFx0XHR0aGlzLl9vZmYoIHByZXZUYWJzLm5vdCggdGhpcy50YWJzICkgKTtcblx0XHRcdHRoaXMuX29mZiggcHJldkFuY2hvcnMubm90KCB0aGlzLmFuY2hvcnMgKSApO1xuXHRcdFx0dGhpcy5fb2ZmKCBwcmV2UGFuZWxzLm5vdCggdGhpcy5wYW5lbHMgKSApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBBbGxvdyBvdmVycmlkaW5nIGhvdyB0byBmaW5kIHRoZSBsaXN0IGZvciByYXJlIHVzYWdlIHNjZW5hcmlvcyAoIzc3MTUpXG5cdF9nZXRMaXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy50YWJsaXN0IHx8IHRoaXMuZWxlbWVudC5maW5kKCBcIm9sLCB1bFwiICkuZXEoIDAgKTtcblx0fSxcblxuXHRfY3JlYXRlUGFuZWw6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRyZXR1cm4gJCggXCI8ZGl2PlwiIClcblx0XHRcdC5hdHRyKCBcImlkXCIsIGlkIClcblx0XHRcdC5kYXRhKCBcInVpLXRhYnMtZGVzdHJveVwiLCB0cnVlICk7XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggZGlzYWJsZWQgKSB7XG5cdFx0dmFyIGN1cnJlbnRJdGVtLCBsaSwgaTtcblxuXHRcdGlmICggJC5pc0FycmF5KCBkaXNhYmxlZCApICkge1xuXHRcdFx0aWYgKCAhZGlzYWJsZWQubGVuZ3RoICkge1xuXHRcdFx0XHRkaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggZGlzYWJsZWQubGVuZ3RoID09PSB0aGlzLmFuY2hvcnMubGVuZ3RoICkge1xuXHRcdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRGlzYWJsZSB0YWJzXG5cdFx0Zm9yICggaSA9IDA7ICggbGkgPSB0aGlzLnRhYnNbIGkgXSApOyBpKysgKSB7XG5cdFx0XHRjdXJyZW50SXRlbSA9ICQoIGxpICk7XG5cdFx0XHRpZiAoIGRpc2FibGVkID09PSB0cnVlIHx8ICQuaW5BcnJheSggaSwgZGlzYWJsZWQgKSAhPT0gLTEgKSB7XG5cdFx0XHRcdGN1cnJlbnRJdGVtLmF0dHIoIFwiYXJpYS1kaXNhYmxlZFwiLCBcInRydWVcIiApO1xuXHRcdFx0XHR0aGlzLl9hZGRDbGFzcyggY3VycmVudEl0ZW0sIG51bGwsIFwidWktc3RhdGUtZGlzYWJsZWRcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudEl0ZW0ucmVtb3ZlQXR0ciggXCJhcmlhLWRpc2FibGVkXCIgKTtcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3MoIGN1cnJlbnRJdGVtLCBudWxsLCBcInVpLXN0YXRlLWRpc2FibGVkXCIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcblxuXHRcdHRoaXMuX3RvZ2dsZUNsYXNzKCB0aGlzLndpZGdldCgpLCB0aGlzLndpZGdldEZ1bGxOYW1lICsgXCItZGlzYWJsZWRcIiwgbnVsbCxcblx0XHRcdGRpc2FibGVkID09PSB0cnVlICk7XG5cdH0sXG5cblx0X3NldHVwRXZlbnRzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGV2ZW50cyA9IHt9O1xuXHRcdGlmICggZXZlbnQgKSB7XG5cdFx0XHQkLmVhY2goIGV2ZW50LnNwbGl0KCBcIiBcIiApLCBmdW5jdGlvbiggaW5kZXgsIGV2ZW50TmFtZSApIHtcblx0XHRcdFx0ZXZlbnRzWyBldmVudE5hbWUgXSA9IFwiX2V2ZW50SGFuZGxlclwiO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX29mZiggdGhpcy5hbmNob3JzLmFkZCggdGhpcy50YWJzICkuYWRkKCB0aGlzLnBhbmVscyApICk7XG5cblx0XHQvLyBBbHdheXMgcHJldmVudCB0aGUgZGVmYXVsdCBhY3Rpb24sIGV2ZW4gd2hlbiBkaXNhYmxlZFxuXHRcdHRoaXMuX29uKCB0cnVlLCB0aGlzLmFuY2hvcnMsIHtcblx0XHRcdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHRoaXMuX29uKCB0aGlzLmFuY2hvcnMsIGV2ZW50cyApO1xuXHRcdHRoaXMuX29uKCB0aGlzLnRhYnMsIHsga2V5ZG93bjogXCJfdGFiS2V5ZG93blwiIH0gKTtcblx0XHR0aGlzLl9vbiggdGhpcy5wYW5lbHMsIHsga2V5ZG93bjogXCJfcGFuZWxLZXlkb3duXCIgfSApO1xuXG5cdFx0dGhpcy5fZm9jdXNhYmxlKCB0aGlzLnRhYnMgKTtcblx0XHR0aGlzLl9ob3ZlcmFibGUoIHRoaXMudGFicyApO1xuXHR9LFxuXG5cdF9zZXR1cEhlaWdodFN0eWxlOiBmdW5jdGlvbiggaGVpZ2h0U3R5bGUgKSB7XG5cdFx0dmFyIG1heEhlaWdodCxcblx0XHRcdHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKTtcblxuXHRcdGlmICggaGVpZ2h0U3R5bGUgPT09IFwiZmlsbFwiICkge1xuXHRcdFx0bWF4SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuXHRcdFx0bWF4SGVpZ2h0IC09IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIC0gdGhpcy5lbGVtZW50LmhlaWdodCgpO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQuc2libGluZ3MoIFwiOnZpc2libGVcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRwb3NpdGlvbiA9IGVsZW0uY3NzKCBcInBvc2l0aW9uXCIgKTtcblxuXHRcdFx0XHRpZiAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bWF4SGVpZ2h0IC09IGVsZW0ub3V0ZXJIZWlnaHQoIHRydWUgKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KCB0aGlzLnBhbmVscyApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtYXhIZWlnaHQgLT0gJCggdGhpcyApLm91dGVySGVpZ2h0KCB0cnVlICk7XG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMucGFuZWxzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCB0aGlzICkuaGVpZ2h0KCBNYXRoLm1heCggMCwgbWF4SGVpZ2h0IC1cblx0XHRcdFx0XHQkKCB0aGlzICkuaW5uZXJIZWlnaHQoKSArICQoIHRoaXMgKS5oZWlnaHQoKSApICk7XG5cdFx0XHR9IClcblx0XHRcdFx0LmNzcyggXCJvdmVyZmxvd1wiLCBcImF1dG9cIiApO1xuXHRcdH0gZWxzZSBpZiAoIGhlaWdodFN0eWxlID09PSBcImF1dG9cIiApIHtcblx0XHRcdG1heEhlaWdodCA9IDA7XG5cdFx0XHR0aGlzLnBhbmVscy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0bWF4SGVpZ2h0ID0gTWF0aC5tYXgoIG1heEhlaWdodCwgJCggdGhpcyApLmhlaWdodCggXCJcIiApLmhlaWdodCgpICk7XG5cdFx0XHR9ICkuaGVpZ2h0KCBtYXhIZWlnaHQgKTtcblx0XHR9XG5cdH0sXG5cblx0X2V2ZW50SGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0YWN0aXZlID0gdGhpcy5hY3RpdmUsXG5cdFx0XHRhbmNob3IgPSAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICksXG5cdFx0XHR0YWIgPSBhbmNob3IuY2xvc2VzdCggXCJsaVwiICksXG5cdFx0XHRjbGlja2VkSXNBY3RpdmUgPSB0YWJbIDAgXSA9PT0gYWN0aXZlWyAwIF0sXG5cdFx0XHRjb2xsYXBzaW5nID0gY2xpY2tlZElzQWN0aXZlICYmIG9wdGlvbnMuY29sbGFwc2libGUsXG5cdFx0XHR0b1Nob3cgPSBjb2xsYXBzaW5nID8gJCgpIDogdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRhYiApLFxuXHRcdFx0dG9IaWRlID0gIWFjdGl2ZS5sZW5ndGggPyAkKCkgOiB0aGlzLl9nZXRQYW5lbEZvclRhYiggYWN0aXZlICksXG5cdFx0XHRldmVudERhdGEgPSB7XG5cdFx0XHRcdG9sZFRhYjogYWN0aXZlLFxuXHRcdFx0XHRvbGRQYW5lbDogdG9IaWRlLFxuXHRcdFx0XHRuZXdUYWI6IGNvbGxhcHNpbmcgPyAkKCkgOiB0YWIsXG5cdFx0XHRcdG5ld1BhbmVsOiB0b1Nob3dcblx0XHRcdH07XG5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKCB0YWIuaGFzQ2xhc3MoIFwidWktc3RhdGUtZGlzYWJsZWRcIiApIHx8XG5cblx0XHRcdFx0Ly8gdGFiIGlzIGFscmVhZHkgbG9hZGluZ1xuXHRcdFx0XHR0YWIuaGFzQ2xhc3MoIFwidWktdGFicy1sb2FkaW5nXCIgKSB8fFxuXG5cdFx0XHRcdC8vIGNhbid0IHN3aXRjaCBkdXJuaW5nIGFuIGFuaW1hdGlvblxuXHRcdFx0XHR0aGlzLnJ1bm5pbmcgfHxcblxuXHRcdFx0XHQvLyBjbGljayBvbiBhY3RpdmUgaGVhZGVyLCBidXQgbm90IGNvbGxhcHNpYmxlXG5cdFx0XHRcdCggY2xpY2tlZElzQWN0aXZlICYmICFvcHRpb25zLmNvbGxhcHNpYmxlICkgfHxcblxuXHRcdFx0XHQvLyBhbGxvdyBjYW5jZWxpbmcgYWN0aXZhdGlvblxuXHRcdFx0XHQoIHRoaXMuX3RyaWdnZXIoIFwiYmVmb3JlQWN0aXZhdGVcIiwgZXZlbnQsIGV2ZW50RGF0YSApID09PSBmYWxzZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMuYWN0aXZlID0gY29sbGFwc2luZyA/IGZhbHNlIDogdGhpcy50YWJzLmluZGV4KCB0YWIgKTtcblxuXHRcdHRoaXMuYWN0aXZlID0gY2xpY2tlZElzQWN0aXZlID8gJCgpIDogdGFiO1xuXHRcdGlmICggdGhpcy54aHIgKSB7XG5cdFx0XHR0aGlzLnhoci5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdGlmICggIXRvSGlkZS5sZW5ndGggJiYgIXRvU2hvdy5sZW5ndGggKSB7XG5cdFx0XHQkLmVycm9yKCBcImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLlwiICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0b1Nob3cubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5sb2FkKCB0aGlzLnRhYnMuaW5kZXgoIHRhYiApLCBldmVudCApO1xuXHRcdH1cblx0XHR0aGlzLl90b2dnbGUoIGV2ZW50LCBldmVudERhdGEgKTtcblx0fSxcblxuXHQvLyBIYW5kbGVzIHNob3cvaGlkZSBmb3Igc2VsZWN0aW5nIHRhYnNcblx0X3RvZ2dsZTogZnVuY3Rpb24oIGV2ZW50LCBldmVudERhdGEgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0dG9TaG93ID0gZXZlbnREYXRhLm5ld1BhbmVsLFxuXHRcdFx0dG9IaWRlID0gZXZlbnREYXRhLm9sZFBhbmVsO1xuXG5cdFx0dGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuXHRcdGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuXHRcdFx0dGhhdC5ydW5uaW5nID0gZmFsc2U7XG5cdFx0XHR0aGF0Ll90cmlnZ2VyKCBcImFjdGl2YXRlXCIsIGV2ZW50LCBldmVudERhdGEgKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzaG93KCkge1xuXHRcdFx0dGhhdC5fYWRkQ2xhc3MoIGV2ZW50RGF0YS5uZXdUYWIuY2xvc2VzdCggXCJsaVwiICksIFwidWktdGFicy1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXG5cdFx0XHRpZiAoIHRvU2hvdy5sZW5ndGggJiYgdGhhdC5vcHRpb25zLnNob3cgKSB7XG5cdFx0XHRcdHRoYXQuX3Nob3coIHRvU2hvdywgdGhhdC5vcHRpb25zLnNob3csIGNvbXBsZXRlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b1Nob3cuc2hvdygpO1xuXHRcdFx0XHRjb21wbGV0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN0YXJ0IG91dCBieSBoaWRpbmcsIHRoZW4gc2hvd2luZywgdGhlbiBjb21wbGV0aW5nXG5cdFx0aWYgKCB0b0hpZGUubGVuZ3RoICYmIHRoaXMub3B0aW9ucy5oaWRlICkge1xuXHRcdFx0dGhpcy5faGlkZSggdG9IaWRlLCB0aGlzLm9wdGlvbnMuaGlkZSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoYXQuX3JlbW92ZUNsYXNzKCBldmVudERhdGEub2xkVGFiLmNsb3Nlc3QoIFwibGlcIiApLFxuXHRcdFx0XHRcdFwidWktdGFicy1hY3RpdmVcIiwgXCJ1aS1zdGF0ZS1hY3RpdmVcIiApO1xuXHRcdFx0XHRzaG93KCk7XG5cdFx0XHR9ICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3JlbW92ZUNsYXNzKCBldmVudERhdGEub2xkVGFiLmNsb3Nlc3QoIFwibGlcIiApLFxuXHRcdFx0XHRcInVpLXRhYnMtYWN0aXZlXCIsIFwidWktc3RhdGUtYWN0aXZlXCIgKTtcblx0XHRcdHRvSGlkZS5oaWRlKCk7XG5cdFx0XHRzaG93KCk7XG5cdFx0fVxuXG5cdFx0dG9IaWRlLmF0dHIoIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIgKTtcblx0XHRldmVudERhdGEub2xkVGFiLmF0dHIoIHtcblx0XHRcdFwiYXJpYS1zZWxlY3RlZFwiOiBcImZhbHNlXCIsXG5cdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiXG5cdFx0fSApO1xuXG5cdFx0Ly8gSWYgd2UncmUgc3dpdGNoaW5nIHRhYnMsIHJlbW92ZSB0aGUgb2xkIHRhYiBmcm9tIHRoZSB0YWIgb3JkZXIuXG5cdFx0Ly8gSWYgd2UncmUgb3BlbmluZyBmcm9tIGNvbGxhcHNlZCBzdGF0ZSwgcmVtb3ZlIHRoZSBwcmV2aW91cyB0YWIgZnJvbSB0aGUgdGFiIG9yZGVyLlxuXHRcdC8vIElmIHdlJ3JlIGNvbGxhcHNpbmcsIHRoZW4ga2VlcCB0aGUgY29sbGFwc2luZyB0YWIgaW4gdGhlIHRhYiBvcmRlci5cblx0XHRpZiAoIHRvU2hvdy5sZW5ndGggJiYgdG9IaWRlLmxlbmd0aCApIHtcblx0XHRcdGV2ZW50RGF0YS5vbGRUYWIuYXR0ciggXCJ0YWJJbmRleFwiLCAtMSApO1xuXHRcdH0gZWxzZSBpZiAoIHRvU2hvdy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnRhYnMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICQoIHRoaXMgKS5hdHRyKCBcInRhYkluZGV4XCIgKSA9PT0gMDtcblx0XHRcdH0gKVxuXHRcdFx0XHQuYXR0ciggXCJ0YWJJbmRleFwiLCAtMSApO1xuXHRcdH1cblxuXHRcdHRvU2hvdy5hdHRyKCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIiApO1xuXHRcdGV2ZW50RGF0YS5uZXdUYWIuYXR0cigge1xuXHRcdFx0XCJhcmlhLXNlbGVjdGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0XCJhcmlhLWV4cGFuZGVkXCI6IFwidHJ1ZVwiLFxuXHRcdFx0dGFiSW5kZXg6IDBcblx0XHR9ICk7XG5cdH0sXG5cblx0X2FjdGl2YXRlOiBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0dmFyIGFuY2hvcixcblx0XHRcdGFjdGl2ZSA9IHRoaXMuX2ZpbmRBY3RpdmUoIGluZGV4ICk7XG5cblx0XHQvLyBUcnlpbmcgdG8gYWN0aXZhdGUgdGhlIGFscmVhZHkgYWN0aXZlIHBhbmVsXG5cdFx0aWYgKCBhY3RpdmVbIDAgXSA9PT0gdGhpcy5hY3RpdmVbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUcnlpbmcgdG8gY29sbGFwc2UsIHNpbXVsYXRlIGEgY2xpY2sgb24gdGhlIGN1cnJlbnQgYWN0aXZlIGhlYWRlclxuXHRcdGlmICggIWFjdGl2ZS5sZW5ndGggKSB7XG5cdFx0XHRhY3RpdmUgPSB0aGlzLmFjdGl2ZTtcblx0XHR9XG5cblx0XHRhbmNob3IgPSBhY3RpdmUuZmluZCggXCIudWktdGFicy1hbmNob3JcIiApWyAwIF07XG5cdFx0dGhpcy5fZXZlbnRIYW5kbGVyKCB7XG5cdFx0XHR0YXJnZXQ6IGFuY2hvcixcblx0XHRcdGN1cnJlbnRUYXJnZXQ6IGFuY2hvcixcblx0XHRcdHByZXZlbnREZWZhdWx0OiAkLm5vb3Bcblx0XHR9ICk7XG5cdH0sXG5cblx0X2ZpbmRBY3RpdmU6IGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRyZXR1cm4gaW5kZXggPT09IGZhbHNlID8gJCgpIDogdGhpcy50YWJzLmVxKCBpbmRleCApO1xuXHR9LFxuXG5cdF9nZXRJbmRleDogZnVuY3Rpb24oIGluZGV4ICkge1xuXG5cdFx0Ly8gbWV0YS1mdW5jdGlvbiB0byBnaXZlIHVzZXJzIG9wdGlvbiB0byBwcm92aWRlIGEgaHJlZiBzdHJpbmcgaW5zdGVhZCBvZiBhIG51bWVyaWNhbCBpbmRleC5cblx0XHRpZiAoIHR5cGVvZiBpbmRleCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGluZGV4ID0gdGhpcy5hbmNob3JzLmluZGV4KCB0aGlzLmFuY2hvcnMuZmlsdGVyKCBcIltocmVmJD0nXCIgK1xuXHRcdFx0XHQkLnVpLmVzY2FwZVNlbGVjdG9yKCBpbmRleCApICsgXCInXVwiICkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5kZXg7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy54aHIgKSB7XG5cdFx0XHR0aGlzLnhoci5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdHRoaXMudGFibGlzdFxuXHRcdFx0LnJlbW92ZUF0dHIoIFwicm9sZVwiIClcblx0XHRcdC5vZmYoIHRoaXMuZXZlbnROYW1lc3BhY2UgKTtcblxuXHRcdHRoaXMuYW5jaG9yc1xuXHRcdFx0LnJlbW92ZUF0dHIoIFwicm9sZSB0YWJJbmRleFwiIClcblx0XHRcdC5yZW1vdmVVbmlxdWVJZCgpO1xuXG5cdFx0dGhpcy50YWJzLmFkZCggdGhpcy5wYW5lbHMgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggJC5kYXRhKCB0aGlzLCBcInVpLXRhYnMtZGVzdHJveVwiICkgKSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5yZW1vdmUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQoIHRoaXMgKS5yZW1vdmVBdHRyKCBcInJvbGUgdGFiSW5kZXggXCIgK1xuXHRcdFx0XHRcdFwiYXJpYS1saXZlIGFyaWEtYnVzeSBhcmlhLXNlbGVjdGVkIGFyaWEtbGFiZWxsZWRieSBhcmlhLWhpZGRlbiBhcmlhLWV4cGFuZGVkXCIgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLnRhYnMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbGkgPSAkKCB0aGlzICksXG5cdFx0XHRcdHByZXYgPSBsaS5kYXRhKCBcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiICk7XG5cdFx0XHRpZiAoIHByZXYgKSB7XG5cdFx0XHRcdGxpXG5cdFx0XHRcdFx0LmF0dHIoIFwiYXJpYS1jb250cm9sc1wiLCBwcmV2IClcblx0XHRcdFx0XHQucmVtb3ZlRGF0YSggXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGkucmVtb3ZlQXR0ciggXCJhcmlhLWNvbnRyb2xzXCIgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHR0aGlzLnBhbmVscy5zaG93KCk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSAhPT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHR0aGlzLnBhbmVscy5jc3MoIFwiaGVpZ2h0XCIsIFwiXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZW5hYmxlOiBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0dmFyIGRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuXHRcdGlmICggZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGRpc2FibGVkID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluZGV4ID0gdGhpcy5fZ2V0SW5kZXgoIGluZGV4ICk7XG5cdFx0XHRpZiAoICQuaXNBcnJheSggZGlzYWJsZWQgKSApIHtcblx0XHRcdFx0ZGlzYWJsZWQgPSAkLm1hcCggZGlzYWJsZWQsIGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bSAhPT0gaW5kZXggPyBudW0gOiBudWxsO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaXNhYmxlZCA9ICQubWFwKCB0aGlzLnRhYnMsIGZ1bmN0aW9uKCBsaSwgbnVtICkge1xuXHRcdFx0XHRcdHJldHVybiBudW0gIT09IGluZGV4ID8gbnVtIDogbnVsbDtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggZGlzYWJsZWQgKTtcblx0fSxcblxuXHRkaXNhYmxlOiBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0dmFyIGRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuXHRcdGlmICggZGlzYWJsZWQgPT09IHRydWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmRleCA9IHRoaXMuX2dldEluZGV4KCBpbmRleCApO1xuXHRcdFx0aWYgKCAkLmluQXJyYXkoIGluZGV4LCBkaXNhYmxlZCApICE9PSAtMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAkLmlzQXJyYXkoIGRpc2FibGVkICkgKSB7XG5cdFx0XHRcdGRpc2FibGVkID0gJC5tZXJnZSggWyBpbmRleCBdLCBkaXNhYmxlZCApLnNvcnQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpc2FibGVkID0gWyBpbmRleCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCggZGlzYWJsZWQgKTtcblx0fSxcblxuXHRsb2FkOiBmdW5jdGlvbiggaW5kZXgsIGV2ZW50ICkge1xuXHRcdGluZGV4ID0gdGhpcy5fZ2V0SW5kZXgoIGluZGV4ICk7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0dGFiID0gdGhpcy50YWJzLmVxKCBpbmRleCApLFxuXHRcdFx0YW5jaG9yID0gdGFiLmZpbmQoIFwiLnVpLXRhYnMtYW5jaG9yXCIgKSxcblx0XHRcdHBhbmVsID0gdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRhYiApLFxuXHRcdFx0ZXZlbnREYXRhID0ge1xuXHRcdFx0XHR0YWI6IHRhYixcblx0XHRcdFx0cGFuZWw6IHBhbmVsXG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGUgPSBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHR0aGF0LnBhbmVscy5zdG9wKCBmYWxzZSwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhhdC5fcmVtb3ZlQ2xhc3MoIHRhYiwgXCJ1aS10YWJzLWxvYWRpbmdcIiApO1xuXHRcdFx0XHRwYW5lbC5yZW1vdmVBdHRyKCBcImFyaWEtYnVzeVwiICk7XG5cblx0XHRcdFx0aWYgKCBqcVhIUiA9PT0gdGhhdC54aHIgKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoYXQueGhyO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gTm90IHJlbW90ZVxuXHRcdGlmICggdGhpcy5faXNMb2NhbCggYW5jaG9yWyAwIF0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnhociA9ICQuYWpheCggdGhpcy5fYWpheFNldHRpbmdzKCBhbmNob3IsIGV2ZW50LCBldmVudERhdGEgKSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogalF1ZXJ5IDwxLjhcblx0XHQvLyBqUXVlcnkgPDEuOCByZXR1cm5zIGZhbHNlIGlmIHRoZSByZXF1ZXN0IGlzIGNhbmNlbGVkIGluIGJlZm9yZVNlbmQsXG5cdFx0Ly8gYnV0IGFzIG9mIDEuOCwgJC5hamF4KCkgYWx3YXlzIHJldHVybnMgYSBqcVhIUiBvYmplY3QuXG5cdFx0aWYgKCB0aGlzLnhociAmJiB0aGlzLnhoci5zdGF0dXNUZXh0ICE9PSBcImNhbmNlbGVkXCIgKSB7XG5cdFx0XHR0aGlzLl9hZGRDbGFzcyggdGFiLCBcInVpLXRhYnMtbG9hZGluZ1wiICk7XG5cdFx0XHRwYW5lbC5hdHRyKCBcImFyaWEtYnVzeVwiLCBcInRydWVcIiApO1xuXG5cdFx0XHR0aGlzLnhoclxuXHRcdFx0XHQuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlLCBzdGF0dXMsIGpxWEhSICkge1xuXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydDogalF1ZXJ5IDwxLjhcblx0XHRcdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMTc3OFxuXHRcdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cGFuZWwuaHRtbCggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdHRoYXQuX3RyaWdnZXIoIFwibG9hZFwiLCBldmVudCwgZXZlbnREYXRhICk7XG5cblx0XHRcdFx0XHRcdGNvbXBsZXRlKCBqcVhIUiwgc3RhdHVzICk7XG5cdFx0XHRcdFx0fSwgMSApO1xuXHRcdFx0XHR9IClcblx0XHRcdFx0LmZhaWwoIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydDogalF1ZXJ5IDwxLjhcblx0XHRcdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMTc3OFxuXHRcdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Y29tcGxldGUoIGpxWEhSLCBzdGF0dXMgKTtcblx0XHRcdFx0XHR9LCAxICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0X2FqYXhTZXR0aW5nczogZnVuY3Rpb24oIGFuY2hvciwgZXZlbnQsIGV2ZW50RGF0YSApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0cmV0dXJuIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPDExIG9ubHlcblx0XHRcdC8vIFN0cmlwIGFueSBoYXNoIHRoYXQgZXhpc3RzIHRvIHByZXZlbnQgZXJyb3JzIHdpdGggdGhlIEFqYXggcmVxdWVzdFxuXHRcdFx0dXJsOiBhbmNob3IuYXR0ciggXCJocmVmXCIgKS5yZXBsYWNlKCAvIy4qJC8sIFwiXCIgKSxcblx0XHRcdGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCBqcVhIUiwgc2V0dGluZ3MgKSB7XG5cdFx0XHRcdHJldHVybiB0aGF0Ll90cmlnZ2VyKCBcImJlZm9yZUxvYWRcIiwgZXZlbnQsXG5cdFx0XHRcdFx0JC5leHRlbmQoIHsganFYSFI6IGpxWEhSLCBhamF4U2V0dGluZ3M6IHNldHRpbmdzIH0sIGV2ZW50RGF0YSApICk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSxcblxuXHRfZ2V0UGFuZWxGb3JUYWI6IGZ1bmN0aW9uKCB0YWIgKSB7XG5cdFx0dmFyIGlkID0gJCggdGFiICkuYXR0ciggXCJhcmlhLWNvbnRyb2xzXCIgKTtcblx0XHRyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQoIHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIFwiI1wiICsgaWQgKSApO1xuXHR9XG59ICk7XG5cbi8vIERFUFJFQ0FURURcbi8vIFRPRE86IFN3aXRjaCByZXR1cm4gYmFjayB0byB3aWRnZXQgZGVjbGFyYXRpb24gYXQgdG9wIG9mIGZpbGUgd2hlbiB0aGlzIGlzIHJlbW92ZWRcbmlmICggJC51aUJhY2tDb21wYXQgIT09IGZhbHNlICkge1xuXG5cdC8vIEJhY2tjb21wYXQgZm9yIHVpLXRhYiBjbGFzcyAobm93IHVpLXRhYnMtdGFiKVxuXHQkLndpZGdldCggXCJ1aS50YWJzXCIsICQudWkudGFicywge1xuXHRcdF9wcm9jZXNzVGFiczogZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLl9zdXBlckFwcGx5KCBhcmd1bWVudHMgKTtcblx0XHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLnRhYnMsIFwidWktdGFiXCIgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxudmFyIHdpZGdldHNUYWJzID0gJC51aS50YWJzO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIFRvb2x0aXAgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFRvb2x0aXBcbi8vPj5ncm91cDogV2lkZ2V0c1xuLy8+PmRlc2NyaXB0aW9uOiBTaG93cyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhbnkgZWxlbWVudCBvbiBob3ZlciBvciBmb2N1cy5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS90b29sdGlwL1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL3Rvb2x0aXAvXG4vLz4+Y3NzLnN0cnVjdHVyZTogLi4vLi4vdGhlbWVzL2Jhc2UvY29yZS5jc3Ncbi8vPj5jc3Muc3RydWN0dXJlOiAuLi8uLi90aGVtZXMvYmFzZS90b29sdGlwLmNzc1xuLy8+PmNzcy50aGVtZTogLi4vLi4vdGhlbWVzL2Jhc2UvdGhlbWUuY3NzXG5cblxuXG4kLndpZGdldCggXCJ1aS50b29sdGlwXCIsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblx0b3B0aW9uczoge1xuXHRcdGNsYXNzZXM6IHtcblx0XHRcdFwidWktdG9vbHRpcFwiOiBcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LXNoYWRvd1wiXG5cdFx0fSxcblx0XHRjb250ZW50OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gc3VwcG9ydDogSUU8OSwgT3BlcmEgaW4galF1ZXJ5IDwxLjdcblx0XHRcdC8vIC50ZXh0KCkgY2FuJ3QgYWNjZXB0IHVuZGVmaW5lZCwgc28gY29lcmNlIHRvIGEgc3RyaW5nXG5cdFx0XHR2YXIgdGl0bGUgPSAkKCB0aGlzICkuYXR0ciggXCJ0aXRsZVwiICkgfHwgXCJcIjtcblxuXHRcdFx0Ly8gRXNjYXBlIHRpdGxlLCBzaW5jZSB3ZSdyZSBnb2luZyBmcm9tIGFuIGF0dHJpYnV0ZSB0byByYXcgSFRNTFxuXHRcdFx0cmV0dXJuICQoIFwiPGE+XCIgKS50ZXh0KCB0aXRsZSApLmh0bWwoKTtcblx0XHR9LFxuXHRcdGhpZGU6IHRydWUsXG5cblx0XHQvLyBEaXNhYmxlZCBlbGVtZW50cyBoYXZlIGluY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgYnJvd3NlcnMgKCM4NjYxKVxuXHRcdGl0ZW1zOiBcIlt0aXRsZV06bm90KFtkaXNhYmxlZF0pXCIsXG5cdFx0cG9zaXRpb246IHtcblx0XHRcdG15OiBcImxlZnQgdG9wKzE1XCIsXG5cdFx0XHRhdDogXCJsZWZ0IGJvdHRvbVwiLFxuXHRcdFx0Y29sbGlzaW9uOiBcImZsaXBmaXQgZmxpcFwiXG5cdFx0fSxcblx0XHRzaG93OiB0cnVlLFxuXHRcdHRyYWNrOiBmYWxzZSxcblxuXHRcdC8vIENhbGxiYWNrc1xuXHRcdGNsb3NlOiBudWxsLFxuXHRcdG9wZW46IG51bGxcblx0fSxcblxuXHRfYWRkRGVzY3JpYmVkQnk6IGZ1bmN0aW9uKCBlbGVtLCBpZCApIHtcblx0XHR2YXIgZGVzY3JpYmVkYnkgPSAoIGVsZW0uYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIgKSB8fCBcIlwiICkuc3BsaXQoIC9cXHMrLyApO1xuXHRcdGRlc2NyaWJlZGJ5LnB1c2goIGlkICk7XG5cdFx0ZWxlbVxuXHRcdFx0LmRhdGEoIFwidWktdG9vbHRpcC1pZFwiLCBpZCApXG5cdFx0XHQuYXR0ciggXCJhcmlhLWRlc2NyaWJlZGJ5XCIsICQudHJpbSggZGVzY3JpYmVkYnkuam9pbiggXCIgXCIgKSApICk7XG5cdH0sXG5cblx0X3JlbW92ZURlc2NyaWJlZEJ5OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgaWQgPSBlbGVtLmRhdGEoIFwidWktdG9vbHRpcC1pZFwiICksXG5cdFx0XHRkZXNjcmliZWRieSA9ICggZWxlbS5hdHRyKCBcImFyaWEtZGVzY3JpYmVkYnlcIiApIHx8IFwiXCIgKS5zcGxpdCggL1xccysvICksXG5cdFx0XHRpbmRleCA9ICQuaW5BcnJheSggaWQsIGRlc2NyaWJlZGJ5ICk7XG5cblx0XHRpZiAoIGluZGV4ICE9PSAtMSApIHtcblx0XHRcdGRlc2NyaWJlZGJ5LnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHR9XG5cblx0XHRlbGVtLnJlbW92ZURhdGEoIFwidWktdG9vbHRpcC1pZFwiICk7XG5cdFx0ZGVzY3JpYmVkYnkgPSAkLnRyaW0oIGRlc2NyaWJlZGJ5LmpvaW4oIFwiIFwiICkgKTtcblx0XHRpZiAoIGRlc2NyaWJlZGJ5ICkge1xuXHRcdFx0ZWxlbS5hdHRyKCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgZGVzY3JpYmVkYnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5yZW1vdmVBdHRyKCBcImFyaWEtZGVzY3JpYmVkYnlcIiApO1xuXHRcdH1cblx0fSxcblxuXHRfY3JlYXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl9vbigge1xuXHRcdFx0bW91c2VvdmVyOiBcIm9wZW5cIixcblx0XHRcdGZvY3VzaW46IFwib3BlblwiXG5cdFx0fSApO1xuXG5cdFx0Ly8gSURzIG9mIGdlbmVyYXRlZCB0b29sdGlwcywgbmVlZGVkIGZvciBkZXN0cm95XG5cdFx0dGhpcy50b29sdGlwcyA9IHt9O1xuXG5cdFx0Ly8gSURzIG9mIHBhcmVudCB0b29sdGlwcyB3aGVyZSB3ZSByZW1vdmVkIHRoZSB0aXRsZSBhdHRyaWJ1dGVcblx0XHR0aGlzLnBhcmVudHMgPSB7fTtcblxuXHRcdC8vIEFwcGVuZCB0aGUgYXJpYS1saXZlIHJlZ2lvbiBzbyB0b29sdGlwcyBhbm5vdW5jZSBjb3JyZWN0bHlcblx0XHR0aGlzLmxpdmVSZWdpb24gPSAkKCBcIjxkaXY+XCIgKVxuXHRcdFx0LmF0dHIoIHtcblx0XHRcdFx0cm9sZTogXCJsb2dcIixcblx0XHRcdFx0XCJhcmlhLWxpdmVcIjogXCJhc3NlcnRpdmVcIixcblx0XHRcdFx0XCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zXCJcblx0XHRcdH0gKVxuXHRcdFx0LmFwcGVuZFRvKCB0aGlzLmRvY3VtZW50WyAwIF0uYm9keSApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0aGlzLmxpdmVSZWdpb24sIG51bGwsIFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIgKTtcblxuXHRcdHRoaXMuZGlzYWJsZWRUaXRsZXMgPSAkKCBbXSApO1xuXHR9LFxuXG5cdF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdHRoaXMuX3N1cGVyKCBrZXksIHZhbHVlICk7XG5cblx0XHRpZiAoIGtleSA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHQkLmVhY2goIHRoaXMudG9vbHRpcHMsIGZ1bmN0aW9uKCBpZCwgdG9vbHRpcERhdGEgKSB7XG5cdFx0XHRcdHRoYXQuX3VwZGF0ZUNvbnRlbnQoIHRvb2x0aXBEYXRhLmVsZW1lbnQgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cdH0sXG5cblx0X3NldE9wdGlvbkRpc2FibGVkOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpc1sgdmFsdWUgPyBcIl9kaXNhYmxlXCIgOiBcIl9lbmFibGVcIiBdKCk7XG5cdH0sXG5cblx0X2Rpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblxuXHRcdC8vIENsb3NlIG9wZW4gdG9vbHRpcHNcblx0XHQkLmVhY2goIHRoaXMudG9vbHRpcHMsIGZ1bmN0aW9uKCBpZCwgdG9vbHRpcERhdGEgKSB7XG5cdFx0XHR2YXIgZXZlbnQgPSAkLkV2ZW50KCBcImJsdXJcIiApO1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCA9IHRvb2x0aXBEYXRhLmVsZW1lbnRbIDAgXTtcblx0XHRcdHRoYXQuY2xvc2UoIGV2ZW50LCB0cnVlICk7XG5cdFx0fSApO1xuXG5cdFx0Ly8gUmVtb3ZlIHRpdGxlIGF0dHJpYnV0ZXMgdG8gcHJldmVudCBuYXRpdmUgdG9vbHRpcHNcblx0XHR0aGlzLmRpc2FibGVkVGl0bGVzID0gdGhpcy5kaXNhYmxlZFRpdGxlcy5hZGQoXG5cdFx0XHR0aGlzLmVsZW1lbnQuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zICkuYWRkQmFjaygpXG5cdFx0XHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBlbGVtZW50ID0gJCggdGhpcyApO1xuXHRcdFx0XHRcdGlmICggZWxlbWVudC5pcyggXCJbdGl0bGVdXCIgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdC5kYXRhKCBcInVpLXRvb2x0aXAtdGl0bGVcIiwgZWxlbWVudC5hdHRyKCBcInRpdGxlXCIgKSApXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVBdHRyKCBcInRpdGxlXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKVxuXHRcdCk7XG5cdH0sXG5cblx0X2VuYWJsZTogZnVuY3Rpb24oKSB7XG5cblx0XHQvLyByZXN0b3JlIHRpdGxlIGF0dHJpYnV0ZXNcblx0XHR0aGlzLmRpc2FibGVkVGl0bGVzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICk7XG5cdFx0XHRpZiAoIGVsZW1lbnQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIgKSApIHtcblx0XHRcdFx0ZWxlbWVudC5hdHRyKCBcInRpdGxlXCIsIGVsZW1lbnQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIgKSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHR0aGlzLmRpc2FibGVkVGl0bGVzID0gJCggW10gKTtcblx0fSxcblxuXHRvcGVuOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0dGFyZ2V0ID0gJCggZXZlbnQgPyBldmVudC50YXJnZXQgOiB0aGlzLmVsZW1lbnQgKVxuXG5cdFx0XHRcdC8vIHdlIG5lZWQgY2xvc2VzdCBoZXJlIGR1ZSB0byBtb3VzZW92ZXIgYnViYmxpbmcsXG5cdFx0XHRcdC8vIGJ1dCBhbHdheXMgcG9pbnRpbmcgYXQgdGhlIHNhbWUgZXZlbnQgdGFyZ2V0XG5cdFx0XHRcdC5jbG9zZXN0KCB0aGlzLm9wdGlvbnMuaXRlbXMgKTtcblxuXHRcdC8vIE5vIGVsZW1lbnQgdG8gc2hvdyBhIHRvb2x0aXAgZm9yIG9yIHRoZSB0b29sdGlwIGlzIGFscmVhZHkgb3BlblxuXHRcdGlmICggIXRhcmdldC5sZW5ndGggfHwgdGFyZ2V0LmRhdGEoIFwidWktdG9vbHRpcC1pZFwiICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0YXJnZXQuYXR0ciggXCJ0aXRsZVwiICkgKSB7XG5cdFx0XHR0YXJnZXQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIsIHRhcmdldC5hdHRyKCBcInRpdGxlXCIgKSApO1xuXHRcdH1cblxuXHRcdHRhcmdldC5kYXRhKCBcInVpLXRvb2x0aXAtb3BlblwiLCB0cnVlICk7XG5cblx0XHQvLyBLaWxsIHBhcmVudCB0b29sdGlwcywgY3VzdG9tIG9yIG5hdGl2ZSwgZm9yIGhvdmVyXG5cdFx0aWYgKCBldmVudCAmJiBldmVudC50eXBlID09PSBcIm1vdXNlb3ZlclwiICkge1xuXHRcdFx0dGFyZ2V0LnBhcmVudHMoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHBhcmVudCA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRibHVyRXZlbnQ7XG5cdFx0XHRcdGlmICggcGFyZW50LmRhdGEoIFwidWktdG9vbHRpcC1vcGVuXCIgKSApIHtcblx0XHRcdFx0XHRibHVyRXZlbnQgPSAkLkV2ZW50KCBcImJsdXJcIiApO1xuXHRcdFx0XHRcdGJsdXJFdmVudC50YXJnZXQgPSBibHVyRXZlbnQuY3VycmVudFRhcmdldCA9IHRoaXM7XG5cdFx0XHRcdFx0dGhhdC5jbG9zZSggYmx1ckV2ZW50LCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBwYXJlbnQuYXR0ciggXCJ0aXRsZVwiICkgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnVuaXF1ZUlkKCk7XG5cdFx0XHRcdFx0dGhhdC5wYXJlbnRzWyB0aGlzLmlkIF0gPSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50OiB0aGlzLFxuXHRcdFx0XHRcdFx0dGl0bGU6IHBhcmVudC5hdHRyKCBcInRpdGxlXCIgKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0cGFyZW50LmF0dHIoIFwidGl0bGVcIiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcmVnaXN0ZXJDbG9zZUhhbmRsZXJzKCBldmVudCwgdGFyZ2V0ICk7XG5cdFx0dGhpcy5fdXBkYXRlQ29udGVudCggdGFyZ2V0LCBldmVudCApO1xuXHR9LFxuXG5cdF91cGRhdGVDb250ZW50OiBmdW5jdGlvbiggdGFyZ2V0LCBldmVudCApIHtcblx0XHR2YXIgY29udGVudCxcblx0XHRcdGNvbnRlbnRPcHRpb24gPSB0aGlzLm9wdGlvbnMuY29udGVudCxcblx0XHRcdHRoYXQgPSB0aGlzLFxuXHRcdFx0ZXZlbnRUeXBlID0gZXZlbnQgPyBldmVudC50eXBlIDogbnVsbDtcblxuXHRcdGlmICggdHlwZW9mIGNvbnRlbnRPcHRpb24gPT09IFwic3RyaW5nXCIgfHwgY29udGVudE9wdGlvbi5ub2RlVHlwZSB8fFxuXHRcdFx0XHRjb250ZW50T3B0aW9uLmpxdWVyeSApIHtcblx0XHRcdHJldHVybiB0aGlzLl9vcGVuKCBldmVudCwgdGFyZ2V0LCBjb250ZW50T3B0aW9uICk7XG5cdFx0fVxuXG5cdFx0Y29udGVudCA9IGNvbnRlbnRPcHRpb24uY2FsbCggdGFyZ2V0WyAwIF0sIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0Ly8gSUUgbWF5IGluc3RhbnRseSBzZXJ2ZSBhIGNhY2hlZCByZXNwb25zZSBmb3IgYWpheCByZXF1ZXN0c1xuXHRcdFx0Ly8gZGVsYXkgdGhpcyBjYWxsIHRvIF9vcGVuIHNvIHRoZSBvdGhlciBjYWxsIHRvIF9vcGVuIHJ1bnMgZmlyc3Rcblx0XHRcdHRoYXQuX2RlbGF5KCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYXN5bmMgcmVzcG9uc2UgaWYgdG9vbHRpcCB3YXMgY2xvc2VkIGFscmVhZHlcblx0XHRcdFx0aWYgKCAhdGFyZ2V0LmRhdGEoIFwidWktdG9vbHRpcC1vcGVuXCIgKSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBKUXVlcnkgY3JlYXRlcyBhIHNwZWNpYWwgZXZlbnQgZm9yIGZvY3VzaW4gd2hlbiBpdCBkb2Vzbid0XG5cdFx0XHRcdC8vIGV4aXN0IG5hdGl2ZWx5LiBUbyBpbXByb3ZlIHBlcmZvcm1hbmNlLCB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdC8vIG9iamVjdCBpcyByZXVzZWQgYW5kIHRoZSB0eXBlIGlzIGNoYW5nZWQuIFRoZXJlZm9yZSwgd2UgY2FuJ3Rcblx0XHRcdFx0Ly8gcmVseSBvbiB0aGUgdHlwZSBiZWluZyBjb3JyZWN0IGFmdGVyIHRoZSBldmVudCBmaW5pc2hlZFxuXHRcdFx0XHQvLyBidWJibGluZywgc28gd2Ugc2V0IGl0IGJhY2sgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiAoIzg3NDApXG5cdFx0XHRcdGlmICggZXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQudHlwZSA9IGV2ZW50VHlwZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9vcGVuKCBldmVudCwgdGFyZ2V0LCByZXNwb25zZSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0XHRpZiAoIGNvbnRlbnQgKSB7XG5cdFx0XHR0aGlzLl9vcGVuKCBldmVudCwgdGFyZ2V0LCBjb250ZW50ICk7XG5cdFx0fVxuXHR9LFxuXG5cdF9vcGVuOiBmdW5jdGlvbiggZXZlbnQsIHRhcmdldCwgY29udGVudCApIHtcblx0XHR2YXIgdG9vbHRpcERhdGEsIHRvb2x0aXAsIGRlbGF5ZWRTaG93LCBhMTF5Q29udGVudCxcblx0XHRcdHBvc2l0aW9uT3B0aW9uID0gJC5leHRlbmQoIHt9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24gKTtcblxuXHRcdGlmICggIWNvbnRlbnQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ29udGVudCBjYW4gYmUgdXBkYXRlZCBtdWx0aXBsZSB0aW1lcy4gSWYgdGhlIHRvb2x0aXAgYWxyZWFkeVxuXHRcdC8vIGV4aXN0cywgdGhlbiBqdXN0IHVwZGF0ZSB0aGUgY29udGVudCBhbmQgYmFpbC5cblx0XHR0b29sdGlwRGF0YSA9IHRoaXMuX2ZpbmQoIHRhcmdldCApO1xuXHRcdGlmICggdG9vbHRpcERhdGEgKSB7XG5cdFx0XHR0b29sdGlwRGF0YS50b29sdGlwLmZpbmQoIFwiLnVpLXRvb2x0aXAtY29udGVudFwiICkuaHRtbCggY29udGVudCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGhhdmUgYSB0aXRsZSwgY2xlYXIgaXQgdG8gcHJldmVudCB0aGUgbmF0aXZlIHRvb2x0aXBcblx0XHQvLyB3ZSBoYXZlIHRvIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGRlZmluaW5nIGEgdGl0bGUgaWYgbm9uZSBleGlzdHNcblx0XHQvLyAod2UgZG9uJ3Qgd2FudCB0byBjYXVzZSBhbiBlbGVtZW50IHRvIHN0YXJ0IG1hdGNoaW5nIFt0aXRsZV0pXG5cdFx0Ly9cblx0XHQvLyBXZSB1c2UgcmVtb3ZlQXR0ciBvbmx5IGZvciBrZXkgZXZlbnRzLCB0byBhbGxvdyBJRSB0byBleHBvcnQgdGhlIGNvcnJlY3Rcblx0XHQvLyBhY2Nlc3NpYmxlIGF0dHJpYnV0ZXMuIEZvciBtb3VzZSBldmVudHMsIHNldCB0byBlbXB0eSBzdHJpbmcgdG8gYXZvaWRcblx0XHQvLyBuYXRpdmUgdG9vbHRpcCBzaG93aW5nIHVwIChoYXBwZW5zIG9ubHkgd2hlbiByZW1vdmluZyBpbnNpZGUgbW91c2VvdmVyKS5cblx0XHRpZiAoIHRhcmdldC5pcyggXCJbdGl0bGVdXCIgKSApIHtcblx0XHRcdGlmICggZXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gXCJtb3VzZW92ZXJcIiApIHtcblx0XHRcdFx0dGFyZ2V0LmF0dHIoIFwidGl0bGVcIiwgXCJcIiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFyZ2V0LnJlbW92ZUF0dHIoIFwidGl0bGVcIiApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRvb2x0aXBEYXRhID0gdGhpcy5fdG9vbHRpcCggdGFyZ2V0ICk7XG5cdFx0dG9vbHRpcCA9IHRvb2x0aXBEYXRhLnRvb2x0aXA7XG5cdFx0dGhpcy5fYWRkRGVzY3JpYmVkQnkoIHRhcmdldCwgdG9vbHRpcC5hdHRyKCBcImlkXCIgKSApO1xuXHRcdHRvb2x0aXAuZmluZCggXCIudWktdG9vbHRpcC1jb250ZW50XCIgKS5odG1sKCBjb250ZW50ICk7XG5cblx0XHQvLyBTdXBwb3J0OiBWb2ljZW92ZXIgb24gT1MgWCwgSkFXUyBvbiBJRSA8PSA5XG5cdFx0Ly8gSkFXUyBhbm5vdW5jZXMgZGVsZXRpb25zIGV2ZW4gd2hlbiBhcmlhLXJlbGV2YW50PVwiYWRkaXRpb25zXCJcblx0XHQvLyBWb2ljZW92ZXIgd2lsbCBzb21ldGltZXMgcmUtcmVhZCB0aGUgZW50aXJlIGxvZyByZWdpb24ncyBjb250ZW50cyBmcm9tIHRoZSBiZWdpbm5pbmdcblx0XHR0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCk7XG5cdFx0YTExeUNvbnRlbnQgPSAkKCBcIjxkaXY+XCIgKS5odG1sKCB0b29sdGlwLmZpbmQoIFwiLnVpLXRvb2x0aXAtY29udGVudFwiICkuaHRtbCgpICk7XG5cdFx0YTExeUNvbnRlbnQucmVtb3ZlQXR0ciggXCJuYW1lXCIgKS5maW5kKCBcIltuYW1lXVwiICkucmVtb3ZlQXR0ciggXCJuYW1lXCIgKTtcblx0XHRhMTF5Q29udGVudC5yZW1vdmVBdHRyKCBcImlkXCIgKS5maW5kKCBcIltpZF1cIiApLnJlbW92ZUF0dHIoIFwiaWRcIiApO1xuXHRcdGExMXlDb250ZW50LmFwcGVuZFRvKCB0aGlzLmxpdmVSZWdpb24gKTtcblxuXHRcdGZ1bmN0aW9uIHBvc2l0aW9uKCBldmVudCApIHtcblx0XHRcdHBvc2l0aW9uT3B0aW9uLm9mID0gZXZlbnQ7XG5cdFx0XHRpZiAoIHRvb2x0aXAuaXMoIFwiOmhpZGRlblwiICkgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRvb2x0aXAucG9zaXRpb24oIHBvc2l0aW9uT3B0aW9uICk7XG5cdFx0fVxuXHRcdGlmICggdGhpcy5vcHRpb25zLnRyYWNrICYmIGV2ZW50ICYmIC9ebW91c2UvLnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdHRoaXMuX29uKCB0aGlzLmRvY3VtZW50LCB7XG5cdFx0XHRcdG1vdXNlbW92ZTogcG9zaXRpb25cblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gdHJpZ2dlciBvbmNlIHRvIG92ZXJyaWRlIGVsZW1lbnQtcmVsYXRpdmUgcG9zaXRpb25pbmdcblx0XHRcdHBvc2l0aW9uKCBldmVudCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0b29sdGlwLnBvc2l0aW9uKCAkLmV4dGVuZCgge1xuXHRcdFx0XHRvZjogdGFyZ2V0XG5cdFx0XHR9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24gKSApO1xuXHRcdH1cblxuXHRcdHRvb2x0aXAuaGlkZSgpO1xuXG5cdFx0dGhpcy5fc2hvdyggdG9vbHRpcCwgdGhpcy5vcHRpb25zLnNob3cgKTtcblxuXHRcdC8vIEhhbmRsZSB0cmFja2luZyB0b29sdGlwcyB0aGF0IGFyZSBzaG93biB3aXRoIGEgZGVsYXkgKCM4NjQ0KS4gQXMgc29vblxuXHRcdC8vIGFzIHRoZSB0b29sdGlwIGlzIHZpc2libGUsIHBvc2l0aW9uIHRoZSB0b29sdGlwIHVzaW5nIHRoZSBtb3N0IHJlY2VudFxuXHRcdC8vIGV2ZW50LlxuXHRcdC8vIEFkZHMgdGhlIGNoZWNrIHRvIGFkZCB0aGUgdGltZXJzIG9ubHkgd2hlbiBib3RoIGRlbGF5IGFuZCB0cmFjayBvcHRpb25zIGFyZSBzZXQgKCMxNDY4Milcblx0XHRpZiAoIHRoaXMub3B0aW9ucy50cmFjayAmJiB0aGlzLm9wdGlvbnMuc2hvdyAmJiB0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSApIHtcblx0XHRcdGRlbGF5ZWRTaG93ID0gdGhpcy5kZWxheWVkU2hvdyA9IHNldEludGVydmFsKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0b29sdGlwLmlzKCBcIjp2aXNpYmxlXCIgKSApIHtcblx0XHRcdFx0XHRwb3NpdGlvbiggcG9zaXRpb25PcHRpb24ub2YgKTtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKCBkZWxheWVkU2hvdyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAkLmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdHJpZ2dlciggXCJvcGVuXCIsIGV2ZW50LCB7IHRvb2x0aXA6IHRvb2x0aXAgfSApO1xuXHR9LFxuXG5cdF9yZWdpc3RlckNsb3NlSGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgdGFyZ2V0ICkge1xuXHRcdHZhciBldmVudHMgPSB7XG5cdFx0XHRrZXl1cDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRpZiAoIGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5FU0NBUEUgKSB7XG5cdFx0XHRcdFx0dmFyIGZha2VFdmVudCA9ICQuRXZlbnQoIGV2ZW50ICk7XG5cdFx0XHRcdFx0ZmFrZUV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0YXJnZXRbIDAgXTtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCBmYWtlRXZlbnQsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBPbmx5IGJpbmQgcmVtb3ZlIGhhbmRsZXIgZm9yIGRlbGVnYXRlZCB0YXJnZXRzLiBOb24tZGVsZWdhdGVkXG5cdFx0Ly8gdG9vbHRpcHMgd2lsbCBoYW5kbGUgdGhpcyBpbiBkZXN0cm95LlxuXHRcdGlmICggdGFyZ2V0WyAwIF0gIT09IHRoaXMuZWxlbWVudFsgMCBdICkge1xuXHRcdFx0ZXZlbnRzLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLl9yZW1vdmVUb29sdGlwKCB0aGlzLl9maW5kKCB0YXJnZXQgKS50b29sdGlwICk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmICggIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibW91c2VvdmVyXCIgKSB7XG5cdFx0XHRldmVudHMubW91c2VsZWF2ZSA9IFwiY2xvc2VcIjtcblx0XHR9XG5cdFx0aWYgKCAhZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJmb2N1c2luXCIgKSB7XG5cdFx0XHRldmVudHMuZm9jdXNvdXQgPSBcImNsb3NlXCI7XG5cdFx0fVxuXHRcdHRoaXMuX29uKCB0cnVlLCB0YXJnZXQsIGV2ZW50cyApO1xuXHR9LFxuXG5cdGNsb3NlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHRvb2x0aXAsXG5cdFx0XHR0aGF0ID0gdGhpcyxcblx0XHRcdHRhcmdldCA9ICQoIGV2ZW50ID8gZXZlbnQuY3VycmVudFRhcmdldCA6IHRoaXMuZWxlbWVudCApLFxuXHRcdFx0dG9vbHRpcERhdGEgPSB0aGlzLl9maW5kKCB0YXJnZXQgKTtcblxuXHRcdC8vIFRoZSB0b29sdGlwIG1heSBhbHJlYWR5IGJlIGNsb3NlZFxuXHRcdGlmICggIXRvb2x0aXBEYXRhICkge1xuXG5cdFx0XHQvLyBXZSBzZXQgdWktdG9vbHRpcC1vcGVuIGltbWVkaWF0ZWx5IHVwb24gb3BlbiAoaW4gb3BlbigpKSwgYnV0IG9ubHkgc2V0IHRoZVxuXHRcdFx0Ly8gYWRkaXRpb25hbCBkYXRhIG9uY2UgdGhlcmUncyBhY3R1YWxseSBjb250ZW50IHRvIHNob3cgKGluIF9vcGVuKCkpLiBTbyBldmVuIGlmIHRoZVxuXHRcdFx0Ly8gdG9vbHRpcCBkb2Vzbid0IGhhdmUgZnVsbCBkYXRhLCB3ZSBhbHdheXMgcmVtb3ZlIHVpLXRvb2x0aXAtb3BlbiBpbiBjYXNlIHdlJ3JlIGluXG5cdFx0XHQvLyB0aGUgcGVyaW9kIGJldHdlZW4gb3BlbigpIGFuZCBfb3BlbigpLlxuXHRcdFx0dGFyZ2V0LnJlbW92ZURhdGEoIFwidWktdG9vbHRpcC1vcGVuXCIgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0b29sdGlwID0gdG9vbHRpcERhdGEudG9vbHRpcDtcblxuXHRcdC8vIERpc2FibGluZyBjbG9zZXMgdGhlIHRvb2x0aXAsIHNvIHdlIG5lZWQgdG8gdHJhY2sgd2hlbiB3ZSdyZSBjbG9zaW5nXG5cdFx0Ly8gdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCBpbiBjYXNlIHRoZSB0b29sdGlwIGJlY29tZXMgZGlzYWJsZWQgb24gY2xvc2Vcblx0XHRpZiAoIHRvb2x0aXBEYXRhLmNsb3NpbmcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgdGhlIGludGVydmFsIGZvciBkZWxheWVkIHRyYWNraW5nIHRvb2x0aXBzXG5cdFx0Y2xlYXJJbnRlcnZhbCggdGhpcy5kZWxheWVkU2hvdyApO1xuXG5cdFx0Ly8gT25seSBzZXQgdGl0bGUgaWYgd2UgaGFkIG9uZSBiZWZvcmUgKHNlZSBjb21tZW50IGluIF9vcGVuKCkpXG5cdFx0Ly8gSWYgdGhlIHRpdGxlIGF0dHJpYnV0ZSBoYXMgY2hhbmdlZCBzaW5jZSBvcGVuKCksIGRvbid0IHJlc3RvcmVcblx0XHRpZiAoIHRhcmdldC5kYXRhKCBcInVpLXRvb2x0aXAtdGl0bGVcIiApICYmICF0YXJnZXQuYXR0ciggXCJ0aXRsZVwiICkgKSB7XG5cdFx0XHR0YXJnZXQuYXR0ciggXCJ0aXRsZVwiLCB0YXJnZXQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIgKSApO1xuXHRcdH1cblxuXHRcdHRoaXMuX3JlbW92ZURlc2NyaWJlZEJ5KCB0YXJnZXQgKTtcblxuXHRcdHRvb2x0aXBEYXRhLmhpZGluZyA9IHRydWU7XG5cdFx0dG9vbHRpcC5zdG9wKCB0cnVlICk7XG5cdFx0dGhpcy5faGlkZSggdG9vbHRpcCwgdGhpcy5vcHRpb25zLmhpZGUsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhhdC5fcmVtb3ZlVG9vbHRpcCggJCggdGhpcyApICk7XG5cdFx0fSApO1xuXG5cdFx0dGFyZ2V0LnJlbW92ZURhdGEoIFwidWktdG9vbHRpcC1vcGVuXCIgKTtcblx0XHR0aGlzLl9vZmYoIHRhcmdldCwgXCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwXCIgKTtcblxuXHRcdC8vIFJlbW92ZSAncmVtb3ZlJyBiaW5kaW5nIG9ubHkgb24gZGVsZWdhdGVkIHRhcmdldHNcblx0XHRpZiAoIHRhcmdldFsgMCBdICE9PSB0aGlzLmVsZW1lbnRbIDAgXSApIHtcblx0XHRcdHRoaXMuX29mZiggdGFyZ2V0LCBcInJlbW92ZVwiICk7XG5cdFx0fVxuXHRcdHRoaXMuX29mZiggdGhpcy5kb2N1bWVudCwgXCJtb3VzZW1vdmVcIiApO1xuXG5cdFx0aWYgKCBldmVudCAmJiBldmVudC50eXBlID09PSBcIm1vdXNlbGVhdmVcIiApIHtcblx0XHRcdCQuZWFjaCggdGhpcy5wYXJlbnRzLCBmdW5jdGlvbiggaWQsIHBhcmVudCApIHtcblx0XHRcdFx0JCggcGFyZW50LmVsZW1lbnQgKS5hdHRyKCBcInRpdGxlXCIsIHBhcmVudC50aXRsZSApO1xuXHRcdFx0XHRkZWxldGUgdGhhdC5wYXJlbnRzWyBpZCBdO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHRvb2x0aXBEYXRhLmNsb3NpbmcgPSB0cnVlO1xuXHRcdHRoaXMuX3RyaWdnZXIoIFwiY2xvc2VcIiwgZXZlbnQsIHsgdG9vbHRpcDogdG9vbHRpcCB9ICk7XG5cdFx0aWYgKCAhdG9vbHRpcERhdGEuaGlkaW5nICkge1xuXHRcdFx0dG9vbHRpcERhdGEuY2xvc2luZyA9IGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHRfdG9vbHRpcDogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0dmFyIHRvb2x0aXAgPSAkKCBcIjxkaXY+XCIgKS5hdHRyKCBcInJvbGVcIiwgXCJ0b29sdGlwXCIgKSxcblx0XHRcdGNvbnRlbnQgPSAkKCBcIjxkaXY+XCIgKS5hcHBlbmRUbyggdG9vbHRpcCApLFxuXHRcdFx0aWQgPSB0b29sdGlwLnVuaXF1ZUlkKCkuYXR0ciggXCJpZFwiICk7XG5cblx0XHR0aGlzLl9hZGRDbGFzcyggY29udGVudCwgXCJ1aS10b29sdGlwLWNvbnRlbnRcIiApO1xuXHRcdHRoaXMuX2FkZENsYXNzKCB0b29sdGlwLCBcInVpLXRvb2x0aXBcIiwgXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiApO1xuXG5cdFx0dG9vbHRpcC5hcHBlbmRUbyggdGhpcy5fYXBwZW5kVG8oIGVsZW1lbnQgKSApO1xuXG5cdFx0cmV0dXJuIHRoaXMudG9vbHRpcHNbIGlkIF0gPSB7XG5cdFx0XHRlbGVtZW50OiBlbGVtZW50LFxuXHRcdFx0dG9vbHRpcDogdG9vbHRpcFxuXHRcdH07XG5cdH0sXG5cblx0X2ZpbmQ6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIGlkID0gdGFyZ2V0LmRhdGEoIFwidWktdG9vbHRpcC1pZFwiICk7XG5cdFx0cmV0dXJuIGlkID8gdGhpcy50b29sdGlwc1sgaWQgXSA6IG51bGw7XG5cdH0sXG5cblx0X3JlbW92ZVRvb2x0aXA6IGZ1bmN0aW9uKCB0b29sdGlwICkge1xuXHRcdHRvb2x0aXAucmVtb3ZlKCk7XG5cdFx0ZGVsZXRlIHRoaXMudG9vbHRpcHNbIHRvb2x0aXAuYXR0ciggXCJpZFwiICkgXTtcblx0fSxcblxuXHRfYXBwZW5kVG86IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSB0YXJnZXQuY2xvc2VzdCggXCIudWktZnJvbnQsIGRpYWxvZ1wiICk7XG5cblx0XHRpZiAoICFlbGVtZW50Lmxlbmd0aCApIHtcblx0XHRcdGVsZW1lbnQgPSB0aGlzLmRvY3VtZW50WyAwIF0uYm9keTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fSxcblxuXHRfZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2xvc2Ugb3BlbiB0b29sdGlwc1xuXHRcdCQuZWFjaCggdGhpcy50b29sdGlwcywgZnVuY3Rpb24oIGlkLCB0b29sdGlwRGF0YSApIHtcblxuXHRcdFx0Ly8gRGVsZWdhdGUgdG8gY2xvc2UgbWV0aG9kIHRvIGhhbmRsZSBjb21tb24gY2xlYW51cFxuXHRcdFx0dmFyIGV2ZW50ID0gJC5FdmVudCggXCJibHVyXCIgKSxcblx0XHRcdFx0ZWxlbWVudCA9IHRvb2x0aXBEYXRhLmVsZW1lbnQ7XG5cdFx0XHRldmVudC50YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudFsgMCBdO1xuXHRcdFx0dGhhdC5jbG9zZSggZXZlbnQsIHRydWUgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIGltbWVkaWF0ZWx5OyBkZXN0cm95aW5nIGFuIG9wZW4gdG9vbHRpcCBkb2Vzbid0IHVzZSB0aGVcblx0XHRcdC8vIGhpZGUgYW5pbWF0aW9uXG5cdFx0XHQkKCBcIiNcIiArIGlkICkucmVtb3ZlKCk7XG5cblx0XHRcdC8vIFJlc3RvcmUgdGhlIHRpdGxlXG5cdFx0XHRpZiAoIGVsZW1lbnQuZGF0YSggXCJ1aS10b29sdGlwLXRpdGxlXCIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgdGl0bGUgYXR0cmlidXRlIGhhcyBjaGFuZ2VkIHNpbmNlIG9wZW4oKSwgZG9uJ3QgcmVzdG9yZVxuXHRcdFx0XHRpZiAoICFlbGVtZW50LmF0dHIoIFwidGl0bGVcIiApICkge1xuXHRcdFx0XHRcdGVsZW1lbnQuYXR0ciggXCJ0aXRsZVwiLCBlbGVtZW50LmRhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICkgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbGVtZW50LnJlbW92ZURhdGEoIFwidWktdG9vbHRpcC10aXRsZVwiICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKTtcblx0fVxufSApO1xuXG4vLyBERVBSRUNBVEVEXG4vLyBUT0RPOiBTd2l0Y2ggcmV0dXJuIGJhY2sgdG8gd2lkZ2V0IGRlY2xhcmF0aW9uIGF0IHRvcCBvZiBmaWxlIHdoZW4gdGhpcyBpcyByZW1vdmVkXG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblxuXHQvLyBCYWNrY29tcGF0IGZvciB0b29sdGlwQ2xhc3Mgb3B0aW9uXG5cdCQud2lkZ2V0KCBcInVpLnRvb2x0aXBcIiwgJC51aS50b29sdGlwLCB7XG5cdFx0b3B0aW9uczoge1xuXHRcdFx0dG9vbHRpcENsYXNzOiBudWxsXG5cdFx0fSxcblx0XHRfdG9vbHRpcDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdG9vbHRpcERhdGEgPSB0aGlzLl9zdXBlckFwcGx5KCBhcmd1bWVudHMgKTtcblx0XHRcdGlmICggdGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyApIHtcblx0XHRcdFx0dG9vbHRpcERhdGEudG9vbHRpcC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRvb2x0aXBEYXRhO1xuXHRcdH1cblx0fSApO1xufVxuXG52YXIgd2lkZ2V0c1Rvb2x0aXAgPSAkLnVpLnRvb2x0aXA7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRWZmZWN0cyBDb3JlXG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBFeHRlbmRzIHRoZSBpbnRlcm5hbCBqUXVlcnkgZWZmZWN0cy4gSW5jbHVkZXMgbW9ycGhpbmcgYW5kIGVhc2luZy4gUmVxdWlyZWQgYnkgYWxsIG90aGVyIGVmZmVjdHMuXG4vLyBqc2NzOmVuYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2NhdGVnb3J5L2VmZmVjdHMtY29yZS9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZGF0YVNwYWNlID0gXCJ1aS1lZmZlY3RzLVwiLFxuXHRkYXRhU3BhY2VTdHlsZSA9IFwidWktZWZmZWN0cy1zdHlsZVwiLFxuXHRkYXRhU3BhY2VBbmltYXRlZCA9IFwidWktZWZmZWN0cy1hbmltYXRlZFwiLFxuXG5cdC8vIENyZWF0ZSBhIGxvY2FsIGpRdWVyeSBiZWNhdXNlIGpRdWVyeSBDb2xvciByZWxpZXMgb24gaXQgYW5kIHRoZVxuXHQvLyBnbG9iYWwgbWF5IG5vdCBleGlzdCB3aXRoIEFNRCBhbmQgYSBjdXN0b20gYnVpbGQgKCMxMDE5OSlcblx0alF1ZXJ5ID0gJDtcblxuJC5lZmZlY3RzID0ge1xuXHRlZmZlY3Q6IHt9XG59O1xuXG4vKiFcbiAqIGpRdWVyeSBDb2xvciBBbmltYXRpb25zIHYyLjEuMlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktY29sb3JcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogV2VkIEphbiAxNiAwODo0NzowOSAyMDEzIC0wNjAwXG4gKi9cbiggZnVuY3Rpb24oIGpRdWVyeSwgdW5kZWZpbmVkICkge1xuXG5cdHZhciBzdGVwSG9va3MgPSBcImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBcIiArXG5cdFx0XCJib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3JcIixcblxuXHQvLyBQbHVzZXF1YWxzIHRlc3QgZm9yICs9IDEwMCAtPSAxMDBcblx0cnBsdXNlcXVhbHMgPSAvXihbXFwtK10pPVxccyooXFxkK1xcLj9cXGQqKS8sXG5cblx0Ly8gQSBzZXQgb2YgUkUncyB0aGF0IGNhbiBtYXRjaCBzdHJpbmdzIGFuZCBnZW5lcmF0ZSBjb2xvciB0dXBsZXMuXG5cdHN0cmluZ1BhcnNlcnMgPSBbIHtcblx0XHRcdHJlOiAvcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAxIF0sXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMiBdLFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyA0IF1cblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRyZTogL3JnYmE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8sXG5cdFx0XHRwYXJzZTogZnVuY3Rpb24oIGV4ZWNSZXN1bHQgKSB7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMSBdICogMi41NSxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAyIF0gKiAyLjU1LFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSAqIDIuNTUsXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgNCBdXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fSwge1xuXG5cdFx0XHQvLyBUaGlzIHJlZ2V4IGlnbm9yZXMgQS1GIGJlY2F1c2UgaXQncyBjb21wYXJlZCBhZ2FpbnN0IGFuIGFscmVhZHkgbG93ZXJjYXNlZCBzdHJpbmdcblx0XHRcdHJlOiAvIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8sXG5cdFx0XHRwYXJzZTogZnVuY3Rpb24oIGV4ZWNSZXN1bHQgKSB7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0cGFyc2VJbnQoIGV4ZWNSZXN1bHRbIDEgXSwgMTYgKSxcblx0XHRcdFx0XHRwYXJzZUludCggZXhlY1Jlc3VsdFsgMiBdLCAxNiApLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBleGVjUmVzdWx0WyAzIF0sIDE2IClcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9LCB7XG5cblx0XHRcdC8vIFRoaXMgcmVnZXggaWdub3JlcyBBLUYgYmVjYXVzZSBpdCdzIGNvbXBhcmVkIGFnYWluc3QgYW4gYWxyZWFkeSBsb3dlcmNhc2VkIHN0cmluZ1xuXHRcdFx0cmU6IC8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRwYXJzZUludCggZXhlY1Jlc3VsdFsgMSBdICsgZXhlY1Jlc3VsdFsgMSBdLCAxNiApLFxuXHRcdFx0XHRcdHBhcnNlSW50KCBleGVjUmVzdWx0WyAyIF0gKyBleGVjUmVzdWx0WyAyIF0sIDE2ICksXG5cdFx0XHRcdFx0cGFyc2VJbnQoIGV4ZWNSZXN1bHRbIDMgXSArIGV4ZWNSZXN1bHRbIDMgXSwgMTYgKVxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH0sIHtcblx0XHRcdHJlOiAvaHNsYT9cXChcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxcblx0XHRcdHNwYWNlOiBcImhzbGFcIixcblx0XHRcdHBhcnNlOiBmdW5jdGlvbiggZXhlY1Jlc3VsdCApIHtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRleGVjUmVzdWx0WyAxIF0sXG5cdFx0XHRcdFx0ZXhlY1Jlc3VsdFsgMiBdIC8gMTAwLFxuXHRcdFx0XHRcdGV4ZWNSZXN1bHRbIDMgXSAvIDEwMCxcblx0XHRcdFx0XHRleGVjUmVzdWx0WyA0IF1cblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9IF0sXG5cblx0Ly8gSlF1ZXJ5LkNvbG9yKCApXG5cdGNvbG9yID0galF1ZXJ5LkNvbG9yID0gZnVuY3Rpb24oIGNvbG9yLCBncmVlbiwgYmx1ZSwgYWxwaGEgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuQ29sb3IuZm4ucGFyc2UoIGNvbG9yLCBncmVlbiwgYmx1ZSwgYWxwaGEgKTtcblx0fSxcblx0c3BhY2VzID0ge1xuXHRcdHJnYmE6IHtcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdHJlZDoge1xuXHRcdFx0XHRcdGlkeDogMCxcblx0XHRcdFx0XHR0eXBlOiBcImJ5dGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRncmVlbjoge1xuXHRcdFx0XHRcdGlkeDogMSxcblx0XHRcdFx0XHR0eXBlOiBcImJ5dGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRibHVlOiB7XG5cdFx0XHRcdFx0aWR4OiAyLFxuXHRcdFx0XHRcdHR5cGU6IFwiYnl0ZVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aHNsYToge1xuXHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0aHVlOiB7XG5cdFx0XHRcdFx0aWR4OiAwLFxuXHRcdFx0XHRcdHR5cGU6IFwiZGVncmVlc1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNhdHVyYXRpb246IHtcblx0XHRcdFx0XHRpZHg6IDEsXG5cdFx0XHRcdFx0dHlwZTogXCJwZXJjZW50XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bGlnaHRuZXNzOiB7XG5cdFx0XHRcdFx0aWR4OiAyLFxuXHRcdFx0XHRcdHR5cGU6IFwicGVyY2VudFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb3BUeXBlcyA9IHtcblx0XHRcImJ5dGVcIjoge1xuXHRcdFx0Zmxvb3I6IHRydWUsXG5cdFx0XHRtYXg6IDI1NVxuXHRcdH0sXG5cdFx0XCJwZXJjZW50XCI6IHtcblx0XHRcdG1heDogMVxuXHRcdH0sXG5cdFx0XCJkZWdyZWVzXCI6IHtcblx0XHRcdG1vZDogMzYwLFxuXHRcdFx0Zmxvb3I6IHRydWVcblx0XHR9XG5cdH0sXG5cdHN1cHBvcnQgPSBjb2xvci5zdXBwb3J0ID0ge30sXG5cblx0Ly8gRWxlbWVudCBmb3Igc3VwcG9ydCB0ZXN0c1xuXHRzdXBwb3J0RWxlbSA9IGpRdWVyeSggXCI8cD5cIiApWyAwIF0sXG5cblx0Ly8gQ29sb3JzID0galF1ZXJ5LkNvbG9yLm5hbWVzXG5cdGNvbG9ycyxcblxuXHQvLyBMb2NhbCBhbGlhc2VzIG9mIGZ1bmN0aW9ucyBjYWxsZWQgb2Z0ZW5cblx0ZWFjaCA9IGpRdWVyeS5lYWNoO1xuXG4vLyBEZXRlcm1pbmUgcmdiYSBzdXBwb3J0IGltbWVkaWF0ZWx5XG5zdXBwb3J0RWxlbS5zdHlsZS5jc3NUZXh0ID0gXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpXCI7XG5zdXBwb3J0LnJnYmEgPSBzdXBwb3J0RWxlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZiggXCJyZ2JhXCIgKSA+IC0xO1xuXG4vLyBEZWZpbmUgY2FjaGUgbmFtZSBhbmQgYWxwaGEgcHJvcGVydGllc1xuLy8gZm9yIHJnYmEgYW5kIGhzbGEgc3BhY2VzXG5lYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRzcGFjZS5jYWNoZSA9IFwiX1wiICsgc3BhY2VOYW1lO1xuXHRzcGFjZS5wcm9wcy5hbHBoYSA9IHtcblx0XHRpZHg6IDMsXG5cdFx0dHlwZTogXCJwZXJjZW50XCIsXG5cdFx0ZGVmOiAxXG5cdH07XG59ICk7XG5cbmZ1bmN0aW9uIGNsYW1wKCB2YWx1ZSwgcHJvcCwgYWxsb3dFbXB0eSApIHtcblx0dmFyIHR5cGUgPSBwcm9wVHlwZXNbIHByb3AudHlwZSBdIHx8IHt9O1xuXG5cdGlmICggdmFsdWUgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gKCBhbGxvd0VtcHR5IHx8ICFwcm9wLmRlZiApID8gbnVsbCA6IHByb3AuZGVmO1xuXHR9XG5cblx0Ly8gfn4gaXMgYW4gc2hvcnQgd2F5IG9mIGRvaW5nIGZsb29yIGZvciBwb3NpdGl2ZSBudW1iZXJzXG5cdHZhbHVlID0gdHlwZS5mbG9vciA/IH5+dmFsdWUgOiBwYXJzZUZsb2F0KCB2YWx1ZSApO1xuXG5cdC8vIElFIHdpbGwgcGFzcyBpbiBlbXB0eSBzdHJpbmdzIGFzIHZhbHVlIGZvciBhbHBoYSxcblx0Ly8gd2hpY2ggd2lsbCBoaXQgdGhpcyBjYXNlXG5cdGlmICggaXNOYU4oIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHByb3AuZGVmO1xuXHR9XG5cblx0aWYgKCB0eXBlLm1vZCApIHtcblxuXHRcdC8vIFdlIGFkZCBtb2QgYmVmb3JlIG1vZGRpbmcgdG8gbWFrZSBzdXJlIHRoYXQgbmVnYXRpdmVzIHZhbHVlc1xuXHRcdC8vIGdldCBjb252ZXJ0ZWQgcHJvcGVybHk6IC0xMCAtPiAzNTBcblx0XHRyZXR1cm4gKCB2YWx1ZSArIHR5cGUubW9kICkgJSB0eXBlLm1vZDtcblx0fVxuXG5cdC8vIEZvciBub3cgYWxsIHByb3BlcnR5IHR5cGVzIHdpdGhvdXQgbW9kIGhhdmUgbWluIGFuZCBtYXhcblx0cmV0dXJuIDAgPiB2YWx1ZSA/IDAgOiB0eXBlLm1heCA8IHZhbHVlID8gdHlwZS5tYXggOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nUGFyc2UoIHN0cmluZyApIHtcblx0dmFyIGluc3QgPSBjb2xvcigpLFxuXHRcdHJnYmEgPSBpbnN0Ll9yZ2JhID0gW107XG5cblx0c3RyaW5nID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG5cblx0ZWFjaCggc3RyaW5nUGFyc2VycywgZnVuY3Rpb24oIGksIHBhcnNlciApIHtcblx0XHR2YXIgcGFyc2VkLFxuXHRcdFx0bWF0Y2ggPSBwYXJzZXIucmUuZXhlYyggc3RyaW5nICksXG5cdFx0XHR2YWx1ZXMgPSBtYXRjaCAmJiBwYXJzZXIucGFyc2UoIG1hdGNoICksXG5cdFx0XHRzcGFjZU5hbWUgPSBwYXJzZXIuc3BhY2UgfHwgXCJyZ2JhXCI7XG5cblx0XHRpZiAoIHZhbHVlcyApIHtcblx0XHRcdHBhcnNlZCA9IGluc3RbIHNwYWNlTmFtZSBdKCB2YWx1ZXMgKTtcblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gcmdiYSBwYXJzZSB0aGUgYXNzaWdubWVudCBtaWdodCBoYXBwZW4gdHdpY2Vcblx0XHRcdC8vIG9oIHdlbGwuLi4uXG5cdFx0XHRpbnN0WyBzcGFjZXNbIHNwYWNlTmFtZSBdLmNhY2hlIF0gPSBwYXJzZWRbIHNwYWNlc1sgc3BhY2VOYW1lIF0uY2FjaGUgXTtcblx0XHRcdHJnYmEgPSBpbnN0Ll9yZ2JhID0gcGFyc2VkLl9yZ2JhO1xuXG5cdFx0XHQvLyBFeGl0IGVhY2goIHN0cmluZ1BhcnNlcnMgKSBoZXJlIGJlY2F1c2Ugd2UgbWF0Y2hlZFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSApO1xuXG5cdC8vIEZvdW5kIGEgc3RyaW5nUGFyc2VyIHRoYXQgaGFuZGxlZCBpdFxuXHRpZiAoIHJnYmEubGVuZ3RoICkge1xuXG5cdFx0Ly8gSWYgdGhpcyBjYW1lIGZyb20gYSBwYXJzZWQgc3RyaW5nLCBmb3JjZSBcInRyYW5zcGFyZW50XCIgd2hlbiBhbHBoYSBpcyAwXG5cdFx0Ly8gY2hyb21lLCAoYW5kIG1heWJlIG90aGVycykgcmV0dXJuIFwidHJhbnNwYXJlbnRcIiBhcyByZ2JhKDAsMCwwLDApXG5cdFx0aWYgKCByZ2JhLmpvaW4oKSA9PT0gXCIwLDAsMCwwXCIgKSB7XG5cdFx0XHRqUXVlcnkuZXh0ZW5kKCByZ2JhLCBjb2xvcnMudHJhbnNwYXJlbnQgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGluc3Q7XG5cdH1cblxuXHQvLyBOYW1lZCBjb2xvcnNcblx0cmV0dXJuIGNvbG9yc1sgc3RyaW5nIF07XG59XG5cbmNvbG9yLmZuID0galF1ZXJ5LmV4dGVuZCggY29sb3IucHJvdG90eXBlLCB7XG5cdHBhcnNlOiBmdW5jdGlvbiggcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgKSB7XG5cdFx0aWYgKCByZWQgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRoaXMuX3JnYmEgPSBbIG51bGwsIG51bGwsIG51bGwsIG51bGwgXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHJlZC5qcXVlcnkgfHwgcmVkLm5vZGVUeXBlICkge1xuXHRcdFx0cmVkID0galF1ZXJ5KCByZWQgKS5jc3MoIGdyZWVuICk7XG5cdFx0XHRncmVlbiA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR2YXIgaW5zdCA9IHRoaXMsXG5cdFx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIHJlZCApLFxuXHRcdFx0cmdiYSA9IHRoaXMuX3JnYmEgPSBbXTtcblxuXHRcdC8vIE1vcmUgdGhhbiAxIGFyZ3VtZW50IHNwZWNpZmllZCAtIGFzc3VtZSAoIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIClcblx0XHRpZiAoIGdyZWVuICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZWQgPSBbIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIF07XG5cdFx0XHR0eXBlID0gXCJhcnJheVwiO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlKCBzdHJpbmdQYXJzZSggcmVkICkgfHwgY29sb3JzLl9kZWZhdWx0ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlID09PSBcImFycmF5XCIgKSB7XG5cdFx0XHRlYWNoKCBzcGFjZXMucmdiYS5wcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblx0XHRcdFx0cmdiYVsgcHJvcC5pZHggXSA9IGNsYW1wKCByZWRbIHByb3AuaWR4IF0sIHByb3AgKTtcblx0XHRcdH0gKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdGlmICggcmVkIGluc3RhbmNlb2YgY29sb3IgKSB7XG5cdFx0XHRcdGVhY2goIHNwYWNlcywgZnVuY3Rpb24oIHNwYWNlTmFtZSwgc3BhY2UgKSB7XG5cdFx0XHRcdFx0aWYgKCByZWRbIHNwYWNlLmNhY2hlIF0gKSB7XG5cdFx0XHRcdFx0XHRpbnN0WyBzcGFjZS5jYWNoZSBdID0gcmVkWyBzcGFjZS5jYWNoZSBdLnNsaWNlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSA9IHNwYWNlLmNhY2hlO1xuXHRcdFx0XHRcdGVhY2goIHNwYWNlLnByb3BzLCBmdW5jdGlvbigga2V5LCBwcm9wICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgY2FjaGUgZG9lc24ndCBleGlzdCwgYW5kIHdlIGtub3cgaG93IHRvIGNvbnZlcnRcblx0XHRcdFx0XHRcdGlmICggIWluc3RbIGNhY2hlIF0gJiYgc3BhY2UudG8gKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHZhbHVlIHdhcyBudWxsLCB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgaXRcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGtleSB3YXMgYWxwaGEsIHdlIGRvbid0IG5lZWQgdG8gY29weSBpdCBlaXRoZXJcblx0XHRcdFx0XHRcdFx0aWYgKCBrZXkgPT09IFwiYWxwaGFcIiB8fCByZWRbIGtleSBdID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGluc3RbIGNhY2hlIF0gPSBzcGFjZS50byggaW5zdC5fcmdiYSApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgd2UgYWxsb3cgbnVsbHMgZm9yIEFMTCBwcm9wZXJ0aWVzLlxuXHRcdFx0XHRcdFx0Ly8gY2FsbCBjbGFtcCB3aXRoIGFsd2F5c0FsbG93RW1wdHlcblx0XHRcdFx0XHRcdGluc3RbIGNhY2hlIF1bIHByb3AuaWR4IF0gPSBjbGFtcCggcmVkWyBrZXkgXSwgcHJvcCwgdHJ1ZSApO1xuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHRcdC8vIEV2ZXJ5dGhpbmcgZGVmaW5lZCBidXQgYWxwaGE/XG5cdFx0XHRcdFx0aWYgKCBpbnN0WyBjYWNoZSBdICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBudWxsLCBpbnN0WyBjYWNoZSBdLnNsaWNlKCAwLCAzICkgKSA8IDAgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgZGVmYXVsdCBvZiAxXG5cdFx0XHRcdFx0XHRpbnN0WyBjYWNoZSBdWyAzIF0gPSAxO1xuXHRcdFx0XHRcdFx0aWYgKCBzcGFjZS5mcm9tICkge1xuXHRcdFx0XHRcdFx0XHRpbnN0Ll9yZ2JhID0gc3BhY2UuZnJvbSggaW5zdFsgY2FjaGUgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9LFxuXHRpczogZnVuY3Rpb24oIGNvbXBhcmUgKSB7XG5cdFx0dmFyIGlzID0gY29sb3IoIGNvbXBhcmUgKSxcblx0XHRcdHNhbWUgPSB0cnVlLFxuXHRcdFx0aW5zdCA9IHRoaXM7XG5cblx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBfLCBzcGFjZSApIHtcblx0XHRcdHZhciBsb2NhbENhY2hlLFxuXHRcdFx0XHRpc0NhY2hlID0gaXNbIHNwYWNlLmNhY2hlIF07XG5cdFx0XHRpZiAoIGlzQ2FjaGUgKSB7XG5cdFx0XHRcdGxvY2FsQ2FjaGUgPSBpbnN0WyBzcGFjZS5jYWNoZSBdIHx8IHNwYWNlLnRvICYmIHNwYWNlLnRvKCBpbnN0Ll9yZ2JhICkgfHwgW107XG5cdFx0XHRcdGVhY2goIHNwYWNlLnByb3BzLCBmdW5jdGlvbiggXywgcHJvcCApIHtcblx0XHRcdFx0XHRpZiAoIGlzQ2FjaGVbIHByb3AuaWR4IF0gIT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHNhbWUgPSAoIGlzQ2FjaGVbIHByb3AuaWR4IF0gPT09IGxvY2FsQ2FjaGVbIHByb3AuaWR4IF0gKTtcblx0XHRcdFx0XHRcdHJldHVybiBzYW1lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNhbWU7XG5cdFx0fSApO1xuXHRcdHJldHVybiBzYW1lO1xuXHR9LFxuXHRfc3BhY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1c2VkID0gW10sXG5cdFx0XHRpbnN0ID0gdGhpcztcblx0XHRlYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHRcdFx0aWYgKCBpbnN0WyBzcGFjZS5jYWNoZSBdICkge1xuXHRcdFx0XHR1c2VkLnB1c2goIHNwYWNlTmFtZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gdXNlZC5wb3AoKTtcblx0fSxcblx0dHJhbnNpdGlvbjogZnVuY3Rpb24oIG90aGVyLCBkaXN0YW5jZSApIHtcblx0XHR2YXIgZW5kID0gY29sb3IoIG90aGVyICksXG5cdFx0XHRzcGFjZU5hbWUgPSBlbmQuX3NwYWNlKCksXG5cdFx0XHRzcGFjZSA9IHNwYWNlc1sgc3BhY2VOYW1lIF0sXG5cdFx0XHRzdGFydENvbG9yID0gdGhpcy5hbHBoYSgpID09PSAwID8gY29sb3IoIFwidHJhbnNwYXJlbnRcIiApIDogdGhpcyxcblx0XHRcdHN0YXJ0ID0gc3RhcnRDb2xvclsgc3BhY2UuY2FjaGUgXSB8fCBzcGFjZS50byggc3RhcnRDb2xvci5fcmdiYSApLFxuXHRcdFx0cmVzdWx0ID0gc3RhcnQuc2xpY2UoKTtcblxuXHRcdGVuZCA9IGVuZFsgc3BhY2UuY2FjaGUgXTtcblx0XHRlYWNoKCBzcGFjZS5wcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblx0XHRcdHZhciBpbmRleCA9IHByb3AuaWR4LFxuXHRcdFx0XHRzdGFydFZhbHVlID0gc3RhcnRbIGluZGV4IF0sXG5cdFx0XHRcdGVuZFZhbHVlID0gZW5kWyBpbmRleCBdLFxuXHRcdFx0XHR0eXBlID0gcHJvcFR5cGVzWyBwcm9wLnR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgbnVsbCwgZG9uJ3Qgb3ZlcnJpZGUgc3RhcnQgdmFsdWVcblx0XHRcdGlmICggZW5kVmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgbnVsbCAtIHVzZSBlbmRcblx0XHRcdGlmICggc3RhcnRWYWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0cmVzdWx0WyBpbmRleCBdID0gZW5kVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIHR5cGUubW9kICkge1xuXHRcdFx0XHRcdGlmICggZW5kVmFsdWUgLSBzdGFydFZhbHVlID4gdHlwZS5tb2QgLyAyICkge1xuXHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSArPSB0eXBlLm1vZDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBzdGFydFZhbHVlIC0gZW5kVmFsdWUgPiB0eXBlLm1vZCAvIDIgKSB7XG5cdFx0XHRcdFx0XHRzdGFydFZhbHVlIC09IHR5cGUubW9kO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHRbIGluZGV4IF0gPSBjbGFtcCggKCBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUgKSAqIGRpc3RhbmNlICsgc3RhcnRWYWx1ZSwgcHJvcCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpc1sgc3BhY2VOYW1lIF0oIHJlc3VsdCApO1xuXHR9LFxuXHRibGVuZDogZnVuY3Rpb24oIG9wYXF1ZSApIHtcblxuXHRcdC8vIElmIHdlIGFyZSBhbHJlYWR5IG9wYXF1ZSAtIHJldHVybiBvdXJzZWxmXG5cdFx0aWYgKCB0aGlzLl9yZ2JhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR2YXIgcmdiID0gdGhpcy5fcmdiYS5zbGljZSgpLFxuXHRcdFx0YSA9IHJnYi5wb3AoKSxcblx0XHRcdGJsZW5kID0gY29sb3IoIG9wYXF1ZSApLl9yZ2JhO1xuXG5cdFx0cmV0dXJuIGNvbG9yKCBqUXVlcnkubWFwKCByZ2IsIGZ1bmN0aW9uKCB2LCBpICkge1xuXHRcdFx0cmV0dXJuICggMSAtIGEgKSAqIGJsZW5kWyBpIF0gKyBhICogdjtcblx0XHR9ICkgKTtcblx0fSxcblx0dG9SZ2JhU3RyaW5nOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcHJlZml4ID0gXCJyZ2JhKFwiLFxuXHRcdFx0cmdiYSA9IGpRdWVyeS5tYXAoIHRoaXMuX3JnYmEsIGZ1bmN0aW9uKCB2LCBpICkge1xuXHRcdFx0XHRyZXR1cm4gdiA9PSBudWxsID8gKCBpID4gMiA/IDEgOiAwICkgOiB2O1xuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCByZ2JhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRyZ2JhLnBvcCgpO1xuXHRcdFx0cHJlZml4ID0gXCJyZ2IoXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByZWZpeCArIHJnYmEuam9pbigpICsgXCIpXCI7XG5cdH0sXG5cdHRvSHNsYVN0cmluZzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZWZpeCA9IFwiaHNsYShcIixcblx0XHRcdGhzbGEgPSBqUXVlcnkubWFwKCB0aGlzLmhzbGEoKSwgZnVuY3Rpb24oIHYsIGkgKSB7XG5cdFx0XHRcdGlmICggdiA9PSBudWxsICkge1xuXHRcdFx0XHRcdHYgPSBpID4gMiA/IDEgOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2F0Y2ggMSBhbmQgMlxuXHRcdFx0XHRpZiAoIGkgJiYgaSA8IDMgKSB7XG5cdFx0XHRcdFx0diA9IE1hdGgucm91bmQoIHYgKiAxMDAgKSArIFwiJVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2O1xuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCBoc2xhWyAzIF0gPT09IDEgKSB7XG5cdFx0XHRoc2xhLnBvcCgpO1xuXHRcdFx0cHJlZml4ID0gXCJoc2woXCI7XG5cdFx0fVxuXHRcdHJldHVybiBwcmVmaXggKyBoc2xhLmpvaW4oKSArIFwiKVwiO1xuXHR9LFxuXHR0b0hleFN0cmluZzogZnVuY3Rpb24oIGluY2x1ZGVBbHBoYSApIHtcblx0XHR2YXIgcmdiYSA9IHRoaXMuX3JnYmEuc2xpY2UoKSxcblx0XHRcdGFscGhhID0gcmdiYS5wb3AoKTtcblxuXHRcdGlmICggaW5jbHVkZUFscGhhICkge1xuXHRcdFx0cmdiYS5wdXNoKCB+figgYWxwaGEgKiAyNTUgKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBcIiNcIiArIGpRdWVyeS5tYXAoIHJnYmEsIGZ1bmN0aW9uKCB2ICkge1xuXG5cdFx0XHQvLyBEZWZhdWx0IHRvIDAgd2hlbiBudWxscyBleGlzdFxuXHRcdFx0diA9ICggdiB8fCAwICkudG9TdHJpbmcoIDE2ICk7XG5cdFx0XHRyZXR1cm4gdi5sZW5ndGggPT09IDEgPyBcIjBcIiArIHYgOiB2O1xuXHRcdH0gKS5qb2luKCBcIlwiICk7XG5cdH0sXG5cdHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fcmdiYVsgMyBdID09PSAwID8gXCJ0cmFuc3BhcmVudFwiIDogdGhpcy50b1JnYmFTdHJpbmcoKTtcblx0fVxufSApO1xuY29sb3IuZm4ucGFyc2UucHJvdG90eXBlID0gY29sb3IuZm47XG5cbi8vIEhzbGEgY29udmVyc2lvbnMgYWRhcHRlZCBmcm9tOlxuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9tYWFzaGFhY2svc291cmNlL2Jyb3dzZS9wYWNrYWdlcy9ncmFwaGljcy90cnVuay9zcmMvZ3JhcGhpY3MvY29sb3JzL0hVRTJSR0IuYXM/cj01MDIxXG5cbmZ1bmN0aW9uIGh1ZTJyZ2IoIHAsIHEsIGggKSB7XG5cdGggPSAoIGggKyAxICkgJSAxO1xuXHRpZiAoIGggKiA2IDwgMSApIHtcblx0XHRyZXR1cm4gcCArICggcSAtIHAgKSAqIGggKiA2O1xuXHR9XG5cdGlmICggaCAqIDIgPCAxICkge1xuXHRcdHJldHVybiBxO1xuXHR9XG5cdGlmICggaCAqIDMgPCAyICkge1xuXHRcdHJldHVybiBwICsgKCBxIC0gcCApICogKCAoIDIgLyAzICkgLSBoICkgKiA2O1xuXHR9XG5cdHJldHVybiBwO1xufVxuXG5zcGFjZXMuaHNsYS50byA9IGZ1bmN0aW9uKCByZ2JhICkge1xuXHRpZiAoIHJnYmFbIDAgXSA9PSBudWxsIHx8IHJnYmFbIDEgXSA9PSBudWxsIHx8IHJnYmFbIDIgXSA9PSBudWxsICkge1xuXHRcdHJldHVybiBbIG51bGwsIG51bGwsIG51bGwsIHJnYmFbIDMgXSBdO1xuXHR9XG5cdHZhciByID0gcmdiYVsgMCBdIC8gMjU1LFxuXHRcdGcgPSByZ2JhWyAxIF0gLyAyNTUsXG5cdFx0YiA9IHJnYmFbIDIgXSAvIDI1NSxcblx0XHRhID0gcmdiYVsgMyBdLFxuXHRcdG1heCA9IE1hdGgubWF4KCByLCBnLCBiICksXG5cdFx0bWluID0gTWF0aC5taW4oIHIsIGcsIGIgKSxcblx0XHRkaWZmID0gbWF4IC0gbWluLFxuXHRcdGFkZCA9IG1heCArIG1pbixcblx0XHRsID0gYWRkICogMC41LFxuXHRcdGgsIHM7XG5cblx0aWYgKCBtaW4gPT09IG1heCApIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmICggciA9PT0gbWF4ICkge1xuXHRcdGggPSAoIDYwICogKCBnIC0gYiApIC8gZGlmZiApICsgMzYwO1xuXHR9IGVsc2UgaWYgKCBnID09PSBtYXggKSB7XG5cdFx0aCA9ICggNjAgKiAoIGIgLSByICkgLyBkaWZmICkgKyAxMjA7XG5cdH0gZWxzZSB7XG5cdFx0aCA9ICggNjAgKiAoIHIgLSBnICkgLyBkaWZmICkgKyAyNDA7XG5cdH1cblxuXHQvLyBDaHJvbWEgKGRpZmYpID09IDAgbWVhbnMgZ3JleXNjYWxlIHdoaWNoLCBieSBkZWZpbml0aW9uLCBzYXR1cmF0aW9uID0gMCVcblx0Ly8gb3RoZXJ3aXNlLCBzYXR1cmF0aW9uIGlzIGJhc2VkIG9uIHRoZSByYXRpbyBvZiBjaHJvbWEgKGRpZmYpIHRvIGxpZ2h0bmVzcyAoYWRkKVxuXHRpZiAoIGRpZmYgPT09IDAgKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAoIGwgPD0gMC41ICkge1xuXHRcdHMgPSBkaWZmIC8gYWRkO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSBkaWZmIC8gKCAyIC0gYWRkICk7XG5cdH1cblx0cmV0dXJuIFsgTWF0aC5yb3VuZCggaCApICUgMzYwLCBzLCBsLCBhID09IG51bGwgPyAxIDogYSBdO1xufTtcblxuc3BhY2VzLmhzbGEuZnJvbSA9IGZ1bmN0aW9uKCBoc2xhICkge1xuXHRpZiAoIGhzbGFbIDAgXSA9PSBudWxsIHx8IGhzbGFbIDEgXSA9PSBudWxsIHx8IGhzbGFbIDIgXSA9PSBudWxsICkge1xuXHRcdHJldHVybiBbIG51bGwsIG51bGwsIG51bGwsIGhzbGFbIDMgXSBdO1xuXHR9XG5cdHZhciBoID0gaHNsYVsgMCBdIC8gMzYwLFxuXHRcdHMgPSBoc2xhWyAxIF0sXG5cdFx0bCA9IGhzbGFbIDIgXSxcblx0XHRhID0gaHNsYVsgMyBdLFxuXHRcdHEgPSBsIDw9IDAuNSA/IGwgKiAoIDEgKyBzICkgOiBsICsgcyAtIGwgKiBzLFxuXHRcdHAgPSAyICogbCAtIHE7XG5cblx0cmV0dXJuIFtcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoICsgKCAxIC8gMyApICkgKiAyNTUgKSxcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoICkgKiAyNTUgKSxcblx0XHRNYXRoLnJvdW5kKCBodWUycmdiKCBwLCBxLCBoIC0gKCAxIC8gMyApICkgKiAyNTUgKSxcblx0XHRhXG5cdF07XG59O1xuXG5lYWNoKCBzcGFjZXMsIGZ1bmN0aW9uKCBzcGFjZU5hbWUsIHNwYWNlICkge1xuXHR2YXIgcHJvcHMgPSBzcGFjZS5wcm9wcyxcblx0XHRjYWNoZSA9IHNwYWNlLmNhY2hlLFxuXHRcdHRvID0gc3BhY2UudG8sXG5cdFx0ZnJvbSA9IHNwYWNlLmZyb207XG5cblx0Ly8gTWFrZXMgcmdiYSgpIGFuZCBoc2xhKClcblx0Y29sb3IuZm5bIHNwYWNlTmFtZSBdID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBjYWNoZSBmb3IgdGhpcyBzcGFjZSBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0aWYgKCB0byAmJiAhdGhpc1sgY2FjaGUgXSApIHtcblx0XHRcdHRoaXNbIGNhY2hlIF0gPSB0byggdGhpcy5fcmdiYSApO1xuXHRcdH1cblx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4gdGhpc1sgY2FjaGUgXS5zbGljZSgpO1xuXHRcdH1cblxuXHRcdHZhciByZXQsXG5cdFx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICksXG5cdFx0XHRhcnIgPSAoIHR5cGUgPT09IFwiYXJyYXlcIiB8fCB0eXBlID09PSBcIm9iamVjdFwiICkgPyB2YWx1ZSA6IGFyZ3VtZW50cyxcblx0XHRcdGxvY2FsID0gdGhpc1sgY2FjaGUgXS5zbGljZSgpO1xuXG5cdFx0ZWFjaCggcHJvcHMsIGZ1bmN0aW9uKCBrZXksIHByb3AgKSB7XG5cdFx0XHR2YXIgdmFsID0gYXJyWyB0eXBlID09PSBcIm9iamVjdFwiID8ga2V5IDogcHJvcC5pZHggXTtcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IGxvY2FsWyBwcm9wLmlkeCBdO1xuXHRcdFx0fVxuXHRcdFx0bG9jYWxbIHByb3AuaWR4IF0gPSBjbGFtcCggdmFsLCBwcm9wICk7XG5cdFx0fSApO1xuXG5cdFx0aWYgKCBmcm9tICkge1xuXHRcdFx0cmV0ID0gY29sb3IoIGZyb20oIGxvY2FsICkgKTtcblx0XHRcdHJldFsgY2FjaGUgXSA9IGxvY2FsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbG9yKCBsb2NhbCApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBNYWtlcyByZWQoKSBncmVlbigpIGJsdWUoKSBhbHBoYSgpIGh1ZSgpIHNhdHVyYXRpb24oKSBsaWdodG5lc3MoKVxuXHRlYWNoKCBwcm9wcywgZnVuY3Rpb24oIGtleSwgcHJvcCApIHtcblxuXHRcdC8vIEFscGhhIGlzIGluY2x1ZGVkIGluIG1vcmUgdGhhbiBvbmUgc3BhY2Vcblx0XHRpZiAoIGNvbG9yLmZuWyBrZXkgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29sb3IuZm5bIGtleSBdID0gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIHZ0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICksXG5cdFx0XHRcdGZuID0gKCBrZXkgPT09IFwiYWxwaGFcIiA/ICggdGhpcy5faHNsYSA/IFwiaHNsYVwiIDogXCJyZ2JhXCIgKSA6IHNwYWNlTmFtZSApLFxuXHRcdFx0XHRsb2NhbCA9IHRoaXNbIGZuIF0oKSxcblx0XHRcdFx0Y3VyID0gbG9jYWxbIHByb3AuaWR4IF0sXG5cdFx0XHRcdG1hdGNoO1xuXG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuY2FsbCggdGhpcywgY3VyICk7XG5cdFx0XHRcdHZ0eXBlID0galF1ZXJ5LnR5cGUoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgJiYgcHJvcC5lbXB0eSApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIHZ0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRtYXRjaCA9IHJwbHVzZXF1YWxzLmV4ZWMoIHZhbHVlICk7XG5cdFx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBjdXIgKyBwYXJzZUZsb2F0KCBtYXRjaFsgMiBdICkgKiAoIG1hdGNoWyAxIF0gPT09IFwiK1wiID8gMSA6IC0xICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxvY2FsWyBwcm9wLmlkeCBdID0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gdGhpc1sgZm4gXSggbG9jYWwgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cbi8vIEFkZCBjc3NIb29rIGFuZCAuZnguc3RlcCBmdW5jdGlvbiBmb3IgZWFjaCBuYW1lZCBob29rLlxuLy8gYWNjZXB0IGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBwcm9wZXJ0aWVzXG5jb2xvci5ob29rID0gZnVuY3Rpb24oIGhvb2sgKSB7XG5cdHZhciBob29rcyA9IGhvb2suc3BsaXQoIFwiIFwiICk7XG5cdGVhY2goIGhvb2tzLCBmdW5jdGlvbiggaSwgaG9vayApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIGhvb2sgXSA9IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgcGFyc2VkLCBjdXJFbGVtLFxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvciA9IFwiXCI7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPT0gXCJ0cmFuc3BhcmVudFwiICYmICggalF1ZXJ5LnR5cGUoIHZhbHVlICkgIT09IFwic3RyaW5nXCIgfHxcblx0XHRcdFx0XHRcdCggcGFyc2VkID0gc3RyaW5nUGFyc2UoIHZhbHVlICkgKSApICkge1xuXHRcdFx0XHRcdHZhbHVlID0gY29sb3IoIHBhcnNlZCB8fCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggIXN1cHBvcnQucmdiYSAmJiB2YWx1ZS5fcmdiYVsgMyBdICE9PSAxICkge1xuXHRcdFx0XHRcdFx0Y3VyRWxlbSA9IGhvb2sgPT09IFwiYmFja2dyb3VuZENvbG9yXCIgPyBlbGVtLnBhcmVudE5vZGUgOiBlbGVtO1xuXHRcdFx0XHRcdFx0d2hpbGUgKFxuXHRcdFx0XHRcdFx0XHQoIGJhY2tncm91bmRDb2xvciA9PT0gXCJcIiB8fCBiYWNrZ3JvdW5kQ29sb3IgPT09IFwidHJhbnNwYXJlbnRcIiApICYmXG5cdFx0XHRcdFx0XHRcdGN1ckVsZW0gJiYgY3VyRWxlbS5zdHlsZVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yID0galF1ZXJ5LmNzcyggY3VyRWxlbSwgXCJiYWNrZ3JvdW5kQ29sb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdGN1ckVsZW0gPSBjdXJFbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuYmxlbmQoIGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3IgIT09IFwidHJhbnNwYXJlbnRcIiA/XG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvciA6XG5cdFx0XHRcdFx0XHRcdFwiX2RlZmF1bHRcIiApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUudG9SZ2JhU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlWyBob29rIF0gPSB2YWx1ZTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgb24gXCJpbnZhbGlkXCIgdmFsdWVzIGxpa2Vcblx0XHRcdFx0XHQvLyAnYXV0bycgb3IgJ2luaGVyaXQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGpRdWVyeS5meC5zdGVwWyBob29rIF0gPSBmdW5jdGlvbiggZnggKSB7XG5cdFx0XHRpZiAoICFmeC5jb2xvckluaXQgKSB7XG5cdFx0XHRcdGZ4LnN0YXJ0ID0gY29sb3IoIGZ4LmVsZW0sIGhvb2sgKTtcblx0XHRcdFx0ZnguZW5kID0gY29sb3IoIGZ4LmVuZCApO1xuXHRcdFx0XHRmeC5jb2xvckluaXQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyBob29rIF0uc2V0KCBmeC5lbGVtLCBmeC5zdGFydC50cmFuc2l0aW9uKCBmeC5lbmQsIGZ4LnBvcyApICk7XG5cdFx0fTtcblx0fSApO1xuXG59O1xuXG5jb2xvci5ob29rKCBzdGVwSG9va3MgKTtcblxualF1ZXJ5LmNzc0hvb2tzLmJvcmRlckNvbG9yID0ge1xuXHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgZXhwYW5kZWQgPSB7fTtcblxuXHRcdGVhY2goIFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcGFydCApIHtcblx0XHRcdGV4cGFuZGVkWyBcImJvcmRlclwiICsgcGFydCArIFwiQ29sb3JcIiBdID0gdmFsdWU7XG5cdFx0fSApO1xuXHRcdHJldHVybiBleHBhbmRlZDtcblx0fVxufTtcblxuLy8gQmFzaWMgY29sb3IgbmFtZXMgb25seS5cbi8vIFVzYWdlIG9mIGFueSBvZiB0aGUgb3RoZXIgY29sb3IgbmFtZXMgcmVxdWlyZXMgYWRkaW5nIHlvdXJzZWxmIG9yIGluY2x1ZGluZ1xuLy8ganF1ZXJ5LmNvbG9yLnN2Zy1uYW1lcy5qcy5cbmNvbG9ycyA9IGpRdWVyeS5Db2xvci5uYW1lcyA9IHtcblxuXHQvLyA0LjEuIEJhc2ljIGNvbG9yIGtleXdvcmRzXG5cdGFxdWE6IFwiIzAwZmZmZlwiLFxuXHRibGFjazogXCIjMDAwMDAwXCIsXG5cdGJsdWU6IFwiIzAwMDBmZlwiLFxuXHRmdWNoc2lhOiBcIiNmZjAwZmZcIixcblx0Z3JheTogXCIjODA4MDgwXCIsXG5cdGdyZWVuOiBcIiMwMDgwMDBcIixcblx0bGltZTogXCIjMDBmZjAwXCIsXG5cdG1hcm9vbjogXCIjODAwMDAwXCIsXG5cdG5hdnk6IFwiIzAwMDA4MFwiLFxuXHRvbGl2ZTogXCIjODA4MDAwXCIsXG5cdHB1cnBsZTogXCIjODAwMDgwXCIsXG5cdHJlZDogXCIjZmYwMDAwXCIsXG5cdHNpbHZlcjogXCIjYzBjMGMwXCIsXG5cdHRlYWw6IFwiIzAwODA4MFwiLFxuXHR3aGl0ZTogXCIjZmZmZmZmXCIsXG5cdHllbGxvdzogXCIjZmZmZjAwXCIsXG5cblx0Ly8gNC4yLjMuIFwidHJhbnNwYXJlbnRcIiBjb2xvciBrZXl3b3JkXG5cdHRyYW5zcGFyZW50OiBbIG51bGwsIG51bGwsIG51bGwsIDAgXSxcblxuXHRfZGVmYXVsdDogXCIjZmZmZmZmXCJcbn07XG5cbn0gKSggalF1ZXJ5ICk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENMQVNTIEFOSU1BVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBjbGFzc0FuaW1hdGlvbkFjdGlvbnMgPSBbIFwiYWRkXCIsIFwicmVtb3ZlXCIsIFwidG9nZ2xlXCIgXSxcblx0c2hvcnRoYW5kU3R5bGVzID0ge1xuXHRcdGJvcmRlcjogMSxcblx0XHRib3JkZXJCb3R0b206IDEsXG5cdFx0Ym9yZGVyQ29sb3I6IDEsXG5cdFx0Ym9yZGVyTGVmdDogMSxcblx0XHRib3JkZXJSaWdodDogMSxcblx0XHRib3JkZXJUb3A6IDEsXG5cdFx0Ym9yZGVyV2lkdGg6IDEsXG5cdFx0bWFyZ2luOiAxLFxuXHRcdHBhZGRpbmc6IDFcblx0fTtcblxuJC5lYWNoKFxuXHRbIFwiYm9yZGVyTGVmdFN0eWxlXCIsIFwiYm9yZGVyUmlnaHRTdHlsZVwiLCBcImJvcmRlckJvdHRvbVN0eWxlXCIsIFwiYm9yZGVyVG9wU3R5bGVcIiBdLFxuXHRmdW5jdGlvbiggXywgcHJvcCApIHtcblx0XHQkLmZ4LnN0ZXBbIHByb3AgXSA9IGZ1bmN0aW9uKCBmeCApIHtcblx0XHRcdGlmICggZnguZW5kICE9PSBcIm5vbmVcIiAmJiAhZnguc2V0QXR0ciB8fCBmeC5wb3MgPT09IDEgJiYgIWZ4LnNldEF0dHIgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZnguZWxlbSwgcHJvcCwgZnguZW5kICk7XG5cdFx0XHRcdGZ4LnNldEF0dHIgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cbik7XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRTdHlsZXMoIGVsZW0gKSB7XG5cdHZhciBrZXksIGxlbixcblx0XHRzdHlsZSA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/XG5cdFx0XHRlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApIDpcblx0XHRcdGVsZW0uY3VycmVudFN0eWxlLFxuXHRcdHN0eWxlcyA9IHt9O1xuXG5cdGlmICggc3R5bGUgJiYgc3R5bGUubGVuZ3RoICYmIHN0eWxlWyAwIF0gJiYgc3R5bGVbIHN0eWxlWyAwIF0gXSApIHtcblx0XHRsZW4gPSBzdHlsZS5sZW5ndGg7XG5cdFx0d2hpbGUgKCBsZW4tLSApIHtcblx0XHRcdGtleSA9IHN0eWxlWyBsZW4gXTtcblx0XHRcdGlmICggdHlwZW9mIHN0eWxlWyBrZXkgXSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0c3R5bGVzWyAkLmNhbWVsQ2FzZSgga2V5ICkgXSA9IHN0eWxlWyBrZXkgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0Ly8gU3VwcG9ydDogT3BlcmEsIElFIDw5XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICgga2V5IGluIHN0eWxlICkge1xuXHRcdFx0aWYgKCB0eXBlb2Ygc3R5bGVbIGtleSBdID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRzdHlsZXNbIGtleSBdID0gc3R5bGVbIGtleSBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIHN0eWxlRGlmZmVyZW5jZSggb2xkU3R5bGUsIG5ld1N0eWxlICkge1xuXHR2YXIgZGlmZiA9IHt9LFxuXHRcdG5hbWUsIHZhbHVlO1xuXG5cdGZvciAoIG5hbWUgaW4gbmV3U3R5bGUgKSB7XG5cdFx0dmFsdWUgPSBuZXdTdHlsZVsgbmFtZSBdO1xuXHRcdGlmICggb2xkU3R5bGVbIG5hbWUgXSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRpZiAoICFzaG9ydGhhbmRTdHlsZXNbIG5hbWUgXSApIHtcblx0XHRcdFx0aWYgKCAkLmZ4LnN0ZXBbIG5hbWUgXSB8fCAhaXNOYU4oIHBhcnNlRmxvYXQoIHZhbHVlICkgKSApIHtcblx0XHRcdFx0XHRkaWZmWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBkaWZmO1xufVxuXG4vLyBTdXBwb3J0OiBqUXVlcnkgPDEuOFxuaWYgKCAhJC5mbi5hZGRCYWNrICkge1xuXHQkLmZuLmFkZEJhY2sgPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9O1xufVxuXG4kLmVmZmVjdHMuYW5pbWF0ZUNsYXNzID0gZnVuY3Rpb24oIHZhbHVlLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0dmFyIG8gPSAkLnNwZWVkKCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayApO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCBmdW5jdGlvbigpIHtcblx0XHR2YXIgYW5pbWF0ZWQgPSAkKCB0aGlzICksXG5cdFx0XHRiYXNlQ2xhc3MgPSBhbmltYXRlZC5hdHRyKCBcImNsYXNzXCIgKSB8fCBcIlwiLFxuXHRcdFx0YXBwbHlDbGFzc0NoYW5nZSxcblx0XHRcdGFsbEFuaW1hdGlvbnMgPSBvLmNoaWxkcmVuID8gYW5pbWF0ZWQuZmluZCggXCIqXCIgKS5hZGRCYWNrKCkgOiBhbmltYXRlZDtcblxuXHRcdC8vIE1hcCB0aGUgYW5pbWF0ZWQgb2JqZWN0cyB0byBzdG9yZSB0aGUgb3JpZ2luYWwgc3R5bGVzLlxuXHRcdGFsbEFuaW1hdGlvbnMgPSBhbGxBbmltYXRpb25zLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZWwgPSAkKCB0aGlzICk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbDogZWwsXG5cdFx0XHRcdHN0YXJ0OiBnZXRFbGVtZW50U3R5bGVzKCB0aGlzIClcblx0XHRcdH07XG5cdFx0fSApO1xuXG5cdFx0Ly8gQXBwbHkgY2xhc3MgY2hhbmdlXG5cdFx0YXBwbHlDbGFzc0NoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0JC5lYWNoKCBjbGFzc0FuaW1hdGlvbkFjdGlvbnMsIGZ1bmN0aW9uKCBpLCBhY3Rpb24gKSB7XG5cdFx0XHRcdGlmICggdmFsdWVbIGFjdGlvbiBdICkge1xuXHRcdFx0XHRcdGFuaW1hdGVkWyBhY3Rpb24gKyBcIkNsYXNzXCIgXSggdmFsdWVbIGFjdGlvbiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9O1xuXHRcdGFwcGx5Q2xhc3NDaGFuZ2UoKTtcblxuXHRcdC8vIE1hcCBhbGwgYW5pbWF0ZWQgb2JqZWN0cyBhZ2FpbiAtIGNhbGN1bGF0ZSBuZXcgc3R5bGVzIGFuZCBkaWZmXG5cdFx0YWxsQW5pbWF0aW9ucyA9IGFsbEFuaW1hdGlvbnMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZW5kID0gZ2V0RWxlbWVudFN0eWxlcyggdGhpcy5lbFsgMCBdICk7XG5cdFx0XHR0aGlzLmRpZmYgPSBzdHlsZURpZmZlcmVuY2UoIHRoaXMuc3RhcnQsIHRoaXMuZW5kICk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9ICk7XG5cblx0XHQvLyBBcHBseSBvcmlnaW5hbCBjbGFzc1xuXHRcdGFuaW1hdGVkLmF0dHIoIFwiY2xhc3NcIiwgYmFzZUNsYXNzICk7XG5cblx0XHQvLyBNYXAgYWxsIGFuaW1hdGVkIG9iamVjdHMgYWdhaW4gLSB0aGlzIHRpbWUgY29sbGVjdGluZyBhIHByb21pc2Vcblx0XHRhbGxBbmltYXRpb25zID0gYWxsQW5pbWF0aW9ucy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHN0eWxlSW5mbyA9IHRoaXMsXG5cdFx0XHRcdGRmZCA9ICQuRGVmZXJyZWQoKSxcblx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKCB7fSwgbywge1xuXHRcdFx0XHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRcdFx0XHRjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRkZmQucmVzb2x2ZSggc3R5bGVJbmZvICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuZWwuYW5pbWF0ZSggdGhpcy5kaWZmLCBvcHRzICk7XG5cdFx0XHRyZXR1cm4gZGZkLnByb21pc2UoKTtcblx0XHR9ICk7XG5cblx0XHQvLyBPbmNlIGFsbCBhbmltYXRpb25zIGhhdmUgY29tcGxldGVkOlxuXHRcdCQud2hlbi5hcHBseSggJCwgYWxsQW5pbWF0aW9ucy5nZXQoKSApLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTZXQgdGhlIGZpbmFsIGNsYXNzXG5cdFx0XHRhcHBseUNsYXNzQ2hhbmdlKCk7XG5cblx0XHRcdC8vIEZvciBlYWNoIGFuaW1hdGVkIGVsZW1lbnQsXG5cdFx0XHQvLyBjbGVhciBhbGwgY3NzIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGFuaW1hdGVkXG5cdFx0XHQkLmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbCA9IHRoaXMuZWw7XG5cdFx0XHRcdCQuZWFjaCggdGhpcy5kaWZmLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdGVsLmNzcygga2V5LCBcIlwiICk7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH0gKTtcblxuXHRcdFx0Ly8gVGhpcyBpcyBndWFybnRlZWQgdG8gYmUgdGhlcmUgaWYgeW91IHVzZSBqUXVlcnkuc3BlZWQoKVxuXHRcdFx0Ly8gaXQgYWxzbyBoYW5kbGVzIGRlcXVldWluZyB0aGUgbmV4dCBhbmltLi4uXG5cdFx0XHRvLmNvbXBsZXRlLmNhbGwoIGFuaW1hdGVkWyAwIF0gKTtcblx0XHR9ICk7XG5cdH0gKTtcbn07XG5cbiQuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0XHRyZXR1cm4gc3BlZWQgP1xuXHRcdFx0XHQkLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwoIHRoaXMsXG5cdFx0XHRcdFx0eyBhZGQ6IGNsYXNzTmFtZXMgfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSA6XG5cdFx0XHRcdG9yaWcuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cdH0gKSggJC5mbi5hZGRDbGFzcyApLFxuXG5cdHJlbW92ZUNsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgP1xuXHRcdFx0XHQkLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwoIHRoaXMsXG5cdFx0XHRcdFx0eyByZW1vdmU6IGNsYXNzTmFtZXMgfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSA6XG5cdFx0XHRcdG9yaWcuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cdH0gKSggJC5mbi5yZW1vdmVDbGFzcyApLFxuXG5cdHRvZ2dsZUNsYXNzOiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggY2xhc3NOYW1lcywgZm9yY2UsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgZm9yY2UgPT09IFwiYm9vbGVhblwiIHx8IGZvcmNlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGlmICggIXNwZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2l0aG91dCBzcGVlZCBwYXJhbWV0ZXJcblx0XHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuICQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCggdGhpcyxcblx0XHRcdFx0XHRcdCggZm9yY2UgPyB7IGFkZDogY2xhc3NOYW1lcyB9IDogeyByZW1vdmU6IGNsYXNzTmFtZXMgfSApLFxuXHRcdFx0XHRcdFx0c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBXaXRob3V0IGZvcmNlIHBhcmFtZXRlclxuXHRcdFx0XHRyZXR1cm4gJC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKCB0aGlzLFxuXHRcdFx0XHRcdHsgdG9nZ2xlOiBjbGFzc05hbWVzIH0sIGZvcmNlLCBzcGVlZCwgZWFzaW5nICk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApKCAkLmZuLnRvZ2dsZUNsYXNzICksXG5cblx0c3dpdGNoQ2xhc3M6IGZ1bmN0aW9uKCByZW1vdmUsIGFkZCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuICQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCggdGhpcywge1xuXHRcdFx0YWRkOiBhZGQsXG5cdFx0XHRyZW1vdmU6IHJlbW92ZVxuXHRcdH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH1cbn0gKTtcblxufSApKCk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRUZGRUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuKCBmdW5jdGlvbigpIHtcblxuaWYgKCAkLmV4cHIgJiYgJC5leHByLmZpbHRlcnMgJiYgJC5leHByLmZpbHRlcnMuYW5pbWF0ZWQgKSB7XG5cdCQuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gISEkKCBlbGVtICkuZGF0YSggZGF0YVNwYWNlQW5pbWF0ZWQgKSB8fCBvcmlnKCBlbGVtICk7XG5cdFx0fTtcblx0fSApKCAkLmV4cHIuZmlsdGVycy5hbmltYXRlZCApO1xufVxuXG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblx0JC5leHRlbmQoICQuZWZmZWN0cywge1xuXG5cdFx0Ly8gU2F2ZXMgYSBzZXQgb2YgcHJvcGVydGllcyBpbiBhIGRhdGEgc3RvcmFnZVxuXHRcdHNhdmU6IGZ1bmN0aW9uKCBlbGVtZW50LCBzZXQgKSB7XG5cdFx0XHR2YXIgaSA9IDAsIGxlbmd0aCA9IHNldC5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBzZXRbIGkgXSAhPT0gbnVsbCApIHtcblx0XHRcdFx0XHRlbGVtZW50LmRhdGEoIGRhdGFTcGFjZSArIHNldFsgaSBdLCBlbGVtZW50WyAwIF0uc3R5bGVbIHNldFsgaSBdIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBSZXN0b3JlcyBhIHNldCBvZiBwcmV2aW91c2x5IHNhdmVkIHByb3BlcnRpZXMgZnJvbSBhIGRhdGEgc3RvcmFnZVxuXHRcdHJlc3RvcmU6IGZ1bmN0aW9uKCBlbGVtZW50LCBzZXQgKSB7XG5cdFx0XHR2YXIgdmFsLCBpID0gMCwgbGVuZ3RoID0gc2V0Lmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIHNldFsgaSBdICE9PSBudWxsICkge1xuXHRcdFx0XHRcdHZhbCA9IGVsZW1lbnQuZGF0YSggZGF0YVNwYWNlICsgc2V0WyBpIF0gKTtcblx0XHRcdFx0XHRlbGVtZW50LmNzcyggc2V0WyBpIF0sIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldE1vZGU6IGZ1bmN0aW9uKCBlbCwgbW9kZSApIHtcblx0XHRcdGlmICggbW9kZSA9PT0gXCJ0b2dnbGVcIiApIHtcblx0XHRcdFx0bW9kZSA9IGVsLmlzKCBcIjpoaWRkZW5cIiApID8gXCJzaG93XCIgOiBcImhpZGVcIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtb2RlO1xuXHRcdH0sXG5cblx0XHQvLyBXcmFwcyB0aGUgZWxlbWVudCBhcm91bmQgYSB3cmFwcGVyIHRoYXQgY29waWVzIHBvc2l0aW9uIHByb3BlcnRpZXNcblx0XHRjcmVhdGVXcmFwcGVyOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSB3cmFwcGVkLCByZXR1cm4gaXRcblx0XHRcdGlmICggZWxlbWVudC5wYXJlbnQoKS5pcyggXCIudWktZWZmZWN0cy13cmFwcGVyXCIgKSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQucGFyZW50KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdyYXAgdGhlIGVsZW1lbnRcblx0XHRcdHZhciBwcm9wcyA9IHtcblx0XHRcdFx0XHR3aWR0aDogZWxlbWVudC5vdXRlcldpZHRoKCB0cnVlICksXG5cdFx0XHRcdFx0aGVpZ2h0OiBlbGVtZW50Lm91dGVySGVpZ2h0KCB0cnVlICksXG5cdFx0XHRcdFx0XCJmbG9hdFwiOiBlbGVtZW50LmNzcyggXCJmbG9hdFwiIClcblx0XHRcdFx0fSxcblx0XHRcdFx0d3JhcHBlciA9ICQoIFwiPGRpdj48L2Rpdj5cIiApXG5cdFx0XHRcdFx0LmFkZENsYXNzKCBcInVpLWVmZmVjdHMtd3JhcHBlclwiIClcblx0XHRcdFx0XHQuY3NzKCB7XG5cdFx0XHRcdFx0XHRmb250U2l6ZTogXCIxMDAlXCIsXG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRib3JkZXI6IFwibm9uZVwiLFxuXHRcdFx0XHRcdFx0bWFyZ2luOiAwLFxuXHRcdFx0XHRcdFx0cGFkZGluZzogMFxuXHRcdFx0XHRcdH0gKSxcblxuXHRcdFx0XHQvLyBTdG9yZSB0aGUgc2l6ZSBpbiBjYXNlIHdpZHRoL2hlaWdodCBhcmUgZGVmaW5lZCBpbiAlIC0gRml4ZXMgIzUyNDVcblx0XHRcdFx0c2l6ZSA9IHtcblx0XHRcdFx0XHR3aWR0aDogZWxlbWVudC53aWR0aCgpLFxuXHRcdFx0XHRcdGhlaWdodDogZWxlbWVudC5oZWlnaHQoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94XG5cdFx0XHQvLyBGaXJlZm94IGluY29ycmVjdGx5IGV4cG9zZXMgYW5vbnltb3VzIGNvbnRlbnRcblx0XHRcdC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTU2MTY2NFxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YWN0aXZlLmlkO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdGFjdGl2ZSA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQud3JhcCggd3JhcHBlciApO1xuXG5cdFx0XHQvLyBGaXhlcyAjNzU5NSAtIEVsZW1lbnRzIGxvc2UgZm9jdXMgd2hlbiB3cmFwcGVkLlxuXHRcdFx0aWYgKCBlbGVtZW50WyAwIF0gPT09IGFjdGl2ZSB8fCAkLmNvbnRhaW5zKCBlbGVtZW50WyAwIF0sIGFjdGl2ZSApICkge1xuXHRcdFx0XHQkKCBhY3RpdmUgKS50cmlnZ2VyKCBcImZvY3VzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG90Zml4IGZvciBqUXVlcnkgMS40IHNpbmNlIHNvbWUgY2hhbmdlIGluIHdyYXAoKSBzZWVtcyB0byBhY3R1YWxseVxuXHRcdFx0Ly8gbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSB3cmFwcGVkIGVsZW1lbnRcblx0XHRcdHdyYXBwZXIgPSBlbGVtZW50LnBhcmVudCgpO1xuXG5cdFx0XHQvLyBUcmFuc2ZlciBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzIHRvIHRoZSB3cmFwcGVyXG5cdFx0XHRpZiAoIGVsZW1lbnQuY3NzKCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0d3JhcHBlci5jc3MoIHsgcG9zaXRpb246IFwicmVsYXRpdmVcIiB9ICk7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCB7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIgfSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JC5leHRlbmQoIHByb3BzLCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IGVsZW1lbnQuY3NzKCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdFx0XHR6SW5kZXg6IGVsZW1lbnQuY3NzKCBcInotaW5kZXhcIiApXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0JC5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiLCBcImJvdHRvbVwiLCBcInJpZ2h0XCIgXSwgZnVuY3Rpb24oIGksIHBvcyApIHtcblx0XHRcdFx0XHRwcm9wc1sgcG9zIF0gPSBlbGVtZW50LmNzcyggcG9zICk7XG5cdFx0XHRcdFx0aWYgKCBpc05hTiggcGFyc2VJbnQoIHByb3BzWyBwb3MgXSwgMTAgKSApICkge1xuXHRcdFx0XHRcdFx0cHJvcHNbIHBvcyBdID0gXCJhdXRvXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwicmVsYXRpdmVcIixcblx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0bGVmdDogMCxcblx0XHRcdFx0XHRyaWdodDogXCJhdXRvXCIsXG5cdFx0XHRcdFx0Ym90dG9tOiBcImF1dG9cIlxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0XHRlbGVtZW50LmNzcyggc2l6ZSApO1xuXG5cdFx0XHRyZXR1cm4gd3JhcHBlci5jc3MoIHByb3BzICkuc2hvdygpO1xuXHRcdH0sXG5cblx0XHRyZW1vdmVXcmFwcGVyOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRcdHZhciBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHRpZiAoIGVsZW1lbnQucGFyZW50KCkuaXMoIFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiICkgKSB7XG5cdFx0XHRcdGVsZW1lbnQucGFyZW50KCkucmVwbGFjZVdpdGgoIGVsZW1lbnQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyAjNzU5NSAtIEVsZW1lbnRzIGxvc2UgZm9jdXMgd2hlbiB3cmFwcGVkLlxuXHRcdFx0XHRpZiAoIGVsZW1lbnRbIDAgXSA9PT0gYWN0aXZlIHx8ICQuY29udGFpbnMoIGVsZW1lbnRbIDAgXSwgYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0JCggYWN0aXZlICkudHJpZ2dlciggXCJmb2N1c1wiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9ICk7XG59XG5cbiQuZXh0ZW5kKCAkLmVmZmVjdHMsIHtcblx0dmVyc2lvbjogXCIxLjEyLjFcIixcblxuXHRkZWZpbmU6IGZ1bmN0aW9uKCBuYW1lLCBtb2RlLCBlZmZlY3QgKSB7XG5cdFx0aWYgKCAhZWZmZWN0ICkge1xuXHRcdFx0ZWZmZWN0ID0gbW9kZTtcblx0XHRcdG1vZGUgPSBcImVmZmVjdFwiO1xuXHRcdH1cblxuXHRcdCQuZWZmZWN0cy5lZmZlY3RbIG5hbWUgXSA9IGVmZmVjdDtcblx0XHQkLmVmZmVjdHMuZWZmZWN0WyBuYW1lIF0ubW9kZSA9IG1vZGU7XG5cblx0XHRyZXR1cm4gZWZmZWN0O1xuXHR9LFxuXG5cdHNjYWxlZERpbWVuc2lvbnM6IGZ1bmN0aW9uKCBlbGVtZW50LCBwZXJjZW50LCBkaXJlY3Rpb24gKSB7XG5cdFx0aWYgKCBwZXJjZW50ID09PSAwICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVpZ2h0OiAwLFxuXHRcdFx0XHR3aWR0aDogMCxcblx0XHRcdFx0b3V0ZXJIZWlnaHQ6IDAsXG5cdFx0XHRcdG91dGVyV2lkdGg6IDBcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dmFyIHggPSBkaXJlY3Rpb24gIT09IFwiaG9yaXpvbnRhbFwiID8gKCAoIHBlcmNlbnQgfHwgMTAwICkgLyAxMDAgKSA6IDEsXG5cdFx0XHR5ID0gZGlyZWN0aW9uICE9PSBcInZlcnRpY2FsXCIgPyAoICggcGVyY2VudCB8fCAxMDAgKSAvIDEwMCApIDogMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0KCkgKiB5LFxuXHRcdFx0d2lkdGg6IGVsZW1lbnQud2lkdGgoKSAqIHgsXG5cdFx0XHRvdXRlckhlaWdodDogZWxlbWVudC5vdXRlckhlaWdodCgpICogeSxcblx0XHRcdG91dGVyV2lkdGg6IGVsZW1lbnQub3V0ZXJXaWR0aCgpICogeFxuXHRcdH07XG5cblx0fSxcblxuXHRjbGlwVG9Cb3g6IGZ1bmN0aW9uKCBhbmltYXRpb24gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHdpZHRoOiBhbmltYXRpb24uY2xpcC5yaWdodCAtIGFuaW1hdGlvbi5jbGlwLmxlZnQsXG5cdFx0XHRoZWlnaHQ6IGFuaW1hdGlvbi5jbGlwLmJvdHRvbSAtIGFuaW1hdGlvbi5jbGlwLnRvcCxcblx0XHRcdGxlZnQ6IGFuaW1hdGlvbi5jbGlwLmxlZnQsXG5cdFx0XHR0b3A6IGFuaW1hdGlvbi5jbGlwLnRvcFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gSW5qZWN0cyByZWNlbnRseSBxdWV1ZWQgZnVuY3Rpb25zIHRvIGJlIGZpcnN0IGluIGxpbmUgKGFmdGVyIFwiaW5wcm9ncmVzc1wiKVxuXHR1bnNoaWZ0OiBmdW5jdGlvbiggZWxlbWVudCwgcXVldWVMZW5ndGgsIGNvdW50ICkge1xuXHRcdHZhciBxdWV1ZSA9IGVsZW1lbnQucXVldWUoKTtcblxuXHRcdGlmICggcXVldWVMZW5ndGggPiAxICkge1xuXHRcdFx0cXVldWUuc3BsaWNlLmFwcGx5KCBxdWV1ZSxcblx0XHRcdFx0WyAxLCAwIF0uY29uY2F0KCBxdWV1ZS5zcGxpY2UoIHF1ZXVlTGVuZ3RoLCBjb3VudCApICkgKTtcblx0XHR9XG5cdFx0ZWxlbWVudC5kZXF1ZXVlKCk7XG5cdH0sXG5cblx0c2F2ZVN0eWxlOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHRlbGVtZW50LmRhdGEoIGRhdGFTcGFjZVN0eWxlLCBlbGVtZW50WyAwIF0uc3R5bGUuY3NzVGV4dCApO1xuXHR9LFxuXG5cdHJlc3RvcmVTdHlsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0ZWxlbWVudFsgMCBdLnN0eWxlLmNzc1RleHQgPSBlbGVtZW50LmRhdGEoIGRhdGFTcGFjZVN0eWxlICkgfHwgXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZURhdGEoIGRhdGFTcGFjZVN0eWxlICk7XG5cdH0sXG5cblx0bW9kZTogZnVuY3Rpb24oIGVsZW1lbnQsIG1vZGUgKSB7XG5cdFx0dmFyIGhpZGRlbiA9IGVsZW1lbnQuaXMoIFwiOmhpZGRlblwiICk7XG5cblx0XHRpZiAoIG1vZGUgPT09IFwidG9nZ2xlXCIgKSB7XG5cdFx0XHRtb2RlID0gaGlkZGVuID8gXCJzaG93XCIgOiBcImhpZGVcIjtcblx0XHR9XG5cdFx0aWYgKCBoaWRkZW4gPyBtb2RlID09PSBcImhpZGVcIiA6IG1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdFx0bW9kZSA9IFwibm9uZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZTtcblx0fSxcblxuXHQvLyBUcmFuc2xhdGVzIGEgW3RvcCxsZWZ0XSBhcnJheSBpbnRvIGEgYmFzZWxpbmUgdmFsdWVcblx0Z2V0QmFzZWxpbmU6IGZ1bmN0aW9uKCBvcmlnaW4sIG9yaWdpbmFsICkge1xuXHRcdHZhciB5LCB4O1xuXG5cdFx0c3dpdGNoICggb3JpZ2luWyAwIF0gKSB7XG5cdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0eSA9IDA7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibWlkZGxlXCI6XG5cdFx0XHR5ID0gMC41O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImJvdHRvbVwiOlxuXHRcdFx0eSA9IDE7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0eSA9IG9yaWdpblsgMCBdIC8gb3JpZ2luYWwuaGVpZ2h0O1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoIG9yaWdpblsgMSBdICkge1xuXHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHR4ID0gMDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjZW50ZXJcIjpcblx0XHRcdHggPSAwLjU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicmlnaHRcIjpcblx0XHRcdHggPSAxO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHggPSBvcmlnaW5bIDEgXSAvIG9yaWdpbmFsLndpZHRoO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR4OiB4LFxuXHRcdFx0eTogeVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIHBsYWNlaG9sZGVyIGVsZW1lbnQgc28gdGhhdCB0aGUgb3JpZ2luYWwgZWxlbWVudCBjYW4gYmUgbWFkZSBhYnNvbHV0ZVxuXHRjcmVhdGVQbGFjZWhvbGRlcjogZnVuY3Rpb24oIGVsZW1lbnQgKSB7XG5cdFx0dmFyIHBsYWNlaG9sZGVyLFxuXHRcdFx0Y3NzUG9zaXRpb24gPSBlbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0XHRwb3NpdGlvbiA9IGVsZW1lbnQucG9zaXRpb24oKTtcblxuXHRcdC8vIExvY2sgaW4gbWFyZ2lucyBmaXJzdCB0byBhY2NvdW50IGZvciBmb3JtIGVsZW1lbnRzLCB3aGljaFxuXHRcdC8vIHdpbGwgY2hhbmdlIG1hcmdpbiBpZiB5b3UgZXhwbGljaXRseSBzZXQgaGVpZ2h0XG5cdFx0Ly8gc2VlOiBodHRwOi8vanNmaWRkbGUubmV0L0paU010LzMvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDczODBcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmlcblx0XHRlbGVtZW50LmNzcygge1xuXHRcdFx0bWFyZ2luVG9wOiBlbGVtZW50LmNzcyggXCJtYXJnaW5Ub3BcIiApLFxuXHRcdFx0bWFyZ2luQm90dG9tOiBlbGVtZW50LmNzcyggXCJtYXJnaW5Cb3R0b21cIiApLFxuXHRcdFx0bWFyZ2luTGVmdDogZWxlbWVudC5jc3MoIFwibWFyZ2luTGVmdFwiICksXG5cdFx0XHRtYXJnaW5SaWdodDogZWxlbWVudC5jc3MoIFwibWFyZ2luUmlnaHRcIiApXG5cdFx0fSApXG5cdFx0Lm91dGVyV2lkdGgoIGVsZW1lbnQub3V0ZXJXaWR0aCgpIClcblx0XHQub3V0ZXJIZWlnaHQoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSApO1xuXG5cdFx0aWYgKCAvXihzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KCBjc3NQb3NpdGlvbiApICkge1xuXHRcdFx0Y3NzUG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cblx0XHRcdHBsYWNlaG9sZGVyID0gJCggXCI8XCIgKyBlbGVtZW50WyAwIF0ubm9kZU5hbWUgKyBcIj5cIiApLmluc2VydEFmdGVyKCBlbGVtZW50ICkuY3NzKCB7XG5cblx0XHRcdFx0Ly8gQ29udmVydCBpbmxpbmUgdG8gaW5saW5lIGJsb2NrIHRvIGFjY291bnQgZm9yIGlubGluZSBlbGVtZW50c1xuXHRcdFx0XHQvLyB0aGF0IHR1cm4gdG8gaW5saW5lIGJsb2NrIGJhc2VkIG9uIGNvbnRlbnQgKGxpa2UgaW1nKVxuXHRcdFx0XHRkaXNwbGF5OiAvXihpbmxpbmV8cnVieSkvLnRlc3QoIGVsZW1lbnQuY3NzKCBcImRpc3BsYXlcIiApICkgP1xuXHRcdFx0XHRcdFwiaW5saW5lLWJsb2NrXCIgOlxuXHRcdFx0XHRcdFwiYmxvY2tcIixcblx0XHRcdFx0dmlzaWJpbGl0eTogXCJoaWRkZW5cIixcblxuXHRcdFx0XHQvLyBNYXJnaW5zIG5lZWQgdG8gYmUgc2V0IHRvIGFjY291bnQgZm9yIG1hcmdpbiBjb2xsYXBzZVxuXHRcdFx0XHRtYXJnaW5Ub3A6IGVsZW1lbnQuY3NzKCBcIm1hcmdpblRvcFwiICksXG5cdFx0XHRcdG1hcmdpbkJvdHRvbTogZWxlbWVudC5jc3MoIFwibWFyZ2luQm90dG9tXCIgKSxcblx0XHRcdFx0bWFyZ2luTGVmdDogZWxlbWVudC5jc3MoIFwibWFyZ2luTGVmdFwiICksXG5cdFx0XHRcdG1hcmdpblJpZ2h0OiBlbGVtZW50LmNzcyggXCJtYXJnaW5SaWdodFwiICksXG5cdFx0XHRcdFwiZmxvYXRcIjogZWxlbWVudC5jc3MoIFwiZmxvYXRcIiApXG5cdFx0XHR9IClcblx0XHRcdC5vdXRlcldpZHRoKCBlbGVtZW50Lm91dGVyV2lkdGgoKSApXG5cdFx0XHQub3V0ZXJIZWlnaHQoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSApXG5cdFx0XHQuYWRkQ2xhc3MoIFwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiICk7XG5cblx0XHRcdGVsZW1lbnQuZGF0YSggZGF0YVNwYWNlICsgXCJwbGFjZWhvbGRlclwiLCBwbGFjZWhvbGRlciApO1xuXHRcdH1cblxuXHRcdGVsZW1lbnQuY3NzKCB7XG5cdFx0XHRwb3NpdGlvbjogY3NzUG9zaXRpb24sXG5cdFx0XHRsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuXHRcdFx0dG9wOiBwb3NpdGlvbi50b3Bcblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gcGxhY2Vob2xkZXI7XG5cdH0sXG5cblx0cmVtb3ZlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uKCBlbGVtZW50ICkge1xuXHRcdHZhciBkYXRhS2V5ID0gZGF0YVNwYWNlICsgXCJwbGFjZWhvbGRlclwiLFxuXHRcdFx0XHRwbGFjZWhvbGRlciA9IGVsZW1lbnQuZGF0YSggZGF0YUtleSApO1xuXG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuXHRcdFx0ZWxlbWVudC5yZW1vdmVEYXRhKCBkYXRhS2V5ICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFJlbW92ZXMgYSBwbGFjZWhvbGRlciBpZiBpdCBleGlzdHMgYW5kIHJlc3RvcmVzXG5cdC8vIHByb3BlcnRpZXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGR1cmluZyBwbGFjZWhvbGRlciBjcmVhdGlvblxuXHRjbGVhblVwOiBmdW5jdGlvbiggZWxlbWVudCApIHtcblx0XHQkLmVmZmVjdHMucmVzdG9yZVN0eWxlKCBlbGVtZW50ICk7XG5cdFx0JC5lZmZlY3RzLnJlbW92ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cdH0sXG5cblx0c2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oIGVsZW1lbnQsIGxpc3QsIGZhY3RvciwgdmFsdWUgKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSB8fCB7fTtcblx0XHQkLmVhY2goIGxpc3QsIGZ1bmN0aW9uKCBpLCB4ICkge1xuXHRcdFx0dmFyIHVuaXQgPSBlbGVtZW50LmNzc1VuaXQoIHggKTtcblx0XHRcdGlmICggdW5pdFsgMCBdID4gMCApIHtcblx0XHRcdFx0dmFsdWVbIHggXSA9IHVuaXRbIDAgXSAqIGZhY3RvciArIHVuaXRbIDEgXTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59ICk7XG5cbi8vIFJldHVybiBhbiBlZmZlY3Qgb3B0aW9ucyBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzOlxuZnVuY3Rpb24gX25vcm1hbGl6ZUFyZ3VtZW50cyggZWZmZWN0LCBvcHRpb25zLCBzcGVlZCwgY2FsbGJhY2sgKSB7XG5cblx0Ly8gQWxsb3cgcGFzc2luZyBhbGwgb3B0aW9ucyBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG5cdGlmICggJC5pc1BsYWluT2JqZWN0KCBlZmZlY3QgKSApIHtcblx0XHRvcHRpb25zID0gZWZmZWN0O1xuXHRcdGVmZmVjdCA9IGVmZmVjdC5lZmZlY3Q7XG5cdH1cblxuXHQvLyBDb252ZXJ0IHRvIGFuIG9iamVjdFxuXHRlZmZlY3QgPSB7IGVmZmVjdDogZWZmZWN0IH07XG5cblx0Ly8gQ2F0Y2ggKGVmZmVjdCwgbnVsbCwgLi4uKVxuXHRpZiAoIG9wdGlvbnMgPT0gbnVsbCApIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHQvLyBDYXRjaCAoZWZmZWN0LCBjYWxsYmFjaylcblx0aWYgKCAkLmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblx0XHRjYWxsYmFjayA9IG9wdGlvbnM7XG5cdFx0c3BlZWQgPSBudWxsO1xuXHRcdG9wdGlvbnMgPSB7fTtcblx0fVxuXG5cdC8vIENhdGNoIChlZmZlY3QsIHNwZWVkLCA/KVxuXHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSBcIm51bWJlclwiIHx8ICQuZnguc3BlZWRzWyBvcHRpb25zIF0gKSB7XG5cdFx0Y2FsbGJhY2sgPSBzcGVlZDtcblx0XHRzcGVlZCA9IG9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0Ly8gQ2F0Y2ggKGVmZmVjdCwgb3B0aW9ucywgY2FsbGJhY2spXG5cdGlmICggJC5pc0Z1bmN0aW9uKCBzcGVlZCApICkge1xuXHRcdGNhbGxiYWNrID0gc3BlZWQ7XG5cdFx0c3BlZWQgPSBudWxsO1xuXHR9XG5cblx0Ly8gQWRkIG9wdGlvbnMgdG8gZWZmZWN0XG5cdGlmICggb3B0aW9ucyApIHtcblx0XHQkLmV4dGVuZCggZWZmZWN0LCBvcHRpb25zICk7XG5cdH1cblxuXHRzcGVlZCA9IHNwZWVkIHx8IG9wdGlvbnMuZHVyYXRpb247XG5cdGVmZmVjdC5kdXJhdGlvbiA9ICQuZngub2ZmID8gMCA6XG5cdFx0dHlwZW9mIHNwZWVkID09PSBcIm51bWJlclwiID8gc3BlZWQgOlxuXHRcdHNwZWVkIGluICQuZnguc3BlZWRzID8gJC5meC5zcGVlZHNbIHNwZWVkIF0gOlxuXHRcdCQuZnguc3BlZWRzLl9kZWZhdWx0O1xuXG5cdGVmZmVjdC5jb21wbGV0ZSA9IGNhbGxiYWNrIHx8IG9wdGlvbnMuY29tcGxldGU7XG5cblx0cmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApIHtcblxuXHQvLyBWYWxpZCBzdGFuZGFyZCBzcGVlZHMgKG5vdGhpbmcsIG51bWJlciwgbmFtZWQgc3BlZWQpXG5cdGlmICggIW9wdGlvbiB8fCB0eXBlb2Ygb3B0aW9uID09PSBcIm51bWJlclwiIHx8ICQuZnguc3BlZWRzWyBvcHRpb24gXSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludmFsaWQgc3RyaW5ncyAtIHRyZWF0IGFzIFwibm9ybWFsXCIgc3BlZWRcblx0aWYgKCB0eXBlb2Ygb3B0aW9uID09PSBcInN0cmluZ1wiICYmICEkLmVmZmVjdHMuZWZmZWN0WyBvcHRpb24gXSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIENvbXBsZXRlIGNhbGxiYWNrXG5cdGlmICggJC5pc0Z1bmN0aW9uKCBvcHRpb24gKSApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIE9wdGlvbnMgaGFzaCAoYnV0IG5vdCBuYW1pbmcgYW4gZWZmZWN0KVxuXHRpZiAoIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIgJiYgIW9wdGlvbi5lZmZlY3QgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBEaWRuJ3QgbWF0Y2ggYW55IHN0YW5kYXJkIEFQSVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbiQuZm4uZXh0ZW5kKCB7XG5cdGVmZmVjdDogZnVuY3Rpb24oIC8qIGVmZmVjdCwgb3B0aW9ucywgc3BlZWQsIGNhbGxiYWNrICovICkge1xuXHRcdHZhciBhcmdzID0gX25vcm1hbGl6ZUFyZ3VtZW50cy5hcHBseSggdGhpcywgYXJndW1lbnRzICksXG5cdFx0XHRlZmZlY3RNZXRob2QgPSAkLmVmZmVjdHMuZWZmZWN0WyBhcmdzLmVmZmVjdCBdLFxuXHRcdFx0ZGVmYXVsdE1vZGUgPSBlZmZlY3RNZXRob2QubW9kZSxcblx0XHRcdHF1ZXVlID0gYXJncy5xdWV1ZSxcblx0XHRcdHF1ZXVlTmFtZSA9IHF1ZXVlIHx8IFwiZnhcIixcblx0XHRcdGNvbXBsZXRlID0gYXJncy5jb21wbGV0ZSxcblx0XHRcdG1vZGUgPSBhcmdzLm1vZGUsXG5cdFx0XHRtb2RlcyA9IFtdLFxuXHRcdFx0cHJlZmlsdGVyID0gZnVuY3Rpb24oIG5leHQgKSB7XG5cdFx0XHRcdHZhciBlbCA9ICQoIHRoaXMgKSxcblx0XHRcdFx0XHRub3JtYWxpemVkTW9kZSA9ICQuZWZmZWN0cy5tb2RlKCBlbCwgbW9kZSApIHx8IGRlZmF1bHRNb2RlO1xuXG5cdFx0XHRcdC8vIFNlbnRpbmVsIGZvciBkdWNrLXB1bmNoaW5nIHRoZSA6YW5pbWF0ZWQgcHN1ZWRvLXNlbGVjdG9yXG5cdFx0XHRcdGVsLmRhdGEoIGRhdGFTcGFjZUFuaW1hdGVkLCB0cnVlICk7XG5cblx0XHRcdFx0Ly8gU2F2ZSBlZmZlY3QgbW9kZSBmb3IgbGF0ZXIgdXNlLFxuXHRcdFx0XHQvLyB3ZSBjYW4ndCBqdXN0IGNhbGwgJC5lZmZlY3RzLm1vZGUgYWdhaW4gbGF0ZXIsXG5cdFx0XHRcdC8vIGFzIHRoZSAuc2hvdygpIGJlbG93IGRlc3Ryb3lzIHRoZSBpbml0aWFsIHN0YXRlXG5cdFx0XHRcdG1vZGVzLnB1c2goIG5vcm1hbGl6ZWRNb2RlICk7XG5cblx0XHRcdFx0Ly8gU2VlICQudWlCYWNrQ29tcGF0IGluc2lkZSBvZiBydW4oKSBmb3IgcmVtb3ZhbCBvZiBkZWZhdWx0TW9kZSBpbiAxLjEzXG5cdFx0XHRcdGlmICggZGVmYXVsdE1vZGUgJiYgKCBub3JtYWxpemVkTW9kZSA9PT0gXCJzaG93XCIgfHxcblx0XHRcdFx0XHRcdCggbm9ybWFsaXplZE1vZGUgPT09IGRlZmF1bHRNb2RlICYmIG5vcm1hbGl6ZWRNb2RlID09PSBcImhpZGVcIiApICkgKSB7XG5cdFx0XHRcdFx0ZWwuc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCAhZGVmYXVsdE1vZGUgfHwgbm9ybWFsaXplZE1vZGUgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHRcdCQuZWZmZWN0cy5zYXZlU3R5bGUoIGVsICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggbmV4dCApICkge1xuXHRcdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggJC5meC5vZmYgfHwgIWVmZmVjdE1ldGhvZCApIHtcblxuXHRcdFx0Ly8gRGVsZWdhdGUgdG8gdGhlIG9yaWdpbmFsIG1ldGhvZCAoZS5nLiwgLnNob3coKSkgaWYgcG9zc2libGVcblx0XHRcdGlmICggbW9kZSApIHtcblx0XHRcdFx0cmV0dXJuIHRoaXNbIG1vZGUgXSggYXJncy5kdXJhdGlvbiwgY29tcGxldGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGUgKSB7XG5cdFx0XHRcdFx0XHRjb21wbGV0ZS5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcnVuKCBuZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0gPSAkKCB0aGlzICk7XG5cblx0XHRcdGZ1bmN0aW9uIGNsZWFudXAoKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlRGF0YSggZGF0YVNwYWNlQW5pbWF0ZWQgKTtcblxuXHRcdFx0XHQkLmVmZmVjdHMuY2xlYW5VcCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggYXJncy5tb2RlID09PSBcImhpZGVcIiApIHtcblx0XHRcdFx0XHRlbGVtLmhpZGUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRvbmUoKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZG9uZSgpIHtcblx0XHRcdFx0aWYgKCAkLmlzRnVuY3Rpb24oIGNvbXBsZXRlICkgKSB7XG5cdFx0XHRcdFx0Y29tcGxldGUuY2FsbCggZWxlbVsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggbmV4dCApICkge1xuXHRcdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtb2RlIG9wdGlvbiBvbiBhIHBlciBlbGVtZW50IGJhc2lzLFxuXHRcdFx0Ly8gYXMgdG9nZ2xlIGNhbiBiZSBlaXRoZXIgc2hvdyBvciBoaWRlIGRlcGVuZGluZyBvbiBlbGVtZW50IHN0YXRlXG5cdFx0XHRhcmdzLm1vZGUgPSBtb2Rlcy5zaGlmdCgpO1xuXG5cdFx0XHRpZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSAmJiAhZGVmYXVsdE1vZGUgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5pcyggXCI6aGlkZGVuXCIgKSA/IG1vZGUgPT09IFwiaGlkZVwiIDogbW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cblx0XHRcdFx0XHQvLyBDYWxsIHRoZSBjb3JlIG1ldGhvZCB0byB0cmFjayBcIm9sZGRpc3BsYXlcIiBwcm9wZXJseVxuXHRcdFx0XHRcdGVsZW1bIG1vZGUgXSgpO1xuXHRcdFx0XHRcdGRvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlZmZlY3RNZXRob2QuY2FsbCggZWxlbVsgMCBdLCBhcmdzLCBkb25lICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICggYXJncy5tb2RlID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHRcdC8vIENhbGwgdGhlIGNvcmUgbWV0aG9kIHRvIHRyYWNrIFwib2xkZGlzcGxheVwiIHByb3Blcmx5XG5cdFx0XHRcdFx0ZWxlbVsgbW9kZSBdKCk7XG5cdFx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVmZmVjdE1ldGhvZC5jYWxsKCBlbGVtWyAwIF0sIGFyZ3MsIGNsZWFudXAgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJ1biBwcmVmaWx0ZXIgb24gYWxsIGVsZW1lbnRzIGZpcnN0IHRvIGVuc3VyZSB0aGF0XG5cdFx0Ly8gYW55IHNob3dpbmcgb3IgaGlkaW5nIGhhcHBlbnMgYmVmb3JlIHBsYWNlaG9sZGVyIGNyZWF0aW9uLFxuXHRcdC8vIHdoaWNoIGVuc3VyZXMgdGhhdCBhbnkgbGF5b3V0IGNoYW5nZXMgYXJlIGNvcnJlY3RseSBjYXB0dXJlZC5cblx0XHRyZXR1cm4gcXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggcHJlZmlsdGVyICkuZWFjaCggcnVuICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggcXVldWVOYW1lLCBwcmVmaWx0ZXIgKS5xdWV1ZSggcXVldWVOYW1lLCBydW4gKTtcblx0fSxcblxuXHRzaG93OiAoIGZ1bmN0aW9uKCBvcmlnICkge1xuXHRcdHJldHVybiBmdW5jdGlvbiggb3B0aW9uICkge1xuXHRcdFx0aWYgKCBzdGFuZGFyZEFuaW1hdGlvbk9wdGlvbiggb3B0aW9uICkgKSB7XG5cdFx0XHRcdHJldHVybiBvcmlnLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBhcmdzID0gX25vcm1hbGl6ZUFyZ3VtZW50cy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGFyZ3MubW9kZSA9IFwic2hvd1wiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZmZlY3QuY2FsbCggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gKSggJC5mbi5zaG93ICksXG5cblx0aGlkZTogKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRcdGlmICggc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYXJncyA9IF9ub3JtYWxpemVBcmd1bWVudHMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRhcmdzLm1vZGUgPSBcImhpZGVcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZWZmZWN0LmNhbGwoIHRoaXMsIGFyZ3MgKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9ICkoICQuZm4uaGlkZSApLFxuXG5cdHRvZ2dsZTogKCBmdW5jdGlvbiggb3JpZyApIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oIG9wdGlvbiApIHtcblx0XHRcdGlmICggc3RhbmRhcmRBbmltYXRpb25PcHRpb24oIG9wdGlvbiApIHx8IHR5cGVvZiBvcHRpb24gPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRyZXR1cm4gb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYXJncyA9IF9ub3JtYWxpemVBcmd1bWVudHMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRhcmdzLm1vZGUgPSBcInRvZ2dsZVwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZmZlY3QuY2FsbCggdGhpcywgYXJncyApO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gKSggJC5mbi50b2dnbGUgKSxcblxuXHRjc3NVbml0OiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHZhciBzdHlsZSA9IHRoaXMuY3NzKCBrZXkgKSxcblx0XHRcdHZhbCA9IFtdO1xuXG5cdFx0JC5lYWNoKCBbIFwiZW1cIiwgXCJweFwiLCBcIiVcIiwgXCJwdFwiIF0sIGZ1bmN0aW9uKCBpLCB1bml0ICkge1xuXHRcdFx0aWYgKCBzdHlsZS5pbmRleE9mKCB1bml0ICkgPiAwICkge1xuXHRcdFx0XHR2YWwgPSBbIHBhcnNlRmxvYXQoIHN0eWxlICksIHVuaXQgXTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHZhbDtcblx0fSxcblxuXHRjc3NDbGlwOiBmdW5jdGlvbiggY2xpcE9iaiApIHtcblx0XHRpZiAoIGNsaXBPYmogKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jc3MoIFwiY2xpcFwiLCBcInJlY3QoXCIgKyBjbGlwT2JqLnRvcCArIFwicHggXCIgKyBjbGlwT2JqLnJpZ2h0ICsgXCJweCBcIiArXG5cdFx0XHRcdGNsaXBPYmouYm90dG9tICsgXCJweCBcIiArIGNsaXBPYmoubGVmdCArIFwicHgpXCIgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhcnNlQ2xpcCggdGhpcy5jc3MoIFwiY2xpcFwiICksIHRoaXMgKTtcblx0fSxcblxuXHR0cmFuc2ZlcjogZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cdFx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0XHR0YXJnZXQgPSAkKCBvcHRpb25zLnRvICksXG5cdFx0XHR0YXJnZXRGaXhlZCA9IHRhcmdldC5jc3MoIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIsXG5cdFx0XHRib2R5ID0gJCggXCJib2R5XCIgKSxcblx0XHRcdGZpeFRvcCA9IHRhcmdldEZpeGVkID8gYm9keS5zY3JvbGxUb3AoKSA6IDAsXG5cdFx0XHRmaXhMZWZ0ID0gdGFyZ2V0Rml4ZWQgPyBib2R5LnNjcm9sbExlZnQoKSA6IDAsXG5cdFx0XHRlbmRQb3NpdGlvbiA9IHRhcmdldC5vZmZzZXQoKSxcblx0XHRcdGFuaW1hdGlvbiA9IHtcblx0XHRcdFx0dG9wOiBlbmRQb3NpdGlvbi50b3AgLSBmaXhUb3AsXG5cdFx0XHRcdGxlZnQ6IGVuZFBvc2l0aW9uLmxlZnQgLSBmaXhMZWZ0LFxuXHRcdFx0XHRoZWlnaHQ6IHRhcmdldC5pbm5lckhlaWdodCgpLFxuXHRcdFx0XHR3aWR0aDogdGFyZ2V0LmlubmVyV2lkdGgoKVxuXHRcdFx0fSxcblx0XHRcdHN0YXJ0UG9zaXRpb24gPSBlbGVtZW50Lm9mZnNldCgpLFxuXHRcdFx0dHJhbnNmZXIgPSAkKCBcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiIClcblx0XHRcdFx0LmFwcGVuZFRvKCBcImJvZHlcIiApXG5cdFx0XHRcdC5hZGRDbGFzcyggb3B0aW9ucy5jbGFzc05hbWUgKVxuXHRcdFx0XHQuY3NzKCB7XG5cdFx0XHRcdFx0dG9wOiBzdGFydFBvc2l0aW9uLnRvcCAtIGZpeFRvcCxcblx0XHRcdFx0XHRsZWZ0OiBzdGFydFBvc2l0aW9uLmxlZnQgLSBmaXhMZWZ0LFxuXHRcdFx0XHRcdGhlaWdodDogZWxlbWVudC5pbm5lckhlaWdodCgpLFxuXHRcdFx0XHRcdHdpZHRoOiBlbGVtZW50LmlubmVyV2lkdGgoKSxcblx0XHRcdFx0XHRwb3NpdGlvbjogdGFyZ2V0Rml4ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCJcblx0XHRcdFx0fSApXG5cdFx0XHRcdC5hbmltYXRlKCBhbmltYXRpb24sIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR0cmFuc2Zlci5yZW1vdmUoKTtcblx0XHRcdFx0XHRpZiAoICQuaXNGdW5jdGlvbiggZG9uZSApICkge1xuXHRcdFx0XHRcdFx0ZG9uZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHBhcnNlQ2xpcCggc3RyLCBlbGVtZW50ICkge1xuXHRcdHZhciBvdXRlcldpZHRoID0gZWxlbWVudC5vdXRlcldpZHRoKCksXG5cdFx0XHRvdXRlckhlaWdodCA9IGVsZW1lbnQub3V0ZXJIZWlnaHQoKSxcblx0XHRcdGNsaXBSZWdleCA9IC9ecmVjdFxcKCgtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0bylcXCkkLyxcblx0XHRcdHZhbHVlcyA9IGNsaXBSZWdleC5leGVjKCBzdHIgKSB8fCBbIFwiXCIsIDAsIG91dGVyV2lkdGgsIG91dGVySGVpZ2h0LCAwIF07XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBwYXJzZUZsb2F0KCB2YWx1ZXNbIDEgXSApIHx8IDAsXG5cdFx0XHRyaWdodDogdmFsdWVzWyAyIF0gPT09IFwiYXV0b1wiID8gb3V0ZXJXaWR0aCA6IHBhcnNlRmxvYXQoIHZhbHVlc1sgMiBdICksXG5cdFx0XHRib3R0b206IHZhbHVlc1sgMyBdID09PSBcImF1dG9cIiA/IG91dGVySGVpZ2h0IDogcGFyc2VGbG9hdCggdmFsdWVzWyAzIF0gKSxcblx0XHRcdGxlZnQ6IHBhcnNlRmxvYXQoIHZhbHVlc1sgNCBdICkgfHwgMFxuXHRcdH07XG59XG5cbiQuZnguc3RlcC5jbGlwID0gZnVuY3Rpb24oIGZ4ICkge1xuXHRpZiAoICFmeC5jbGlwSW5pdCApIHtcblx0XHRmeC5zdGFydCA9ICQoIGZ4LmVsZW0gKS5jc3NDbGlwKCk7XG5cdFx0aWYgKCB0eXBlb2YgZnguZW5kID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnguZW5kID0gcGFyc2VDbGlwKCBmeC5lbmQsIGZ4LmVsZW0gKTtcblx0XHR9XG5cdFx0ZnguY2xpcEluaXQgPSB0cnVlO1xuXHR9XG5cblx0JCggZnguZWxlbSApLmNzc0NsaXAoIHtcblx0XHR0b3A6IGZ4LnBvcyAqICggZnguZW5kLnRvcCAtIGZ4LnN0YXJ0LnRvcCApICsgZnguc3RhcnQudG9wLFxuXHRcdHJpZ2h0OiBmeC5wb3MgKiAoIGZ4LmVuZC5yaWdodCAtIGZ4LnN0YXJ0LnJpZ2h0ICkgKyBmeC5zdGFydC5yaWdodCxcblx0XHRib3R0b206IGZ4LnBvcyAqICggZnguZW5kLmJvdHRvbSAtIGZ4LnN0YXJ0LmJvdHRvbSApICsgZnguc3RhcnQuYm90dG9tLFxuXHRcdGxlZnQ6IGZ4LnBvcyAqICggZnguZW5kLmxlZnQgLSBmeC5zdGFydC5sZWZ0ICkgKyBmeC5zdGFydC5sZWZ0XG5cdH0gKTtcbn07XG5cbn0gKSgpO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVBU0lORyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiggZnVuY3Rpb24oKSB7XG5cbi8vIEJhc2VkIG9uIGVhc2luZyBlcXVhdGlvbnMgZnJvbSBSb2JlcnQgUGVubmVyIChodHRwOi8vd3d3LnJvYmVydHBlbm5lci5jb20vZWFzaW5nKVxuXG52YXIgYmFzZUVhc2luZ3MgPSB7fTtcblxuJC5lYWNoKCBbIFwiUXVhZFwiLCBcIkN1YmljXCIsIFwiUXVhcnRcIiwgXCJRdWludFwiLCBcIkV4cG9cIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0YmFzZUVhc2luZ3NbIG5hbWUgXSA9IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBNYXRoLnBvdyggcCwgaSArIDIgKTtcblx0fTtcbn0gKTtcblxuJC5leHRlbmQoIGJhc2VFYXNpbmdzLCB7XG5cdFNpbmU6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAxIC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJIC8gMiApO1xuXHR9LFxuXHRDaXJjOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMSAtIE1hdGguc3FydCggMSAtIHAgKiBwICk7XG5cdH0sXG5cdEVsYXN0aWM6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwID09PSAwIHx8IHAgPT09IDEgPyBwIDpcblx0XHRcdC1NYXRoLnBvdyggMiwgOCAqICggcCAtIDEgKSApICogTWF0aC5zaW4oICggKCBwIC0gMSApICogODAgLSA3LjUgKSAqIE1hdGguUEkgLyAxNSApO1xuXHR9LFxuXHRCYWNrOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcCAqIHAgKiAoIDMgKiBwIC0gMiApO1xuXHR9LFxuXHRCb3VuY2U6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHZhciBwb3cyLFxuXHRcdFx0Ym91bmNlID0gNDtcblxuXHRcdHdoaWxlICggcCA8ICggKCBwb3cyID0gTWF0aC5wb3coIDIsIC0tYm91bmNlICkgKSAtIDEgKSAvIDExICkge31cblx0XHRyZXR1cm4gMSAvIE1hdGgucG93KCA0LCAzIC0gYm91bmNlICkgLSA3LjU2MjUgKiBNYXRoLnBvdyggKCBwb3cyICogMyAtIDIgKSAvIDIyIC0gcCwgMiApO1xuXHR9XG59ICk7XG5cbiQuZWFjaCggYmFzZUVhc2luZ3MsIGZ1bmN0aW9uKCBuYW1lLCBlYXNlSW4gKSB7XG5cdCQuZWFzaW5nWyBcImVhc2VJblwiICsgbmFtZSBdID0gZWFzZUluO1xuXHQkLmVhc2luZ1sgXCJlYXNlT3V0XCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMSAtIGVhc2VJbiggMSAtIHAgKTtcblx0fTtcblx0JC5lYXNpbmdbIFwiZWFzZUluT3V0XCIgKyBuYW1lIF0gPSBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcCA8IDAuNSA/XG5cdFx0XHRlYXNlSW4oIHAgKiAyICkgLyAyIDpcblx0XHRcdDEgLSBlYXNlSW4oIHAgKiAtMiArIDIgKSAvIDI7XG5cdH07XG59ICk7XG5cbn0gKSgpO1xuXG52YXIgZWZmZWN0ID0gJC5lZmZlY3RzO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgQmxpbmQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEJsaW5kIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEJsaW5kcyB0aGUgZWxlbWVudC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9ibGluZC1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RCbGluZCA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiYmxpbmRcIiwgXCJoaWRlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXHR2YXIgbWFwID0ge1xuXHRcdFx0dXA6IFsgXCJib3R0b21cIiwgXCJ0b3BcIiBdLFxuXHRcdFx0dmVydGljYWw6IFsgXCJib3R0b21cIiwgXCJ0b3BcIiBdLFxuXHRcdFx0ZG93bjogWyBcInRvcFwiLCBcImJvdHRvbVwiIF0sXG5cdFx0XHRsZWZ0OiBbIFwicmlnaHRcIiwgXCJsZWZ0XCIgXSxcblx0XHRcdGhvcml6b250YWw6IFsgXCJyaWdodFwiLCBcImxlZnRcIiBdLFxuXHRcdFx0cmlnaHQ6IFsgXCJsZWZ0XCIsIFwicmlnaHRcIiBdXG5cdFx0fSxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwidXBcIixcblx0XHRzdGFydCA9IGVsZW1lbnQuY3NzQ2xpcCgpLFxuXHRcdGFuaW1hdGUgPSB7IGNsaXA6ICQuZXh0ZW5kKCB7fSwgc3RhcnQgKSB9LFxuXHRcdHBsYWNlaG9sZGVyID0gJC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0YW5pbWF0ZS5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAwIF0gXSA9IGFuaW1hdGUuY2xpcFsgbWFwWyBkaXJlY3Rpb24gXVsgMSBdIF07XG5cblx0aWYgKCBvcHRpb25zLm1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0ZS5jbGlwICk7XG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLmNzcyggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0ZSApICk7XG5cdFx0fVxuXG5cdFx0YW5pbWF0ZS5jbGlwID0gc3RhcnQ7XG5cdH1cblxuXHRpZiAoIHBsYWNlaG9sZGVyICkge1xuXHRcdHBsYWNlaG9sZGVyLmFuaW1hdGUoICQuZWZmZWN0cy5jbGlwVG9Cb3goIGFuaW1hdGUgKSwgb3B0aW9ucy5kdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcgKTtcblx0fVxuXG5cdGVsZW1lbnQuYW5pbWF0ZSggYW5pbWF0ZSwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEJvdW5jZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQm91bmNlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEJvdW5jZXMgYW4gZWxlbWVudCBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBuIHRpbWVzLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2JvdW5jZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RCb3VuY2UgPSAkLmVmZmVjdHMuZGVmaW5lKCBcImJvdW5jZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHVwQW5pbSwgZG93bkFuaW0sIHJlZlZhbHVlLFxuXHRcdGVsZW1lbnQgPSAkKCB0aGlzICksXG5cblx0XHQvLyBEZWZhdWx0czpcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdGhpZGUgPSBtb2RlID09PSBcImhpZGVcIixcblx0XHRzaG93ID0gbW9kZSA9PT0gXCJzaG93XCIsXG5cdFx0ZGlyZWN0aW9uID0gb3B0aW9ucy5kaXJlY3Rpb24gfHwgXCJ1cFwiLFxuXHRcdGRpc3RhbmNlID0gb3B0aW9ucy5kaXN0YW5jZSxcblx0XHR0aW1lcyA9IG9wdGlvbnMudGltZXMgfHwgNSxcblxuXHRcdC8vIE51bWJlciBvZiBpbnRlcm5hbCBhbmltYXRpb25zXG5cdFx0YW5pbXMgPSB0aW1lcyAqIDIgKyAoIHNob3cgfHwgaGlkZSA/IDEgOiAwICksXG5cdFx0c3BlZWQgPSBvcHRpb25zLmR1cmF0aW9uIC8gYW5pbXMsXG5cdFx0ZWFzaW5nID0gb3B0aW9ucy5lYXNpbmcsXG5cblx0XHQvLyBVdGlsaXR5OlxuXHRcdHJlZiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImRvd25cIiApID8gXCJ0b3BcIiA6IFwibGVmdFwiLFxuXHRcdG1vdGlvbiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImxlZnRcIiApLFxuXHRcdGkgPSAwLFxuXG5cdFx0cXVldWVsZW4gPSBlbGVtZW50LnF1ZXVlKCkubGVuZ3RoO1xuXG5cdCQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlciggZWxlbWVudCApO1xuXG5cdHJlZlZhbHVlID0gZWxlbWVudC5jc3MoIHJlZiApO1xuXG5cdC8vIERlZmF1bHQgZGlzdGFuY2UgZm9yIHRoZSBCSUdHRVNUIGJvdW5jZSBpcyB0aGUgb3V0ZXIgRGlzdGFuY2UgLyAzXG5cdGlmICggIWRpc3RhbmNlICkge1xuXHRcdGRpc3RhbmNlID0gZWxlbWVudFsgcmVmID09PSBcInRvcFwiID8gXCJvdXRlckhlaWdodFwiIDogXCJvdXRlcldpZHRoXCIgXSgpIC8gMztcblx0fVxuXG5cdGlmICggc2hvdyApIHtcblx0XHRkb3duQW5pbSA9IHsgb3BhY2l0eTogMSB9O1xuXHRcdGRvd25BbmltWyByZWYgXSA9IHJlZlZhbHVlO1xuXG5cdFx0Ly8gSWYgd2UgYXJlIHNob3dpbmcsIGZvcmNlIG9wYWNpdHkgMCBhbmQgc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uXG5cdFx0Ly8gdGhlbiBkbyB0aGUgXCJmaXJzdFwiIGFuaW1hdGlvblxuXHRcdGVsZW1lbnRcblx0XHRcdC5jc3MoIFwib3BhY2l0eVwiLCAwIClcblx0XHRcdC5jc3MoIHJlZiwgbW90aW9uID8gLWRpc3RhbmNlICogMiA6IGRpc3RhbmNlICogMiApXG5cdFx0XHQuYW5pbWF0ZSggZG93bkFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblx0fVxuXG5cdC8vIFN0YXJ0IGF0IHRoZSBzbWFsbGVzdCBkaXN0YW5jZSBpZiB3ZSBhcmUgaGlkaW5nXG5cdGlmICggaGlkZSApIHtcblx0XHRkaXN0YW5jZSA9IGRpc3RhbmNlIC8gTWF0aC5wb3coIDIsIHRpbWVzIC0gMSApO1xuXHR9XG5cblx0ZG93bkFuaW0gPSB7fTtcblx0ZG93bkFuaW1bIHJlZiBdID0gcmVmVmFsdWU7XG5cblx0Ly8gQm91bmNlcyB1cC9kb3duL2xlZnQvcmlnaHQgdGhlbiBiYWNrIHRvIDAgLS0gdGltZXMgKiAyIGFuaW1hdGlvbnMgaGFwcGVuIGhlcmVcblx0Zm9yICggOyBpIDwgdGltZXM7IGkrKyApIHtcblx0XHR1cEFuaW0gPSB7fTtcblx0XHR1cEFuaW1bIHJlZiBdID0gKCBtb3Rpb24gPyBcIi09XCIgOiBcIis9XCIgKSArIGRpc3RhbmNlO1xuXG5cdFx0ZWxlbWVudFxuXHRcdFx0LmFuaW1hdGUoIHVwQW5pbSwgc3BlZWQsIGVhc2luZyApXG5cdFx0XHQuYW5pbWF0ZSggZG93bkFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblxuXHRcdGRpc3RhbmNlID0gaGlkZSA/IGRpc3RhbmNlICogMiA6IGRpc3RhbmNlIC8gMjtcblx0fVxuXG5cdC8vIExhc3QgQm91bmNlIHdoZW4gSGlkaW5nXG5cdGlmICggaGlkZSApIHtcblx0XHR1cEFuaW0gPSB7IG9wYWNpdHk6IDAgfTtcblx0XHR1cEFuaW1bIHJlZiBdID0gKCBtb3Rpb24gPyBcIi09XCIgOiBcIis9XCIgKSArIGRpc3RhbmNlO1xuXG5cdFx0ZWxlbWVudC5hbmltYXRlKCB1cEFuaW0sIHNwZWVkLCBlYXNpbmcgKTtcblx0fVxuXG5cdGVsZW1lbnQucXVldWUoIGRvbmUgKTtcblxuXHQkLmVmZmVjdHMudW5zaGlmdCggZWxlbWVudCwgcXVldWVsZW4sIGFuaW1zICsgMSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgQ2xpcCAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogQ2xpcCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBDbGlwcyB0aGUgZWxlbWVudCBvbiBhbmQgb2ZmIGxpa2UgYW4gb2xkIFRWLlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2NsaXAtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0Q2xpcCA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiY2xpcFwiLCBcImhpZGVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cdHZhciBzdGFydCxcblx0XHRhbmltYXRlID0ge30sXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbiB8fCBcInZlcnRpY2FsXCIsXG5cdFx0Ym90aCA9IGRpcmVjdGlvbiA9PT0gXCJib3RoXCIsXG5cdFx0aG9yaXpvbnRhbCA9IGJvdGggfHwgZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIixcblx0XHR2ZXJ0aWNhbCA9IGJvdGggfHwgZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCI7XG5cblx0c3RhcnQgPSBlbGVtZW50LmNzc0NsaXAoKTtcblx0YW5pbWF0ZS5jbGlwID0ge1xuXHRcdHRvcDogdmVydGljYWwgPyAoIHN0YXJ0LmJvdHRvbSAtIHN0YXJ0LnRvcCApIC8gMiA6IHN0YXJ0LnRvcCxcblx0XHRyaWdodDogaG9yaXpvbnRhbCA/ICggc3RhcnQucmlnaHQgLSBzdGFydC5sZWZ0ICkgLyAyIDogc3RhcnQucmlnaHQsXG5cdFx0Ym90dG9tOiB2ZXJ0aWNhbCA/ICggc3RhcnQuYm90dG9tIC0gc3RhcnQudG9wICkgLyAyIDogc3RhcnQuYm90dG9tLFxuXHRcdGxlZnQ6IGhvcml6b250YWwgPyAoIHN0YXJ0LnJpZ2h0IC0gc3RhcnQubGVmdCApIC8gMiA6IHN0YXJ0LmxlZnRcblx0fTtcblxuXHQkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKTtcblxuXHRpZiAoIG9wdGlvbnMubW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cdFx0ZWxlbWVudC5jc3NDbGlwKCBhbmltYXRlLmNsaXAgKTtcblx0XHRhbmltYXRlLmNsaXAgPSBzdGFydDtcblx0fVxuXG5cdGVsZW1lbnQuYW5pbWF0ZSggYW5pbWF0ZSwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcblxufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgRHJvcCAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogRHJvcCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBNb3ZlcyBhbiBlbGVtZW50IGluIG9uZSBkaXJlY3Rpb24gYW5kIGhpZGVzIGl0IGF0IHRoZSBzYW1lIHRpbWUuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZHJvcC1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3REcm9wID0gJC5lZmZlY3RzLmRlZmluZSggXCJkcm9wXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblxuXHR2YXIgZGlzdGFuY2UsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdHNob3cgPSBtb2RlID09PSBcInNob3dcIixcblx0XHRkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbiB8fCBcImxlZnRcIixcblx0XHRyZWYgPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJkb3duXCIgKSA/IFwidG9wXCIgOiBcImxlZnRcIixcblx0XHRtb3Rpb24gPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJsZWZ0XCIgKSA/IFwiLT1cIiA6IFwiKz1cIixcblx0XHRvcHBvc2l0ZU1vdGlvbiA9ICggbW90aW9uID09PSBcIis9XCIgKSA/IFwiLT1cIiA6IFwiKz1cIixcblx0XHRhbmltYXRpb24gPSB7XG5cdFx0XHRvcGFjaXR5OiAwXG5cdFx0fTtcblxuXHQkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKTtcblxuXHRkaXN0YW5jZSA9IG9wdGlvbnMuZGlzdGFuY2UgfHxcblx0XHRlbGVtZW50WyByZWYgPT09IFwidG9wXCIgPyBcIm91dGVySGVpZ2h0XCIgOiBcIm91dGVyV2lkdGhcIiBdKCB0cnVlICkgLyAyO1xuXG5cdGFuaW1hdGlvblsgcmVmIF0gPSBtb3Rpb24gKyBkaXN0YW5jZTtcblxuXHRpZiAoIHNob3cgKSB7XG5cdFx0ZWxlbWVudC5jc3MoIGFuaW1hdGlvbiApO1xuXG5cdFx0YW5pbWF0aW9uWyByZWYgXSA9IG9wcG9zaXRlTW90aW9uICsgZGlzdGFuY2U7XG5cdFx0YW5pbWF0aW9uLm9wYWNpdHkgPSAxO1xuXHR9XG5cblx0Ly8gQW5pbWF0ZVxuXHRlbGVtZW50LmFuaW1hdGUoIGFuaW1hdGlvbiwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEV4cGxvZGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEV4cGxvZGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vIGpzY3M6ZGlzYWJsZSBtYXhpbXVtTGluZUxlbmd0aFxuLy8+PmRlc2NyaXB0aW9uOiBFeHBsb2RlcyBhbiBlbGVtZW50IGluIGFsbCBkaXJlY3Rpb25zIGludG8gbiBwaWVjZXMuIEltcGxvZGVzIGFuIGVsZW1lbnQgdG8gaXRzIG9yaWdpbmFsIHdob2xlbmVzcy5cbi8vIGpzY3M6ZW5hYmxlIG1heGltdW1MaW5lTGVuZ3RoXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vZXhwbG9kZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RFeHBsb2RlID0gJC5lZmZlY3RzLmRlZmluZSggXCJleHBsb2RlXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblxuXHR2YXIgaSwgaiwgbGVmdCwgdG9wLCBteCwgbXksXG5cdFx0cm93cyA9IG9wdGlvbnMucGllY2VzID8gTWF0aC5yb3VuZCggTWF0aC5zcXJ0KCBvcHRpb25zLnBpZWNlcyApICkgOiAzLFxuXHRcdGNlbGxzID0gcm93cyxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0c2hvdyA9IG1vZGUgPT09IFwic2hvd1wiLFxuXG5cdFx0Ly8gU2hvdyBhbmQgdGhlbiB2aXNpYmlsaXR5OmhpZGRlbiB0aGUgZWxlbWVudCBiZWZvcmUgY2FsY3VsYXRpbmcgb2Zmc2V0XG5cdFx0b2Zmc2V0ID0gZWxlbWVudC5zaG93KCkuY3NzKCBcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIiApLm9mZnNldCgpLFxuXG5cdFx0Ly8gV2lkdGggYW5kIGhlaWdodCBvZiBhIHBpZWNlXG5cdFx0d2lkdGggPSBNYXRoLmNlaWwoIGVsZW1lbnQub3V0ZXJXaWR0aCgpIC8gY2VsbHMgKSxcblx0XHRoZWlnaHQgPSBNYXRoLmNlaWwoIGVsZW1lbnQub3V0ZXJIZWlnaHQoKSAvIHJvd3MgKSxcblx0XHRwaWVjZXMgPSBbXTtcblxuXHQvLyBDaGlsZHJlbiBhbmltYXRlIGNvbXBsZXRlOlxuXHRmdW5jdGlvbiBjaGlsZENvbXBsZXRlKCkge1xuXHRcdHBpZWNlcy5wdXNoKCB0aGlzICk7XG5cdFx0aWYgKCBwaWVjZXMubGVuZ3RoID09PSByb3dzICogY2VsbHMgKSB7XG5cdFx0XHRhbmltQ29tcGxldGUoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbG9uZSB0aGUgZWxlbWVudCBmb3IgZWFjaCByb3cgYW5kIGNlbGwuXG5cdGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkgeyAvLyA9PT0+XG5cdFx0dG9wID0gb2Zmc2V0LnRvcCArIGkgKiBoZWlnaHQ7XG5cdFx0bXkgPSBpIC0gKCByb3dzIC0gMSApIC8gMjtcblxuXHRcdGZvciAoIGogPSAwOyBqIDwgY2VsbHM7IGorKyApIHsgLy8gfHx8XG5cdFx0XHRsZWZ0ID0gb2Zmc2V0LmxlZnQgKyBqICogd2lkdGg7XG5cdFx0XHRteCA9IGogLSAoIGNlbGxzIC0gMSApIC8gMjtcblxuXHRcdFx0Ly8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG5vdyBoaWRkZW4gbWFpbiBlbGVtZW50IHRoYXQgd2lsbCBiZSBhYnNvbHV0ZSBwb3NpdGlvbmVkXG5cdFx0XHQvLyB3aXRoaW4gYSB3cmFwcGVyIGRpdiBvZmYgdGhlIC1sZWZ0IGFuZCAtdG9wIGVxdWFsIHRvIHNpemUgb2Ygb3VyIHBpZWNlc1xuXHRcdFx0ZWxlbWVudFxuXHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHQuYXBwZW5kVG8oIFwiYm9keVwiIClcblx0XHRcdFx0LndyYXAoIFwiPGRpdj48L2Rpdj5cIiApXG5cdFx0XHRcdC5jc3MoIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuXHRcdFx0XHRcdHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuXHRcdFx0XHRcdGxlZnQ6IC1qICogd2lkdGgsXG5cdFx0XHRcdFx0dG9wOiAtaSAqIGhlaWdodFxuXHRcdFx0XHR9IClcblxuXHRcdFx0XHQvLyBTZWxlY3QgdGhlIHdyYXBwZXIgLSBtYWtlIGl0IG92ZXJmbG93OiBoaWRkZW4gYW5kIGFic29sdXRlIHBvc2l0aW9uZWQgYmFzZWQgb25cblx0XHRcdFx0Ly8gd2hlcmUgdGhlIG9yaWdpbmFsIHdhcyBsb2NhdGVkICtsZWZ0IGFuZCArdG9wIGVxdWFsIHRvIHRoZSBzaXplIG9mIHBpZWNlc1xuXHRcdFx0XHQucGFyZW50KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoIFwidWktZWZmZWN0cy1leHBsb2RlXCIgKVxuXHRcdFx0XHRcdC5jc3MoIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG5cdFx0XHRcdFx0XHRvdmVyZmxvdzogXCJoaWRkZW5cIixcblx0XHRcdFx0XHRcdHdpZHRoOiB3aWR0aCxcblx0XHRcdFx0XHRcdGhlaWdodDogaGVpZ2h0LFxuXHRcdFx0XHRcdFx0bGVmdDogbGVmdCArICggc2hvdyA/IG14ICogd2lkdGggOiAwICksXG5cdFx0XHRcdFx0XHR0b3A6IHRvcCArICggc2hvdyA/IG15ICogaGVpZ2h0IDogMCApLFxuXHRcdFx0XHRcdFx0b3BhY2l0eTogc2hvdyA/IDAgOiAxXG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdFx0LmFuaW1hdGUoIHtcblx0XHRcdFx0XHRcdGxlZnQ6IGxlZnQgKyAoIHNob3cgPyAwIDogbXggKiB3aWR0aCApLFxuXHRcdFx0XHRcdFx0dG9wOiB0b3AgKyAoIHNob3cgPyAwIDogbXkgKiBoZWlnaHQgKSxcblx0XHRcdFx0XHRcdG9wYWNpdHk6IHNob3cgPyAxIDogMFxuXHRcdFx0XHRcdH0sIG9wdGlvbnMuZHVyYXRpb24gfHwgNTAwLCBvcHRpb25zLmVhc2luZywgY2hpbGRDb21wbGV0ZSApO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFuaW1Db21wbGV0ZSgpIHtcblx0XHRlbGVtZW50LmNzcygge1xuXHRcdFx0dmlzaWJpbGl0eTogXCJ2aXNpYmxlXCJcblx0XHR9ICk7XG5cdFx0JCggcGllY2VzICkucmVtb3ZlKCk7XG5cdFx0ZG9uZSgpO1xuXHR9XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBGYWRlIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBGYWRlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IEZhZGVzIHRoZSBlbGVtZW50LlxuLy8+PmRvY3M6IGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2ZhZGUtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0RmFkZSA9ICQuZWZmZWN0cy5kZWZpbmUoIFwiZmFkZVwiLCBcInRvZ2dsZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHNob3cgPSBvcHRpb25zLm1vZGUgPT09IFwic2hvd1wiO1xuXG5cdCQoIHRoaXMgKVxuXHRcdC5jc3MoIFwib3BhY2l0eVwiLCBzaG93ID8gMCA6IDEgKVxuXHRcdC5hbmltYXRlKCB7XG5cdFx0XHRvcGFjaXR5OiBzaG93ID8gMSA6IDBcblx0XHR9LCB7XG5cdFx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdGVhc2luZzogb3B0aW9ucy5lYXNpbmcsXG5cdFx0XHRjb21wbGV0ZTogZG9uZVxuXHRcdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIEZvbGQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEZvbGQgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogRm9sZHMgYW4gZWxlbWVudCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9mb2xkLWVmZmVjdC9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZWZmZWN0c0VmZmVjdEZvbGQgPSAkLmVmZmVjdHMuZGVmaW5lKCBcImZvbGRcIiwgXCJoaWRlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXG5cdC8vIENyZWF0ZSBlbGVtZW50XG5cdHZhciBlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0c2hvdyA9IG1vZGUgPT09IFwic2hvd1wiLFxuXHRcdGhpZGUgPSBtb2RlID09PSBcImhpZGVcIixcblx0XHRzaXplID0gb3B0aW9ucy5zaXplIHx8IDE1LFxuXHRcdHBlcmNlbnQgPSAvKFswLTldKyklLy5leGVjKCBzaXplICksXG5cdFx0aG9yaXpGaXJzdCA9ICEhb3B0aW9ucy5ob3JpekZpcnN0LFxuXHRcdHJlZiA9IGhvcml6Rmlyc3QgPyBbIFwicmlnaHRcIiwgXCJib3R0b21cIiBdIDogWyBcImJvdHRvbVwiLCBcInJpZ2h0XCIgXSxcblx0XHRkdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gLyAyLFxuXG5cdFx0cGxhY2Vob2xkZXIgPSAkLmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoIGVsZW1lbnQgKSxcblxuXHRcdHN0YXJ0ID0gZWxlbWVudC5jc3NDbGlwKCksXG5cdFx0YW5pbWF0aW9uMSA9IHsgY2xpcDogJC5leHRlbmQoIHt9LCBzdGFydCApIH0sXG5cdFx0YW5pbWF0aW9uMiA9IHsgY2xpcDogJC5leHRlbmQoIHt9LCBzdGFydCApIH0sXG5cblx0XHRkaXN0YW5jZSA9IFsgc3RhcnRbIHJlZlsgMCBdIF0sIHN0YXJ0WyByZWZbIDEgXSBdIF0sXG5cblx0XHRxdWV1ZWxlbiA9IGVsZW1lbnQucXVldWUoKS5sZW5ndGg7XG5cblx0aWYgKCBwZXJjZW50ICkge1xuXHRcdHNpemUgPSBwYXJzZUludCggcGVyY2VudFsgMSBdLCAxMCApIC8gMTAwICogZGlzdGFuY2VbIGhpZGUgPyAwIDogMSBdO1xuXHR9XG5cdGFuaW1hdGlvbjEuY2xpcFsgcmVmWyAwIF0gXSA9IHNpemU7XG5cdGFuaW1hdGlvbjIuY2xpcFsgcmVmWyAwIF0gXSA9IHNpemU7XG5cdGFuaW1hdGlvbjIuY2xpcFsgcmVmWyAxIF0gXSA9IDA7XG5cblx0aWYgKCBzaG93ICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0aW9uMi5jbGlwICk7XG5cdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdHBsYWNlaG9sZGVyLmNzcyggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0aW9uMiApICk7XG5cdFx0fVxuXG5cdFx0YW5pbWF0aW9uMi5jbGlwID0gc3RhcnQ7XG5cdH1cblxuXHQvLyBBbmltYXRlXG5cdGVsZW1lbnRcblx0XHQucXVldWUoIGZ1bmN0aW9uKCBuZXh0ICkge1xuXHRcdFx0aWYgKCBwbGFjZWhvbGRlciApIHtcblx0XHRcdFx0cGxhY2Vob2xkZXJcblx0XHRcdFx0XHQuYW5pbWF0ZSggJC5lZmZlY3RzLmNsaXBUb0JveCggYW5pbWF0aW9uMSApLCBkdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdFx0XHRcdC5hbmltYXRlKCAkLmVmZmVjdHMuY2xpcFRvQm94KCBhbmltYXRpb24yICksIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXh0KCk7XG5cdFx0fSApXG5cdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjEsIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApXG5cdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjIsIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApXG5cdFx0LnF1ZXVlKCBkb25lICk7XG5cblx0JC5lZmZlY3RzLnVuc2hpZnQoIGVsZW1lbnQsIHF1ZXVlbGVuLCA0ICk7XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBIaWdobGlnaHQgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IEhpZ2hsaWdodCBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBIaWdobGlnaHRzIHRoZSBiYWNrZ3JvdW5kIG9mIGFuIGVsZW1lbnQgaW4gYSBkZWZpbmVkIGNvbG9yIGZvciBhIGN1c3RvbSBkdXJhdGlvbi5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9oaWdobGlnaHQtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0SGlnaGxpZ2h0ID0gJC5lZmZlY3RzLmRlZmluZSggXCJoaWdobGlnaHRcIiwgXCJzaG93XCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXHR2YXIgZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRhbmltYXRpb24gPSB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IGVsZW1lbnQuY3NzKCBcImJhY2tncm91bmRDb2xvclwiIClcblx0XHR9O1xuXG5cdGlmICggb3B0aW9ucy5tb2RlID09PSBcImhpZGVcIiApIHtcblx0XHRhbmltYXRpb24ub3BhY2l0eSA9IDA7XG5cdH1cblxuXHQkLmVmZmVjdHMuc2F2ZVN0eWxlKCBlbGVtZW50ICk7XG5cblx0ZWxlbWVudFxuXHRcdC5jc3MoIHtcblx0XHRcdGJhY2tncm91bmRJbWFnZTogXCJub25lXCIsXG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IG9wdGlvbnMuY29sb3IgfHwgXCIjZmZmZjk5XCJcblx0XHR9IClcblx0XHQuYW5pbWF0ZSggYW5pbWF0aW9uLCB7XG5cdFx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdGVhc2luZzogb3B0aW9ucy5lYXNpbmcsXG5cdFx0XHRjb21wbGV0ZTogZG9uZVxuXHRcdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFNpemUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNpemUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogUmVzaXplIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zaXplLWVmZmVjdC9cbi8vPj5kZW1vczogaHR0cDovL2pxdWVyeXVpLmNvbS9lZmZlY3QvXG5cblxuXG52YXIgZWZmZWN0c0VmZmVjdFNpemUgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNpemVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cblx0Ly8gQ3JlYXRlIGVsZW1lbnRcblx0dmFyIGJhc2VsaW5lLCBmYWN0b3IsIHRlbXAsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblxuXHRcdC8vIENvcHkgZm9yIGNoaWxkcmVuXG5cdFx0Y1Byb3BzID0gWyBcImZvbnRTaXplXCIgXSxcblx0XHR2UHJvcHMgPSBbIFwiYm9yZGVyVG9wV2lkdGhcIiwgXCJib3JkZXJCb3R0b21XaWR0aFwiLCBcInBhZGRpbmdUb3BcIiwgXCJwYWRkaW5nQm90dG9tXCIgXSxcblx0XHRoUHJvcHMgPSBbIFwiYm9yZGVyTGVmdFdpZHRoXCIsIFwiYm9yZGVyUmlnaHRXaWR0aFwiLCBcInBhZGRpbmdMZWZ0XCIsIFwicGFkZGluZ1JpZ2h0XCIgXSxcblxuXHRcdC8vIFNldCBvcHRpb25zXG5cdFx0bW9kZSA9IG9wdGlvbnMubW9kZSxcblx0XHRyZXN0b3JlID0gbW9kZSAhPT0gXCJlZmZlY3RcIixcblx0XHRzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgXCJib3RoXCIsXG5cdFx0b3JpZ2luID0gb3B0aW9ucy5vcmlnaW4gfHwgWyBcIm1pZGRsZVwiLCBcImNlbnRlclwiIF0sXG5cdFx0cG9zaXRpb24gPSBlbGVtZW50LmNzcyggXCJwb3NpdGlvblwiICksXG5cdFx0cG9zID0gZWxlbWVudC5wb3NpdGlvbigpLFxuXHRcdG9yaWdpbmFsID0gJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsZW1lbnQgKSxcblx0XHRmcm9tID0gb3B0aW9ucy5mcm9tIHx8IG9yaWdpbmFsLFxuXHRcdHRvID0gb3B0aW9ucy50byB8fCAkLmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyggZWxlbWVudCwgMCApO1xuXG5cdCQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlciggZWxlbWVudCApO1xuXG5cdGlmICggbW9kZSA9PT0gXCJzaG93XCIgKSB7XG5cdFx0dGVtcCA9IGZyb207XG5cdFx0ZnJvbSA9IHRvO1xuXHRcdHRvID0gdGVtcDtcblx0fVxuXG5cdC8vIFNldCBzY2FsaW5nIGZhY3RvclxuXHRmYWN0b3IgPSB7XG5cdFx0ZnJvbToge1xuXHRcdFx0eTogZnJvbS5oZWlnaHQgLyBvcmlnaW5hbC5oZWlnaHQsXG5cdFx0XHR4OiBmcm9tLndpZHRoIC8gb3JpZ2luYWwud2lkdGhcblx0XHR9LFxuXHRcdHRvOiB7XG5cdFx0XHR5OiB0by5oZWlnaHQgLyBvcmlnaW5hbC5oZWlnaHQsXG5cdFx0XHR4OiB0by53aWR0aCAvIG9yaWdpbmFsLndpZHRoXG5cdFx0fVxuXHR9O1xuXG5cdC8vIFNjYWxlIHRoZSBjc3MgYm94XG5cdGlmICggc2NhbGUgPT09IFwiYm94XCIgfHwgc2NhbGUgPT09IFwiYm90aFwiICkge1xuXG5cdFx0Ly8gVmVydGljYWwgcHJvcHMgc2NhbGluZ1xuXHRcdGlmICggZmFjdG9yLmZyb20ueSAhPT0gZmFjdG9yLnRvLnkgKSB7XG5cdFx0XHRmcm9tID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIHZQcm9wcywgZmFjdG9yLmZyb20ueSwgZnJvbSApO1xuXHRcdFx0dG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggZWxlbWVudCwgdlByb3BzLCBmYWN0b3IudG8ueSwgdG8gKTtcblx0XHR9XG5cblx0XHQvLyBIb3Jpem9udGFsIHByb3BzIHNjYWxpbmdcblx0XHRpZiAoIGZhY3Rvci5mcm9tLnggIT09IGZhY3Rvci50by54ICkge1xuXHRcdFx0ZnJvbSA9ICQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKCBlbGVtZW50LCBoUHJvcHMsIGZhY3Rvci5mcm9tLngsIGZyb20gKTtcblx0XHRcdHRvID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIGhQcm9wcywgZmFjdG9yLnRvLngsIHRvICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2NhbGUgdGhlIGNvbnRlbnRcblx0aWYgKCBzY2FsZSA9PT0gXCJjb250ZW50XCIgfHwgc2NhbGUgPT09IFwiYm90aFwiICkge1xuXG5cdFx0Ly8gVmVydGljYWwgcHJvcHMgc2NhbGluZ1xuXHRcdGlmICggZmFjdG9yLmZyb20ueSAhPT0gZmFjdG9yLnRvLnkgKSB7XG5cdFx0XHRmcm9tID0gJC5lZmZlY3RzLnNldFRyYW5zaXRpb24oIGVsZW1lbnQsIGNQcm9wcywgZmFjdG9yLmZyb20ueSwgZnJvbSApO1xuXHRcdFx0dG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggZWxlbWVudCwgY1Byb3BzLCBmYWN0b3IudG8ueSwgdG8gKTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGp1c3QgdGhlIHBvc2l0aW9uIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9yaWdpbiBwb2ludHNcblx0aWYgKCBvcmlnaW4gKSB7XG5cdFx0YmFzZWxpbmUgPSAkLmVmZmVjdHMuZ2V0QmFzZWxpbmUoIG9yaWdpbiwgb3JpZ2luYWwgKTtcblx0XHRmcm9tLnRvcCA9ICggb3JpZ2luYWwub3V0ZXJIZWlnaHQgLSBmcm9tLm91dGVySGVpZ2h0ICkgKiBiYXNlbGluZS55ICsgcG9zLnRvcDtcblx0XHRmcm9tLmxlZnQgPSAoIG9yaWdpbmFsLm91dGVyV2lkdGggLSBmcm9tLm91dGVyV2lkdGggKSAqIGJhc2VsaW5lLnggKyBwb3MubGVmdDtcblx0XHR0by50b3AgPSAoIG9yaWdpbmFsLm91dGVySGVpZ2h0IC0gdG8ub3V0ZXJIZWlnaHQgKSAqIGJhc2VsaW5lLnkgKyBwb3MudG9wO1xuXHRcdHRvLmxlZnQgPSAoIG9yaWdpbmFsLm91dGVyV2lkdGggLSB0by5vdXRlcldpZHRoICkgKiBiYXNlbGluZS54ICsgcG9zLmxlZnQ7XG5cdH1cblx0ZWxlbWVudC5jc3MoIGZyb20gKTtcblxuXHQvLyBBbmltYXRlIHRoZSBjaGlsZHJlbiBpZiBkZXNpcmVkXG5cdGlmICggc2NhbGUgPT09IFwiY29udGVudFwiIHx8IHNjYWxlID09PSBcImJvdGhcIiApIHtcblxuXHRcdHZQcm9wcyA9IHZQcm9wcy5jb25jYXQoIFsgXCJtYXJnaW5Ub3BcIiwgXCJtYXJnaW5Cb3R0b21cIiBdICkuY29uY2F0KCBjUHJvcHMgKTtcblx0XHRoUHJvcHMgPSBoUHJvcHMuY29uY2F0KCBbIFwibWFyZ2luTGVmdFwiLCBcIm1hcmdpblJpZ2h0XCIgXSApO1xuXG5cdFx0Ly8gT25seSBhbmltYXRlIGNoaWxkcmVuIHdpdGggd2lkdGggYXR0cmlidXRlcyBzcGVjaWZpZWRcblx0XHQvLyBUT0RPOiBpcyB0aGlzIHJpZ2h0PyBzaG91bGQgd2UgaW5jbHVkZSBhbnl0aGluZyB3aXRoIGNzcyB3aWR0aCBzcGVjaWZpZWQgYXMgd2VsbFxuXHRcdGVsZW1lbnQuZmluZCggXCIqW3dpZHRoXVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSAkKCB0aGlzICksXG5cdFx0XHRcdGNoaWxkT3JpZ2luYWwgPSAkLmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyggY2hpbGQgKSxcblx0XHRcdFx0Y2hpbGRGcm9tID0ge1xuXHRcdFx0XHRcdGhlaWdodDogY2hpbGRPcmlnaW5hbC5oZWlnaHQgKiBmYWN0b3IuZnJvbS55LFxuXHRcdFx0XHRcdHdpZHRoOiBjaGlsZE9yaWdpbmFsLndpZHRoICogZmFjdG9yLmZyb20ueCxcblx0XHRcdFx0XHRvdXRlckhlaWdodDogY2hpbGRPcmlnaW5hbC5vdXRlckhlaWdodCAqIGZhY3Rvci5mcm9tLnksXG5cdFx0XHRcdFx0b3V0ZXJXaWR0aDogY2hpbGRPcmlnaW5hbC5vdXRlcldpZHRoICogZmFjdG9yLmZyb20ueFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaGlsZFRvID0ge1xuXHRcdFx0XHRcdGhlaWdodDogY2hpbGRPcmlnaW5hbC5oZWlnaHQgKiBmYWN0b3IudG8ueSxcblx0XHRcdFx0XHR3aWR0aDogY2hpbGRPcmlnaW5hbC53aWR0aCAqIGZhY3Rvci50by54LFxuXHRcdFx0XHRcdG91dGVySGVpZ2h0OiBjaGlsZE9yaWdpbmFsLmhlaWdodCAqIGZhY3Rvci50by55LFxuXHRcdFx0XHRcdG91dGVyV2lkdGg6IGNoaWxkT3JpZ2luYWwud2lkdGggKiBmYWN0b3IudG8ueFxuXHRcdFx0XHR9O1xuXG5cdFx0XHQvLyBWZXJ0aWNhbCBwcm9wcyBzY2FsaW5nXG5cdFx0XHRpZiAoIGZhY3Rvci5mcm9tLnkgIT09IGZhY3Rvci50by55ICkge1xuXHRcdFx0XHRjaGlsZEZyb20gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIHZQcm9wcywgZmFjdG9yLmZyb20ueSwgY2hpbGRGcm9tICk7XG5cdFx0XHRcdGNoaWxkVG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIHZQcm9wcywgZmFjdG9yLnRvLnksIGNoaWxkVG8gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9yaXpvbnRhbCBwcm9wcyBzY2FsaW5nXG5cdFx0XHRpZiAoIGZhY3Rvci5mcm9tLnggIT09IGZhY3Rvci50by54ICkge1xuXHRcdFx0XHRjaGlsZEZyb20gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIGhQcm9wcywgZmFjdG9yLmZyb20ueCwgY2hpbGRGcm9tICk7XG5cdFx0XHRcdGNoaWxkVG8gPSAkLmVmZmVjdHMuc2V0VHJhbnNpdGlvbiggY2hpbGQsIGhQcm9wcywgZmFjdG9yLnRvLngsIGNoaWxkVG8gKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCByZXN0b3JlICkge1xuXHRcdFx0XHQkLmVmZmVjdHMuc2F2ZVN0eWxlKCBjaGlsZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBbmltYXRlIGNoaWxkcmVuXG5cdFx0XHRjaGlsZC5jc3MoIGNoaWxkRnJvbSApO1xuXHRcdFx0Y2hpbGQuYW5pbWF0ZSggY2hpbGRUbywgb3B0aW9ucy5kdXJhdGlvbiwgb3B0aW9ucy5lYXNpbmcsIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgY2hpbGRyZW5cblx0XHRcdFx0aWYgKCByZXN0b3JlICkge1xuXHRcdFx0XHRcdCQuZWZmZWN0cy5yZXN0b3JlU3R5bGUoIGNoaWxkICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBbmltYXRlXG5cdGVsZW1lbnQuYW5pbWF0ZSggdG8sIHtcblx0XHRxdWV1ZTogZmFsc2UsXG5cdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0ZWFzaW5nOiBvcHRpb25zLmVhc2luZyxcblx0XHRjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBvZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuXG5cdFx0XHRpZiAoIHRvLm9wYWNpdHkgPT09IDAgKSB7XG5cdFx0XHRcdGVsZW1lbnQuY3NzKCBcIm9wYWNpdHlcIiwgZnJvbS5vcGFjaXR5ICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXJlc3RvcmUgKSB7XG5cdFx0XHRcdGVsZW1lbnRcblx0XHRcdFx0XHQuY3NzKCBcInBvc2l0aW9uXCIsIHBvc2l0aW9uID09PSBcInN0YXRpY1wiID8gXCJyZWxhdGl2ZVwiIDogcG9zaXRpb24gKVxuXHRcdFx0XHRcdC5vZmZzZXQoIG9mZnNldCApO1xuXG5cdFx0XHRcdC8vIE5lZWQgdG8gc2F2ZSBzdHlsZSBoZXJlIHNvIHRoYXQgYXV0b21hdGljIHN0eWxlIHJlc3RvcmF0aW9uXG5cdFx0XHRcdC8vIGRvZXNuJ3QgcmVzdG9yZSB0byB0aGUgb3JpZ2luYWwgc3R5bGVzIGZyb20gYmVmb3JlIHRoZSBhbmltYXRpb24uXG5cdFx0XHRcdCQuZWZmZWN0cy5zYXZlU3R5bGUoIGVsZW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZG9uZSgpO1xuXHRcdH1cblx0fSApO1xuXG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBTY2FsZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2NhbGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogR3Jvd3Mgb3Igc2hyaW5rcyBhbiBlbGVtZW50IGFuZCBpdHMgY29udGVudC5cbi8vPj5kb2NzOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9zY2FsZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RTY2FsZSA9ICQuZWZmZWN0cy5kZWZpbmUoIFwic2NhbGVcIiwgZnVuY3Rpb24oIG9wdGlvbnMsIGRvbmUgKSB7XG5cblx0Ly8gQ3JlYXRlIGVsZW1lbnRcblx0dmFyIGVsID0gJCggdGhpcyApLFxuXHRcdG1vZGUgPSBvcHRpb25zLm1vZGUsXG5cdFx0cGVyY2VudCA9IHBhcnNlSW50KCBvcHRpb25zLnBlcmNlbnQsIDEwICkgfHxcblx0XHRcdCggcGFyc2VJbnQoIG9wdGlvbnMucGVyY2VudCwgMTAgKSA9PT0gMCA/IDAgOiAoIG1vZGUgIT09IFwiZWZmZWN0XCIgPyAwIDogMTAwICkgKSxcblxuXHRcdG5ld09wdGlvbnMgPSAkLmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0ZnJvbTogJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsICksXG5cdFx0XHR0bzogJC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoIGVsLCBwZXJjZW50LCBvcHRpb25zLmRpcmVjdGlvbiB8fCBcImJvdGhcIiApLFxuXHRcdFx0b3JpZ2luOiBvcHRpb25zLm9yaWdpbiB8fCBbIFwibWlkZGxlXCIsIFwiY2VudGVyXCIgXVxuXHRcdH0sIG9wdGlvbnMgKTtcblxuXHQvLyBGYWRlIG9wdGlvbiB0byBzdXBwb3J0IHB1ZmZcblx0aWYgKCBvcHRpb25zLmZhZGUgKSB7XG5cdFx0bmV3T3B0aW9ucy5mcm9tLm9wYWNpdHkgPSAxO1xuXHRcdG5ld09wdGlvbnMudG8ub3BhY2l0eSA9IDA7XG5cdH1cblxuXHQkLmVmZmVjdHMuZWZmZWN0LnNpemUuY2FsbCggdGhpcywgbmV3T3B0aW9ucywgZG9uZSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgUHVmZiAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogUHVmZiBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcHVmZiBlZmZlY3QgYnkgc2NhbGluZyB0aGUgZWxlbWVudCB1cCBhbmQgaGlkaW5nIGl0IGF0IHRoZSBzYW1lIHRpbWUuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcHVmZi1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RQdWZmID0gJC5lZmZlY3RzLmRlZmluZSggXCJwdWZmXCIsIFwiaGlkZVwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIG5ld09wdGlvbnMgPSAkLmV4dGVuZCggdHJ1ZSwge30sIG9wdGlvbnMsIHtcblx0XHRmYWRlOiB0cnVlLFxuXHRcdHBlcmNlbnQ6IHBhcnNlSW50KCBvcHRpb25zLnBlcmNlbnQsIDEwICkgfHwgMTUwXG5cdH0gKTtcblxuXHQkLmVmZmVjdHMuZWZmZWN0LnNjYWxlLmNhbGwoIHRoaXMsIG5ld09wdGlvbnMsIGRvbmUgKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFB1bHNhdGUgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFB1bHNhdGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogUHVsc2F0ZXMgYW4gZWxlbWVudCBuIHRpbWVzIGJ5IGNoYW5naW5nIHRoZSBvcGFjaXR5IHRvIHplcm8gYW5kIGJhY2suXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vcHVsc2F0ZS1lZmZlY3QvXG4vLz4+ZGVtb3M6IGh0dHA6Ly9qcXVlcnl1aS5jb20vZWZmZWN0L1xuXG5cblxudmFyIGVmZmVjdHNFZmZlY3RQdWxzYXRlID0gJC5lZmZlY3RzLmRlZmluZSggXCJwdWxzYXRlXCIsIFwic2hvd1wiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIGVsZW1lbnQgPSAkKCB0aGlzICksXG5cdFx0bW9kZSA9IG9wdGlvbnMubW9kZSxcblx0XHRzaG93ID0gbW9kZSA9PT0gXCJzaG93XCIsXG5cdFx0aGlkZSA9IG1vZGUgPT09IFwiaGlkZVwiLFxuXHRcdHNob3doaWRlID0gc2hvdyB8fCBoaWRlLFxuXG5cdFx0Ly8gU2hvd2luZyBvciBoaWRpbmcgbGVhdmVzIG9mZiB0aGUgXCJsYXN0XCIgYW5pbWF0aW9uXG5cdFx0YW5pbXMgPSAoICggb3B0aW9ucy50aW1lcyB8fCA1ICkgKiAyICkgKyAoIHNob3doaWRlID8gMSA6IDAgKSxcblx0XHRkdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gLyBhbmltcyxcblx0XHRhbmltYXRlVG8gPSAwLFxuXHRcdGkgPSAxLFxuXHRcdHF1ZXVlbGVuID0gZWxlbWVudC5xdWV1ZSgpLmxlbmd0aDtcblxuXHRpZiAoIHNob3cgfHwgIWVsZW1lbnQuaXMoIFwiOnZpc2libGVcIiApICkge1xuXHRcdGVsZW1lbnQuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKTtcblx0XHRhbmltYXRlVG8gPSAxO1xuXHR9XG5cblx0Ly8gQW5pbXMgLSAxIG9wYWNpdHkgXCJ0b2dnbGVzXCJcblx0Zm9yICggOyBpIDwgYW5pbXM7IGkrKyApIHtcblx0XHRlbGVtZW50LmFuaW1hdGUoIHsgb3BhY2l0eTogYW5pbWF0ZVRvIH0sIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXHRcdGFuaW1hdGVUbyA9IDEgLSBhbmltYXRlVG87XG5cdH1cblxuXHRlbGVtZW50LmFuaW1hdGUoIHsgb3BhY2l0eTogYW5pbWF0ZVRvIH0sIGR1cmF0aW9uLCBvcHRpb25zLmVhc2luZyApO1xuXG5cdGVsZW1lbnQucXVldWUoIGRvbmUgKTtcblxuXHQkLmVmZmVjdHMudW5zaGlmdCggZWxlbWVudCwgcXVldWVsZW4sIGFuaW1zICsgMSApO1xufSApO1xuXG5cbi8qIVxuICogalF1ZXJ5IFVJIEVmZmVjdHMgU2hha2UgMS4xMi4xXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqL1xuXG4vLz4+bGFiZWw6IFNoYWtlIEVmZmVjdFxuLy8+Pmdyb3VwOiBFZmZlY3RzXG4vLz4+ZGVzY3JpcHRpb246IFNoYWtlcyBhbiBlbGVtZW50IGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5IG4gdGltZXMuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2hha2UtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0U2hha2UgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNoYWtlXCIsIGZ1bmN0aW9uKCBvcHRpb25zLCBkb25lICkge1xuXG5cdHZhciBpID0gMSxcblx0XHRlbGVtZW50ID0gJCggdGhpcyApLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwibGVmdFwiLFxuXHRcdGRpc3RhbmNlID0gb3B0aW9ucy5kaXN0YW5jZSB8fCAyMCxcblx0XHR0aW1lcyA9IG9wdGlvbnMudGltZXMgfHwgMyxcblx0XHRhbmltcyA9IHRpbWVzICogMiArIDEsXG5cdFx0c3BlZWQgPSBNYXRoLnJvdW5kKCBvcHRpb25zLmR1cmF0aW9uIC8gYW5pbXMgKSxcblx0XHRyZWYgPSAoIGRpcmVjdGlvbiA9PT0gXCJ1cFwiIHx8IGRpcmVjdGlvbiA9PT0gXCJkb3duXCIgKSA/IFwidG9wXCIgOiBcImxlZnRcIixcblx0XHRwb3NpdGl2ZU1vdGlvbiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImxlZnRcIiApLFxuXHRcdGFuaW1hdGlvbiA9IHt9LFxuXHRcdGFuaW1hdGlvbjEgPSB7fSxcblx0XHRhbmltYXRpb24yID0ge30sXG5cblx0XHRxdWV1ZWxlbiA9IGVsZW1lbnQucXVldWUoKS5sZW5ndGg7XG5cblx0JC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0Ly8gQW5pbWF0aW9uXG5cdGFuaW1hdGlvblsgcmVmIF0gPSAoIHBvc2l0aXZlTW90aW9uID8gXCItPVwiIDogXCIrPVwiICkgKyBkaXN0YW5jZTtcblx0YW5pbWF0aW9uMVsgcmVmIF0gPSAoIHBvc2l0aXZlTW90aW9uID8gXCIrPVwiIDogXCItPVwiICkgKyBkaXN0YW5jZSAqIDI7XG5cdGFuaW1hdGlvbjJbIHJlZiBdID0gKCBwb3NpdGl2ZU1vdGlvbiA/IFwiLT1cIiA6IFwiKz1cIiApICsgZGlzdGFuY2UgKiAyO1xuXG5cdC8vIEFuaW1hdGVcblx0ZWxlbWVudC5hbmltYXRlKCBhbmltYXRpb24sIHNwZWVkLCBvcHRpb25zLmVhc2luZyApO1xuXG5cdC8vIFNoYWtlc1xuXHRmb3IgKCA7IGkgPCB0aW1lczsgaSsrICkge1xuXHRcdGVsZW1lbnRcblx0XHRcdC5hbmltYXRlKCBhbmltYXRpb24xLCBzcGVlZCwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdFx0LmFuaW1hdGUoIGFuaW1hdGlvbjIsIHNwZWVkLCBvcHRpb25zLmVhc2luZyApO1xuXHR9XG5cblx0ZWxlbWVudFxuXHRcdC5hbmltYXRlKCBhbmltYXRpb24xLCBzcGVlZCwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdC5hbmltYXRlKCBhbmltYXRpb24sIHNwZWVkIC8gMiwgb3B0aW9ucy5lYXNpbmcgKVxuXHRcdC5xdWV1ZSggZG9uZSApO1xuXG5cdCQuZWZmZWN0cy51bnNoaWZ0KCBlbGVtZW50LCBxdWV1ZWxlbiwgYW5pbXMgKyAxICk7XG59ICk7XG5cblxuLyohXG4gKiBqUXVlcnkgVUkgRWZmZWN0cyBTbGlkZSAxLjEyLjFcbiAqIGh0dHA6Ly9qcXVlcnl1aS5jb21cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbi8vPj5sYWJlbDogU2xpZGUgRWZmZWN0XG4vLz4+Z3JvdXA6IEVmZmVjdHNcbi8vPj5kZXNjcmlwdGlvbjogU2xpZGVzIGFuIGVsZW1lbnQgaW4gYW5kIG91dCBvZiB0aGUgdmlld3BvcnQuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vc2xpZGUtZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3RzRWZmZWN0U2xpZGUgPSAkLmVmZmVjdHMuZGVmaW5lKCBcInNsaWRlXCIsIFwic2hvd1wiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0dmFyIHN0YXJ0Q2xpcCwgc3RhcnRSZWYsXG5cdFx0ZWxlbWVudCA9ICQoIHRoaXMgKSxcblx0XHRtYXAgPSB7XG5cdFx0XHR1cDogWyBcImJvdHRvbVwiLCBcInRvcFwiIF0sXG5cdFx0XHRkb3duOiBbIFwidG9wXCIsIFwiYm90dG9tXCIgXSxcblx0XHRcdGxlZnQ6IFsgXCJyaWdodFwiLCBcImxlZnRcIiBdLFxuXHRcdFx0cmlnaHQ6IFsgXCJsZWZ0XCIsIFwicmlnaHRcIiBdXG5cdFx0fSxcblx0XHRtb2RlID0gb3B0aW9ucy5tb2RlLFxuXHRcdGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uIHx8IFwibGVmdFwiLFxuXHRcdHJlZiA9ICggZGlyZWN0aW9uID09PSBcInVwXCIgfHwgZGlyZWN0aW9uID09PSBcImRvd25cIiApID8gXCJ0b3BcIiA6IFwibGVmdFwiLFxuXHRcdHBvc2l0aXZlTW90aW9uID0gKCBkaXJlY3Rpb24gPT09IFwidXBcIiB8fCBkaXJlY3Rpb24gPT09IFwibGVmdFwiICksXG5cdFx0ZGlzdGFuY2UgPSBvcHRpb25zLmRpc3RhbmNlIHx8XG5cdFx0XHRlbGVtZW50WyByZWYgPT09IFwidG9wXCIgPyBcIm91dGVySGVpZ2h0XCIgOiBcIm91dGVyV2lkdGhcIiBdKCB0cnVlICksXG5cdFx0YW5pbWF0aW9uID0ge307XG5cblx0JC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKCBlbGVtZW50ICk7XG5cblx0c3RhcnRDbGlwID0gZWxlbWVudC5jc3NDbGlwKCk7XG5cdHN0YXJ0UmVmID0gZWxlbWVudC5wb3NpdGlvbigpWyByZWYgXTtcblxuXHQvLyBEZWZpbmUgaGlkZSBhbmltYXRpb25cblx0YW5pbWF0aW9uWyByZWYgXSA9ICggcG9zaXRpdmVNb3Rpb24gPyAtMSA6IDEgKSAqIGRpc3RhbmNlICsgc3RhcnRSZWY7XG5cdGFuaW1hdGlvbi5jbGlwID0gZWxlbWVudC5jc3NDbGlwKCk7XG5cdGFuaW1hdGlvbi5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAxIF0gXSA9IGFuaW1hdGlvbi5jbGlwWyBtYXBbIGRpcmVjdGlvbiBdWyAwIF0gXTtcblxuXHQvLyBSZXZlcnNlIHRoZSBhbmltYXRpb24gaWYgd2UncmUgc2hvd2luZ1xuXHRpZiAoIG1vZGUgPT09IFwic2hvd1wiICkge1xuXHRcdGVsZW1lbnQuY3NzQ2xpcCggYW5pbWF0aW9uLmNsaXAgKTtcblx0XHRlbGVtZW50LmNzcyggcmVmLCBhbmltYXRpb25bIHJlZiBdICk7XG5cdFx0YW5pbWF0aW9uLmNsaXAgPSBzdGFydENsaXA7XG5cdFx0YW5pbWF0aW9uWyByZWYgXSA9IHN0YXJ0UmVmO1xuXHR9XG5cblx0Ly8gQWN0dWFsbHkgYW5pbWF0ZVxuXHRlbGVtZW50LmFuaW1hdGUoIGFuaW1hdGlvbiwge1xuXHRcdHF1ZXVlOiBmYWxzZSxcblx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRlYXNpbmc6IG9wdGlvbnMuZWFzaW5nLFxuXHRcdGNvbXBsZXRlOiBkb25lXG5cdH0gKTtcbn0gKTtcblxuXG4vKiFcbiAqIGpRdWVyeSBVSSBFZmZlY3RzIFRyYW5zZmVyIDEuMTIuMVxuICogaHR0cDovL2pxdWVyeXVpLmNvbVxuICpcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuLy8+PmxhYmVsOiBUcmFuc2ZlciBFZmZlY3Rcbi8vPj5ncm91cDogRWZmZWN0c1xuLy8+PmRlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIHRyYW5zZmVyIGVmZmVjdCBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIuXG4vLz4+ZG9jczogaHR0cDovL2FwaS5qcXVlcnl1aS5jb20vdHJhbnNmZXItZWZmZWN0L1xuLy8+PmRlbW9zOiBodHRwOi8vanF1ZXJ5dWkuY29tL2VmZmVjdC9cblxuXG5cbnZhciBlZmZlY3Q7XG5pZiAoICQudWlCYWNrQ29tcGF0ICE9PSBmYWxzZSApIHtcblx0ZWZmZWN0ID0gJC5lZmZlY3RzLmRlZmluZSggXCJ0cmFuc2ZlclwiLCBmdW5jdGlvbiggb3B0aW9ucywgZG9uZSApIHtcblx0XHQkKCB0aGlzICkudHJhbnNmZXIoIG9wdGlvbnMsIGRvbmUgKTtcblx0fSApO1xufVxudmFyIGVmZmVjdHNFZmZlY3RUcmFuc2ZlciA9IGVmZmVjdDtcblxuXG5cblxufSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///668\n')},692:function(module,exports){eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t"use strict";\n\n\tif ( true && typeof module.exports === "object" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require("jquery")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( "jQuery requires a window with a document" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n"use strict";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns "function" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( "object" ) === "function"`).\n\t\t// We don\'t want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns "function" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)\n\t\treturn typeof obj === "function" && typeof obj.nodeType !== "number" &&\n\t\t\ttypeof obj.item !== "function";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( "script" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don\'t support the "nonce" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + "";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === "object" || typeof obj === "function" ?\n\t\tclass2type[ toString.call( obj ) ] || "object" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = "3.7.1",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor \'enhanced\'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array\'s method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === "boolean" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== "object" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === "__proto__" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we\'re merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don\'t bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: "jQuery" + ( version + Math.random() ).replace( /\\D/g, "" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== "[object Object]" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, "constructor" ) && proto.constructor;\n\t\treturn typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = "",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === "string" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn\'t yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === "function" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),\n\tfunction( _i, name ) {\n\t\tclass2type[ "[object " + name + "]" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn\'t used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && "length" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === "array" || length === 0 ||\n\t\ttypeof length === "number" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = "[\\\\x20\\\\t\\\\r\\\\n\\\\f]";\n\n\nvar rtrimCSS = new RegExp(\n\t"^" + whitespace + "+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)" + whitespace + "+$",\n\t"g"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn\'t have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === "\\0" ) {\n\t\t\treturn "\\uFFFD";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + "\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn "\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + "" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +\n\t\t"loop|multiple|open|readonly|required|scoped",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = "(?:\\\\\\\\[\\\\da-fA-F]{1,6}" + whitespace +\n\t\t"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = "\\\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t"*([*^$|!~]?=)" + whitespace +\n\n\t\t// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"\n\t\t"*(?:\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\"|(" + identifier + "))|)" +\n\t\twhitespace + "*\\\\]",\n\n\tpseudos = ":(" + identifier + ")(?:\\\\((" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t"(\'((?:\\\\\\\\.|[^\\\\\\\\\'])*)\'|\\"((?:\\\\\\\\.|[^\\\\\\\\\\"])*)\\")|" +\n\n\t\t// 2. simple (capture 6)\n\t\t"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|" + attributes + ")*)|" +\n\n\t\t// 3. anything else (capture 2)\n\t\t".*" +\n\t\t")\\\\)|)",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + "+", "g" ),\n\n\trcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),\n\trleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +\n\t\twhitespace + "*" ),\n\trdescend = new RegExp( whitespace + "|>" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( "^" + identifier + "$" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( "^#(" + identifier + ")" ),\n\t\tCLASS: new RegExp( "^\\\\.(" + identifier + ")" ),\n\t\tTAG: new RegExp( "^(" + identifier + "|[*])" ),\n\t\tATTR: new RegExp( "^" + attributes ),\n\t\tPSEUDO: new RegExp( "^" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(" +\n\t\t\t\twhitespace + "*(even|odd|(([+-]|)(\\\\d*)n|)" + whitespace + "*(?:([+-]|)" +\n\t\t\t\twhitespace + "*(\\\\d+)|))" + whitespace + "*\\\\)|)", "i" ),\n\t\tbool: new RegExp( "^(?:" + booleans + ")$", "i" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( "^" + whitespace +\n\t\t\t"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(" + whitespace +\n\t\t\t"*((?:-\\\\d)?\\\\d*)" + whitespace + "*\\\\)|)(?=[^-]|$)", "i" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( "\\\\\\\\[\\\\da-fA-F]{1,6}" + whitespace +\n\t\t"?|\\\\\\\\([^\\\\r\\\\n\\\\f])", "g" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = "0x" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a "Permission Denied"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, "fieldset" );\n\t\t},\n\t\t{ dir: "parentNode", next: "legend" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== "string" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a "get*By*" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don\'t exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + " " ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we\'re not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( "id" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( "id", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( "," );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( "id" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, "$1" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + " ") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + " " ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + " " ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( "fieldset" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, "input" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( "form" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a "form" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( "label" in elem ) {\n\t\t\t\t\tif ( "label" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can\'t be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn\'t\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( "label" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== "undefined" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn\'t support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws "permission denied" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( "unload", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don\'t pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it\'s possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, "*" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don\'t support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( ":scope" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( ":has(*,:jqfake)" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( "id" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== "undefined" &&\n\t\t\t\t\telem.getAttributeNode( "id" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== "undefined" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( "id" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( "id" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don\'t have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t"<a id=\'" + expando + "\' href=\'\' disabled=\'disabled\'></a>" +\n\t\t\t"<select id=\'" + expando + "-\\r\\\\\' disabled=\'disabled\'>" +\n\t\t\t"<option selected=\'\'></option></select>";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and "value" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( "[selected]" ).length ) {\n\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*(?:value|" + booleans + ")" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {\n\t\t\trbuggyQSA.push( "~=" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {\n\t\t\trbuggyQSA.push( ".#.+[+~]" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn\'t work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( ":checked" ).length ) {\n\t\t\trbuggyQSA.push( ":checked" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( "input" );\n\t\tinput.setAttribute( "type", "hidden" );\n\t\tel.appendChild( input ).setAttribute( "name", "D" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE\'s :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn\'t work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( ":disabled" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( ":enabled", ":disabled" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don\'t find elements on a `[name=\'\']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don\'t seem to have the issue.\n\t\tinput = document.createElement( "input" );\n\t\tinput.setAttribute( "name", "" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( "[name=\'\']" ).length ) {\n\t\t\trbuggyQSA.push( "\\\\[" + whitespace + "*name" + whitespace + "*=" +\n\t\t\t\twhitespace + "*(?:\'\'|\\"\\")" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( ":has" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + " " ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9\'s matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don\'t get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( "Syntax error, unrecognized expression: " + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can\'t\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t">": { dir: "parentNode", first: true },\n\t\t" ": { dir: "parentNode" },\n\t\t"+": { dir: "previousSibling", first: true },\n\t\t"~": { dir: "previousSibling" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === "~=" ) {\n\t\t\t\tmatch[ 3 ] = " " + match[ 3 ] + " ";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr["CHILD"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === "nth" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || "";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === "*" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + " " ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( "(^|" + whitespace + ")" + className +\n\t\t\t\t\t"(" + whitespace + "|$)" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === "string" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== "undefined" &&\n\t\t\t\t\t\t\t\telem.getAttribute( "class" ) ||\n\t\t\t\t\t\t\t""\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === "!=";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += "";\n\n\t\t\t\tif ( operator === "=" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "!=" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "^=" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === "*=" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === "$=" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === "~=" ) {\n\t\t\t\t\treturn ( " " + result.replace( rwhitespace, " " ) + " " )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === "|=" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + "-";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== "nth",\n\t\t\t\tforward = type.slice( -4 ) !== "last",\n\t\t\t\tofType = what === "of-type";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? "nextSibling" : "previousSibling",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven\'t yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === "only" && !start && "nextSibling";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( "unsupported pseudo: " + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, "", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, "$1" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don\'t keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// "Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element\'s language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by "-".\n\t\t// The matching of C against the element\'s language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name."\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || "" ) ) {\n\t\t\t\tfind.error( "unsupported lang: " + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, "input" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, "option" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, "input" ) && elem.type === "button" ||\n\t\t\t\tnodeName( elem, "button" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, "input" ) && elem.type === "text" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., "search") appear\n\t\t\t\t// with elem.type === "text"\n\t\t\t\t( ( attr = elem.getAttribute( "type" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === "text" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + " " ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don\'t consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, " " )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we\'re just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = "";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === "parentNode",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can\'t set arbitrary data on XML nodes, so they don\'t benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we\'re done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || "*",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ " " ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )\n\t\t\t\t\t).replace( rtrimCSS, "$1" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = "0",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( "*", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a "Permission denied" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn\'t visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a "00" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + " " ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery\'s compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === "function" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ ":" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let\'s maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== "string" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = ":not(" + expr + ")";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== "string" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $("p:first").is("p:last") won\'t return true for a doc with two "p".\n\t\t\ttypeof selector === "string" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(""), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === "string" ) {\n\t\t\tif ( selector[ 0 ] === "<" &&\n\t\t\t\tselector[ selector.length - 1 ] === ">" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== "string" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there\'s no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don\'t pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === "string" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, "parentNode" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "parentNode", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, "nextSibling" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, "previousSibling" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, "nextSibling" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, "previousSibling" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "nextSibling", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, "previousSibling", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don\'t support it.\n\t\tif ( nodeName( elem, "template" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== "Until" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === "string" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * "fired" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest "memorized"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === "string" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn\'t re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we\'re done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we\'re done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = "";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== "string" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = "";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = "";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn\'t unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ "notify", "progress", jQuery.Callbacks( "memory" ),\n\t\t\t\t\tjQuery.Callbacks( "memory" ), 2 ],\n\t\t\t\t[ "resolve", "done", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 0, "resolved" ],\n\t\t\t\t[ "reject", "fail", jQuery.Callbacks( "once memory" ),\n\t\t\t\t\tjQuery.Callbacks( "once memory" ), 1, "rejected" ]\n\t\t\t],\n\t\t\tstate = "pending",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t"catch": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + "With" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( "Thenable self-resolution" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === "object" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === "function" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it\'s otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = "resolved" (i.e., fulfilled)\n\t\t\t\t\t\t// state = "rejected"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + "With" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === "pending" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( "jQuery.Deferred exception: " + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we\'re already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( "DOMContentLoaded", completed );\n\twindow.removeEventListener( "load", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals "interactive" too soon\nif ( document.readyState === "complete" ||\n\t( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( "DOMContentLoaded", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( "load", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it\'s a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === "object" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === "string" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the "read" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === "string" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the "set" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there\'s no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module\'s maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support "private" and "user" data.\n//\t4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === "true" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === "false" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === "null" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn\'t change the string\n\tif ( data === +data + "" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === "string" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn\'t changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( "data-" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, "hasDataAttrs", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === "object" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to "discover" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn\'t exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || "fx" ) + "queue";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || "fx";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === "inprogress" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === "fx" ) {\n\t\t\t\tqueue.unshift( "inprogress" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + "queueHooks";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( "once memory" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + "queue", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tdata = type;\n\t\t\ttype = "fx";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === "fx" && queue[ 0 ] !== "inprogress" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || "fx", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || "fx";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + "queueHooks" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );\n\n\nvar cssExpand = [ "Top", "Right", "Bottom", "Left" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === "none" ||\n\t\t\telem.style.display === "" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, "display" ) === "none";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, "" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, "display" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === "none" ) {\n\t\tdisplay = "block";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === "none" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, "display" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = "";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== "none" ) {\n\t\t\t\tvalues[ index ] = "none";\n\n\t\t\t\t// Remember what we\'re overwriting\n\t\t\t\tdataPriv.set( elem, "display", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === "boolean" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( "div" ) ),\n\t\tinput = document.createElement( "input" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( "type", "radio" );\n\tinput.setAttribute( "checked", "checked" );\n\tinput.setAttribute( "name", "t" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn\'t clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = "<textarea>x</textarea>";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = "<option></option>";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, "<table>", "</table>" ],\n\tcol: [ 2, "<table><colgroup>", "</colgroup></table>" ],\n\ttr: [ 2, "<table><tbody>", "</tbody></table>" ],\n\ttd: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],\n\n\t_default: [ 0, "", "" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, "<select multiple=\'multiple\'>", "</select>" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== "undefined" ) {\n\t\tret = context.getElementsByTagName( tag || "*" );\n\n\t} else if ( typeof context.querySelectorAll !== "undefined" ) {\n\t\tret = context.querySelectorAll( tag || "*" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t"globalEval",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], "globalEval" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === "object" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( "div" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = "";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = "";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), "script" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || "" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === "object" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== "string" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === "string" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards\' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element\'s event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( "." )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we\'re the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element\'s handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || "" ).match( rnothtmlwhite ) || [ "" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === "**" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it\'s no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, "handle events" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, "events" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event\'s.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === "click" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don\'t check non-elements (trac-13208)\n\t\t\t\t// Don\'t process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don\'t conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + " ";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, "click", ... )\n\t\t\t\t\tleverageNative( el, "click", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, "input" ) ) {\n\n\t\t\t\t\tleverageNative( el, "click" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we\'re currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, "input" ) &&\n\t\t\t\t\tdataPriv.get( target, "click" ) ||\n\t\t\t\t\tnodeName( target, "a" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn\'t alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don\'t bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This "if" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the \'new\' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn\'t have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t"char": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, "handle" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === "focusin" ? "focus" : "blur";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don\'t bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, "focus", ... )\n\t\t\t// dataPriv.set( this, "blur", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we\'re currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn\'t have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: "mouseover",\n\tmouseleave: "mouseout",\n\tpointerenter: "pointerover",\n\tpointerleave: "pointerout"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + "." + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === "object" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === "function" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked="checked" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, "table" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {\n\n\t\treturn jQuery( elem ).children( "tbody" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( "type" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, "handle events" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === "input" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === "input" || nodeName === "textarea" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can\'t cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === "string" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, "script" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, "script" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || "" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, "globalEval" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won\'t run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( "nonce" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn\'t be\n\t\t\t\t\t\t\t// needed as in XML documents they\'re already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we\'re preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, "script" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, "script" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, "script" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove\'s overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = "";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === "string" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: "append",\n\tprependTo: "prepend",\n\tinsertBefore: "before",\n\tinsertAfter: "after",\n\treplaceAll: "replaceWith"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they\'re executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = "position:absolute;left:-11111px;width:60px;" +\n\t\t\t"margin-top:1px;padding:0;border:0";\n\t\tdiv.style.cssText =\n\t\t\t"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +\n\t\t\t"margin:auto;border:1px;padding:1px;" +\n\t\t\t"width:60%;top:1%";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== "1%";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn\'t\n\t\tdiv.style.right = "60%";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don\'t get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = "absolute";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn\'t be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( "div" ),\n\t\tdiv = document.createElement( "div" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = "content-box";\n\tdiv.cloneNode( true ).style.backgroundClip = "";\n\tsupport.clearCloneStyle = div.style.backgroundClip === "content-box";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( "table" );\n\t\t\t\ttr = document.createElement( "tr" );\n\t\t\t\ttrChild = document.createElement( "div" );\n\n\t\t\t\ttable.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";\n\t\t\t\ttr.style.cssText = "box-sizing:content-box;border:1px solid";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = "1px";\n\t\t\t\ttrChild.style.height = "9px";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to "inline",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = "block";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css(\'filter\') (IE 9 only, trac-12537)\n\t// .css(\'--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `"float"` in `getPropertyValue`; in computed styles\n\t\t// it\'s only available as `"cssFloat"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `"none"` for `getPropertyValue( "float" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there\'s no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, "$1" ) || undefined;\n\t\t}\n\n\t\tif ( ret === "" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the "awesome hack by Dean Edwards"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + "" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we\'ll check on the first run if it\'s really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it\'s not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ "Webkit", "Moz", "ms" ],\n\temptyStyle = document.createElement( "div" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except "table", "table-cell", or "table-caption"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: "absolute", visibility: "hidden", display: "block" },\n\tcssNormalTransform = {\n\t\tletterSpacing: "0",\n\t\tfontWeight: "400"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined "subtract", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === "width" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? "border" : "content" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === "margin" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we\'re seeking "padding" or "border" or "margin"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\n\t\t\t// For "border" or "margin", add border\n\t\t\tif ( box !== "padding" ) {\n\t\t\t\tdelta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we\'re seeking "content" or\n\t\t// "padding" or "margin"\n\t\t} else {\n\n\t\t\t// For "content", subtract padding\n\t\t\tif ( box === "content" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For "content" or "padding", subtract border\n\t\t\tif ( box !== "margin" ) {\n\t\t\t\tdelta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can\'t determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it\'s needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = "auto";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn\'t suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is "auto"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === "auto" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize "" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element\'s box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? "border" : "content" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + "px";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, "opacity" );\n\t\t\t\t\treturn ret === "" ? "1" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don\'t automatically add "px" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don\'t set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we\'re working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we\'re setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert "+=" or "-=" to relative numbers (trac-7345)\n\t\t\tif ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = "number";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren\'t set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// "px" to a few hardcoded values.\n\t\t\tif ( type === "number" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone\'s values\n\t\t\tif ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {\n\t\t\t\tstyle[ name ] = "inherit";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( "set" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && "get" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we\'re working with the right name. We don\'t\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && "get" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert "normal" to computed value\n\t\tif ( val === "normal" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === "" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ "height", "width" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, "display" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === "absolute",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, "boxSizing", false, styles ) === "border-box",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, "border", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || "px" ) !== "px" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, "marginLeft" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + "px";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: "",\n\tpadding: "",\n\tborder: "Width"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === "string" ? value.split( " " ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== "margin" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as "10px" are parsed to Float;\n\t\t\t// complex values such as "rotate(1rad)" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, "" );\n\n\t\t\t// Empty strings, null, undefined and "auto" are converted to 0.\n\t\t\treturn !result || result === "auto" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: "swing"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ "margin" + which ] = attrs[ "padding" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We\'re done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = "width" in props || "height" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, "fxshow" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, "fx" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, "fx" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === "toggle";\n\t\t\tif ( value === ( hidden ? "hide" : "show" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a "show" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict "overflow" and "display" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, "display" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, "display" );\n\t\tif ( display === "none" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, "display" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, "float" ) === "none" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === "none" ? "" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = "inline-block";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = "hidden";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( "hidden" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` "reverses"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a "hide" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, "fxshow" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && "expand" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won\'t overwrite existing keys.\n\t\t\t// Reusing \'index\' because we have the correct "name"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don\'t match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won\'t allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there\'s more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t"*": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ "*" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== "number" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> "fx"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = "fx";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won\'t be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, "finish" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== "string" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || "fx", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + "queueHooks",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn\'t forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || "fx";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + "queue" ],\n\t\t\t\thooks = data[ type + "queueHooks" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === "boolean" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( "show" ),\n\tslideUp: genFx( "hide" ),\n\tslideToggle: genFx( "toggle" ),\n\tfadeIn: { opacity: "show" },\n\tfadeOut: { opacity: "hide" },\n\tfadeToggle: { opacity: "toggle" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || "fx";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( "input" ),\n\t\tselect = document.createElement( "select" ),\n\t\topt = select.appendChild( document.createElement( "option" ) );\n\n\tinput.type = "checkbox";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be "on"\n\tsupport.checkOn = input.value !== "";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( "input" );\n\tinput.value = "t";\n\tinput.type = "radio";\n\tsupport.radioValue = input.value === "t";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === "undefined" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + "" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === "radio" &&\n\t\t\t\t\tnodeName( elem, "input" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( "type", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don\'t get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && "set" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn\'t always return the\n\t\t\t\t// correct value when it hasn\'t been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, "tabindex" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t"for": "htmlFor",\n\t\t"class": "className"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule "no-unused-expressions" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: "off" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t"tabIndex",\n\t"readOnly",\n\t"maxLength",\n\t"cellSpacing",\n\t"cellPadding",\n\t"rowSpan",\n\t"colSpan",\n\t"useMap",\n\t"frameBorder",\n\t"contentEditable"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( " " );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( "class" ) || "";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === "string" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( " " + className + " " ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + " ";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( "class", "" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( " " + className + " " ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( " " + className + " ", " " );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( "class", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === "string" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === "boolean" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === "boolean" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, "__className__", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we\'re passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( "class",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t"" :\n\t\t\t\t\t\t\tdataPriv.get( this, "__className__" ) || ""\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = " " + selector + " ";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t"get" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, "value" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === "string" ) {\n\t\t\t\t\treturn ret.replace( rreturn, "" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? "" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as ""; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = "";\n\n\t\t\t} else if ( typeof val === "number" ) {\n\t\t\t\tval += "";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? "" : value + "";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, "value" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === "select-one",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn\'t update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don\'t return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, "optgroup" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don\'t need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ "radio", "checkbox" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( "value" ) === null ? "on" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== "string" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( "Invalid XML: " + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( "\\n" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, "type" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don\'t do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we\'re not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( "." ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( "." );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( ":" ) < 0 && "on" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === "object" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( "." );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( "(^|\\\\.)" + namespaces.join( "\\\\.(?:.*\\\\.|)" ) + "(\\\\.|$)" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, "handle" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don\'t do default actions on window, that\'s where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don\'t re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === "object" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + "=" +\n\t\t\t\tencodeURIComponent( value == null ? "" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn "";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the "old" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( "&" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for "elements" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, "elements" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( ":disabled" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( ":disabled" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, "\\r\\n" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol "*" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to "*" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol "*" can be used\n\t * 3) selection will start with transport dataType and THEN go to "*" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = "*/".concat( "*" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( "a" );\n\noriginAnchor.href = location.href;\n\n// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to "*"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== "string" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = "*";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === "+" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || "*";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === "string" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );\n}\n\n// A special extend for ajax options\n// that takes "flat" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === "*" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );\n\t\t}\n\t}\n\n\t// Check if we\'re dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There\'s only work to do if current dataType is non-auto\n\t\t\tif ( current === "*" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== "*" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + " " + current ] || converters[ "* " + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( " " );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + " " + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ "* " + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: "parsererror",\n\t\t\t\t\t\t\t\terror: conv ? e : "No conversion from " + prev + " to " + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: "success", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: "GET",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: "application/x-www-form-urlencoded; charset=UTF-8",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t"*": allTypes,\n\t\t\ttext: "text/plain",\n\t\t\thtml: "text/html",\n\t\t\txml: "application/xml, text/xml",\n\t\t\tjson: "application/json, text/javascript"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: "responseXML",\n\t\t\ttext: "responseText",\n\t\t\tjson: "responseJSON"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall "*") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t"* text": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t"text html": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t"text json": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t"text xml": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn\'t be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn\'t be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === "object" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( "once memory" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = "canceled",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + " " ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + " " ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( ", " );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + "" )\n\t\t\t.replace( rprotocol, location.protocol + "//" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];\n\n\t\t// A cross-domain request is in order when the origin doesn\'t match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( "a" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor\'s host property isn\'t correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + "//" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== "string" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don\'t fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( "ajaxStart" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we\'re toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, "" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === "string" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it\'s not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, "$1" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change \'%20\' to \'+\' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, "+" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( "Content-Type", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t"Accept",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :\n\t\t\t\ts.accepts[ "*" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = "abort";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, "No Transport" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( "timeout" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || "";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( "script", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( "json", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ "text script" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "Last-Modified" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( "etag" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === "HEAD" ) {\n\t\t\t\t\tstatusText = "nocontent";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = "notmodified";\n\n\t\t\t\t// If we have data, let\'s convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = "error";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + "";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( "ajaxStop" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, "json" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, "script" );\n\t}\n} );\n\njQuery.each( [ "get", "post" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === "content-type" ) {\n\t\t\ts.contentType = s.headers[ i ] || "";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: "GET",\n\t\tdataType: "script",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t"text script": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( "body" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won\'t change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {\n\t\t\t\t\theaders[ "X-Requested-With" ] = "XMLHttpRequest";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === "abort" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === "error" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== "number" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, "error" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || "text" ) !== "text" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== "string" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( "abort" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn\'t been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: "text/javascript, application/javascript, " +\n\t\t\t"application/ecmascript, application/x-ecmascript"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t"text script": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache\'s special case and crossDomain\njQuery.ajaxPrefilter( "script", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = "GET";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( "script", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( "<script>" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( "load error", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === "error" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: "callback",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t"url" :\n\t\t\ttypeof s.data === "string" &&\n\t\t\t\t( s.contentType || "" )\n\t\t\t\t\t.indexOf( "application/x-www-form-urlencoded" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && "data"\n\t\t);\n\n\t// Handle iff the expected data type is "jsonp" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ "script json" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + " was not called" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = "json";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn\'t exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn\'t screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn "script";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( "" ).body;\n\tbody.innerHTML = "<form></form><form></form>";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument "data" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== "string" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === "boolean" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( "" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document\'s URL (gh-2965)\n\t\t\tbase = context.createElement( "base" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( " " );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it\'s a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it\'s the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === "object" ) {\n\t\ttype = "POST";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If "type" variable is undefined, then "GET" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || "GET",\n\t\t\tdataType: "html",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE \'Permission Denied\' errors\n\t\t\t\tjQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets "data", "status", "jqXHR"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets "jqXHR", "status", "error"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, "position" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === "static" ) {\n\t\t\telem.style.position = "relative";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, "top" );\n\t\tcurCSSLeft = jQuery.css( elem, "left" );\n\t\tcalculatePosition = ( position === "absolute" || position === "fixed" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( "using" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element\'s border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element\'s margin box to its offset parent\'s padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, "position" ) === "fixed" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, "position" ) === "static" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {\n\tvar top = "pageYOffset" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ "top", "left" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + "px" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: "height", Width: "width" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: "inner" + name,\n\t\tcontent: type,\n\t\t"": "outer" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( "outer" ) === 0 ?\n\t\t\t\t\t\telem[ "inner" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ "client" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ "scroll" + name ], doc[ "scroll" + name ],\n\t\t\t\t\t\telem.body[ "offset" + name ], doc[ "offset" + name ],\n\t\t\t\t\t\tdoc[ "client" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t"ajaxStart",\n\t"ajaxStop",\n\t"ajaxComplete",\n\t"ajaxError",\n\t"ajaxSuccess",\n\t"ajaxSend"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, "**" ) :\n\t\t\tthis.off( types, selector || "**", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( "mouseenter", fnOver )\n\t\t\t.on( "mouseleave", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( "blur focus focusin focusout resize scroll click dblclick " +\n\t"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +\n\t"change select submit keydown keypress keyup contextmenu" ).split( " " ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the "whitespace run" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching "\\s+$" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === "string" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === "number" || type === "string" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives ("")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals ("0x...")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t"" :\n\t\t( text + "" ).replace( rtrim, "$1" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === "undefined" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcz8xMTU3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My43LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjMtMDgtMjhUMTM6MzdaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0IHRyYWMtMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyIHZlcnNpb24gPSBcIjMuNy4xXCIsXG5cblx0cmh0bWxTdWZmaXggPSAvSFRNTCQvaSxcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblxuXHQvLyBSZXRyaWV2ZSB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcblx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5vZGUsXG5cdFx0XHRyZXQgPSBcIlwiLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0XHRyZXQgKz0galF1ZXJ5LnRleHQoIG5vZGUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcblx0XHR9XG5cdFx0aWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdGlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGVcblx0XHQvLyBkb2N1bWVudCBmcmFnbWVudHMuXG5cdFx0cmV0dXJuICFyaHRtbFN1ZmZpeC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciBwb3AgPSBhcnIucG9wO1xuXG5cbnZhciBzb3J0ID0gYXJyLnNvcnQ7XG5cblxudmFyIHNwbGljZSA9IGFyci5zcGxpY2U7XG5cblxudmFyIHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCI7XG5cblxudmFyIHJ0cmltQ1NTID0gbmV3IFJlZ0V4cChcblx0XCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICsgd2hpdGVzcGFjZSArIFwiKyRcIixcblx0XCJnXCJcbik7XG5cblxuXG5cbi8vIE5vdGU6IGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcbmpRdWVyeS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHR2YXIgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cblx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0Ly8gSUUgZG9lc24ndCBoYXZlIGBjb250YWluc2Agb24gU1ZHLlxuXHRcdGEuY29udGFpbnMgP1xuXHRcdFx0YS5jb250YWlucyggYnVwICkgOlxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdCkgKTtcbn07XG5cblxuXG5cbi8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG4vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcbnZhciByY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFx4ODAtXFx1RkZGRlxcdy1dL2c7XG5cbmZ1bmN0aW9uIGZjc3Nlc2NhcGUoIGNoLCBhc0NvZGVQb2ludCApIHtcblx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHR9XG5cblx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcbn1cblxualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblxuXG5cbnZhciBwcmVmZXJyZWREb2MgPSBkb2N1bWVudCxcblx0cHVzaE5hdGl2ZSA9IHB1c2g7XG5cbiggZnVuY3Rpb24oKSB7XG5cbnZhciBpLFxuXHRFeHByLFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblx0cHVzaCA9IHB1c2hOYXRpdmUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRkb2N1bWVudCxcblx0ZG9jdW1lbnRFbGVtZW50LFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRtYXRjaGVzLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvLFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfFwiICtcblx0XHRcImxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRybGVhZGluZ0NvbWJpbmF0b3IgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdElEOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0Q0xBU1M6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0VEFHOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0QVRUUjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0UFNFVURPOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRDSElMRDogbmV3IFJlZ0V4cChcblx0XHRcdFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRib29sOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdGlmICggbm9uSGV4ICkge1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdHJldHVybiBub25IZXg7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRyZXR1cm4gaGlnaCA8IDAgP1xuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzOyBzZWUgYHNldERvY3VtZW50YC5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUUvRWRnZS5cblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIG5vZGVOYW1lKCBlbGVtLCBcImZpZWxkc2V0XCIgKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0ge1xuXHRcdGFwcGx5OiBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSxcblx0XHRjYWxsOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSApO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZmluZCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0ZmluZC5jb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoICFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmxlYWRpbmdDb21iaW5hdG9yLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuXG5cdFx0XHRcdFx0Ly8gc3RyaWN0LWNvbXBhcmluZyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3IoIG5pZCApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzXG5cdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgalF1ZXJ5IHNlbGVjdG9yIG1vZHVsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSB8fCBub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApICkgJiZcblx0XHRcdGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMStcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBqUXVlcnkgc2VsZWN0b3IgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtub2RlXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5mdW5jdGlvbiBzZXREb2N1bWVudCggbm9kZSApIHtcblx0dmFyIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWpRdWVyeS5pc1hNTERvYyggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBpT1MgNyBvbmx5LCBJRSA5IC0gMTErXG5cdC8vIE9sZGVyIGJyb3dzZXJzIGRpZG4ndCBzdXBwb3J0IHVucHJlZml4ZWQgYG1hdGNoZXNgLlxuXHRtYXRjaGVzID0gZG9jdW1lbnRFbGVtZW50Lm1hdGNoZXMgfHxcblx0XHRkb2N1bWVudEVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzXG5cdC8vIChzZWUgdHJhYy0xMzkzNikuXG5cdC8vIExpbWl0IHRoZSBmaXggdG8gSUUgJiBFZGdlIExlZ2FjeTsgZGVzcGl0ZSBFZGdlIDE1KyBpbXBsZW1lbnRpbmcgYG1hdGNoZXNgLFxuXHQvLyBhbGwgSUUgOSsgYW5kIEVkZ2UgTGVnYWN5IHZlcnNpb25zIGltcGxlbWVudCBgbXNNYXRjaGVzU2VsZWN0b3JgIGFzIHdlbGwuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yICYmXG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBqUXVlcnkuZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8XG5cdFx0XHQhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGpRdWVyeS5leHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlLlxuXHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIElFL0VkZ2UgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlXCIgKTtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTEgb25seSwgU2FmYXJpIDE1LjQgLSAxNi4zIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBpcyBwYXJzZWQgdW5mb3JnaXZpbmdseS5cblx0Ly8gV2UgaW5jbHVkZSBgKmAgaW4gdGhlIHRlc3QgdG8gZGV0ZWN0IGJ1Z2d5IGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZVxuXHQvLyBfc2VsZWN0aXZlbHlfIGZvcmdpdmluZyAoc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGxpc3QgaW5jbHVkZXMgYXQgbGVhc3Rcblx0Ly8gb25lIHZhbGlkIHNlbGVjdG9yKS5cblx0Ly8gTm90ZSB0aGF0IHdlIHRyZWF0IGNvbXBsZXRlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgYDpoYXMoKWAgYXMgaWYgaXQgd2VyZVxuXHQvLyBzcGVjLWNvbXBsaWFudCBzdXBwb3J0LCB3aGljaCBpcyBmaW5lIGJlY2F1c2UgdXNlIG9mIGA6aGFzKClgIGluIHN1Y2hcblx0Ly8gZW52aXJvbm1lbnRzIHdpbGwgZmFpbCBpbiB0aGUgcVNBIHBhdGggYW5kIGZhbGwgYmFjayB0byBqUXVlcnkgdHJhdmVyc2FsXG5cdC8vIGFueXdheS5cblx0c3VwcG9ydC5jc3NIYXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHRyeSB7XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCBcIjpoYXMoKiw6anFmYWtlKVwiICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXIuSUQgPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmQuVEFHID0gZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdH1cblx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0cmJ1Z2d5UVNBID0gW107XG5cblx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHR2YXIgaW5wdXQ7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID1cblx0XHRcdFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJyBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgZGlzYWJsZWQ9J2Rpc2FibGVkJz5cIiArXG5cdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5XG5cdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseSBpbiBzb21lIFhNTCBkb2N1bWVudHNcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDggb25seVxuXHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTEwNSssIEZpcmVmb3ggPD0xMDQrLCBTYWZhcmkgPD0xNS40K1xuXHRcdC8vIEluIHNvbWUgb2YgdGhlIGRvY3VtZW50IGtpbmRzLCB0aGVzZSBzZWxlY3RvcnMgd291bGRuJ3Qgd29yayBuYXRpdmVseS5cblx0XHQvLyBUaGlzIGlzIHByb2JhYmx5IE9LIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugd2FudCB0byBtYWludGFpblxuXHRcdC8vIGhhbmRsaW5nIHRoZW0gdGhyb3VnaCBqUXVlcnkgdHJhdmVyc2FsIGluIGpRdWVyeSAzLnguXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHR9XG5cdH0gKTtcblxuXHRpZiAoICFzdXBwb3J0LmNzc0hhcyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSAxMDUgLSAxMTArLCBTYWZhcmkgMTUuNCAtIDE2LjMrXG5cdFx0Ly8gT3VyIHJlZ3VsYXIgYHRyeS1jYXRjaGAgbWVjaGFuaXNtIGZhaWxzIHRvIGRldGVjdCBuYXRpdmVseS11bnN1cHBvcnRlZFxuXHRcdC8vIHBzZXVkby1jbGFzc2VzIGluc2lkZSBgOmhhcygpYCAoc3VjaCBhcyBgOmhhcyg6Y29udGFpbnMoXCJGb29cIikpYClcblx0XHQvLyBpbiBicm93c2VycyB0aGF0IHBhcnNlIHRoZSBgOmhhcygpYCBhcmd1bWVudCBhcyBhIGZvcmdpdmluZyBzZWxlY3RvciBsaXN0LlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMvI3JlbGF0aW9uYWwgbm93IHJlcXVpcmVzIHRoZSBhcmd1bWVudFxuXHRcdC8vIHRvIGJlIHBhcnNlZCB1bmZvcmdpdmluZ2x5LCBidXQgYnJvd3NlcnMgaGF2ZSBub3QgeWV0IGZ1bGx5IGFkanVzdGVkLlxuXHRcdHJidWdneVFTQS5wdXNoKCBcIjpoYXNcIiApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG5maW5kLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBmaW5kKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuZmluZC5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaW5kKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuZmluZC5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblxuZmluZC5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSB0cmFjLTEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG59O1xuXG5maW5kLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cbmpRdWVyeS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdC8vXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjArXG5cdC8vIFRlc3RpbmcgZm9yIGRldGVjdGluZyBkdXBsaWNhdGVzIGlzIHVucHJlZGljdGFibGUgc28gaW5zdGVhZCBhc3N1bWUgd2UgY2FuJ3Rcblx0Ly8gZGVwZW5kIG9uIGR1cGxpY2F0ZSBkZXRlY3Rpb24gaW4gYWxsIGJyb3dzZXJzIHdpdGhvdXQgYSBzdGFibGUgc29ydC5cblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuc29ydFN0YWJsZTtcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiBzbGljZS5jYWxsKCByZXN1bHRzLCAwICk7XG5cdHNvcnQuY2FsbCggcmVzdWx0cywgc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRzcGxpY2UuY2FsbCggcmVzdWx0cywgZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG5qUXVlcnkuZm4udW5pcXVlU29ydCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS51bmlxdWVTb3J0KCBzbGljZS5hcHBseSggdGhpcyApICkgKTtcbn07XG5cbkV4cHIgPSBqUXVlcnkuZXhwciA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRBVFRSOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIiApXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0Q0hJTEQ6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiIClcblx0XHRcdFx0KTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0ZmluZC5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwci5DSElMRC50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0VEFHOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBleHBlY3RlZE5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgZXhwZWN0ZWROb2RlTmFtZSApO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDTEFTUzogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArXG5cdFx0XHRcdFx0XCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRBVFRSOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgPT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiIT1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICE9PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIl49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiKj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiQ9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApXG5cdFx0XHRcdFx0XHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwifD1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8ICggcGFyZW50WyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlTmFtZSggbm9kZSwgbmFtZSApIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFBTRVVETzogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBqUXVlcnkgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRub3Q6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0aGFzOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGZpbmQoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Y29udGFpbnM6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGpRdWVyeS50ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0bGFuZzogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0dGFyZ2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRyb290OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSxcblxuXHRcdGZvY3VzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmXG5cdFx0XHRcdGRvY3VtZW50Lmhhc0ZvY3VzKCkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0ZW5hYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0ZGlzYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRjaGVja2VkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUoIGVsZW0sIFwib3B0aW9uXCIgKSAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG5cdFx0XHQvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gdHJlYXQgdGhlIGRlZmF1bHQgb3B0aW9uIGFzXG5cdFx0XHQvLyBzZWxlY3RlZCB3aGVuIGluIGFuIG9wdGdyb3VwLlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdGVtcHR5OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zLmVtcHR5KCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRoZWFkZXI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRpbnB1dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fFxuXHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJidXR0b25cIiApO1xuXHRcdH0sXG5cblx0XHR0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDEwIG9ubHlcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhclxuXHRcdFx0XHQvLyB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRmaXJzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0bGFzdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRlcTogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0ZXZlbjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdG9kZDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGx0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGk7XG5cblx0XHRcdGlmICggYXJndW1lbnQgPCAwICkge1xuXHRcdFx0XHRpID0gYXJndW1lbnQgKyBsZW5ndGg7XG5cdFx0XHR9IGVsc2UgaWYgKCBhcmd1bWVudCA+IGxlbmd0aCApIHtcblx0XHRcdFx0aSA9IGxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGkgPSBhcmd1bWVudDtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdGd0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zLm50aCA9IEV4cHIucHNldWRvcy5lcTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG5mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmxlYWRpbmdDb21iaW5hdG9yLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW1DU1MsIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0aWYgKCBwYXJzZU9ubHkgKSB7XG5cdFx0cmV0dXJuIHNvRmFyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiBzb0ZhciA/XG5cdFx0ZmluZC5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIG5vZGVOYW1lKCBlbGVtLCBza2lwICkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IG91dGVyQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0ZmluZCggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSwgbWF0Y2hlck91dCxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fFxuXHRcdFx0XHRtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zO1xuXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXG5cdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlclxuXHRcdFx0Ly8gb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdG1hdGNoZXJPdXQgPSBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFtdIDpcblxuXHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0cmVzdWx0cztcblxuXHRcdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVySW47XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudFxuXHRcdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZC5UQUcoIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDkgb25seVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nXG5cdFx0XHQvLyBlbGVtZW50cyBieSBpZC4gKHNlZSB0cmFjLTE0MTQyKVxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn1cblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIGpRdWVyeSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggalF1ZXJ5IHNlbGVjdG9yIGNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kLklEKFxuXHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0Y29udGV4dFxuXHRcdFx0KSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJlxuXHRcdFx0XHRcdFx0dGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMStcbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbmpRdWVyeS5maW5kID0gZmluZDtcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZSA9IGpRdWVyeS51bmlxdWVTb3J0O1xuXG4vLyBUaGVzZSBoYXZlIGFsd2F5cyBiZWVuIHByaXZhdGUsIGJ1dCB0aGV5IHVzZWQgdG8gYmUgZG9jdW1lbnRlZCBhcyBwYXJ0IG9mXG4vLyBTaXp6bGUgc28gbGV0J3MgbWFpbnRhaW4gdGhlbSBmb3Igbm93IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbmZpbmQuY29tcGlsZSA9IGNvbXBpbGU7XG5maW5kLnNlbGVjdCA9IHNlbGVjdDtcbmZpbmQuc2V0RG9jdW1lbnQgPSBzZXREb2N1bWVudDtcbmZpbmQudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZmluZC5lc2NhcGUgPSBqUXVlcnkuZXNjYXBlU2VsZWN0b3I7XG5maW5kLmdldFRleHQgPSBqUXVlcnkudGV4dDtcbmZpbmQuaXNYTUwgPSBqUXVlcnkuaXNYTUxEb2M7XG5maW5kLnNlbGVjdG9ycyA9IGpRdWVyeS5leHByO1xuZmluZC5zdXBwb3J0ID0galF1ZXJ5LnN1cHBvcnQ7XG5maW5kLnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cbn0gKSgpO1xuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICh0cmFjLTk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICh0cmFjLTExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBqUXVlcnkjZmluZFxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIGVycm9yLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rKCk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZGVwcmVjYXRlZCBhbGlhcyBvZiB0aGUgYWJvdmUuIFdoaWxlIHRoZSBuYW1lIHN1Z2dlc3RzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmV0dXJuaW5nIHRoZSBzdGFjaywgbm90IGFuIGVycm9yIGluc3RhbmNlLCBqUXVlcnkganVzdCBwYXNzZXNcblx0XHRcdFx0XHRcdFx0XHQvLyBpdCBkaXJlY3RseSB0byBgY29uc29sZS53YXJuYCBzbyBib3RoIHdpbGwgd29yazsgYW4gaW5zdGFuY2Vcblx0XHRcdFx0XHRcdFx0XHQvLyBqdXN0IGJldHRlciBjb29wZXJhdGVzIHdpdGggc291cmNlIG1hcHMuXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxuLy8gSWYgYGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2tgIGlzIGRlZmluZWQsIGBhc3luY0Vycm9yYCBpcyBhbiBlcnJvclxuLy8gY2FwdHVyZWQgYmVmb3JlIHRoZSBhc3luYyBiYXJyaWVyIHRvIGdldCB0aGUgb3JpZ2luYWwgZXJyb3IgY2F1c2Vcbi8vIHdoaWNoIG1heSBvdGhlcndpc2UgYmUgaGlkZGVuLlxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIGFzeW5jRXJyb3IgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLFxuXHRcdFx0ZXJyb3Iuc3RhY2ssIGFzeW5jRXJyb3IgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlIHRyYWMtNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICh0cmFjLTk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSB0cmFjLTgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICh0cmFjLTE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICh0cmFjLTExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAodHJhYy0xNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAodHJhYy0xMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKHRyYWMtMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICh0cmFjLTEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAodHJhYy0xMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKHRyYWMtNjkxMSwgdHJhYy04MTY1LCB0cmFjLTExMzgyLCB0cmFjLTExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHRyYWMtMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgaXNTZXR1cCApIHtcblxuXHQvLyBNaXNzaW5nIGBpc1NldHVwYCBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWlzU2V0dXAgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdGlmICggIXNhdmVkICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQgKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXHRcdFx0XHRcdHNhdmVkWyAwIF0sXG5cdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdCkgKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50IGJ5IGFsbCBqUXVlcnkgaGFuZGxlcnMgd2hpbGUgYWxsb3dpbmdcblx0XHRcdFx0Ly8gbmF0aXZlIGhhbmRsZXJzIG9uIHRoZSBzYW1lIGVsZW1lbnQgdG8gcnVuLiBPbiB0YXJnZXQsIHRoaXMgaXMgYWNoaWV2ZWRcblx0XHRcdFx0Ly8gYnkgc3RvcHBpbmcgaW1tZWRpYXRlIHByb3BhZ2F0aW9uIGp1c3Qgb24gdGhlIGpRdWVyeSBldmVudC4gSG93ZXZlcixcblx0XHRcdFx0Ly8gdGhlIG5hdGl2ZSBldmVudCBpcyByZS13cmFwcGVkIGJ5IGEgalF1ZXJ5IG9uZSBvbiBlYWNoIGxldmVsIG9mIHRoZVxuXHRcdFx0XHQvLyBwcm9wYWdhdGlvbiBzbyB0aGUgb25seSB3YXkgdG8gc3RvcCBpdCBmb3IgalF1ZXJ5IGlzIHRvIHN0b3AgaXQgZm9yXG5cdFx0XHRcdC8vIGV2ZXJ5b25lIHZpYSBuYXRpdmUgYHN0b3BQcm9wYWdhdGlvbigpYC4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvclxuXHRcdFx0XHQvLyBmb2N1cy9ibHVyIHdoaWNoIGRvbid0IGJ1YmJsZSwgYnV0IGl0IGRvZXMgYWxzbyBzdG9wIGNsaWNrIG9uIGNoZWNrYm94ZXNcblx0XHRcdFx0Ly8gYW5kIHJhZGlvcy4gV2UgYWNjZXB0IHRoaXMgbGltaXRhdGlvbi5cblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICh0cmFjLTUwNCwgdHJhYy0xMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblxuXHRmdW5jdGlvbiBmb2N1c01hcHBlZEhhbmRsZXIoIG5hdGl2ZUV2ZW50ICkge1xuXHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBmb2N1c2luL2ZvY3Vzb3V0IGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHNcblx0XHRcdC8vIGZvY3VzL2JsdXIuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGFyZSBzeW5jaHJvbm91cyBpbiBJRSB3aGlsZSB0aGUgbGF0dGVyXG5cdFx0XHQvLyBhcmUgYXN5bmMuIEluIG90aGVyIGJyb3dzZXJzLCBhbGwgdGhvc2UgaGFuZGxlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseS5cblxuXHRcdFx0Ly8gYGhhbmRsZWAgZnJvbSBwcml2YXRlIGRhdGEgd291bGQgYWxyZWFkeSB3cmFwIHRoZSBldmVudCwgYnV0IHdlIG5lZWRcblx0XHRcdC8vIHRvIGNoYW5nZSB0aGUgYHR5cGVgIGhlcmUuXG5cdFx0XHR2YXIgaGFuZGxlID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBcImhhbmRsZVwiICksXG5cdFx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKTtcblx0XHRcdGV2ZW50LnR5cGUgPSBuYXRpdmVFdmVudC50eXBlID09PSBcImZvY3VzaW5cIiA/IFwiZm9jdXNcIiA6IFwiYmx1clwiO1xuXHRcdFx0ZXZlbnQuaXNTaW11bGF0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBGaXJzdCwgaGFuZGxlIGZvY3VzaW4vZm9jdXNvdXRcblx0XHRcdGhhbmRsZSggbmF0aXZlRXZlbnQgKTtcblxuXHRcdFx0Ly8gLi4udGhlbiwgaGFuZGxlIGZvY3VzL2JsdXJcblx0XHRcdC8vXG5cdFx0XHQvLyBmb2N1cy9ibHVyIGRvbid0IGJ1YmJsZSB3aGlsZSBmb2N1c2luL2ZvY3Vzb3V0IGRvOyBzaW11bGF0ZSB0aGUgZm9ybWVyIGJ5IG9ubHlcblx0XHRcdC8vIGludm9raW5nIHRoZSBoYW5kbGVyIGF0IHRoZSBsb3dlciBsZXZlbC5cblx0XHRcdGlmICggZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICkge1xuXG5cdFx0XHRcdC8vIFRoZSBzZXR1cCBwYXJ0IGNhbGxzIGBsZXZlcmFnZU5hdGl2ZWAsIHdoaWNoLCBpbiB0dXJuLCBjYWxsc1xuXHRcdFx0XHQvLyBgalF1ZXJ5LmV2ZW50LmFkZGAsIHNvIGV2ZW50IGhhbmRsZSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldFxuXHRcdFx0XHQvLyBieSB0aGlzIHBvaW50LlxuXHRcdFx0XHRoYW5kbGUoIGV2ZW50ICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIG5vbi1JRSBicm93c2VycywgYXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudFxuXHRcdFx0Ly8gd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0LlxuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBkZWxlZ2F0ZVR5cGUsIG5hdGl2ZUV2ZW50LnRhcmdldCxcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSApO1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCB0cnVlICk7XG5cblx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0XHQvLyBVc2UgYGRlbGVnYXRlVHlwZWAgYXMgdGhlIGtleSBhcyBgdHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IGBsZXZlcmFnZU5hdGl2ZWAuXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGF0dGFjaGVzO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApIC0gMTtcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHN0YW5kYXJkIHRlYXJkb3duIHNob3VsZCBiZSBhcHBsaWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZVxuXHRcdC8vIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBldmVudC50YXJnZXQsIHR5cGUgKTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcblx0Ly8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcblx0Ly8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG5cdC8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuXHQvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuXHQvL1xuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdC8vIFRvIHByZXNlcnZlIHJlbGF0aXZlIGZvY3VzaW4vZm9jdXMgJiBmb2N1c291dC9ibHVyIGV2ZW50IG9yZGVyIGd1YXJhbnRlZWQgb24gdGhlIDMueCBicmFuY2gsXG5cdC8vIGF0dGFjaCBhIHNpbmdsZSBoYW5kbGVyIGZvciBib3RoIGV2ZW50cyBpbiBJRS5cblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGRlbGVnYXRlVHlwZSBdID0ge1xuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHQvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cilcblx0XHRcdC8vIHNvIHdlIG5lZWQgdG8gY29vcmRpbmF0ZSBzZXR1cCAmIHRlYXJkb3duIHBhcnRzIGJldHdlZW4gdGhvc2UgZXZlbnRzLlxuXHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHR9LFxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRkYXRhSG9sZGVyID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlID8gdGhpcyA6IGRvYyxcblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApIC0gMTtcblxuXHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFQcml2LnNldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCFcXFtDREFUQVxcW3xcXF1cXF0+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKHRyYWMtODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmUtZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVud3JhcCBhIENEQVRBIHNlY3Rpb24gY29udGFpbmluZyBzY3JpcHQgY29udGVudHMuIFRoaXMgc2hvdWxkbid0IGJlXG5cdFx0XHRcdFx0XHRcdC8vIG5lZWRlZCBhcyBpbiBYTUwgZG9jdW1lbnRzIHRoZXkncmUgYWxyZWFkeSBub3QgdmlzaWJsZSB3aGVuXG5cdFx0XHRcdFx0XHRcdC8vIGluc3BlY3RpbmcgZWxlbWVudCBjb250ZW50cyBhbmQgaW4gSFRNTCBkb2N1bWVudHMgdGhleSBoYXZlIG5vXG5cdFx0XHRcdFx0XHRcdC8vIG1lYW5pbmcgYnV0IHdlJ3JlIHByZXNlcnZpbmcgdGhhdCBsb2dpYyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gNC4wLiBTZWUgZ2gtNDkwNC5cblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBqUXVlcnkjZmluZCBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOlxuXHRcdFx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgcmN1c3RvbVByb3AgPSAvXi0tLztcblxuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAodHJhYy0xNTA5OCwgdHJhYy0xNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKHRyYWMtODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgYGRpc3BsYXk6IGJsb2NrYFxuXHRcdFx0XHQvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLlxuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksIHRyYWMtMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKGdoLTMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHQvLyBJRSBvbmx5IHN1cHBvcnRzIGBcImZsb2F0XCJgIGluIGBnZXRQcm9wZXJ0eVZhbHVlYDsgaW4gY29tcHV0ZWQgc3R5bGVzXG5cdFx0Ly8gaXQncyBvbmx5IGF2YWlsYWJsZSBhcyBgXCJjc3NGbG9hdFwiYC4gV2Ugbm8gbG9uZ2VyIG1vZGlmeSBwcm9wZXJ0aWVzXG5cdFx0Ly8gc2VudCB0byBgLmNzcygpYCBhcGFydCBmcm9tIGNhbWVsQ2FzaW5nLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGJvdGguXG5cdFx0Ly8gTm9ybWFsbHksIHRoaXMgd291bGQgY3JlYXRlIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3I6IGlmXG5cdFx0Ly8gYGdldFByb3BlcnR5VmFsdWVgIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLCB0aGUgdmFsdWUgcmV0dXJuZWRcblx0XHQvLyBieSBgLmNzcygpYCB3b3VsZCBiZSBgdW5kZWZpbmVkYC4gVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvclxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBlbGVtZW50cy4gSG93ZXZlciwgaW4gSUUgZXZlbiBkaXNjb25uZWN0ZWQgZWxlbWVudHNcblx0XHQvLyB3aXRoIG5vIHN0eWxlcyByZXR1cm4gYFwibm9uZVwiYCBmb3IgYGdldFByb3BlcnR5VmFsdWUoIFwiZmxvYXRcIiApYFxuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCBpc0N1c3RvbVByb3AgJiYgcmV0ICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDEwNSssIENocm9tZSA8PTEwNStcblx0XHRcdC8vIFNwZWMgcmVxdWlyZXMgdHJpbW1pbmcgd2hpdGVzcGFjZSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGdoLTQ5MjYpLlxuXHRcdFx0Ly8gRmlyZWZveCBvbmx5IHRyaW1zIGxlYWRpbmcgd2hpdGVzcGFjZS4gQ2hyb21lIGp1c3QgY29sbGFwc2VzXG5cdFx0XHQvLyBib3RoIGxlYWRpbmcgJiB0cmFpbGluZyB3aGl0ZXNwYWNlIHRvIGEgc2luZ2xlIHNwYWNlLlxuXHRcdFx0Ly9cblx0XHRcdC8vIEZhbGwgYmFjayB0byBgdW5kZWZpbmVkYCBpZiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQuXG5cdFx0XHQvLyBUaGlzIGNvbGxhcHNlcyBhIG1pc3NpbmcgZGVmaW5pdGlvbiB3aXRoIHByb3BlcnR5IGRlZmluZWRcblx0XHRcdC8vIGFuZCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGJ1dCB0aGVyZSdzIG5vIHN0YW5kYXJkIEFQSVxuXHRcdFx0Ly8gYWxsb3dpbmcgdXMgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIHdpdGhvdXQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5XG5cdFx0XHQvLyBhbmQgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGFsaWducyB3aXRoIG9sZGVyIGpRdWVyeS5cblx0XHRcdC8vXG5cdFx0XHQvLyBydHJpbUNTUyB0cmVhdHMgVSswMDBEIENBUlJJQUdFIFJFVFVSTiBhbmQgVSswMDBDIEZPUk0gRkVFRFxuXHRcdFx0Ly8gYXMgd2hpdGVzcGFjZSB3aGlsZSBDU1MgZG9lcyBub3QsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW1cblx0XHRcdC8vIGJlY2F1c2UgQ1NTIHByZXByb2Nlc3NpbmcgcmVwbGFjZXMgdGhlbSB3aXRoIFUrMDAwQSBMSU5FIEZFRURcblx0XHRcdC8vICh3aGljaCAqaXMqIENTUyB3aGl0ZXNwYWNlKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaW5wdXQtcHJlcHJvY2Vzc2luZ1xuXHRcdFx0cmV0ID0gcmV0LnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSB8fCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwLFxuXHRcdG1hcmdpbkRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHQvLyBDb3VudCBtYXJnaW4gZGVsdGEgc2VwYXJhdGVseSB0byBvbmx5IGFkZCBpdCBhZnRlciBzY3JvbGwgZ3V0dGVyIGFkanVzdG1lbnQuXG5cdFx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBuZWdhdGl2ZSBtYXJnaW5zIHdvcmsgd2l0aCBgb3V0ZXJIZWlnaHQoIHRydWUgKWAgKGdoLTM5ODIpLlxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0bWFyZ2luRGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhICsgbWFyZ2luRGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuXHRcdGFzcGVjdFJhdGlvOiB0cnVlLFxuXHRcdGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG5cdFx0Y29sdW1uQ291bnQ6IHRydWUsXG5cdFx0ZmxleEdyb3c6IHRydWUsXG5cdFx0ZmxleFNocmluazogdHJ1ZSxcblx0XHRmb250V2VpZ2h0OiB0cnVlLFxuXHRcdGdyaWRBcmVhOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW46IHRydWUsXG5cdFx0Z3JpZENvbHVtbkVuZDogdHJ1ZSxcblx0XHRncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG5cdFx0Z3JpZFJvdzogdHJ1ZSxcblx0XHRncmlkUm93RW5kOiB0cnVlLFxuXHRcdGdyaWRSb3dTdGFydDogdHJ1ZSxcblx0XHRsaW5lSGVpZ2h0OiB0cnVlLFxuXHRcdG9wYWNpdHk6IHRydWUsXG5cdFx0b3JkZXI6IHRydWUsXG5cdFx0b3JwaGFuczogdHJ1ZSxcblx0XHRzY2FsZTogdHJ1ZSxcblx0XHR3aWRvd3M6IHRydWUsXG5cdFx0ekluZGV4OiB0cnVlLFxuXHRcdHpvb206IHRydWUsXG5cblx0XHQvLyBTVkctcmVsYXRlZFxuXHRcdGZpbGxPcGFjaXR5OiB0cnVlLFxuXHRcdGZsb29kT3BhY2l0eTogdHJ1ZSxcblx0XHRzdG9wT3BhY2l0eTogdHJ1ZSxcblx0XHRzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuXHRcdHN0cm9rZU9wYWNpdHk6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKHRyYWMtNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnIHRyYWMtOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICh0cmFjLTcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAodHJhYy0xMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCAodHJhYy0xMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGFzc05hbWUgKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGN1ciwgY3VyVmFsdWUsIGNsYXNzTmFtZSwgaSwgZmluYWxWYWx1ZTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IHRoaXMubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXMsIGNsYXNzTmFtZSwgaSwgc2VsZixcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKHRyYWMtMTQ2ODYsIHRyYWMtMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICh0cmFjLTI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAodHJhYy05OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAodHJhYy05NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICh0cmFjLTYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9ICkubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vIHRyYWMtNzY1MywgdHJhYy04MTI1LCB0cmFjLTgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKHRyYWMtMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgdHJhYy05ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAodHJhYy0xMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCB0cmFjLTEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAodHJhYy0xNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vIHRyYWMtOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucFxuXHRcdFx0aWYgKCAhaXNTdWNjZXNzICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcInNjcmlwdFwiLCBzLmRhdGFUeXBlcyApID4gLTEgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwianNvblwiLCBzLmRhdGFUeXBlcyApIDwgMCApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAodHJhYy0xMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gdHJhYy0xNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgdHJhYy04NjA1LCB0cmFjLTE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyB0cmFjLTE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQub24oIFwibW91c2VlbnRlclwiLCBmbk92ZXIgKVxuXHRcdFx0Lm9uKCBcIm1vdXNlbGVhdmVcIiwgZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG4vLyBSZXF1aXJlIHRoYXQgdGhlIFwid2hpdGVzcGFjZSBydW5cIiBzdGFydHMgZnJvbSBhIG5vbi13aGl0ZXNwYWNlXG4vLyB0byBhdm9pZCBPKE5eMikgYmVoYXZpb3Igd2hlbiB0aGUgZW5naW5lIHdvdWxkIHRyeSBtYXRjaGluZyBcIlxccyskXCIgYXQgZWFjaCBzcGFjZSBwb3NpdGlvbi5cbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfChbXlxcc1xcdUZFRkZcXHhBMF0pW1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAodHJhYy03MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAodHJhYy0xMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///692\n')},464:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(93)) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = {\n standalone:\n 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n '_'\n ),\n format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n '_'\n ),\n isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n },\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n monthsParse = [\n /^led/i,\n /^úno/i,\n /^bře/i,\n /^dub/i,\n /^kvě/i,\n /^(čvn|červen$|června)/i,\n /^(čvc|červenec|července)/i,\n /^srp/i,\n /^zář/i,\n /^říj/i,\n /^lis/i,\n /^pro/i,\n ],\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsRegex =\n /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return n > 1 && n < 5 && ~~(n / 10) !== 1;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months: months,\n monthsShort: monthsShort,\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex:\n /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex:\n /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n l: 'D. M. YYYY',\n },\n calendar: {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'před %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cs;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3MuanM/M2MwZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ3plY2ggW2NzXVxuLy8hIGF1dGhvciA6IHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0ge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnbGVkZW5fw7pub3JfYsWZZXplbl9kdWJlbl9rdsSbdGVuX8SNZXJ2ZW5fxI1lcnZlbmVjX3NycGVuX3rDocWZw61fxZnDrWplbl9saXN0b3BhZF9wcm9zaW5lYycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICdsZWRuYV/Dum5vcmFfYsWZZXpuYV9kdWJuYV9rdsSbdG5hX8SNZXJ2bmFfxI1lcnZlbmNlX3NycG5hX3rDocWZw61fxZnDrWpuYV9saXN0b3BhZHVfcHJvc2luY2UnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvREQ/W28uXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydCA9ICdsZWRfw7pub19ixZllX2R1Yl9rdsSbX8SNdm5fxI12Y19zcnBfesOhxZlfxZnDrWpfbGlzX3Bybycuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmxlZC9pLFxuICAgICAgICAgICAgL17Dum5vL2ksXG4gICAgICAgICAgICAvXmLFmWUvaSxcbiAgICAgICAgICAgIC9eZHViL2ksXG4gICAgICAgICAgICAvXmt2xJsvaSxcbiAgICAgICAgICAgIC9eKMSNdm58xI1lcnZlbiR8xI1lcnZuYSkvaSxcbiAgICAgICAgICAgIC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSxcbiAgICAgICAgICAgIC9ec3JwL2ksXG4gICAgICAgICAgICAvXnrDocWZL2ksXG4gICAgICAgICAgICAvXsWZw61qL2ksXG4gICAgICAgICAgICAvXmxpcy9pLFxuICAgICAgICAgICAgL15wcm8vaSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihsZWRlbnzDum5vcnxixZllemVufGR1YmVufGt2xJt0ZW58xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58esOhxZnDrXzFmcOtamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pO1xuXG4gICAgZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICAgICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1ICYmIH5+KG4gLyAxMCkgIT09IDE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOiAvLyBhIGZldyBzZWNvbmRzIC8gaW4gYSBmZXcgc2Vjb25kcyAvIGEgZmV3IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncMOhciBzZWt1bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzogLy8gOSBzZWNvbmRzIC8gaW4gOSBzZWNvbmRzIC8gOSBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWt1bmRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ20nOiAvLyBhIG1pbnV0ZSAvIGluIGEgbWludXRlIC8gYSBtaW51dGUgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6IGlzRnV0dXJlID8gJ21pbnV0dScgOiAnbWludXRvdSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbnV0eScgOiAnbWludXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21pbnV0YW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2hvZGluYScgOiBpc0Z1dHVyZSA/ICdob2RpbnUnIDogJ2hvZGlub3UnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOiAvLyA5IGhvdXJzIC8gaW4gOSBob3VycyAvIDkgaG91cnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdob2RpbnknIDogJ2hvZGluJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZCc6IC8vIGEgZGF5IC8gaW4gYSBkYXkgLyBhIGRheSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkZW4nIDogJ2RuZW0nO1xuICAgICAgICAgICAgY2FzZSAnZGQnOiAvLyA5IGRheXMgLyBpbiA5IGRheXMgLyA5IGRheXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbnknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2RueSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTSc6IC8vIGEgbW9udGggLyBpbiBhIG1vbnRoIC8gYSBtb250aCBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtxJtzw61jJyA6ICdtxJtzw61jZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtxJtzw61jZScgOiAnbcSbc8OtY8WvJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtxJtzw61jaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdyb2snIDogJ3Jva2VtJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAncm9reScgOiAnbGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdsZXR5JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY3MgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjcycsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSBwYXJzZXIgbWF0Y2hlcyAnMS4gxI1lcnZlbmVjJyBhcyAnMS4gxI1lcnZlbicgKyAnZWMnLlxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGxlZGVufGxlZG5hfMO6bm9yYXzDum5vcnxixZllemVufGLFmWV6bmF8ZHViZW58ZHVibmF8a3bEm3RlbnxrdsSbdG5hfMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHNycG5hfHrDocWZw618xZnDrWplbnzFmcOtam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGxlZHzDum5vfGLFmWV8ZHVifGt2xJt8xI12bnzEjXZjfHNycHx6w6HFmXzFmcOtanxsaXN8cHJvKS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fw7p0X3N0X8SNdF9ww6Ffc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBsOiAnRC4gTS4gWVlZWScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6w610cmEgdl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIHN0xZllZHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSDEjXR2cnRlayB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcMOhdGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYSB2XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw6ldIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncMWZZWQgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuXG59KSkpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///464\n")},435:(t,n,g)=>{var c={"./cs":464,"./cs.js":464};function I(t){var n=e(t);return g(n)}function e(t){if(!g.o(c,t)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return c[t]}I.keys=function(){return Object.keys(c)},I.resolve=e,t.exports=I,I.id=435},93:function(module,__unused_webpack_exports,__webpack_require__){eval("/* module decorator */ module = __webpack_require__.nmd(module);\n//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n true ? module.exports = factory() :\n 0\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n \"object\" !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = undefined;\n __webpack_require__(435)(\"./\" + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--\x3e\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTMuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcz9jMWRmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n")},53:function(module){eval("/*!\n * NetteForms - simple form validation.\n *\n * This file is part of the Nette Framework (https://nette.org)\n * Copyright (c) 2004 David Grudl (https://davidgrudl.com)\n */\n(function (global, factory) {\n\t true ? module.exports = factory() :\n\t0;\n})(this, (function () { 'use strict';\n\n\tclass Validators {\n\t\tfilled(elem, arg, val) {\n\t\t\treturn val !== '' && val !== false && val !== null\n\t\t\t\t&& (!Array.isArray(val) || val.length > 0)\n\t\t\t\t&& (!(val instanceof FileList) || val.length > 0);\n\t\t}\n\t\tblank(elem, arg, val) {\n\t\t\treturn !this.filled(elem, arg, val);\n\t\t}\n\t\tvalid(elem, arg) {\n\t\t\treturn arg.validateControl(elem, undefined, true);\n\t\t}\n\t\tequal(elem, arg, val) {\n\t\t\tif (arg === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet toString = (val) => {\n\t\t\t\tif (typeof val === 'number' || typeof val === 'string') {\n\t\t\t\t\treturn '' + val;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn val === true ? '1' : '';\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet vals = Array.isArray(val) ? val : [val];\n\t\t\tlet args = Array.isArray(arg) ? arg : [arg];\n\t\t\tloop: for (let a of vals) {\n\t\t\t\tfor (let b of args) {\n\t\t\t\t\tif (toString(a) === toString(b)) {\n\t\t\t\t\t\tcontinue loop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn vals.length > 0;\n\t\t}\n\t\tnotEqual(elem, arg, val) {\n\t\t\treturn arg === undefined ? null : !this.equal(elem, arg, val);\n\t\t}\n\t\tminLength(elem, arg, val) {\n\t\t\tval = typeof val === 'number' ? val.toString() : val;\n\t\t\treturn val.length >= arg;\n\t\t}\n\t\tmaxLength(elem, arg, val) {\n\t\t\tval = typeof val === 'number' ? val.toString() : val;\n\t\t\treturn val.length <= arg;\n\t\t}\n\t\tlength(elem, arg, val) {\n\t\t\tval = typeof val === 'number' ? val.toString() : val;\n\t\t\targ = Array.isArray(arg) ? arg : [arg, arg];\n\t\t\treturn ((arg[0] === null || val.length >= arg[0])\n\t\t\t\t&& (arg[1] === null || val.length <= arg[1]));\n\t\t}\n\t\temail(elem, arg, val) {\n\t\t\treturn (/^(\"([ !#-[\\]-~]|\\\\[ -~])+\"|[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*)@([0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)+[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?$/i).test(val);\n\t\t}\n\t\turl(elem, arg, val, newValue) {\n\t\t\tif (!(/^[a-z\\d+.-]+:/).test(val)) {\n\t\t\t\tval = 'https://' + val;\n\t\t\t}\n\t\t\tif ((/^https?:\\/\\/((([-_0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]+\\.)*[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)?[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[[0-9a-f:]{3,39}\\])(:\\d{1,5})?(\\/\\S*)?$/i).test(val)) {\n\t\t\t\tnewValue.value = val;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tregexp(elem, arg, val) {\n\t\t\tlet parts = typeof arg === 'string' ? arg.match(/^\\/(.*)\\/([imu]*)$/) : false;\n\t\t\ttry {\n\t\t\t\treturn parts && (new RegExp(parts[1], parts[2].replace('u', ''))).test(val);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tpattern(elem, arg, val, newValue, caseInsensitive) {\n\t\t\tif (typeof arg !== 'string') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tlet regExp;\n\t\t\t\ttry {\n\t\t\t\t\tregExp = new RegExp('^(?:' + arg + ')$', caseInsensitive ? 'ui' : 'u');\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tregExp = new RegExp('^(?:' + arg + ')$', caseInsensitive ? 'i' : '');\n\t\t\t\t}\n\t\t\t\treturn val instanceof FileList\n\t\t\t\t\t? Array.from(val).every((file) => regExp.test(file.name))\n\t\t\t\t\t: regExp.test(val);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tpatternCaseInsensitive(elem, arg, val) {\n\t\t\treturn this.pattern(elem, arg, val, null, true);\n\t\t}\n\t\tnumeric(elem, arg, val) {\n\t\t\treturn (/^[0-9]+$/).test(val);\n\t\t}\n\t\tinteger(elem, arg, val, newValue) {\n\t\t\tif ((/^-?[0-9]+$/).test(val)) {\n\t\t\t\tnewValue.value = parseFloat(val);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tfloat(elem, arg, val, newValue) {\n\t\t\tval = val.replace(/ +/g, '').replace(/,/g, '.');\n\t\t\tif ((/^-?[0-9]*\\.?[0-9]+$/).test(val)) {\n\t\t\t\tnewValue.value = parseFloat(val);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tmin(elem, arg, val) {\n\t\t\tif (Number.isFinite(arg)) {\n\t\t\t\tval = parseFloat(val);\n\t\t\t}\n\t\t\treturn val >= arg;\n\t\t}\n\t\tmax(elem, arg, val) {\n\t\t\tif (Number.isFinite(arg)) {\n\t\t\t\tval = parseFloat(val);\n\t\t\t}\n\t\t\treturn val <= arg;\n\t\t}\n\t\trange(elem, arg, val) {\n\t\t\tif (!Array.isArray(arg)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telse if (elem.type === 'time' && arg[0] > arg[1]) {\n\t\t\t\treturn val >= arg[0] || val <= arg[1];\n\t\t\t}\n\t\t\treturn (arg[0] === null || this.min(elem, arg[0], val))\n\t\t\t\t&& (arg[1] === null || this.max(elem, arg[1], val));\n\t\t}\n\t\tsubmitted(elem) {\n\t\t\treturn elem.form['nette-submittedBy'] === elem;\n\t\t}\n\t\tfileSize(elem, arg, val) {\n\t\t\treturn Array.from(val).every((file) => file.size <= arg);\n\t\t}\n\t\tmimeType(elem, args, val) {\n\t\t\tlet parts = [];\n\t\t\targs = Array.isArray(args) ? args : [args];\n\t\t\targs.forEach((arg) => parts.push('^' + arg.replace(/([^\\w])/g, '\\\\$1').replace('\\\\*', '.*') + '$'));\n\t\t\tlet re = new RegExp(parts.join('|'));\n\t\t\treturn Array.from(val).every((file) => !file.type || re.test(file.type));\n\t\t}\n\t\timage(elem, arg, val) {\n\t\t\treturn this.mimeType(elem, arg ?? ['image/gif', 'image/png', 'image/jpeg', 'image/webp'], val);\n\t\t}\n\t\tstatic(elem, arg) {\n\t\t\treturn arg;\n\t\t}\n\t}\n\n\tclass FormValidator {\n\t\tformErrors = [];\n\t\tvalidators = new Validators;\n\t\t#preventFiltering = {};\n\t\t#formToggles = {};\n\t\t#toggleListeners = new WeakMap;\n\t\t#getFormElement(form, name) {\n\t\t\tlet res = form.elements.namedItem(name);\n\t\t\treturn (res instanceof RadioNodeList ? res[0] : res);\n\t\t}\n\t\t#expandRadioElement(elem) {\n\t\t\tlet res = elem.form.elements.namedItem(elem.name);\n\t\t\treturn (res instanceof RadioNodeList ? Array.from(res) : [res]);\n\t\t}\n\t\t/**\n\t\t * Function to execute when the DOM is fully loaded.\n\t\t */\n\t\t#onDocumentReady(callback) {\n\t\t\tif (document.readyState !== 'loading') {\n\t\t\t\tcallback.call(this);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.addEventListener('DOMContentLoaded', callback);\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Returns the value of form element.\n\t\t */\n\t\tgetValue(elem) {\n\t\t\tif (elem instanceof HTMLInputElement) {\n\t\t\t\tif (elem.type === 'radio') {\n\t\t\t\t\treturn this.#expandRadioElement(elem)\n\t\t\t\t\t\t.find((input) => input.checked)\n\t\t\t\t\t\t?.value ?? null;\n\t\t\t\t}\n\t\t\t\telse if (elem.type === 'file') {\n\t\t\t\t\treturn elem.files;\n\t\t\t\t}\n\t\t\t\telse if (elem.type === 'checkbox') {\n\t\t\t\t\treturn elem.name.endsWith('[]') // checkbox list\n\t\t\t\t\t\t? this.#expandRadioElement(elem)\n\t\t\t\t\t\t\t.filter((input) => input.checked)\n\t\t\t\t\t\t\t.map((input) => input.value)\n\t\t\t\t\t\t: elem.checked;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn elem.value.trim();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (elem instanceof HTMLSelectElement) {\n\t\t\t\treturn elem.multiple\n\t\t\t\t\t? Array.from(elem.selectedOptions, (option) => option.value)\n\t\t\t\t\t: elem.selectedOptions[0]?.value ?? null;\n\t\t\t}\n\t\t\telse if (elem instanceof HTMLTextAreaElement) {\n\t\t\t\treturn elem.value;\n\t\t\t}\n\t\t\telse if (elem instanceof RadioNodeList) {\n\t\t\t\treturn this.getValue(elem[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Returns the effective value of form element.\n\t\t */\n\t\tgetEffectiveValue(elem, filter = false) {\n\t\t\tlet val = this.getValue(elem);\n\t\t\tif (val === elem.getAttribute('data-nette-empty-value')) {\n\t\t\t\tval = '';\n\t\t\t}\n\t\t\tif (filter && this.#preventFiltering[elem.name] === undefined) {\n\t\t\t\tthis.#preventFiltering[elem.name] = true;\n\t\t\t\tlet ref = { value: val };\n\t\t\t\tthis.validateControl(elem, undefined, true, ref);\n\t\t\t\tval = ref.value;\n\t\t\t\tdelete this.#preventFiltering[elem.name];\n\t\t\t}\n\t\t\treturn val;\n\t\t}\n\t\t/**\n\t\t * Validates form element against given rules.\n\t\t */\n\t\tvalidateControl(elem, rules, onlyCheck = false, value, emptyOptional) {\n\t\t\trules ??= JSON.parse(elem.getAttribute('data-nette-rules') ?? '[]');\n\t\t\tvalue ??= { value: this.getEffectiveValue(elem) };\n\t\t\temptyOptional ??= !this.validateRule(elem, ':filled', null, value);\n\t\t\tfor (let rule of rules) {\n\t\t\t\tlet op = rule.op.match(/(~)?([^?]+)/), curElem = rule.control ? this.#getFormElement(elem.form, rule.control) : elem;\n\t\t\t\trule.neg = !!op[1];\n\t\t\t\trule.op = op[2];\n\t\t\t\trule.condition = !!rule.rules;\n\t\t\t\tif (!curElem) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (emptyOptional && !rule.condition && rule.op !== ':filled') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet success = this.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined);\n\t\t\t\tif (success === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (rule.neg) {\n\t\t\t\t\tsuccess = !success;\n\t\t\t\t}\n\t\t\t\tif (rule.condition && success) {\n\t\t\t\t\tif (!this.validateControl(elem, rule.rules, onlyCheck, value, rule.op === ':blank' ? false : emptyOptional)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!rule.condition && !success) {\n\t\t\t\t\tif (this.isDisabled(curElem)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!onlyCheck) {\n\t\t\t\t\t\tlet arr = Array.isArray(rule.arg) ? rule.arg : [rule.arg], message = rule.msg.replace(/%(value|\\d+)/g, (foo, m) => this.getValue(m === 'value' ? curElem : elem.form.elements.namedItem(arr[m].control)));\n\t\t\t\t\t\tthis.addError(curElem, message);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\t/**\n\t\t * Validates whole form.\n\t\t */\n\t\tvalidateForm(sender, onlyCheck = false) {\n\t\t\tlet form = sender.form ?? sender, scope;\n\t\t\tthis.formErrors = [];\n\t\t\tif (form['nette-submittedBy'] && form['nette-submittedBy'].getAttribute('formnovalidate') !== null) {\n\t\t\t\tlet scopeArr = JSON.parse(form['nette-submittedBy'].getAttribute('data-nette-validation-scope') ?? '[]');\n\t\t\t\tif (scopeArr.length) {\n\t\t\t\t\tscope = new RegExp('^(' + scopeArr.join('-|') + '-)');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.showFormErrors(form, []);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let elem of form.elements) {\n\t\t\t\tif (elem.willValidate && elem.validity.badInput) {\n\t\t\t\t\telem.reportValidity();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let elem of form.elements) {\n\t\t\t\tif (elem.getAttribute('data-nette-rules')\n\t\t\t\t\t&& (!scope || elem.name.replace(/]\\[|\\[|]|$/g, '-').match(scope))\n\t\t\t\t\t&& !this.isDisabled(elem)\n\t\t\t\t\t&& !this.validateControl(elem, undefined, onlyCheck)\n\t\t\t\t\t&& !this.formErrors.length) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet success = !this.formErrors.length;\n\t\t\tthis.showFormErrors(form, this.formErrors);\n\t\t\treturn success;\n\t\t}\n\t\t/**\n\t\t * Check if input is disabled.\n\t\t */\n\t\tisDisabled(elem) {\n\t\t\tif (elem.type === 'radio') {\n\t\t\t\treturn this.#expandRadioElement(elem)\n\t\t\t\t\t.every((input) => input.disabled);\n\t\t\t}\n\t\t\treturn elem.disabled;\n\t\t}\n\t\t/**\n\t\t * Adds error message to the queue.\n\t\t */\n\t\taddError(elem, message) {\n\t\t\tthis.formErrors.push({\n\t\t\t\telement: elem,\n\t\t\t\tmessage: message,\n\t\t\t});\n\t\t}\n\t\t/**\n\t\t * Display error messages.\n\t\t */\n\t\tshowFormErrors(form, errors) {\n\t\t\tlet messages = [], focusElem;\n\t\t\tfor (let error of errors) {\n\t\t\t\tif (messages.indexOf(error.message) < 0) {\n\t\t\t\t\tmessages.push(error.message);\n\t\t\t\t\tfocusElem ??= error.element;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (messages.length) {\n\t\t\t\tthis.showModal(messages.join('\\n'), () => {\n\t\t\t\t\tfocusElem?.focus();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Display modal window.\n\t\t */\n\t\tshowModal(message, onclose) {\n\t\t\tlet dialog = document.createElement('dialog');\n\t\t\tif (!dialog.showModal) {\n\t\t\t\talert(message);\n\t\t\t\tonclose();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet style = document.createElement('style');\n\t\t\tstyle.innerText = '.netteFormsModal { text-align: center; margin: auto; border: 2px solid black; padding: 1rem } .netteFormsModal button { padding: .1em 2em }';\n\t\t\tlet button = document.createElement('button');\n\t\t\tbutton.innerText = 'OK';\n\t\t\tbutton.onclick = () => {\n\t\t\t\tdialog.remove();\n\t\t\t\tonclose();\n\t\t\t};\n\t\t\tdialog.setAttribute('class', 'netteFormsModal');\n\t\t\tdialog.innerText = message + '\\n\\n';\n\t\t\tdialog.append(style, button);\n\t\t\tdocument.body.append(dialog);\n\t\t\tdialog.showModal();\n\t\t}\n\t\t/**\n\t\t * Validates single rule.\n\t\t */\n\t\tvalidateRule(elem, op, arg, value) {\n\t\t\tif (elem.validity.badInput) {\n\t\t\t\treturn op === ':filled';\n\t\t\t}\n\t\t\tvalue ??= { value: this.getEffectiveValue(elem, true) };\n\t\t\tlet method = op.charAt(0) === ':' ? op.substring(1) : op;\n\t\t\tmethod = method.replace('::', '_').replaceAll('\\\\', '');\n\t\t\tlet args = Array.isArray(arg) ? arg : [arg];\n\t\t\targs = args.map((arg) => {\n\t\t\t\tif (arg?.control) {\n\t\t\t\t\tlet control = this.#getFormElement(elem.form, arg.control);\n\t\t\t\t\treturn control === elem ? value.value : this.getEffectiveValue(control, true);\n\t\t\t\t}\n\t\t\t\treturn arg;\n\t\t\t});\n\t\t\tif (method === 'valid') {\n\t\t\t\targs[0] = this; // todo\n\t\t\t}\n\t\t\treturn this.validators[method]\n\t\t\t\t? this.validators[method](elem, Array.isArray(arg) ? args : args[0], value.value, value)\n\t\t\t\t: null;\n\t\t}\n\t\t/**\n\t\t * Process all toggles in form.\n\t\t */\n\t\ttoggleForm(form, event) {\n\t\t\tthis.#formToggles = {};\n\t\t\tfor (let elem of Array.from(form.elements)) {\n\t\t\t\tif (elem.getAttribute('data-nette-rules')) {\n\t\t\t\t\tthis.toggleControl(elem, undefined, null, !event);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i in this.#formToggles) {\n\t\t\t\tthis.toggle(i, this.#formToggles[i].state, this.#formToggles[i].elem, event);\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Process toggles on form element.\n\t\t */\n\t\ttoggleControl(elem, rules, success = null, firsttime = false, value, emptyOptional) {\n\t\t\trules ??= JSON.parse(elem.getAttribute('data-nette-rules') ?? '[]');\n\t\t\tvalue ??= { value: this.getEffectiveValue(elem) };\n\t\t\temptyOptional ??= !this.validateRule(elem, ':filled', null, value);\n\t\t\tlet has = false, curSuccess;\n\t\t\tfor (let rule of rules) {\n\t\t\t\tlet op = rule.op.match(/(~)?([^?]+)/), curElem = rule.control ? this.#getFormElement(elem.form, rule.control) : elem;\n\t\t\t\trule.neg = !!op[1];\n\t\t\t\trule.op = op[2];\n\t\t\t\trule.condition = !!rule.rules;\n\t\t\t\tif (!curElem) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (emptyOptional && !rule.condition && rule.op !== ':filled') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcurSuccess = success;\n\t\t\t\tif (success !== false) {\n\t\t\t\t\tcurSuccess = this.validateRule(curElem, rule.op, rule.arg, elem === curElem ? value : undefined);\n\t\t\t\t\tif (curSuccess === null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (rule.neg) {\n\t\t\t\t\t\tcurSuccess = !curSuccess;\n\t\t\t\t\t}\n\t\t\t\t\tif (!rule.condition) {\n\t\t\t\t\t\tsuccess = curSuccess;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((rule.condition && this.toggleControl(elem, rule.rules, curSuccess, firsttime, value, rule.op === ':blank' ? false : emptyOptional)) || rule.toggle) {\n\t\t\t\t\thas = true;\n\t\t\t\t\tif (firsttime) {\n\t\t\t\t\t\tthis.#expandRadioElement(curElem)\n\t\t\t\t\t\t\t.filter((el) => !this.#toggleListeners.has(el))\n\t\t\t\t\t\t\t.forEach((el) => {\n\t\t\t\t\t\t\tel.addEventListener('change', (e) => this.toggleForm(elem.form, e));\n\t\t\t\t\t\t\tthis.#toggleListeners.set(el, null);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tfor (let id in rule.toggle ?? {}) {\n\t\t\t\t\t\tthis.#formToggles[id] ??= { elem: elem, state: false };\n\t\t\t\t\t\tthis.#formToggles[id].state ||= rule.toggle[id] ? !!curSuccess : !curSuccess;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn has;\n\t\t}\n\t\t/**\n\t\t * Displays or hides HTML element.\n\t\t */\n\t\ttoggle(selector, visible, srcElement, event) {\n\t\t\tif (/^\\w[\\w.:-]*$/.test(selector)) { // id\n\t\t\t\tselector = '#' + selector;\n\t\t\t}\n\t\t\tArray.from(document.querySelectorAll(selector))\n\t\t\t\t.forEach((elem) => elem.hidden = !visible);\n\t\t}\n\t\t/**\n\t\t * Compact checkboxes\n\t\t */\n\t\tcompactCheckboxes(form, formData) {\n\t\t\tlet values = {};\n\t\t\tfor (let elem of form.elements) {\n\t\t\t\tif (elem instanceof HTMLInputElement && elem.type === 'checkbox' && elem.name.endsWith('[]') && elem.checked && !elem.disabled) {\n\t\t\t\t\tformData.delete(elem.name);\n\t\t\t\t\tvalues[elem.name] ??= [];\n\t\t\t\t\tvalues[elem.name].push(elem.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let name in values) {\n\t\t\t\tformData.set(name.substring(0, name.length - 2), values[name].join(','));\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Setup handlers.\n\t\t */\n\t\tinitForm(form) {\n\t\t\tif (form.method === 'get' && form.hasAttribute('data-nette-compact')) {\n\t\t\t\tform.addEventListener('formdata', (e) => this.compactCheckboxes(form, e.formData));\n\t\t\t}\n\t\t\tif (!Array.from(form.elements).some((elem) => elem.getAttribute('data-nette-rules'))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.toggleForm(form);\n\t\t\tif (form.noValidate) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tform.noValidate = true;\n\t\t\tform.addEventListener('submit', (e) => {\n\t\t\t\tif (!this.validateForm(form)) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\t\t\tform.addEventListener('reset', () => {\n\t\t\t\tsetTimeout(() => this.toggleForm(form));\n\t\t\t});\n\t\t}\n\t\tinitOnLoad() {\n\t\t\tthis.#onDocumentReady(() => {\n\t\t\t\tArray.from(document.forms)\n\t\t\t\t\t.forEach((form) => this.initForm(form));\n\t\t\t\tdocument.body.addEventListener('click', (e) => {\n\t\t\t\t\tlet target = e.target;\n\t\t\t\t\twhile (target) {\n\t\t\t\t\t\tif (target.form && target.type in { submit: 1, image: 1 }) {\n\t\t\t\t\t\t\ttarget.form['nette-submittedBy'] = target;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tlet webalizeTable = { \\u00e1: 'a', \\u00e4: 'a', \\u010d: 'c', \\u010f: 'd', \\u00e9: 'e', \\u011b: 'e', \\u00ed: 'i', \\u013e: 'l', \\u0148: 'n', \\u00f3: 'o', \\u00f4: 'o', \\u0159: 'r', \\u0161: 's', \\u0165: 't', \\u00fa: 'u', \\u016f: 'u', \\u00fd: 'y', \\u017e: 'z' };\n\t/**\n\t * Converts string to web safe characters [a-z0-9-] text.\n\t * @param {string} s\n\t * @return {string}\n\t */\n\tfunction webalize(s) {\n\t\ts = s.toLowerCase();\n\t\tlet res = '';\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tlet ch = webalizeTable[s.charAt(i)];\n\t\t\tres += ch ? ch : s.charAt(i);\n\t\t}\n\t\treturn res.replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n\t}\n\n\tvar version = \"3.5.0\";\n\n\tlet nette = new FormValidator;\n\tnette.version = version;\n\tnette.webalize = webalize;\n\n\treturn nette;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9uZXR0ZS1mb3Jtcy9zcmMvYXNzZXRzL25ldHRlRm9ybXMuanM/YWFjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIE5ldHRlRm9ybXMgLSBzaW1wbGUgZm9ybSB2YWxpZGF0aW9uLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXR0ZSBGcmFtZXdvcmsgKGh0dHBzOi8vbmV0dGUub3JnKVxuICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIEdydWRsIChodHRwczovL2RhdmlkZ3J1ZGwuY29tKVxuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5OZXR0ZT8ubm9Jbml0ID8gKGdsb2JhbC5OZXR0ZSA9IGZhY3RvcnkoKSkgOiAoZ2xvYmFsLk5ldHRlID0gZmFjdG9yeSgpKS5pbml0T25Mb2FkKCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdGNsYXNzIFZhbGlkYXRvcnMge1xuXHRcdGZpbGxlZChlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0cmV0dXJuIHZhbCAhPT0gJycgJiYgdmFsICE9PSBmYWxzZSAmJiB2YWwgIT09IG51bGxcblx0XHRcdFx0JiYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA+IDApXG5cdFx0XHRcdCYmICghKHZhbCBpbnN0YW5jZW9mIEZpbGVMaXN0KSB8fCB2YWwubGVuZ3RoID4gMCk7XG5cdFx0fVxuXHRcdGJsYW5rKGVsZW0sIGFyZywgdmFsKSB7XG5cdFx0XHRyZXR1cm4gIXRoaXMuZmlsbGVkKGVsZW0sIGFyZywgdmFsKTtcblx0XHR9XG5cdFx0dmFsaWQoZWxlbSwgYXJnKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnZhbGlkYXRlQ29udHJvbChlbGVtLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdH1cblx0XHRlcXVhbChlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0aWYgKGFyZyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHRvU3RyaW5nID0gKHZhbCkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRyZXR1cm4gJycgKyB2YWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbCA9PT0gdHJ1ZSA/ICcxJyA6ICcnO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0bGV0IHZhbHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiBbdmFsXTtcblx0XHRcdGxldCBhcmdzID0gQXJyYXkuaXNBcnJheShhcmcpID8gYXJnIDogW2FyZ107XG5cdFx0XHRsb29wOiBmb3IgKGxldCBhIG9mIHZhbHMpIHtcblx0XHRcdFx0Zm9yIChsZXQgYiBvZiBhcmdzKSB7XG5cdFx0XHRcdFx0aWYgKHRvU3RyaW5nKGEpID09PSB0b1N0cmluZyhiKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWUgbG9vcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHMubGVuZ3RoID4gMDtcblx0XHR9XG5cdFx0bm90RXF1YWwoZWxlbSwgYXJnLCB2YWwpIHtcblx0XHRcdHJldHVybiBhcmcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiAhdGhpcy5lcXVhbChlbGVtLCBhcmcsIHZhbCk7XG5cdFx0fVxuXHRcdG1pbkxlbmd0aChlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0dmFsID0gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgPyB2YWwudG9TdHJpbmcoKSA6IHZhbDtcblx0XHRcdHJldHVybiB2YWwubGVuZ3RoID49IGFyZztcblx0XHR9XG5cdFx0bWF4TGVuZ3RoKGVsZW0sIGFyZywgdmFsKSB7XG5cdFx0XHR2YWwgPSB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyA/IHZhbC50b1N0cmluZygpIDogdmFsO1xuXHRcdFx0cmV0dXJuIHZhbC5sZW5ndGggPD0gYXJnO1xuXHRcdH1cblx0XHRsZW5ndGgoZWxlbSwgYXJnLCB2YWwpIHtcblx0XHRcdHZhbCA9IHR5cGVvZiB2YWwgPT09ICdudW1iZXInID8gdmFsLnRvU3RyaW5nKCkgOiB2YWw7XG5cdFx0XHRhcmcgPSBBcnJheS5pc0FycmF5KGFyZykgPyBhcmcgOiBbYXJnLCBhcmddO1xuXHRcdFx0cmV0dXJuICgoYXJnWzBdID09PSBudWxsIHx8IHZhbC5sZW5ndGggPj0gYXJnWzBdKVxuXHRcdFx0XHQmJiAoYXJnWzFdID09PSBudWxsIHx8IHZhbC5sZW5ndGggPD0gYXJnWzFdKSk7XG5cdFx0fVxuXHRcdGVtYWlsKGVsZW0sIGFyZywgdmFsKSB7XG5cdFx0XHRyZXR1cm4gKC9eKFwiKFsgISMtW1xcXS1+XXxcXFxcWyAtfl0pK1wifFstYS16MC05ISMkJSYnKisvPT9eX2B7fH1+XSsoXFwuWy1hLXowLTkhIyQlJicqKy89P15fYHt8fX5dKykqKUAoWzAtOWEtelxcdTAwQzAtXFx1MDJGRlxcdTAzNzAtXFx1MUVGRl0oWy0wLTlhLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdezAsNjF9WzAtOWEtelxcdTAwQzAtXFx1MDJGRlxcdTAzNzAtXFx1MUVGRl0pP1xcLikrW2EtelxcdTAwQzAtXFx1MDJGRlxcdTAzNzAtXFx1MUVGRl0oWy0wLTlhLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdezAsMTd9W2EtelxcdTAwQzAtXFx1MDJGRlxcdTAzNzAtXFx1MUVGRl0pPyQvaSkudGVzdCh2YWwpO1xuXHRcdH1cblx0XHR1cmwoZWxlbSwgYXJnLCB2YWwsIG5ld1ZhbHVlKSB7XG5cdFx0XHRpZiAoISgvXlthLXpcXGQrLi1dKzovKS50ZXN0KHZhbCkpIHtcblx0XHRcdFx0dmFsID0gJ2h0dHBzOi8vJyArIHZhbDtcblx0XHRcdH1cblx0XHRcdGlmICgoL15odHRwcz86XFwvXFwvKCgoWy1fMC05YS16XFx1MDBDMC1cXHUwMkZGXFx1MDM3MC1cXHUxRUZGXStcXC4pKlswLTlhLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdKFstMC05YS16XFx1MDBDMC1cXHUwMkZGXFx1MDM3MC1cXHUxRUZGXXswLDYxfVswLTlhLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdKT9cXC4pP1thLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdKFstMC05YS16XFx1MDBDMC1cXHUwMkZGXFx1MDM3MC1cXHUxRUZGXXswLDE3fVthLXpcXHUwMEMwLVxcdTAyRkZcXHUwMzcwLVxcdTFFRkZdKT98XFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM318XFxbWzAtOWEtZjpdezMsMzl9XFxdKSg6XFxkezEsNX0pPyhcXC9cXFMqKT8kL2kpLnRlc3QodmFsKSkge1xuXHRcdFx0XHRuZXdWYWx1ZS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJlZ2V4cChlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0bGV0IHBhcnRzID0gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgPyBhcmcubWF0Y2goL15cXC8oLiopXFwvKFtpbXVdKikkLykgOiBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBwYXJ0cyAmJiAobmV3IFJlZ0V4cChwYXJ0c1sxXSwgcGFydHNbMl0ucmVwbGFjZSgndScsICcnKSkpLnRlc3QodmFsKTtcblx0XHRcdH1cblx0XHRcdGNhdGNoIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHBhdHRlcm4oZWxlbSwgYXJnLCB2YWwsIG5ld1ZhbHVlLCBjYXNlSW5zZW5zaXRpdmUpIHtcblx0XHRcdGlmICh0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCByZWdFeHA7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/OicgKyBhcmcgKyAnKSQnLCBjYXNlSW5zZW5zaXRpdmUgPyAndWknIDogJ3UnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXRjaCB7XG5cdFx0XHRcdFx0cmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/OicgKyBhcmcgKyAnKSQnLCBjYXNlSW5zZW5zaXRpdmUgPyAnaScgOiAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbCBpbnN0YW5jZW9mIEZpbGVMaXN0XG5cdFx0XHRcdFx0PyBBcnJheS5mcm9tKHZhbCkuZXZlcnkoKGZpbGUpID0+IHJlZ0V4cC50ZXN0KGZpbGUubmFtZSkpXG5cdFx0XHRcdFx0OiByZWdFeHAudGVzdCh2YWwpO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2gge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cGF0dGVybkNhc2VJbnNlbnNpdGl2ZShlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGF0dGVybihlbGVtLCBhcmcsIHZhbCwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdG51bWVyaWMoZWxlbSwgYXJnLCB2YWwpIHtcblx0XHRcdHJldHVybiAoL15bMC05XSskLykudGVzdCh2YWwpO1xuXHRcdH1cblx0XHRpbnRlZ2VyKGVsZW0sIGFyZywgdmFsLCBuZXdWYWx1ZSkge1xuXHRcdFx0aWYgKCgvXi0/WzAtOV0rJC8pLnRlc3QodmFsKSkge1xuXHRcdFx0XHRuZXdWYWx1ZS52YWx1ZSA9IHBhcnNlRmxvYXQodmFsKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGZsb2F0KGVsZW0sIGFyZywgdmFsLCBuZXdWYWx1ZSkge1xuXHRcdFx0dmFsID0gdmFsLnJlcGxhY2UoLyArL2csICcnKS5yZXBsYWNlKC8sL2csICcuJyk7XG5cdFx0XHRpZiAoKC9eLT9bMC05XSpcXC4/WzAtOV0rJC8pLnRlc3QodmFsKSkge1xuXHRcdFx0XHRuZXdWYWx1ZS52YWx1ZSA9IHBhcnNlRmxvYXQodmFsKTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdG1pbihlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0aWYgKE51bWJlci5pc0Zpbml0ZShhcmcpKSB7XG5cdFx0XHRcdHZhbCA9IHBhcnNlRmxvYXQodmFsKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWwgPj0gYXJnO1xuXHRcdH1cblx0XHRtYXgoZWxlbSwgYXJnLCB2YWwpIHtcblx0XHRcdGlmIChOdW1iZXIuaXNGaW5pdGUoYXJnKSkge1xuXHRcdFx0XHR2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsIDw9IGFyZztcblx0XHR9XG5cdFx0cmFuZ2UoZWxlbSwgYXJnLCB2YWwpIHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZWxlbS50eXBlID09PSAndGltZScgJiYgYXJnWzBdID4gYXJnWzFdKSB7XG5cdFx0XHRcdHJldHVybiB2YWwgPj0gYXJnWzBdIHx8IHZhbCA8PSBhcmdbMV07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKGFyZ1swXSA9PT0gbnVsbCB8fCB0aGlzLm1pbihlbGVtLCBhcmdbMF0sIHZhbCkpXG5cdFx0XHRcdCYmIChhcmdbMV0gPT09IG51bGwgfHwgdGhpcy5tYXgoZWxlbSwgYXJnWzFdLCB2YWwpKTtcblx0XHR9XG5cdFx0c3VibWl0dGVkKGVsZW0pIHtcblx0XHRcdHJldHVybiBlbGVtLmZvcm1bJ25ldHRlLXN1Ym1pdHRlZEJ5J10gPT09IGVsZW07XG5cdFx0fVxuXHRcdGZpbGVTaXplKGVsZW0sIGFyZywgdmFsKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbSh2YWwpLmV2ZXJ5KChmaWxlKSA9PiBmaWxlLnNpemUgPD0gYXJnKTtcblx0XHR9XG5cdFx0bWltZVR5cGUoZWxlbSwgYXJncywgdmFsKSB7XG5cdFx0XHRsZXQgcGFydHMgPSBbXTtcblx0XHRcdGFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFthcmdzXTtcblx0XHRcdGFyZ3MuZm9yRWFjaCgoYXJnKSA9PiBwYXJ0cy5wdXNoKCdeJyArIGFyZy5yZXBsYWNlKC8oW15cXHddKS9nLCAnXFxcXCQxJykucmVwbGFjZSgnXFxcXConLCAnLionKSArICckJykpO1xuXHRcdFx0bGV0IHJlID0gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCd8JykpO1xuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20odmFsKS5ldmVyeSgoZmlsZSkgPT4gIWZpbGUudHlwZSB8fCByZS50ZXN0KGZpbGUudHlwZSkpO1xuXHRcdH1cblx0XHRpbWFnZShlbGVtLCBhcmcsIHZhbCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubWltZVR5cGUoZWxlbSwgYXJnID8/IFsnaW1hZ2UvZ2lmJywgJ2ltYWdlL3BuZycsICdpbWFnZS9qcGVnJywgJ2ltYWdlL3dlYnAnXSwgdmFsKTtcblx0XHR9XG5cdFx0c3RhdGljKGVsZW0sIGFyZykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cdH1cblxuXHRjbGFzcyBGb3JtVmFsaWRhdG9yIHtcblx0XHRmb3JtRXJyb3JzID0gW107XG5cdFx0dmFsaWRhdG9ycyA9IG5ldyBWYWxpZGF0b3JzO1xuXHRcdCNwcmV2ZW50RmlsdGVyaW5nID0ge307XG5cdFx0I2Zvcm1Ub2dnbGVzID0ge307XG5cdFx0I3RvZ2dsZUxpc3RlbmVycyA9IG5ldyBXZWFrTWFwO1xuXHRcdCNnZXRGb3JtRWxlbWVudChmb3JtLCBuYW1lKSB7XG5cdFx0XHRsZXQgcmVzID0gZm9ybS5lbGVtZW50cy5uYW1lZEl0ZW0obmFtZSk7XG5cdFx0XHRyZXR1cm4gKHJlcyBpbnN0YW5jZW9mIFJhZGlvTm9kZUxpc3QgPyByZXNbMF0gOiByZXMpO1xuXHRcdH1cblx0XHQjZXhwYW5kUmFkaW9FbGVtZW50KGVsZW0pIHtcblx0XHRcdGxldCByZXMgPSBlbGVtLmZvcm0uZWxlbWVudHMubmFtZWRJdGVtKGVsZW0ubmFtZSk7XG5cdFx0XHRyZXR1cm4gKHJlcyBpbnN0YW5jZW9mIFJhZGlvTm9kZUxpc3QgPyBBcnJheS5mcm9tKHJlcykgOiBbcmVzXSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cblx0XHQgKi9cblx0XHQjb25Eb2N1bWVudFJlYWR5KGNhbGxiYWNrKSB7XG5cdFx0XHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdmFsdWUgb2YgZm9ybSBlbGVtZW50LlxuXHRcdCAqL1xuXHRcdGdldFZhbHVlKGVsZW0pIHtcblx0XHRcdGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRpZiAoZWxlbS50eXBlID09PSAncmFkaW8nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuI2V4cGFuZFJhZGlvRWxlbWVudChlbGVtKVxuXHRcdFx0XHRcdFx0LmZpbmQoKGlucHV0KSA9PiBpbnB1dC5jaGVja2VkKVxuXHRcdFx0XHRcdFx0Py52YWx1ZSA/PyBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gJ2ZpbGUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0uZmlsZXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubmFtZS5lbmRzV2l0aCgnW10nKSAvLyBjaGVja2JveCBsaXN0XG5cdFx0XHRcdFx0XHQ/IHRoaXMuI2V4cGFuZFJhZGlvRWxlbWVudChlbGVtKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQuY2hlY2tlZClcblx0XHRcdFx0XHRcdFx0Lm1hcCgoaW5wdXQpID0+IGlucHV0LnZhbHVlKVxuXHRcdFx0XHRcdFx0OiBlbGVtLmNoZWNrZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0udmFsdWUudHJpbSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0ubXVsdGlwbGVcblx0XHRcdFx0XHQ/IEFycmF5LmZyb20oZWxlbS5zZWxlY3RlZE9wdGlvbnMsIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSlcblx0XHRcdFx0XHQ6IGVsZW0uc2VsZWN0ZWRPcHRpb25zWzBdPy52YWx1ZSA/PyBudWxsO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZWxlbSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0udmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChlbGVtIGluc3RhbmNlb2YgUmFkaW9Ob2RlTGlzdCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRWYWx1ZShlbGVtWzBdKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIHZhbHVlIG9mIGZvcm0gZWxlbWVudC5cblx0XHQgKi9cblx0XHRnZXRFZmZlY3RpdmVWYWx1ZShlbGVtLCBmaWx0ZXIgPSBmYWxzZSkge1xuXHRcdFx0bGV0IHZhbCA9IHRoaXMuZ2V0VmFsdWUoZWxlbSk7XG5cdFx0XHRpZiAodmFsID09PSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1uZXR0ZS1lbXB0eS12YWx1ZScpKSB7XG5cdFx0XHRcdHZhbCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGZpbHRlciAmJiB0aGlzLiNwcmV2ZW50RmlsdGVyaW5nW2VsZW0ubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLiNwcmV2ZW50RmlsdGVyaW5nW2VsZW0ubmFtZV0gPSB0cnVlO1xuXHRcdFx0XHRsZXQgcmVmID0geyB2YWx1ZTogdmFsIH07XG5cdFx0XHRcdHRoaXMudmFsaWRhdGVDb250cm9sKGVsZW0sIHVuZGVmaW5lZCwgdHJ1ZSwgcmVmKTtcblx0XHRcdFx0dmFsID0gcmVmLnZhbHVlO1xuXHRcdFx0XHRkZWxldGUgdGhpcy4jcHJldmVudEZpbHRlcmluZ1tlbGVtLm5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogVmFsaWRhdGVzIGZvcm0gZWxlbWVudCBhZ2FpbnN0IGdpdmVuIHJ1bGVzLlxuXHRcdCAqL1xuXHRcdHZhbGlkYXRlQ29udHJvbChlbGVtLCBydWxlcywgb25seUNoZWNrID0gZmFsc2UsIHZhbHVlLCBlbXB0eU9wdGlvbmFsKSB7XG5cdFx0XHRydWxlcyA/Pz0gSlNPTi5wYXJzZShlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1uZXR0ZS1ydWxlcycpID8/ICdbXScpO1xuXHRcdFx0dmFsdWUgPz89IHsgdmFsdWU6IHRoaXMuZ2V0RWZmZWN0aXZlVmFsdWUoZWxlbSkgfTtcblx0XHRcdGVtcHR5T3B0aW9uYWwgPz89ICF0aGlzLnZhbGlkYXRlUnVsZShlbGVtLCAnOmZpbGxlZCcsIG51bGwsIHZhbHVlKTtcblx0XHRcdGZvciAobGV0IHJ1bGUgb2YgcnVsZXMpIHtcblx0XHRcdFx0bGV0IG9wID0gcnVsZS5vcC5tYXRjaCgvKH4pPyhbXj9dKykvKSwgY3VyRWxlbSA9IHJ1bGUuY29udHJvbCA/IHRoaXMuI2dldEZvcm1FbGVtZW50KGVsZW0uZm9ybSwgcnVsZS5jb250cm9sKSA6IGVsZW07XG5cdFx0XHRcdHJ1bGUubmVnID0gISFvcFsxXTtcblx0XHRcdFx0cnVsZS5vcCA9IG9wWzJdO1xuXHRcdFx0XHRydWxlLmNvbmRpdGlvbiA9ICEhcnVsZS5ydWxlcztcblx0XHRcdFx0aWYgKCFjdXJFbGVtKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZW1wdHlPcHRpb25hbCAmJiAhcnVsZS5jb25kaXRpb24gJiYgcnVsZS5vcCAhPT0gJzpmaWxsZWQnKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHN1Y2Nlc3MgPSB0aGlzLnZhbGlkYXRlUnVsZShjdXJFbGVtLCBydWxlLm9wLCBydWxlLmFyZywgZWxlbSA9PT0gY3VyRWxlbSA/IHZhbHVlIDogdW5kZWZpbmVkKTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MgPT09IG51bGwpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChydWxlLm5lZykge1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSAhc3VjY2Vzcztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocnVsZS5jb25kaXRpb24gJiYgc3VjY2Vzcykge1xuXHRcdFx0XHRcdGlmICghdGhpcy52YWxpZGF0ZUNvbnRyb2woZWxlbSwgcnVsZS5ydWxlcywgb25seUNoZWNrLCB2YWx1ZSwgcnVsZS5vcCA9PT0gJzpibGFuaycgPyBmYWxzZSA6IGVtcHR5T3B0aW9uYWwpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKCFydWxlLmNvbmRpdGlvbiAmJiAhc3VjY2Vzcykge1xuXHRcdFx0XHRcdGlmICh0aGlzLmlzRGlzYWJsZWQoY3VyRWxlbSkpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW9ubHlDaGVjaykge1xuXHRcdFx0XHRcdFx0bGV0IGFyciA9IEFycmF5LmlzQXJyYXkocnVsZS5hcmcpID8gcnVsZS5hcmcgOiBbcnVsZS5hcmddLCBtZXNzYWdlID0gcnVsZS5tc2cucmVwbGFjZSgvJSh2YWx1ZXxcXGQrKS9nLCAoZm9vLCBtKSA9PiB0aGlzLmdldFZhbHVlKG0gPT09ICd2YWx1ZScgPyBjdXJFbGVtIDogZWxlbS5mb3JtLmVsZW1lbnRzLm5hbWVkSXRlbShhcnJbbV0uY29udHJvbCkpKTtcblx0XHRcdFx0XHRcdHRoaXMuYWRkRXJyb3IoY3VyRWxlbSwgbWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFZhbGlkYXRlcyB3aG9sZSBmb3JtLlxuXHRcdCAqL1xuXHRcdHZhbGlkYXRlRm9ybShzZW5kZXIsIG9ubHlDaGVjayA9IGZhbHNlKSB7XG5cdFx0XHRsZXQgZm9ybSA9IHNlbmRlci5mb3JtID8/IHNlbmRlciwgc2NvcGU7XG5cdFx0XHR0aGlzLmZvcm1FcnJvcnMgPSBbXTtcblx0XHRcdGlmIChmb3JtWyduZXR0ZS1zdWJtaXR0ZWRCeSddICYmIGZvcm1bJ25ldHRlLXN1Ym1pdHRlZEJ5J10uZ2V0QXR0cmlidXRlKCdmb3Jtbm92YWxpZGF0ZScpICE9PSBudWxsKSB7XG5cdFx0XHRcdGxldCBzY29wZUFyciA9IEpTT04ucGFyc2UoZm9ybVsnbmV0dGUtc3VibWl0dGVkQnknXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmV0dGUtdmFsaWRhdGlvbi1zY29wZScpID8/ICdbXScpO1xuXHRcdFx0XHRpZiAoc2NvcGVBcnIubGVuZ3RoKSB7XG5cdFx0XHRcdFx0c2NvcGUgPSBuZXcgUmVnRXhwKCdeKCcgKyBzY29wZUFyci5qb2luKCctfCcpICsgJy0pJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zaG93Rm9ybUVycm9ycyhmb3JtLCBbXSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAobGV0IGVsZW0gb2YgZm9ybS5lbGVtZW50cykge1xuXHRcdFx0XHRpZiAoZWxlbS53aWxsVmFsaWRhdGUgJiYgZWxlbS52YWxpZGl0eS5iYWRJbnB1dCkge1xuXHRcdFx0XHRcdGVsZW0ucmVwb3J0VmFsaWRpdHkoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAobGV0IGVsZW0gb2YgZm9ybS5lbGVtZW50cykge1xuXHRcdFx0XHRpZiAoZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmV0dGUtcnVsZXMnKVxuXHRcdFx0XHRcdCYmICghc2NvcGUgfHwgZWxlbS5uYW1lLnJlcGxhY2UoL11cXFt8XFxbfF18JC9nLCAnLScpLm1hdGNoKHNjb3BlKSlcblx0XHRcdFx0XHQmJiAhdGhpcy5pc0Rpc2FibGVkKGVsZW0pXG5cdFx0XHRcdFx0JiYgIXRoaXMudmFsaWRhdGVDb250cm9sKGVsZW0sIHVuZGVmaW5lZCwgb25seUNoZWNrKVxuXHRcdFx0XHRcdCYmICF0aGlzLmZvcm1FcnJvcnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgc3VjY2VzcyA9ICF0aGlzLmZvcm1FcnJvcnMubGVuZ3RoO1xuXHRcdFx0dGhpcy5zaG93Rm9ybUVycm9ycyhmb3JtLCB0aGlzLmZvcm1FcnJvcnMpO1xuXHRcdFx0cmV0dXJuIHN1Y2Nlc3M7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIENoZWNrIGlmIGlucHV0IGlzIGRpc2FibGVkLlxuXHRcdCAqL1xuXHRcdGlzRGlzYWJsZWQoZWxlbSkge1xuXHRcdFx0aWYgKGVsZW0udHlwZSA9PT0gJ3JhZGlvJykge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy4jZXhwYW5kUmFkaW9FbGVtZW50KGVsZW0pXG5cdFx0XHRcdFx0LmV2ZXJ5KChpbnB1dCkgPT4gaW5wdXQuZGlzYWJsZWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQ7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIEFkZHMgZXJyb3IgbWVzc2FnZSB0byB0aGUgcXVldWUuXG5cdFx0ICovXG5cdFx0YWRkRXJyb3IoZWxlbSwgbWVzc2FnZSkge1xuXHRcdFx0dGhpcy5mb3JtRXJyb3JzLnB1c2goe1xuXHRcdFx0XHRlbGVtZW50OiBlbGVtLFxuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZXMuXG5cdFx0ICovXG5cdFx0c2hvd0Zvcm1FcnJvcnMoZm9ybSwgZXJyb3JzKSB7XG5cdFx0XHRsZXQgbWVzc2FnZXMgPSBbXSwgZm9jdXNFbGVtO1xuXHRcdFx0Zm9yIChsZXQgZXJyb3Igb2YgZXJyb3JzKSB7XG5cdFx0XHRcdGlmIChtZXNzYWdlcy5pbmRleE9mKGVycm9yLm1lc3NhZ2UpIDwgMCkge1xuXHRcdFx0XHRcdG1lc3NhZ2VzLnB1c2goZXJyb3IubWVzc2FnZSk7XG5cdFx0XHRcdFx0Zm9jdXNFbGVtID8/PSBlcnJvci5lbGVtZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdHRoaXMuc2hvd01vZGFsKG1lc3NhZ2VzLmpvaW4oJ1xcbicpLCAoKSA9PiB7XG5cdFx0XHRcdFx0Zm9jdXNFbGVtPy5mb2N1cygpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogRGlzcGxheSBtb2RhbCB3aW5kb3cuXG5cdFx0ICovXG5cdFx0c2hvd01vZGFsKG1lc3NhZ2UsIG9uY2xvc2UpIHtcblx0XHRcdGxldCBkaWFsb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaWFsb2cnKTtcblx0XHRcdGlmICghZGlhbG9nLnNob3dNb2RhbCkge1xuXHRcdFx0XHRhbGVydChtZXNzYWdlKTtcblx0XHRcdFx0b25jbG9zZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXHRcdFx0c3R5bGUuaW5uZXJUZXh0ID0gJy5uZXR0ZUZvcm1zTW9kYWwgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogYXV0bzsgYm9yZGVyOiAycHggc29saWQgYmxhY2s7IHBhZGRpbmc6IDFyZW0gfSAubmV0dGVGb3Jtc01vZGFsIGJ1dHRvbiB7IHBhZGRpbmc6IC4xZW0gMmVtIH0nO1xuXHRcdFx0bGV0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuXHRcdFx0YnV0dG9uLmlubmVyVGV4dCA9ICdPSyc7XG5cdFx0XHRidXR0b24ub25jbGljayA9ICgpID0+IHtcblx0XHRcdFx0ZGlhbG9nLnJlbW92ZSgpO1xuXHRcdFx0XHRvbmNsb3NlKCk7XG5cdFx0XHR9O1xuXHRcdFx0ZGlhbG9nLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnbmV0dGVGb3Jtc01vZGFsJyk7XG5cdFx0XHRkaWFsb2cuaW5uZXJUZXh0ID0gbWVzc2FnZSArICdcXG5cXG4nO1xuXHRcdFx0ZGlhbG9nLmFwcGVuZChzdHlsZSwgYnV0dG9uKTtcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kKGRpYWxvZyk7XG5cdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFZhbGlkYXRlcyBzaW5nbGUgcnVsZS5cblx0XHQgKi9cblx0XHR2YWxpZGF0ZVJ1bGUoZWxlbSwgb3AsIGFyZywgdmFsdWUpIHtcblx0XHRcdGlmIChlbGVtLnZhbGlkaXR5LmJhZElucHV0KSB7XG5cdFx0XHRcdHJldHVybiBvcCA9PT0gJzpmaWxsZWQnO1xuXHRcdFx0fVxuXHRcdFx0dmFsdWUgPz89IHsgdmFsdWU6IHRoaXMuZ2V0RWZmZWN0aXZlVmFsdWUoZWxlbSwgdHJ1ZSkgfTtcblx0XHRcdGxldCBtZXRob2QgPSBvcC5jaGFyQXQoMCkgPT09ICc6JyA/IG9wLnN1YnN0cmluZygxKSA6IG9wO1xuXHRcdFx0bWV0aG9kID0gbWV0aG9kLnJlcGxhY2UoJzo6JywgJ18nKS5yZXBsYWNlQWxsKCdcXFxcJywgJycpO1xuXHRcdFx0bGV0IGFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZykgPyBhcmcgOiBbYXJnXTtcblx0XHRcdGFyZ3MgPSBhcmdzLm1hcCgoYXJnKSA9PiB7XG5cdFx0XHRcdGlmIChhcmc/LmNvbnRyb2wpIHtcblx0XHRcdFx0XHRsZXQgY29udHJvbCA9IHRoaXMuI2dldEZvcm1FbGVtZW50KGVsZW0uZm9ybSwgYXJnLmNvbnRyb2wpO1xuXHRcdFx0XHRcdHJldHVybiBjb250cm9sID09PSBlbGVtID8gdmFsdWUudmFsdWUgOiB0aGlzLmdldEVmZmVjdGl2ZVZhbHVlKGNvbnRyb2wsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhcmc7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChtZXRob2QgPT09ICd2YWxpZCcpIHtcblx0XHRcdFx0YXJnc1swXSA9IHRoaXM7IC8vIHRvZG9cblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLnZhbGlkYXRvcnNbbWV0aG9kXVxuXHRcdFx0XHQ/IHRoaXMudmFsaWRhdG9yc1ttZXRob2RdKGVsZW0sIEFycmF5LmlzQXJyYXkoYXJnKSA/IGFyZ3MgOiBhcmdzWzBdLCB2YWx1ZS52YWx1ZSwgdmFsdWUpXG5cdFx0XHRcdDogbnVsbDtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogUHJvY2VzcyBhbGwgdG9nZ2xlcyBpbiBmb3JtLlxuXHRcdCAqL1xuXHRcdHRvZ2dsZUZvcm0oZm9ybSwgZXZlbnQpIHtcblx0XHRcdHRoaXMuI2Zvcm1Ub2dnbGVzID0ge307XG5cdFx0XHRmb3IgKGxldCBlbGVtIG9mIEFycmF5LmZyb20oZm9ybS5lbGVtZW50cykpIHtcblx0XHRcdFx0aWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLW5ldHRlLXJ1bGVzJykpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZUNvbnRyb2woZWxlbSwgdW5kZWZpbmVkLCBudWxsLCAhZXZlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpIGluIHRoaXMuI2Zvcm1Ub2dnbGVzKSB7XG5cdFx0XHRcdHRoaXMudG9nZ2xlKGksIHRoaXMuI2Zvcm1Ub2dnbGVzW2ldLnN0YXRlLCB0aGlzLiNmb3JtVG9nZ2xlc1tpXS5lbGVtLCBldmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFByb2Nlc3MgdG9nZ2xlcyBvbiBmb3JtIGVsZW1lbnQuXG5cdFx0ICovXG5cdFx0dG9nZ2xlQ29udHJvbChlbGVtLCBydWxlcywgc3VjY2VzcyA9IG51bGwsIGZpcnN0dGltZSA9IGZhbHNlLCB2YWx1ZSwgZW1wdHlPcHRpb25hbCkge1xuXHRcdFx0cnVsZXMgPz89IEpTT04ucGFyc2UoZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmV0dGUtcnVsZXMnKSA/PyAnW10nKTtcblx0XHRcdHZhbHVlID8/PSB7IHZhbHVlOiB0aGlzLmdldEVmZmVjdGl2ZVZhbHVlKGVsZW0pIH07XG5cdFx0XHRlbXB0eU9wdGlvbmFsID8/PSAhdGhpcy52YWxpZGF0ZVJ1bGUoZWxlbSwgJzpmaWxsZWQnLCBudWxsLCB2YWx1ZSk7XG5cdFx0XHRsZXQgaGFzID0gZmFsc2UsIGN1clN1Y2Nlc3M7XG5cdFx0XHRmb3IgKGxldCBydWxlIG9mIHJ1bGVzKSB7XG5cdFx0XHRcdGxldCBvcCA9IHJ1bGUub3AubWF0Y2goLyh+KT8oW14/XSspLyksIGN1ckVsZW0gPSBydWxlLmNvbnRyb2wgPyB0aGlzLiNnZXRGb3JtRWxlbWVudChlbGVtLmZvcm0sIHJ1bGUuY29udHJvbCkgOiBlbGVtO1xuXHRcdFx0XHRydWxlLm5lZyA9ICEhb3BbMV07XG5cdFx0XHRcdHJ1bGUub3AgPSBvcFsyXTtcblx0XHRcdFx0cnVsZS5jb25kaXRpb24gPSAhIXJ1bGUucnVsZXM7XG5cdFx0XHRcdGlmICghY3VyRWxlbSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGVtcHR5T3B0aW9uYWwgJiYgIXJ1bGUuY29uZGl0aW9uICYmIHJ1bGUub3AgIT09ICc6ZmlsbGVkJykge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN1clN1Y2Nlc3MgPSBzdWNjZXNzO1xuXHRcdFx0XHRpZiAoc3VjY2VzcyAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRjdXJTdWNjZXNzID0gdGhpcy52YWxpZGF0ZVJ1bGUoY3VyRWxlbSwgcnVsZS5vcCwgcnVsZS5hcmcsIGVsZW0gPT09IGN1ckVsZW0gPyB2YWx1ZSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0aWYgKGN1clN1Y2Nlc3MgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmIChydWxlLm5lZykge1xuXHRcdFx0XHRcdFx0Y3VyU3VjY2VzcyA9ICFjdXJTdWNjZXNzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIXJ1bGUuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gY3VyU3VjY2Vzcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKChydWxlLmNvbmRpdGlvbiAmJiB0aGlzLnRvZ2dsZUNvbnRyb2woZWxlbSwgcnVsZS5ydWxlcywgY3VyU3VjY2VzcywgZmlyc3R0aW1lLCB2YWx1ZSwgcnVsZS5vcCA9PT0gJzpibGFuaycgPyBmYWxzZSA6IGVtcHR5T3B0aW9uYWwpKSB8fCBydWxlLnRvZ2dsZSkge1xuXHRcdFx0XHRcdGhhcyA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKGZpcnN0dGltZSkge1xuXHRcdFx0XHRcdFx0dGhpcy4jZXhwYW5kUmFkaW9FbGVtZW50KGN1ckVsZW0pXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGVsKSA9PiAhdGhpcy4jdG9nZ2xlTGlzdGVuZXJzLmhhcyhlbCkpXG5cdFx0XHRcdFx0XHRcdC5mb3JFYWNoKChlbCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gdGhpcy50b2dnbGVGb3JtKGVsZW0uZm9ybSwgZSkpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLiN0b2dnbGVMaXN0ZW5lcnMuc2V0KGVsLCBudWxsKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGxldCBpZCBpbiBydWxlLnRvZ2dsZSA/PyB7fSkge1xuXHRcdFx0XHRcdFx0dGhpcy4jZm9ybVRvZ2dsZXNbaWRdID8/PSB7IGVsZW06IGVsZW0sIHN0YXRlOiBmYWxzZSB9O1xuXHRcdFx0XHRcdFx0dGhpcy4jZm9ybVRvZ2dsZXNbaWRdLnN0YXRlIHx8PSBydWxlLnRvZ2dsZVtpZF0gPyAhIWN1clN1Y2Nlc3MgOiAhY3VyU3VjY2Vzcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBoYXM7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIERpc3BsYXlzIG9yIGhpZGVzIEhUTUwgZWxlbWVudC5cblx0XHQgKi9cblx0XHR0b2dnbGUoc2VsZWN0b3IsIHZpc2libGUsIHNyY0VsZW1lbnQsIGV2ZW50KSB7XG5cdFx0XHRpZiAoL15cXHdbXFx3LjotXSokLy50ZXN0KHNlbGVjdG9yKSkgeyAvLyBpZFxuXHRcdFx0XHRzZWxlY3RvciA9ICcjJyArIHNlbGVjdG9yO1xuXHRcdFx0fVxuXHRcdFx0QXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSlcblx0XHRcdFx0LmZvckVhY2goKGVsZW0pID0+IGVsZW0uaGlkZGVuID0gIXZpc2libGUpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBDb21wYWN0IGNoZWNrYm94ZXNcblx0XHQgKi9cblx0XHRjb21wYWN0Q2hlY2tib3hlcyhmb3JtLCBmb3JtRGF0YSkge1xuXHRcdFx0bGV0IHZhbHVlcyA9IHt9O1xuXHRcdFx0Zm9yIChsZXQgZWxlbSBvZiBmb3JtLmVsZW1lbnRzKSB7XG5cdFx0XHRcdGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgJiYgZWxlbS5uYW1lLmVuZHNXaXRoKCdbXScpICYmIGVsZW0uY2hlY2tlZCAmJiAhZWxlbS5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdGZvcm1EYXRhLmRlbGV0ZShlbGVtLm5hbWUpO1xuXHRcdFx0XHRcdHZhbHVlc1tlbGVtLm5hbWVdID8/PSBbXTtcblx0XHRcdFx0XHR2YWx1ZXNbZWxlbS5uYW1lXS5wdXNoKGVsZW0udmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBuYW1lIGluIHZhbHVlcykge1xuXHRcdFx0XHRmb3JtRGF0YS5zZXQobmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAyKSwgdmFsdWVzW25hbWVdLmpvaW4oJywnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFNldHVwIGhhbmRsZXJzLlxuXHRcdCAqL1xuXHRcdGluaXRGb3JtKGZvcm0pIHtcblx0XHRcdGlmIChmb3JtLm1ldGhvZCA9PT0gJ2dldCcgJiYgZm9ybS5oYXNBdHRyaWJ1dGUoJ2RhdGEtbmV0dGUtY29tcGFjdCcpKSB7XG5cdFx0XHRcdGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignZm9ybWRhdGEnLCAoZSkgPT4gdGhpcy5jb21wYWN0Q2hlY2tib3hlcyhmb3JtLCBlLmZvcm1EYXRhKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIUFycmF5LmZyb20oZm9ybS5lbGVtZW50cykuc29tZSgoZWxlbSkgPT4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmV0dGUtcnVsZXMnKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVGb3JtKGZvcm0pO1xuXHRcdFx0aWYgKGZvcm0ubm9WYWxpZGF0ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmb3JtLm5vVmFsaWRhdGUgPSB0cnVlO1xuXHRcdFx0Zm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoZSkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMudmFsaWRhdGVGb3JtKGZvcm0pKSB7XG5cdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Zm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsICgpID0+IHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnRvZ2dsZUZvcm0oZm9ybSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGluaXRPbkxvYWQoKSB7XG5cdFx0XHR0aGlzLiNvbkRvY3VtZW50UmVhZHkoKCkgPT4ge1xuXHRcdFx0XHRBcnJheS5mcm9tKGRvY3VtZW50LmZvcm1zKVxuXHRcdFx0XHRcdC5mb3JFYWNoKChmb3JtKSA9PiB0aGlzLmluaXRGb3JtKGZvcm0pKTtcblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG5cdFx0XHRcdFx0bGV0IHRhcmdldCA9IGUudGFyZ2V0O1xuXHRcdFx0XHRcdHdoaWxlICh0YXJnZXQpIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXQuZm9ybSAmJiB0YXJnZXQudHlwZSBpbiB7IHN1Ym1pdDogMSwgaW1hZ2U6IDEgfSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuZm9ybVsnbmV0dGUtc3VibWl0dGVkQnknXSA9IHRhcmdldDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHdlYmFsaXplVGFibGUgPSB7IFxcdTAwZTE6ICdhJywgXFx1MDBlNDogJ2EnLCBcXHUwMTBkOiAnYycsIFxcdTAxMGY6ICdkJywgXFx1MDBlOTogJ2UnLCBcXHUwMTFiOiAnZScsIFxcdTAwZWQ6ICdpJywgXFx1MDEzZTogJ2wnLCBcXHUwMTQ4OiAnbicsIFxcdTAwZjM6ICdvJywgXFx1MDBmNDogJ28nLCBcXHUwMTU5OiAncicsIFxcdTAxNjE6ICdzJywgXFx1MDE2NTogJ3QnLCBcXHUwMGZhOiAndScsIFxcdTAxNmY6ICd1JywgXFx1MDBmZDogJ3knLCBcXHUwMTdlOiAneicgfTtcblx0LyoqXG5cdCAqIENvbnZlcnRzIHN0cmluZyB0byB3ZWIgc2FmZSBjaGFyYWN0ZXJzIFthLXowLTktXSB0ZXh0LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1xuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiB3ZWJhbGl6ZShzKSB7XG5cdFx0cyA9IHMudG9Mb3dlckNhc2UoKTtcblx0XHRsZXQgcmVzID0gJyc7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgY2ggPSB3ZWJhbGl6ZVRhYmxlW3MuY2hhckF0KGkpXTtcblx0XHRcdHJlcyArPSBjaCA/IGNoIDogcy5jaGFyQXQoaSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXMucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKTtcblx0fVxuXG5cdHZhciB2ZXJzaW9uID0gXCIzLjUuMFwiO1xuXG5cdGxldCBuZXR0ZSA9IG5ldyBGb3JtVmFsaWRhdG9yO1xuXHRuZXR0ZS52ZXJzaW9uID0gdmVyc2lvbjtcblx0bmV0dGUud2ViYWxpemUgPSB3ZWJhbGl6ZTtcblxuXHRyZXR1cm4gbmV0dGU7XG5cbn0pKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///53\n")},612:()=>{eval("/**\n * AJAX Nette Framework plugin for jQuery\n *\n * @copyright Copyright (c) 2009, 2010 Jan Marek\n * @copyright Copyright (c) 2009, 2010 David Grudl\n * @copyright Copyright (c) 2012-2014 Vojtěch Dobeš\n * @license MIT\n *\n * @version 2.3.0\n */\n\n(function(window, $, undefined) {\n\nif (typeof $ !== 'function') {\n\treturn console.error('nette.ajax.js: jQuery is missing, load it please');\n}\n\nvar nette = function () {\n\tvar inner = {\n\t\tself: this,\n\t\tinitialized: false,\n\t\tcontexts: {},\n\t\ton: {\n\t\t\tinit: {},\n\t\t\tload: {},\n\t\t\tprepare: {},\n\t\t\tbefore: {},\n\t\t\tstart: {},\n\t\t\tsuccess: {},\n\t\t\tcomplete: {},\n\t\t\terror: {}\n\t\t},\n\t\tfire: function () {\n\t\t\tvar result = true;\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\tvar props = args.shift();\n\t\t\tvar name = (typeof props === 'string') ? props : props.name;\n\t\t\tvar off = (typeof props === 'object') ? props.off || {} : {};\n\t\t\targs.push(inner.self);\n\t\t\t$.each(inner.on[name], function (index, reaction) {\n\t\t\t\tif (reaction === undefined || $.inArray(index, off) !== -1) return true;\n\t\t\t\tvar temp = reaction.apply(inner.contexts[index], args);\n\t\t\t\treturn result = (temp === undefined || temp);\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\trequestHandler: function (e) {\n\t\t\tvar xhr = inner.self.ajax({}, this, e);\n\t\t\tif (xhr && xhr._returnFalse) { // for IE 8\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\text: function (callbacks, context, name) {\n\t\t\twhile (!name) {\n\t\t\t\tname = 'ext_' + Math.random();\n\t\t\t\tif (inner.contexts[name]) {\n\t\t\t\t\tname = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$.each(callbacks, function (event, callback) {\n\t\t\t\tinner.on[event][name] = callback;\n\t\t\t});\n\t\t\tinner.contexts[name] = $.extend(context ? context : {}, {\n\t\t\t\tname: function () {\n\t\t\t\t\treturn name;\n\t\t\t\t},\n\t\t\t\text: function (name, force) {\n\t\t\t\t\tvar ext = inner.contexts[name];\n\t\t\t\t\tif (!ext && force) throw \"Extension '\" + this.name() + \"' depends on disabled extension '\" + name + \"'.\";\n\t\t\t\t\treturn ext;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Allows manipulation with extensions.\n\t * When called with 1. argument only, it returns extension with given name.\n\t * When called with 2. argument equal to false, it removes extension entirely.\n\t * When called with 2. argument equal to hash of event callbacks, it adds new extension.\n\t *\n\t * @param {string} Name of extension\n\t * @param {bool|object|null} Set of callbacks for any events OR false for removing extension.\n\t * @param {object|null} Context for added extension\n\t * @return {$.nette|object} Provides a fluent interface OR returns extensions with given name\n\t */\n\tthis.ext = function (name, callbacks, context) {\n\t\tif (typeof name === 'object') {\n\t\t\tinner.ext(name, callbacks);\n\t\t} else if (callbacks === undefined) {\n\t\t\treturn inner.contexts[name];\n\t\t} else if (!callbacks) {\n\t\t\t$.each(['init', 'load', 'prepare', 'before', 'start', 'success', 'complete', 'error'], function (index, event) {\n\t\t\t\tinner.on[event][name] = undefined;\n\t\t\t});\n\t\t\tinner.contexts[name] = undefined;\n\t\t} else if (typeof name === 'string' && inner.contexts[name] !== undefined) {\n\t\t\tthrow \"Cannot override already registered nette-ajax extension '\" + name + \"'.\";\n\t\t} else {\n\t\t\tinner.ext(callbacks, context, name);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * Initializes the plugin:\n\t * - fires 'init' event, then 'load' event\n\t * - when called with any arguments, it will override default 'init' extension\n\t * with provided callbacks\n\t *\n\t * @param {function|object|null} Callback for 'load' event or entire set of callbacks for any events\n\t * @param {object|null} Context provided for callbacks in first argument\n\t * @return {$.nette} Provides a fluent interface\n\t */\n\tthis.init = function (load, loadContext) {\n\t\tif (inner.initialized) throw 'Cannot initialize nette-ajax twice.';\n\n\t\tif (typeof load === 'function') {\n\t\t\tthis.ext('init', null);\n\t\t\tthis.ext('init', {\n\t\t\t\tload: load\n\t\t\t}, loadContext);\n\t\t} else if (typeof load === 'object') {\n\t\t\tthis.ext('init', null);\n\t\t\tthis.ext('init', load, loadContext);\n\t\t} else if (load !== undefined) {\n\t\t\tthrow 'Argument of init() can be function or function-hash only.';\n\t\t}\n\n\t\tinner.initialized = true;\n\n\t\tinner.fire('init');\n\t\tthis.load();\n\t\treturn this;\n\t};\n\n\t/**\n\t * Fires 'load' event\n\t *\n\t * @return {$.nette} Provides a fluent interface\n\t */\n\tthis.load = function () {\n\t\tinner.fire('load', inner.requestHandler);\n\t\treturn this;\n\t};\n\n\t/**\n\t * Executes AJAX request. Attaches listeners and events.\n\t *\n\t * @param {object|string} settings or URL\n\t * @param {Element|null} ussually Anchor or Form\n\t * @param {event|null} event causing the request\n\t * @return {jqXHR|null}\n\t */\n\tthis.ajax = function (settings, ui, e) {\n\t\tif ($.type(settings) === 'string') {\n\t\t\tsettings = {url: settings};\n\t\t}\n\t\tif (!settings.nette && ui && e) {\n\t\t\tvar $el = $(ui), xhr, originalBeforeSend;\n\t\t\tvar analyze = settings.nette = {\n\t\t\t\te: e,\n\t\t\t\tui: ui,\n\t\t\t\tel: $el,\n\t\t\t\tisForm: $el.is('form'),\n\t\t\t\tisSubmit: $el.is('input[type=submit]') || $el.is('button[type=submit]'),\n\t\t\t\tisImage: $el.is('input[type=image]'),\n\t\t\t\tform: null\n\t\t\t};\n\n\t\t\tif (analyze.isSubmit || analyze.isImage) {\n\t\t\t\tanalyze.form = analyze.el.closest('form');\n\t\t\t} else if (analyze.isForm) {\n\t\t\t\tanalyze.form = analyze.el;\n\t\t\t}\n\n\t\t\tif (!settings.url) {\n\t\t\t\tsettings.url = analyze.form ? analyze.form.attr('action') || window.location.pathname + window.location.search : ui.href;\n\t\t\t}\n\t\t\tif (!settings.type) {\n\t\t\t\tsettings.type = analyze.form ? analyze.form.attr('method') : 'get';\n\t\t\t}\n\n\t\t\tif ($el.is('[data-ajax-off]')) {\n\t\t\t\tvar rawOff = $el.attr('data-ajax-off');\n\t\t\t\tif (rawOff.indexOf('[') === 0) {\n\t\t\t\t\tsettings.off = $el.data('ajaxOff');\n\t\t\t\t} else if (rawOff.indexOf(',') !== -1) {\n\t\t\t\t\tsettings.off = rawOff.split(',');\n\t\t\t\t} else if (rawOff.indexOf(' ') !== -1) {\n\t\t\t\t\tsettings.off = rawOff.split(' ');\n\t\t\t\t} else {\n\t\t\t\t\tsettings.off = rawOff;\n\t\t\t\t}\n\t\t\t\tif (typeof settings.off === 'string') settings.off = [settings.off];\n\t\t\t\tsettings.off = $.grep($.each(settings.off, function (off) {\n\t\t\t\t\treturn $.trim(off);\n\t\t\t\t}), function (off) {\n\t\t\t\t\treturn off.length;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tinner.fire({\n\t\t\tname: 'prepare',\n\t\t\toff: settings.off || {}\n\t\t}, settings);\n\t\tif (settings.prepare) {\n\t\t\tsettings.prepare(settings);\n\t\t}\n\n\t\toriginalBeforeSend = settings.beforeSend;\n\t\tsettings.beforeSend = function (xhr, settings) {\n\t\t\tvar result = inner.fire({\n\t\t\t\tname: 'before',\n\t\t\t\toff: settings.off || {}\n\t\t\t}, xhr, settings);\n\t\t\tif ((result || result === undefined) && originalBeforeSend) {\n\t\t\t\tresult = originalBeforeSend(xhr, settings);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn this.handleXHR($.ajax(settings), settings);\n\t};\n\n\t/**\n\t * Binds extension callbacks to existing XHR object\n\t *\n\t * @param {jqXHR|null}\n\t * @param {object} settings\n\t * @return {jqXHR|null}\n\t */\n\tthis.handleXHR = function (xhr, settings) {\n\t\tsettings = settings || {};\n\n\t\tif (xhr && (typeof xhr.statusText === 'undefined' || xhr.statusText !== 'canceled')) {\n\t\t\txhr.done(function (payload, status, xhr) {\n\t\t\t\tinner.fire({\n\t\t\t\t\tname: 'success',\n\t\t\t\t\toff: settings.off || {}\n\t\t\t\t}, payload, status, xhr, settings);\n\t\t\t}).fail(function (xhr, status, error) {\n\t\t\t\tinner.fire({\n\t\t\t\t\tname: 'error',\n\t\t\t\t\toff: settings.off || {}\n\t\t\t\t}, xhr, status, error, settings);\n\t\t\t}).always(function (xhr, status) {\n\t\t\t\tinner.fire({\n\t\t\t\t\tname: 'complete',\n\t\t\t\t\toff: settings.off || {}\n\t\t\t\t}, xhr, status, settings);\n\t\t\t});\n\t\t\tinner.fire({\n\t\t\t\tname: 'start',\n\t\t\t\toff: settings.off || {}\n\t\t\t}, xhr, settings);\n\t\t\tif (settings.start) {\n\t\t\t\tsettings.start(xhr, settings);\n\t\t\t}\n\t\t}\n\t\treturn xhr;\n\t};\n};\n\n$.nette = new ($.extend(nette, $.nette ? $.nette : {}));\n\n$.fn.netteAjax = function (e, options) {\n\treturn $.nette.ajax(options || {}, this[0], e);\n};\n\n$.fn.netteAjaxOff = function () {\n\treturn this.off('.nette');\n};\n\n$.nette.ext('validation', {\n\tbefore: function (xhr, settings) {\n\t\tif (!settings.nette) return true;\n\t\telse var analyze = settings.nette;\n\t\tvar e = analyze.e;\n\n\t\tvar validate = $.extend(this.defaults, settings.validate || (function () {\n\t\t\tif (!analyze.el.is('[data-ajax-validate]')) return;\n\t\t\tvar attr = analyze.el.data('ajaxValidate');\n\t\t\tif (attr === false) return {\n\t\t\t\tkeys: false,\n\t\t\t\turl: false,\n\t\t\t\tform: false\n\t\t\t}; else if (typeof attr === 'object') return attr;\n \t\t})() || {});\n\n\t\tvar passEvent = false;\n\t\tif (analyze.el.attr('data-ajax-pass') !== undefined) {\n\t\t\tpassEvent = analyze.el.data('ajaxPass');\n\t\t\tpassEvent = typeof passEvent === 'bool' ? passEvent : true;\n\t\t}\n\n\t\tif (validate.keys) {\n\t\t\t// thx to @vrana\n\t\t\tvar explicitNoAjax = e.button || e.ctrlKey || e.shiftKey || e.altKey || e.metaKey;\n\n\t\t\tif (analyze.form) {\n\t\t\t\tif (explicitNoAjax && analyze.isSubmit) {\n\t\t\t\t\tthis.explicitNoAjax = true;\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (analyze.isForm && this.explicitNoAjax) {\n\t\t\t\t\tthis.explicitNoAjax = false;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (explicitNoAjax) return false;\n\t\t}\n\n\t\tif (validate.form && analyze.form) {\n\t\t\tif (analyze.isSubmit || analyze.isImage) {\n\t\t\t\tanalyze.form.get(0)[\"nette-submittedBy\"] = analyze.el.get(0);\n\t\t\t}\n\t\t\tvar notValid;\n\t\t\tif ((typeof Nette.version === 'undefined' || Nette.version == '2.3')) { // Nette 2.3 and older\n\t\t\t\tvar ie = this.ie();\n\t\t\t\tnotValid = (analyze.form.get(0).onsubmit && analyze.form.get(0).onsubmit((typeof ie !== 'undefined' && ie < 9) ? undefined : e) === false);\n\t\t\t} else { // Nette 2.4 and up\n\t\t\t\tnotValid = ((analyze.form.get(0).onsubmit ? analyze.form.triggerHandler('submit') : Nette.validateForm(analyze.form.get(0))) === false)\n\t\t\t}\n\t\t\tif (notValid) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (validate.url) {\n\t\t\t// thx to @vrana\n\t\t\tvar urlToValidate = analyze.form ? settings.url : analyze.el.attr('href');\n\t\t\t// Check if URL is absolute\n\t\t\tif (/(?:^[a-z][a-z0-9+.-]*:|\\/\\/)/.test(urlToValidate)) {\n\t\t\t\t// Parse absolute URL\n\t\t\t\tvar parsedUrl = new URL(urlToValidate);\n\t\t\t\tif (/:|^#/.test(parsedUrl['pathname'] + parsedUrl['search'] + parsedUrl['hash'])) return false;\n\t\t\t} else {\n\t\t\t\tif (/:|^#/.test(urlToValidate)) return false;\n\t\t\t}\n\t\t}\n\n\t\tif (!passEvent) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\txhr._returnFalse = true; // for IE 8\n\t\t}\n\t\treturn true;\n\t}\n}, {\n\tdefaults: {\n\t\tkeys: true,\n\t\turl: true,\n\t\tform: true\n\t},\n\texplicitNoAjax: false,\n\tie: function (undefined) { // http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/\n\t\tvar v = 3;\n\t\tvar div = document.createElement('div');\n\t\tvar all = div.getElementsByTagName('i');\n\t\twhile (\n \t\tdiv.innerHTML = '\x3c!--[if gt IE ' + (++v) + ']><i></i><![endif]--\x3e',\n\t\t\tall[0]\n\t\t);\n\t\treturn v > 4 ? v : undefined;\n\t}\n});\n\n$.nette.ext('forms', {\n\tinit: function () {\n\t\tvar snippets;\n\t\tif (!window.Nette || !(snippets = this.ext('snippets'))) return;\n\n\t\tsnippets.after(function ($el) {\n\t\t\t$el.find('form').each(function() {\n\t\t\t\twindow.Nette.initForm(this);\n\t\t\t});\n\t\t});\n\t},\n\tprepare: function (settings) {\n\t\tvar analyze = settings.nette;\n\t\tif (!analyze || !analyze.form) return;\n\t\tvar e = analyze.e;\n\t\tvar originalData = settings.data || {};\n\t\tvar data = {};\n\n\t\tif (analyze.isSubmit) {\n\t\t\tdata[analyze.el.attr('name')] = analyze.el.val() || '';\n\t\t} else if (analyze.isImage) {\n\t\t\tvar offset = analyze.el.offset();\n\t\t\tvar name = analyze.el.attr('name');\n\t\t\tvar dataOffset = [ Math.max(0, e.pageX - offset.left), Math.max(0, e.pageY - offset.top) ];\n\n\t\t\tif (name.indexOf('[', 0) !== -1) { // inside a container\n\t\t\t\tdata[name] = dataOffset;\n\t\t\t} else {\n\t\t\t\tdata[name + '.x'] = dataOffset[0];\n\t\t\t\tdata[name + '.y'] = dataOffset[1];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects#Sending_files_using_a_FormData_object\n\t\tvar formMethod = analyze.form.attr('method');\n\t\tif (formMethod && formMethod.toLowerCase() === 'post' && 'FormData' in window) {\n\t\t\tvar formData = new FormData(analyze.form[0]);\n\t\t\tfor (var i in data) {\n\t\t\t\tformData.append(i, data[i]);\n\t\t\t}\n\n\t\t\tif (typeof originalData !== 'string') {\n\t\t\t\tfor (var i in originalData) {\n\t\t\t\t\tformData.append(i, originalData[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsettings.data = formData;\n\t\t\tsettings.processData = false;\n\t\t\tsettings.contentType = false;\n\t\t} else {\n\t\t\tif (typeof originalData !== 'string') {\n\t\t\t\toriginalData = $.param(originalData);\n\t\t\t}\n\t\t\tdata = $.param(data);\n\t\t\tsettings.data = analyze.form.serialize() + (data ? '&' + data : '') + '&' + originalData;\n\t\t}\n\t}\n});\n\n// default snippet handler\n$.nette.ext('snippets', {\n\tsuccess: function (payload) {\n\t\tif (payload.snippets) {\n\t\t\tthis.updateSnippets(payload.snippets);\n\t\t}\n\t}\n}, {\n\tbeforeQueue: $.Callbacks(),\n\tafterQueue: $.Callbacks(),\n\tcompleteQueue: $.Callbacks(),\n\tbefore: function (callback) {\n\t\tthis.beforeQueue.add(callback);\n\t},\n\tafter: function (callback) {\n\t\tthis.afterQueue.add(callback);\n\t},\n\tcomplete: function (callback) {\n\t\tthis.completeQueue.add(callback);\n\t},\n\tupdateSnippets: function (snippets, back) {\n\t\tvar that = this;\n\t\tvar elements = [];\n\t\tfor (var i in snippets) {\n\t\t\tvar $el = this.getElement(i);\n\t\t\tif ($el.get(0)) {\n\t\t\t\telements.push($el.get(0));\n\t\t\t}\n\t\t\tthis.updateSnippet($el, snippets[i], back);\n\t\t}\n\t\t$(elements).promise().done(function () {\n\t\t\tthat.completeQueue.fire();\n\t\t});\n\t},\n\tupdateSnippet: function ($el, html, back) {\n\t\t// Fix for setting document title in IE\n\t\tif ($el.is('title')) {\n\t\t\tdocument.title = html;\n\t\t} else {\n\t\t\tthis.beforeQueue.fire($el);\n\t\t\tthis.applySnippet($el, html, back);\n\t\t\tthis.afterQueue.fire($el);\n\t\t}\n\t},\n\tgetElement: function (id) {\n\t\treturn $('#' + this.escapeSelector(id));\n\t},\n\tapplySnippet: function ($el, html, back) {\n\t\tif (!back && $el.is('[data-ajax-append]')) {\n\t\t\t$el.append(html);\n\t\t} else if (!back && $el.is('[data-ajax-prepend]')) {\n\t\t\t$el.prepend(html);\n\t\t} else if ($el.html() != html || /<[^>]*script/.test(html)) {\n\t\t\t$el.html(html);\n\t\t}\n\t},\n\tescapeSelector: function (selector) {\n\t\t// thx to @uestla (https://github.com/uestla)\n\t\treturn selector.replace(/[\\!\"#\\$%&'\\(\\)\\*\\+,\\.\\/:;<=>\\?@\\[\\\\\\]\\^`\\{\\|\\}~]/g, '\\\\$&');\n\t}\n});\n\n// support $this->redirect()\n$.nette.ext('redirect', {\n\tsuccess: function (payload) {\n\t\tif (payload.redirect) {\n\t\t\twindow.location.href = payload.redirect;\n\t\t\treturn false;\n\t\t}\n\t}\n});\n\n// current page state\n$.nette.ext('state', {\n\tsuccess: function (payload) {\n\t\tif (payload.state) {\n\t\t\tthis.state = payload.state;\n\t\t}\n\t}\n}, {state: null});\n\n// abort last request if new started\n$.nette.ext('unique', {\n\tstart: function (xhr) {\n\t\tif (this.xhr) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t\tthis.xhr = xhr;\n\t},\n\tcomplete: function () {\n\t\tthis.xhr = null;\n\t}\n}, {xhr: null});\n\n// option to abort by ESC (thx to @vrana)\n$.nette.ext('abort', {\n\tinit: function () {\n\t\t$('body').keydown($.proxy(function (e) {\n\t\t\tif (this.xhr && (e.keyCode.toString() === '27' // Esc\n\t\t\t&& !(e.ctrlKey || e.shiftKey || e.altKey || e.metaKey))\n\t\t\t) {\n\t\t\t\tthis.xhr.abort();\n\t\t\t}\n\t\t}, this));\n\t},\n\tstart: function (xhr) {\n\t\tthis.xhr = xhr;\n\t},\n\tcomplete: function () {\n\t\tthis.xhr = null;\n\t}\n}, {xhr: null});\n\n$.nette.ext('load', {\n\tsuccess: function () {\n\t\t$.nette.load();\n\t}\n});\n\n// default ajaxification (can be overridden in init())\n$.nette.ext('init', {\n\tload: function (rh) {\n\t\t$(this.linkSelector).off('click.nette', rh).on('click.nette', rh);\n\t\t$(this.formSelector).off('submit.nette', rh).on('submit.nette', rh)\n\t\t\t.off('click.nette', ':image', rh).on('click.nette', ':image', rh)\n\t\t\t.off('click.nette', ':submit', rh).on('click.nette', ':submit', rh);\n\t\t$(this.buttonSelector).closest('form')\n\t\t\t.off('click.nette', this.buttonSelector, rh).on('click.nette', this.buttonSelector, rh);\n\t}\n}, {\n\tlinkSelector: 'a.ajax',\n\tformSelector: 'form.ajax',\n\tbuttonSelector: 'input.ajax[type=\"submit\"], button.ajax[type=\"submit\"], input.ajax[type=\"image\"]'\n});\n\n})(window, window.jQuery);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjEyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbmV0dGUuYWpheC5qcy9uZXR0ZS5hamF4LmpzP2M0MTciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBSkFYIE5ldHRlIEZyYW1ld29yayBwbHVnaW4gZm9yIGpRdWVyeVxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIEphbiBNYXJla1xuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAgRGF2aWQgR3J1ZGxcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVm9qdMSbY2ggRG9iZcWhXG4gKiBAbGljZW5zZSBNSVRcbiAqXG4gKiBAdmVyc2lvbiAyLjMuMFxuICovXG5cbihmdW5jdGlvbih3aW5kb3csICQsIHVuZGVmaW5lZCkge1xuXG5pZiAodHlwZW9mICQgIT09ICdmdW5jdGlvbicpIHtcblx0cmV0dXJuIGNvbnNvbGUuZXJyb3IoJ25ldHRlLmFqYXguanM6IGpRdWVyeSBpcyBtaXNzaW5nLCBsb2FkIGl0IHBsZWFzZScpO1xufVxuXG52YXIgbmV0dGUgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBpbm5lciA9IHtcblx0XHRzZWxmOiB0aGlzLFxuXHRcdGluaXRpYWxpemVkOiBmYWxzZSxcblx0XHRjb250ZXh0czoge30sXG5cdFx0b246IHtcblx0XHRcdGluaXQ6IHt9LFxuXHRcdFx0bG9hZDoge30sXG5cdFx0XHRwcmVwYXJlOiB7fSxcblx0XHRcdGJlZm9yZToge30sXG5cdFx0XHRzdGFydDoge30sXG5cdFx0XHRzdWNjZXNzOiB7fSxcblx0XHRcdGNvbXBsZXRlOiB7fSxcblx0XHRcdGVycm9yOiB7fVxuXHRcdH0sXG5cdFx0ZmlyZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHJlc3VsdCA9IHRydWU7XG5cdFx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0XHR2YXIgcHJvcHMgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR2YXIgbmFtZSA9ICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSA/IHByb3BzIDogcHJvcHMubmFtZTtcblx0XHRcdHZhciBvZmYgPSAodHlwZW9mIHByb3BzID09PSAnb2JqZWN0JykgPyBwcm9wcy5vZmYgfHwge30gOiB7fTtcblx0XHRcdGFyZ3MucHVzaChpbm5lci5zZWxmKTtcblx0XHRcdCQuZWFjaChpbm5lci5vbltuYW1lXSwgZnVuY3Rpb24gKGluZGV4LCByZWFjdGlvbikge1xuXHRcdFx0XHRpZiAocmVhY3Rpb24gPT09IHVuZGVmaW5lZCB8fCAkLmluQXJyYXkoaW5kZXgsIG9mZikgIT09IC0xKSByZXR1cm4gdHJ1ZTtcblx0XHRcdFx0dmFyIHRlbXAgPSByZWFjdGlvbi5hcHBseShpbm5lci5jb250ZXh0c1tpbmRleF0sIGFyZ3MpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0ID0gKHRlbXAgPT09IHVuZGVmaW5lZCB8fCB0ZW1wKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHRcdHJlcXVlc3RIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0dmFyIHhociA9IGlubmVyLnNlbGYuYWpheCh7fSwgdGhpcywgZSk7XG5cdFx0XHRpZiAoeGhyICYmIHhoci5fcmV0dXJuRmFsc2UpIHsgLy8gZm9yIElFIDhcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZXh0OiBmdW5jdGlvbiAoY2FsbGJhY2tzLCBjb250ZXh0LCBuYW1lKSB7XG5cdFx0XHR3aGlsZSAoIW5hbWUpIHtcblx0XHRcdFx0bmFtZSA9ICdleHRfJyArIE1hdGgucmFuZG9tKCk7XG5cdFx0XHRcdGlmIChpbm5lci5jb250ZXh0c1tuYW1lXSkge1xuXHRcdFx0XHRcdG5hbWUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0JC5lYWNoKGNhbGxiYWNrcywgZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHRcdFx0XHRpbm5lci5vbltldmVudF1bbmFtZV0gPSBjYWxsYmFjaztcblx0XHRcdH0pO1xuXHRcdFx0aW5uZXIuY29udGV4dHNbbmFtZV0gPSAkLmV4dGVuZChjb250ZXh0ID8gY29udGV4dCA6IHt9LCB7XG5cdFx0XHRcdG5hbWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXh0OiBmdW5jdGlvbiAobmFtZSwgZm9yY2UpIHtcblx0XHRcdFx0XHR2YXIgZXh0ID0gaW5uZXIuY29udGV4dHNbbmFtZV07XG5cdFx0XHRcdFx0aWYgKCFleHQgJiYgZm9yY2UpIHRocm93IFwiRXh0ZW5zaW9uICdcIiArIHRoaXMubmFtZSgpICsgXCInIGRlcGVuZHMgb24gZGlzYWJsZWQgZXh0ZW5zaW9uICdcIiArIG5hbWUgKyBcIicuXCI7XG5cdFx0XHRcdFx0cmV0dXJuIGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIHdpdGggZXh0ZW5zaW9ucy5cblx0ICogV2hlbiBjYWxsZWQgd2l0aCAxLiBhcmd1bWVudCBvbmx5LCBpdCByZXR1cm5zIGV4dGVuc2lvbiB3aXRoIGdpdmVuIG5hbWUuXG5cdCAqIFdoZW4gY2FsbGVkIHdpdGggMi4gYXJndW1lbnQgZXF1YWwgdG8gZmFsc2UsIGl0IHJlbW92ZXMgZXh0ZW5zaW9uIGVudGlyZWx5LlxuXHQgKiBXaGVuIGNhbGxlZCB3aXRoIDIuIGFyZ3VtZW50IGVxdWFsIHRvIGhhc2ggb2YgZXZlbnQgY2FsbGJhY2tzLCBpdCBhZGRzIG5ldyBleHRlbnNpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSAge3N0cmluZ30gTmFtZSBvZiBleHRlbnNpb25cblx0ICogQHBhcmFtICB7Ym9vbHxvYmplY3R8bnVsbH0gU2V0IG9mIGNhbGxiYWNrcyBmb3IgYW55IGV2ZW50cyBPUiBmYWxzZSBmb3IgcmVtb3ZpbmcgZXh0ZW5zaW9uLlxuXHQgKiBAcGFyYW0gIHtvYmplY3R8bnVsbH0gQ29udGV4dCBmb3IgYWRkZWQgZXh0ZW5zaW9uXG5cdCAqIEByZXR1cm4geyQubmV0dGV8b2JqZWN0fSBQcm92aWRlcyBhIGZsdWVudCBpbnRlcmZhY2UgT1IgcmV0dXJucyBleHRlbnNpb25zIHdpdGggZ2l2ZW4gbmFtZVxuXHQgKi9cblx0dGhpcy5leHQgPSBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2tzLCBjb250ZXh0KSB7XG5cdFx0aWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuXHRcdFx0aW5uZXIuZXh0KG5hbWUsIGNhbGxiYWNrcyk7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFja3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGlubmVyLmNvbnRleHRzW25hbWVdO1xuXHRcdH0gZWxzZSBpZiAoIWNhbGxiYWNrcykge1xuXHRcdFx0JC5lYWNoKFsnaW5pdCcsICdsb2FkJywgJ3ByZXBhcmUnLCAnYmVmb3JlJywgJ3N0YXJ0JywgJ3N1Y2Nlc3MnLCAnY29tcGxldGUnLCAnZXJyb3InXSwgZnVuY3Rpb24gKGluZGV4LCBldmVudCkge1xuXHRcdFx0XHRpbm5lci5vbltldmVudF1bbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlubmVyLmNvbnRleHRzW25hbWVdID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIGlubmVyLmNvbnRleHRzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IFwiQ2Fubm90IG92ZXJyaWRlIGFscmVhZHkgcmVnaXN0ZXJlZCBuZXR0ZS1hamF4IGV4dGVuc2lvbiAnXCIgKyBuYW1lICsgXCInLlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbm5lci5leHQoY2FsbGJhY2tzLCBjb250ZXh0LCBuYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW46XG5cdCAqIC0gZmlyZXMgJ2luaXQnIGV2ZW50LCB0aGVuICdsb2FkJyBldmVudFxuXHQgKiAtIHdoZW4gY2FsbGVkIHdpdGggYW55IGFyZ3VtZW50cywgaXQgd2lsbCBvdmVycmlkZSBkZWZhdWx0ICdpbml0JyBleHRlbnNpb25cblx0ICogICB3aXRoIHByb3ZpZGVkIGNhbGxiYWNrc1xuXHQgKlxuXHQgKiBAcGFyYW0gIHtmdW5jdGlvbnxvYmplY3R8bnVsbH0gQ2FsbGJhY2sgZm9yICdsb2FkJyBldmVudCBvciBlbnRpcmUgc2V0IG9mIGNhbGxiYWNrcyBmb3IgYW55IGV2ZW50c1xuXHQgKiBAcGFyYW0gIHtvYmplY3R8bnVsbH0gQ29udGV4dCBwcm92aWRlZCBmb3IgY2FsbGJhY2tzIGluIGZpcnN0IGFyZ3VtZW50XG5cdCAqIEByZXR1cm4geyQubmV0dGV9IFByb3ZpZGVzIGEgZmx1ZW50IGludGVyZmFjZVxuXHQgKi9cblx0dGhpcy5pbml0ID0gZnVuY3Rpb24gKGxvYWQsIGxvYWRDb250ZXh0KSB7XG5cdFx0aWYgKGlubmVyLmluaXRpYWxpemVkKSB0aHJvdyAnQ2Fubm90IGluaXRpYWxpemUgbmV0dGUtYWpheCB0d2ljZS4nO1xuXG5cdFx0aWYgKHR5cGVvZiBsb2FkID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR0aGlzLmV4dCgnaW5pdCcsIG51bGwpO1xuXHRcdFx0dGhpcy5leHQoJ2luaXQnLCB7XG5cdFx0XHRcdGxvYWQ6IGxvYWRcblx0XHRcdH0sIGxvYWRDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBsb2FkID09PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhpcy5leHQoJ2luaXQnLCBudWxsKTtcblx0XHRcdHRoaXMuZXh0KCdpbml0JywgbG9hZCwgbG9hZENvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAobG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyAnQXJndW1lbnQgb2YgaW5pdCgpIGNhbiBiZSBmdW5jdGlvbiBvciBmdW5jdGlvbi1oYXNoIG9ubHkuJztcblx0XHR9XG5cblx0XHRpbm5lci5pbml0aWFsaXplZCA9IHRydWU7XG5cblx0XHRpbm5lci5maXJlKCdpbml0Jyk7XG5cdFx0dGhpcy5sb2FkKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEZpcmVzICdsb2FkJyBldmVudFxuXHQgKlxuXHQgKiBAcmV0dXJuIHskLm5ldHRlfSBQcm92aWRlcyBhIGZsdWVudCBpbnRlcmZhY2Vcblx0ICovXG5cdHRoaXMubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpbm5lci5maXJlKCdsb2FkJywgaW5uZXIucmVxdWVzdEhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyBBSkFYIHJlcXVlc3QuIEF0dGFjaGVzIGxpc3RlbmVycyBhbmQgZXZlbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gIHtvYmplY3R8c3RyaW5nfSBzZXR0aW5ncyBvciBVUkxcblx0ICogQHBhcmFtICB7RWxlbWVudHxudWxsfSB1c3N1YWxseSBBbmNob3Igb3IgRm9ybVxuXHQgKiBAcGFyYW0gIHtldmVudHxudWxsfSBldmVudCBjYXVzaW5nIHRoZSByZXF1ZXN0XG5cdCAqIEByZXR1cm4ge2pxWEhSfG51bGx9XG5cdCAqL1xuXHR0aGlzLmFqYXggPSBmdW5jdGlvbiAoc2V0dGluZ3MsIHVpLCBlKSB7XG5cdFx0aWYgKCQudHlwZShzZXR0aW5ncykgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRzZXR0aW5ncyA9IHt1cmw6IHNldHRpbmdzfTtcblx0XHR9XG5cdFx0aWYgKCFzZXR0aW5ncy5uZXR0ZSAmJiB1aSAmJiBlKSB7XG5cdFx0XHR2YXIgJGVsID0gJCh1aSksIHhociwgb3JpZ2luYWxCZWZvcmVTZW5kO1xuXHRcdFx0dmFyIGFuYWx5emUgPSBzZXR0aW5ncy5uZXR0ZSA9IHtcblx0XHRcdFx0ZTogZSxcblx0XHRcdFx0dWk6IHVpLFxuXHRcdFx0XHRlbDogJGVsLFxuXHRcdFx0XHRpc0Zvcm06ICRlbC5pcygnZm9ybScpLFxuXHRcdFx0XHRpc1N1Ym1pdDogJGVsLmlzKCdpbnB1dFt0eXBlPXN1Ym1pdF0nKSB8fCAkZWwuaXMoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKSxcblx0XHRcdFx0aXNJbWFnZTogJGVsLmlzKCdpbnB1dFt0eXBlPWltYWdlXScpLFxuXHRcdFx0XHRmb3JtOiBudWxsXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoYW5hbHl6ZS5pc1N1Ym1pdCB8fCBhbmFseXplLmlzSW1hZ2UpIHtcblx0XHRcdFx0YW5hbHl6ZS5mb3JtID0gYW5hbHl6ZS5lbC5jbG9zZXN0KCdmb3JtJyk7XG5cdFx0XHR9IGVsc2UgaWYgKGFuYWx5emUuaXNGb3JtKSB7XG5cdFx0XHRcdGFuYWx5emUuZm9ybSA9IGFuYWx5emUuZWw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2V0dGluZ3MudXJsKSB7XG5cdFx0XHRcdHNldHRpbmdzLnVybCA9IGFuYWx5emUuZm9ybSA/IGFuYWx5emUuZm9ybS5hdHRyKCdhY3Rpb24nKSB8fCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoIDogdWkuaHJlZjtcblx0XHRcdH1cblx0XHRcdGlmICghc2V0dGluZ3MudHlwZSkge1xuXHRcdFx0XHRzZXR0aW5ncy50eXBlID0gYW5hbHl6ZS5mb3JtID8gYW5hbHl6ZS5mb3JtLmF0dHIoJ21ldGhvZCcpIDogJ2dldCc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgkZWwuaXMoJ1tkYXRhLWFqYXgtb2ZmXScpKSB7XG5cdFx0XHRcdHZhciByYXdPZmYgPSAkZWwuYXR0cignZGF0YS1hamF4LW9mZicpO1xuXHRcdFx0XHRpZiAocmF3T2ZmLmluZGV4T2YoJ1snKSA9PT0gMCkge1xuXHRcdFx0XHRcdHNldHRpbmdzLm9mZiA9ICRlbC5kYXRhKCdhamF4T2ZmJyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmF3T2ZmLmluZGV4T2YoJywnKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRzZXR0aW5ncy5vZmYgPSByYXdPZmYuc3BsaXQoJywnKTtcblx0XHRcdFx0fSBlbHNlIGlmIChyYXdPZmYuaW5kZXhPZignICcpICE9PSAtMSkge1xuXHRcdFx0XHRcdHNldHRpbmdzLm9mZiA9IHJhd09mZi5zcGxpdCgnICcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNldHRpbmdzLm9mZiA9IHJhd09mZjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIHNldHRpbmdzLm9mZiA9PT0gJ3N0cmluZycpIHNldHRpbmdzLm9mZiA9IFtzZXR0aW5ncy5vZmZdO1xuXHRcdFx0XHRzZXR0aW5ncy5vZmYgPSAkLmdyZXAoJC5lYWNoKHNldHRpbmdzLm9mZiwgZnVuY3Rpb24gKG9mZikge1xuXHRcdFx0XHRcdHJldHVybiAkLnRyaW0ob2ZmKTtcblx0XHRcdFx0fSksIGZ1bmN0aW9uIChvZmYpIHtcblx0XHRcdFx0XHRyZXR1cm4gb2ZmLmxlbmd0aDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aW5uZXIuZmlyZSh7XG5cdFx0XHRuYW1lOiAncHJlcGFyZScsXG5cdFx0XHRvZmY6IHNldHRpbmdzLm9mZiB8fCB7fVxuXHRcdH0sIHNldHRpbmdzKTtcblx0XHRpZiAoc2V0dGluZ3MucHJlcGFyZSkge1xuXHRcdFx0c2V0dGluZ3MucHJlcGFyZShzZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0b3JpZ2luYWxCZWZvcmVTZW5kID0gc2V0dGluZ3MuYmVmb3JlU2VuZDtcblx0XHRzZXR0aW5ncy5iZWZvcmVTZW5kID0gZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcblx0XHRcdHZhciByZXN1bHQgPSBpbm5lci5maXJlKHtcblx0XHRcdFx0bmFtZTogJ2JlZm9yZScsXG5cdFx0XHRcdG9mZjogc2V0dGluZ3Mub2ZmIHx8IHt9XG5cdFx0XHR9LCB4aHIsIHNldHRpbmdzKTtcblx0XHRcdGlmICgocmVzdWx0IHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSAmJiBvcmlnaW5hbEJlZm9yZVNlbmQpIHtcblx0XHRcdFx0cmVzdWx0ID0gb3JpZ2luYWxCZWZvcmVTZW5kKHhociwgc2V0dGluZ3MpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlWEhSKCQuYWpheChzZXR0aW5ncyksIHNldHRpbmdzKTtcblx0fTtcblxuXHQvKipcblx0ICogQmluZHMgZXh0ZW5zaW9uIGNhbGxiYWNrcyB0byBleGlzdGluZyBYSFIgb2JqZWN0XG5cdCAqXG5cdCAqIEBwYXJhbSAge2pxWEhSfG51bGx9XG5cdCAqIEBwYXJhbSAge29iamVjdH0gc2V0dGluZ3Ncblx0ICogQHJldHVybiB7anFYSFJ8bnVsbH1cblx0ICovXG5cdHRoaXMuaGFuZGxlWEhSID0gZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcblx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXG5cdFx0aWYgKHhociAmJiAodHlwZW9mIHhoci5zdGF0dXNUZXh0ID09PSAndW5kZWZpbmVkJyB8fCB4aHIuc3RhdHVzVGV4dCAhPT0gJ2NhbmNlbGVkJykpIHtcblx0XHRcdHhoci5kb25lKGZ1bmN0aW9uIChwYXlsb2FkLCBzdGF0dXMsIHhocikge1xuXHRcdFx0XHRpbm5lci5maXJlKHtcblx0XHRcdFx0XHRuYW1lOiAnc3VjY2VzcycsXG5cdFx0XHRcdFx0b2ZmOiBzZXR0aW5ncy5vZmYgfHwge31cblx0XHRcdFx0fSwgcGF5bG9hZCwgc3RhdHVzLCB4aHIsIHNldHRpbmdzKTtcblx0XHRcdH0pLmZhaWwoZnVuY3Rpb24gKHhociwgc3RhdHVzLCBlcnJvcikge1xuXHRcdFx0XHRpbm5lci5maXJlKHtcblx0XHRcdFx0XHRuYW1lOiAnZXJyb3InLFxuXHRcdFx0XHRcdG9mZjogc2V0dGluZ3Mub2ZmIHx8IHt9XG5cdFx0XHRcdH0sIHhociwgc3RhdHVzLCBlcnJvciwgc2V0dGluZ3MpO1xuXHRcdFx0fSkuYWx3YXlzKGZ1bmN0aW9uICh4aHIsIHN0YXR1cykge1xuXHRcdFx0XHRpbm5lci5maXJlKHtcblx0XHRcdFx0XHRuYW1lOiAnY29tcGxldGUnLFxuXHRcdFx0XHRcdG9mZjogc2V0dGluZ3Mub2ZmIHx8IHt9XG5cdFx0XHRcdH0sIHhociwgc3RhdHVzLCBzZXR0aW5ncyk7XG5cdFx0XHR9KTtcblx0XHRcdGlubmVyLmZpcmUoe1xuXHRcdFx0XHRuYW1lOiAnc3RhcnQnLFxuXHRcdFx0XHRvZmY6IHNldHRpbmdzLm9mZiB8fCB7fVxuXHRcdFx0fSwgeGhyLCBzZXR0aW5ncyk7XG5cdFx0XHRpZiAoc2V0dGluZ3Muc3RhcnQpIHtcblx0XHRcdFx0c2V0dGluZ3Muc3RhcnQoeGhyLCBzZXR0aW5ncyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB4aHI7XG5cdH07XG59O1xuXG4kLm5ldHRlID0gbmV3ICgkLmV4dGVuZChuZXR0ZSwgJC5uZXR0ZSA/ICQubmV0dGUgOiB7fSkpO1xuXG4kLmZuLm5ldHRlQWpheCA9IGZ1bmN0aW9uIChlLCBvcHRpb25zKSB7XG5cdHJldHVybiAkLm5ldHRlLmFqYXgob3B0aW9ucyB8fCB7fSwgdGhpc1swXSwgZSk7XG59O1xuXG4kLmZuLm5ldHRlQWpheE9mZiA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHRoaXMub2ZmKCcubmV0dGUnKTtcbn07XG5cbiQubmV0dGUuZXh0KCd2YWxpZGF0aW9uJywge1xuXHRiZWZvcmU6IGZ1bmN0aW9uICh4aHIsIHNldHRpbmdzKSB7XG5cdFx0aWYgKCFzZXR0aW5ncy5uZXR0ZSkgcmV0dXJuIHRydWU7XG5cdFx0ZWxzZSB2YXIgYW5hbHl6ZSA9IHNldHRpbmdzLm5ldHRlO1xuXHRcdHZhciBlID0gYW5hbHl6ZS5lO1xuXG5cdFx0dmFyIHZhbGlkYXRlID0gJC5leHRlbmQodGhpcy5kZWZhdWx0cywgc2V0dGluZ3MudmFsaWRhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghYW5hbHl6ZS5lbC5pcygnW2RhdGEtYWpheC12YWxpZGF0ZV0nKSkgcmV0dXJuO1xuXHRcdFx0dmFyIGF0dHIgPSBhbmFseXplLmVsLmRhdGEoJ2FqYXhWYWxpZGF0ZScpO1xuXHRcdFx0aWYgKGF0dHIgPT09IGZhbHNlKSByZXR1cm4ge1xuXHRcdFx0XHRrZXlzOiBmYWxzZSxcblx0XHRcdFx0dXJsOiBmYWxzZSxcblx0XHRcdFx0Zm9ybTogZmFsc2Vcblx0XHRcdH07IGVsc2UgaWYgKHR5cGVvZiBhdHRyID09PSAnb2JqZWN0JykgcmV0dXJuIGF0dHI7XG4gXHRcdH0pKCkgfHwge30pO1xuXG5cdFx0dmFyIHBhc3NFdmVudCA9IGZhbHNlO1xuXHRcdGlmIChhbmFseXplLmVsLmF0dHIoJ2RhdGEtYWpheC1wYXNzJykgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFzc0V2ZW50ID0gYW5hbHl6ZS5lbC5kYXRhKCdhamF4UGFzcycpO1xuXHRcdFx0cGFzc0V2ZW50ID0gdHlwZW9mIHBhc3NFdmVudCA9PT0gJ2Jvb2wnID8gcGFzc0V2ZW50IDogdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodmFsaWRhdGUua2V5cykge1xuXHRcdFx0Ly8gdGh4IHRvIEB2cmFuYVxuXHRcdFx0dmFyIGV4cGxpY2l0Tm9BamF4ID0gZS5idXR0b24gfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5O1xuXG5cdFx0XHRpZiAoYW5hbHl6ZS5mb3JtKSB7XG5cdFx0XHRcdGlmIChleHBsaWNpdE5vQWpheCAmJiBhbmFseXplLmlzU3VibWl0KSB7XG5cdFx0XHRcdFx0dGhpcy5leHBsaWNpdE5vQWpheCA9IHRydWU7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFuYWx5emUuaXNGb3JtICYmIHRoaXMuZXhwbGljaXROb0FqYXgpIHtcblx0XHRcdFx0XHR0aGlzLmV4cGxpY2l0Tm9BamF4ID0gZmFsc2U7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGV4cGxpY2l0Tm9BamF4KSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbGlkYXRlLmZvcm0gJiYgYW5hbHl6ZS5mb3JtKSB7XG5cdFx0XHRpZiAoYW5hbHl6ZS5pc1N1Ym1pdCB8fCBhbmFseXplLmlzSW1hZ2UpIHtcblx0XHRcdFx0YW5hbHl6ZS5mb3JtLmdldCgwKVtcIm5ldHRlLXN1Ym1pdHRlZEJ5XCJdID0gYW5hbHl6ZS5lbC5nZXQoMCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgbm90VmFsaWQ7XG5cdFx0XHRpZiAoKHR5cGVvZiBOZXR0ZS52ZXJzaW9uID09PSAndW5kZWZpbmVkJyB8fCBOZXR0ZS52ZXJzaW9uID09ICcyLjMnKSkgeyAvLyBOZXR0ZSAyLjMgYW5kIG9sZGVyXG5cdFx0XHRcdHZhciBpZSA9IHRoaXMuaWUoKTtcblx0XHRcdFx0bm90VmFsaWQgPSAoYW5hbHl6ZS5mb3JtLmdldCgwKS5vbnN1Ym1pdCAmJiBhbmFseXplLmZvcm0uZ2V0KDApLm9uc3VibWl0KCh0eXBlb2YgaWUgIT09ICd1bmRlZmluZWQnICYmIGllIDwgOSkgPyB1bmRlZmluZWQgOiBlKSA9PT0gZmFsc2UpO1xuXHRcdFx0fSBlbHNlIHsgLy8gTmV0dGUgMi40IGFuZCB1cFxuXHRcdFx0XHRub3RWYWxpZCA9ICgoYW5hbHl6ZS5mb3JtLmdldCgwKS5vbnN1Ym1pdCA/IGFuYWx5emUuZm9ybS50cmlnZ2VySGFuZGxlcignc3VibWl0JykgOiBOZXR0ZS52YWxpZGF0ZUZvcm0oYW5hbHl6ZS5mb3JtLmdldCgwKSkpID09PSBmYWxzZSlcblx0XHRcdH1cblx0XHRcdGlmIChub3RWYWxpZCkge1xuXHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodmFsaWRhdGUudXJsKSB7XG5cdFx0XHQvLyB0aHggdG8gQHZyYW5hXG5cdFx0XHR2YXIgdXJsVG9WYWxpZGF0ZSA9IGFuYWx5emUuZm9ybSA/IHNldHRpbmdzLnVybCA6IGFuYWx5emUuZWwuYXR0cignaHJlZicpO1xuXHRcdFx0Ly8gQ2hlY2sgaWYgVVJMIGlzIGFic29sdXRlXG5cdFx0XHRpZiAoLyg/Ol5bYS16XVthLXowLTkrLi1dKjp8XFwvXFwvKS8udGVzdCh1cmxUb1ZhbGlkYXRlKSkge1xuXHRcdFx0XHQvLyBQYXJzZSBhYnNvbHV0ZSBVUkxcblx0XHRcdFx0dmFyIHBhcnNlZFVybCA9IG5ldyBVUkwodXJsVG9WYWxpZGF0ZSk7XG5cdFx0XHRcdGlmICgvOnxeIy8udGVzdChwYXJzZWRVcmxbJ3BhdGhuYW1lJ10gKyBwYXJzZWRVcmxbJ3NlYXJjaCddICsgcGFyc2VkVXJsWydoYXNoJ10pKSByZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoLzp8XiMvLnRlc3QodXJsVG9WYWxpZGF0ZSkpIHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXBhc3NFdmVudCkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHhoci5fcmV0dXJuRmFsc2UgPSB0cnVlOyAvLyBmb3IgSUUgOFxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufSwge1xuXHRkZWZhdWx0czoge1xuXHRcdGtleXM6IHRydWUsXG5cdFx0dXJsOiB0cnVlLFxuXHRcdGZvcm06IHRydWVcblx0fSxcblx0ZXhwbGljaXROb0FqYXg6IGZhbHNlLFxuXHRpZTogZnVuY3Rpb24gKHVuZGVmaW5lZCkgeyAvLyBodHRwOi8vamFtZXMucGFkb2xzZXkuY29tL2phdmFzY3JpcHQvZGV0ZWN0LWllLWluLWpzLXVzaW5nLWNvbmRpdGlvbmFsLWNvbW1lbnRzL1xuXHRcdHZhciB2ID0gMztcblx0XHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0dmFyIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaScpO1xuXHRcdHdoaWxlIChcbiAgICAgICAgXHRcdGRpdi5pbm5lckhUTUwgPSAnPCEtLVtpZiBndCBJRSAnICsgKCsrdikgKyAnXT48aT48L2k+PCFbZW5kaWZdLS0+Jyxcblx0XHRcdGFsbFswXVxuXHRcdCk7XG5cdFx0cmV0dXJuIHYgPiA0ID8gdiA6IHVuZGVmaW5lZDtcblx0fVxufSk7XG5cbiQubmV0dGUuZXh0KCdmb3JtcycsIHtcblx0aW5pdDogZnVuY3Rpb24gKCkge1xuXHRcdHZhciBzbmlwcGV0cztcblx0XHRpZiAoIXdpbmRvdy5OZXR0ZSB8fCAhKHNuaXBwZXRzID0gdGhpcy5leHQoJ3NuaXBwZXRzJykpKSByZXR1cm47XG5cblx0XHRzbmlwcGV0cy5hZnRlcihmdW5jdGlvbiAoJGVsKSB7XG5cdFx0XHQkZWwuZmluZCgnZm9ybScpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHdpbmRvdy5OZXR0ZS5pbml0Rm9ybSh0aGlzKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9LFxuXHRwcmVwYXJlOiBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcblx0XHR2YXIgYW5hbHl6ZSA9IHNldHRpbmdzLm5ldHRlO1xuXHRcdGlmICghYW5hbHl6ZSB8fCAhYW5hbHl6ZS5mb3JtKSByZXR1cm47XG5cdFx0dmFyIGUgPSBhbmFseXplLmU7XG5cdFx0dmFyIG9yaWdpbmFsRGF0YSA9IHNldHRpbmdzLmRhdGEgfHwge307XG5cdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdGlmIChhbmFseXplLmlzU3VibWl0KSB7XG5cdFx0XHRkYXRhW2FuYWx5emUuZWwuYXR0cignbmFtZScpXSA9IGFuYWx5emUuZWwudmFsKCkgfHwgJyc7XG5cdFx0fSBlbHNlIGlmIChhbmFseXplLmlzSW1hZ2UpIHtcblx0XHRcdHZhciBvZmZzZXQgPSBhbmFseXplLmVsLm9mZnNldCgpO1xuXHRcdFx0dmFyIG5hbWUgPSBhbmFseXplLmVsLmF0dHIoJ25hbWUnKTtcblx0XHRcdHZhciBkYXRhT2Zmc2V0ID0gWyBNYXRoLm1heCgwLCBlLnBhZ2VYIC0gb2Zmc2V0LmxlZnQpLCBNYXRoLm1heCgwLCBlLnBhZ2VZIC0gb2Zmc2V0LnRvcCkgXTtcblxuXHRcdFx0aWYgKG5hbWUuaW5kZXhPZignWycsIDApICE9PSAtMSkgeyAvLyBpbnNpZGUgYSBjb250YWluZXJcblx0XHRcdFx0ZGF0YVtuYW1lXSA9IGRhdGFPZmZzZXQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhW25hbWUgKyAnLngnXSA9IGRhdGFPZmZzZXRbMF07XG5cdFx0XHRcdGRhdGFbbmFtZSArICcueSddID0gZGF0YU9mZnNldFsxXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvVXNpbmdfRm9ybURhdGFfT2JqZWN0cyNTZW5kaW5nX2ZpbGVzX3VzaW5nX2FfRm9ybURhdGFfb2JqZWN0XG5cdFx0dmFyIGZvcm1NZXRob2QgPSBhbmFseXplLmZvcm0uYXR0cignbWV0aG9kJyk7XG5cdFx0aWYgKGZvcm1NZXRob2QgJiYgZm9ybU1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSAncG9zdCcgJiYgJ0Zvcm1EYXRhJyBpbiB3aW5kb3cpIHtcblx0XHRcdHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShhbmFseXplLmZvcm1bMF0pO1xuXHRcdFx0Zm9yICh2YXIgaSBpbiBkYXRhKSB7XG5cdFx0XHRcdGZvcm1EYXRhLmFwcGVuZChpLCBkYXRhW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGVvZiBvcmlnaW5hbERhdGEgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGZvciAodmFyIGkgaW4gb3JpZ2luYWxEYXRhKSB7XG5cdFx0XHRcdFx0Zm9ybURhdGEuYXBwZW5kKGksIG9yaWdpbmFsRGF0YVtpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0c2V0dGluZ3MuZGF0YSA9IGZvcm1EYXRhO1xuXHRcdFx0c2V0dGluZ3MucHJvY2Vzc0RhdGEgPSBmYWxzZTtcblx0XHRcdHNldHRpbmdzLmNvbnRlbnRUeXBlID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2Ygb3JpZ2luYWxEYXRhICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRvcmlnaW5hbERhdGEgPSAkLnBhcmFtKG9yaWdpbmFsRGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRkYXRhID0gJC5wYXJhbShkYXRhKTtcblx0XHRcdHNldHRpbmdzLmRhdGEgPSBhbmFseXplLmZvcm0uc2VyaWFsaXplKCkgKyAoZGF0YSA/ICcmJyArIGRhdGEgOiAnJykgKyAnJicgKyBvcmlnaW5hbERhdGE7XG5cdFx0fVxuXHR9XG59KTtcblxuLy8gZGVmYXVsdCBzbmlwcGV0IGhhbmRsZXJcbiQubmV0dGUuZXh0KCdzbmlwcGV0cycsIHtcblx0c3VjY2VzczogZnVuY3Rpb24gKHBheWxvYWQpIHtcblx0XHRpZiAocGF5bG9hZC5zbmlwcGV0cykge1xuXHRcdFx0dGhpcy51cGRhdGVTbmlwcGV0cyhwYXlsb2FkLnNuaXBwZXRzKTtcblx0XHR9XG5cdH1cbn0sIHtcblx0YmVmb3JlUXVldWU6ICQuQ2FsbGJhY2tzKCksXG5cdGFmdGVyUXVldWU6ICQuQ2FsbGJhY2tzKCksXG5cdGNvbXBsZXRlUXVldWU6ICQuQ2FsbGJhY2tzKCksXG5cdGJlZm9yZTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5iZWZvcmVRdWV1ZS5hZGQoY2FsbGJhY2spO1xuXHR9LFxuXHRhZnRlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5hZnRlclF1ZXVlLmFkZChjYWxsYmFjayk7XG5cdH0sXG5cdGNvbXBsZXRlOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHR0aGlzLmNvbXBsZXRlUXVldWUuYWRkKGNhbGxiYWNrKTtcblx0fSxcblx0dXBkYXRlU25pcHBldHM6IGZ1bmN0aW9uIChzbmlwcGV0cywgYmFjaykge1xuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHR2YXIgZWxlbWVudHMgPSBbXTtcblx0XHRmb3IgKHZhciBpIGluIHNuaXBwZXRzKSB7XG5cdFx0XHR2YXIgJGVsID0gdGhpcy5nZXRFbGVtZW50KGkpO1xuXHRcdFx0aWYgKCRlbC5nZXQoMCkpIHtcblx0XHRcdFx0ZWxlbWVudHMucHVzaCgkZWwuZ2V0KDApKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudXBkYXRlU25pcHBldCgkZWwsIHNuaXBwZXRzW2ldLCBiYWNrKTtcblx0XHR9XG5cdFx0JChlbGVtZW50cykucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhhdC5jb21wbGV0ZVF1ZXVlLmZpcmUoKTtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlU25pcHBldDogZnVuY3Rpb24gKCRlbCwgaHRtbCwgYmFjaykge1xuXHRcdC8vIEZpeCBmb3Igc2V0dGluZyBkb2N1bWVudCB0aXRsZSBpbiBJRVxuXHRcdGlmICgkZWwuaXMoJ3RpdGxlJykpIHtcblx0XHRcdGRvY3VtZW50LnRpdGxlID0gaHRtbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5iZWZvcmVRdWV1ZS5maXJlKCRlbCk7XG5cdFx0XHR0aGlzLmFwcGx5U25pcHBldCgkZWwsIGh0bWwsIGJhY2spO1xuXHRcdFx0dGhpcy5hZnRlclF1ZXVlLmZpcmUoJGVsKTtcblx0XHR9XG5cdH0sXG5cdGdldEVsZW1lbnQ6IGZ1bmN0aW9uIChpZCkge1xuXHRcdHJldHVybiAkKCcjJyArIHRoaXMuZXNjYXBlU2VsZWN0b3IoaWQpKTtcblx0fSxcblx0YXBwbHlTbmlwcGV0OiBmdW5jdGlvbiAoJGVsLCBodG1sLCBiYWNrKSB7XG5cdFx0aWYgKCFiYWNrICYmICRlbC5pcygnW2RhdGEtYWpheC1hcHBlbmRdJykpIHtcblx0XHRcdCRlbC5hcHBlbmQoaHRtbCk7XG5cdFx0fSBlbHNlIGlmICghYmFjayAmJiAkZWwuaXMoJ1tkYXRhLWFqYXgtcHJlcGVuZF0nKSkge1xuXHRcdFx0JGVsLnByZXBlbmQoaHRtbCk7XG5cdFx0fSBlbHNlIGlmICgkZWwuaHRtbCgpICE9IGh0bWwgfHwgLzxbXj5dKnNjcmlwdC8udGVzdChodG1sKSkge1xuXHRcdFx0JGVsLmh0bWwoaHRtbCk7XG5cdFx0fVxuXHR9LFxuXHRlc2NhcGVTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG5cdFx0Ly8gdGh4IHRvIEB1ZXN0bGEgKGh0dHBzOi8vZ2l0aHViLmNvbS91ZXN0bGEpXG5cdFx0cmV0dXJuIHNlbGVjdG9yLnJlcGxhY2UoL1tcXCFcIiNcXCQlJidcXChcXClcXCpcXCssXFwuXFwvOjs8PT5cXD9AXFxbXFxcXFxcXVxcXmBcXHtcXHxcXH1+XS9nLCAnXFxcXCQmJyk7XG5cdH1cbn0pO1xuXG4vLyBzdXBwb3J0ICR0aGlzLT5yZWRpcmVjdCgpXG4kLm5ldHRlLmV4dCgncmVkaXJlY3QnLCB7XG5cdHN1Y2Nlc3M6IGZ1bmN0aW9uIChwYXlsb2FkKSB7XG5cdFx0aWYgKHBheWxvYWQucmVkaXJlY3QpIHtcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF5bG9hZC5yZWRpcmVjdDtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vLyBjdXJyZW50IHBhZ2Ugc3RhdGVcbiQubmV0dGUuZXh0KCdzdGF0ZScsIHtcblx0c3VjY2VzczogZnVuY3Rpb24gKHBheWxvYWQpIHtcblx0XHRpZiAocGF5bG9hZC5zdGF0ZSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IHBheWxvYWQuc3RhdGU7XG5cdFx0fVxuXHR9XG59LCB7c3RhdGU6IG51bGx9KTtcblxuLy8gYWJvcnQgbGFzdCByZXF1ZXN0IGlmIG5ldyBzdGFydGVkXG4kLm5ldHRlLmV4dCgndW5pcXVlJywge1xuXHRzdGFydDogZnVuY3Rpb24gKHhocikge1xuXHRcdGlmICh0aGlzLnhocikge1xuXHRcdFx0dGhpcy54aHIuYWJvcnQoKTtcblx0XHR9XG5cdFx0dGhpcy54aHIgPSB4aHI7XG5cdH0sXG5cdGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy54aHIgPSBudWxsO1xuXHR9XG59LCB7eGhyOiBudWxsfSk7XG5cbi8vIG9wdGlvbiB0byBhYm9ydCBieSBFU0MgKHRoeCB0byBAdnJhbmEpXG4kLm5ldHRlLmV4dCgnYWJvcnQnLCB7XG5cdGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0XHQkKCdib2R5Jykua2V5ZG93bigkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAodGhpcy54aHIgJiYgKGUua2V5Q29kZS50b1N0cmluZygpID09PSAnMjcnIC8vIEVzY1xuXHRcdFx0JiYgIShlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMueGhyLmFib3J0KCk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcykpO1xuXHR9LFxuXHRzdGFydDogZnVuY3Rpb24gKHhocikge1xuXHRcdHRoaXMueGhyID0geGhyO1xuXHR9LFxuXHRjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMueGhyID0gbnVsbDtcblx0fVxufSwge3hocjogbnVsbH0pO1xuXG4kLm5ldHRlLmV4dCgnbG9hZCcsIHtcblx0c3VjY2VzczogZnVuY3Rpb24gKCkge1xuXHRcdCQubmV0dGUubG9hZCgpO1xuXHR9XG59KTtcblxuLy8gZGVmYXVsdCBhamF4aWZpY2F0aW9uIChjYW4gYmUgb3ZlcnJpZGRlbiBpbiBpbml0KCkpXG4kLm5ldHRlLmV4dCgnaW5pdCcsIHtcblx0bG9hZDogZnVuY3Rpb24gKHJoKSB7XG5cdFx0JCh0aGlzLmxpbmtTZWxlY3Rvcikub2ZmKCdjbGljay5uZXR0ZScsIHJoKS5vbignY2xpY2submV0dGUnLCByaCk7XG5cdFx0JCh0aGlzLmZvcm1TZWxlY3Rvcikub2ZmKCdzdWJtaXQubmV0dGUnLCByaCkub24oJ3N1Ym1pdC5uZXR0ZScsIHJoKVxuXHRcdFx0Lm9mZignY2xpY2submV0dGUnLCAnOmltYWdlJywgcmgpLm9uKCdjbGljay5uZXR0ZScsICc6aW1hZ2UnLCByaClcblx0XHRcdC5vZmYoJ2NsaWNrLm5ldHRlJywgJzpzdWJtaXQnLCByaCkub24oJ2NsaWNrLm5ldHRlJywgJzpzdWJtaXQnLCByaCk7XG5cdFx0JCh0aGlzLmJ1dHRvblNlbGVjdG9yKS5jbG9zZXN0KCdmb3JtJylcblx0XHRcdC5vZmYoJ2NsaWNrLm5ldHRlJywgdGhpcy5idXR0b25TZWxlY3RvciwgcmgpLm9uKCdjbGljay5uZXR0ZScsIHRoaXMuYnV0dG9uU2VsZWN0b3IsIHJoKTtcblx0fVxufSwge1xuXHRsaW5rU2VsZWN0b3I6ICdhLmFqYXgnLFxuXHRmb3JtU2VsZWN0b3I6ICdmb3JtLmFqYXgnLFxuXHRidXR0b25TZWxlY3RvcjogJ2lucHV0LmFqYXhbdHlwZT1cInN1Ym1pdFwiXSwgYnV0dG9uLmFqYXhbdHlwZT1cInN1Ym1pdFwiXSwgaW5wdXQuYWpheFt0eXBlPVwiaW1hZ2VcIl0nXG59KTtcblxufSkod2luZG93LCB3aW5kb3cualF1ZXJ5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///612\n")}},__webpack_module_cache__={};function __webpack_require__(t){var n=__webpack_module_cache__[t];if(void 0!==n)return n.exports;var g=__webpack_module_cache__[t]={id:t,loaded:!1,exports:{}};return __webpack_modules__[t].call(g.exports,g,g.exports,__webpack_require__),g.loaded=!0,g.exports}__webpack_require__.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return __webpack_require__.d(n,{a:n}),n},__webpack_require__.d=(t,n)=>{for(var g in n)__webpack_require__.o(n,g)&&!__webpack_require__.o(t,g)&&Object.defineProperty(t,g,{enumerable:!0,get:n[g]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),__webpack_require__.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),__webpack_require__.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},__webpack_require__.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var __webpack_exports__=__webpack_require__(519)})(); \ No newline at end of file diff --git a/package.json b/package.json index 3c56d80..9cf2d8e 100644 --- a/package.json +++ b/package.json @@ -1,54 +1,40 @@ { "dependencies": { - "@babel/core": "^7.25.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/preset-env": "^7.25.7", "@firebase/messaging": "^0.12.11", "@popperjs/core": "^2.11.8", "@regru/jquery-menu-aim": "^1.0.0", "adt-js-components": "^1.7.0", "adt-nette-ajax": "^1.0.0", "autoprefixer": "^10.4.20", - "babel-loader": "^9.2.1", "bootstrap": "^5.3.3", "chart.js": "^4.4.4", "clamp-js": "^0.7.0", - "clean-webpack-plugin": "^4.0.0", "codemirror": "^5", - "css-loader": "^7.1.2", - "css-minimizer-webpack-plugin": "^7.0.0", "daterangepicker": "^3.1.0", - "expose-loader": "^5.0.0", "fabric": "^6.5.3", - "file-loader": "^6.2.0", "firebase": "8.10.1", "forms-replicator": "github:AppsDevTeam/replicator#master", "jquery": "^3.7.1", "jquery-ui-bundle": "^1.12.1-migrate", - "mini-css-extract-plugin": "^2.9.1", "nette-forms": "^3.5.0", "nette.ajax.js": "github:appsdevteam/nette.ajax.js#fix-nette-32", "postcss": "^8.4.47", - "postcss-loader": "^8.1.1", - "postcss-modules": "^6.0.0", - "raw-loader": "^4.0.2", "sass": "^1.79.4", - "sass-loader": "^16.0.2", - "script-loader": "^0.7.2", - "style-loader": "^4.0.0", "ua-parser-js": "^1.0.39", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-cli": "^5.1.4", "kreait/firebase-php": "^7.0" }, "packageManager": "yarn@3.2.0", "devDependencies": { + "@rollup/plugin-inject": "^5.0.5", + "sass-embedded": "^1.95.1", + "vite": "^6.4.0", "yarn-upgrade-all": "^0.7.4" }, "scripts": { - "build": "webpack --mode production", - "watch": "webpack --mode development --watch" + "build": "vite build", + "build:dev": "vite build --mode development", + "dev": "vite", + "watch": "vite build --mode development --watch" }, "name": "adt-fancyadmin", "description": "Fancy visual and useful components for administration", diff --git a/src/UI/Presenters/@layout.latte b/src/UI/Presenters/@layout.latte index 2e05213..09dde71 100644 --- a/src/UI/Presenters/@layout.latte +++ b/src/UI/Presenters/@layout.latte @@ -16,11 +16,8 @@ <link rel="manifest" href="/manifest.webmanifest"/> <link n:ifset="$faviconFileNamePng" rel="icon" type="image/svg+xml" href="{$basePath}/favicon/{$faviconFileNamePng}"> <link n:ifset="$faviconFileNameSvg" rel="icon" type="image/png" href="{$basePath}/favicon/{$faviconFileNameSvg}"> - {if $hmr} - <link rel="stylesheet" href="https://localhost:3000/dist/portal/css/portal.css"> - {else} - <link rel="stylesheet" href="{$basePath}/dist/portal/css/portal.css{v}"> - {/if} + {* Vite entry (portal mapping) — emits the module script + its extracted CSS (and dev-server HMR client). *} + {asset 'portal:js/portal.js'} {block colors} {if isset($account) && $account?->getCss()} @@ -160,11 +157,6 @@ </div> </div> </div> -{if $hmr} - <script src="https://localhost:3000/dist/portal/js/portal.js"></script> -{else} - <script src="{$basePath}/dist/portal/js/portal.js{v}"></script> -{/if} {snippet modals} {block modals}{/block} {/snippet} diff --git a/vite.config.mjs b/vite.config.mjs new file mode 100644 index 0000000..d39cc31 --- /dev/null +++ b/vite.config.mjs @@ -0,0 +1,103 @@ +// Standalone Vite build for the FancyAdmin package (replaces the old webpack.config.js). +// Consuming projects bundle FancyAdmin's assets from source via their own Vite config; +// this build is for developing/checking the package on its own. Output: dist/admin/. +import { defineConfig } from 'vite'; +import path from 'path'; +import fs from 'fs'; +import { fileURLToPath } from 'url'; +import autoprefixer from 'autoprefixer'; +import inject from '@rollup/plugin-inject'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// Copy fonts to where the compiled CSS references them. FontAwesome's @font-face uses +// its built-in "../webfonts" default and the Roboto faces use "../fonts" — both relative +// to the emitted CSS in dist/admin/, i.e. dist/{webfonts,fonts}. +const copyFonts = () => ({ + name: 'copy-fancyadmin-fonts', + apply: 'build', + writeBundle() { + const copies = [ + ['node_modules/@fortawesome/fontawesome-pro/webfonts', 'dist/webfonts'], + ['assets/fonts', 'dist/fonts'], + ]; + for (const [from, to] of copies) { + const src = path.resolve(__dirname, from); + const dest = path.resolve(__dirname, to); + if (fs.existsSync(src)) { + fs.cpSync(src, dest, { recursive: true }); + } + } + }, +}); + +export default defineConfig(({ mode }) => { + const isProduction = mode === 'production'; + + return { + root: path.resolve(__dirname, 'assets'), + + build: { + outDir: path.resolve(__dirname, 'dist/admin'), + assetsDir: '', + emptyOutDir: true, + sourcemap: !isProduction, + minify: isProduction ? 'esbuild' : false, + cssMinify: isProduction, + manifest: true, + rollupOptions: { + input: path.resolve(__dirname, 'assets/js/admin.js'), + }, + }, + + server: { + https: false, + host: 'localhost', + port: 3002, + strictPort: true, + }, + + css: { + devSourcemap: !isProduction, + preprocessorOptions: { + scss: { + quietDeps: true, + api: 'modern-compiler', + loadPaths: [ + path.resolve(__dirname, 'node_modules'), + ], + }, + }, + modules: { + generateScopedName: isProduction + ? '[hash:base64]' + : '[path][local]__[hash:base64:5]', + localsConvention: 'camelCase', + }, + postcss: { + plugins: [autoprefixer()], + }, + }, + + plugins: [ + // Inject jQuery globally (replaces webpack ProvidePlugin / expose-loader). + // select2's UMD self-registers on the global jQuery, so don't rewrite it there. + inject({ + include: ['**/*.js'], + exclude: [/select2/], + $: 'jquery', + jQuery: 'jquery', + }), + + copyFonts(), + ], + + optimizeDeps: { + include: ['jquery'], + }, + + define: { + 'process.env.NODE_ENV': JSON.stringify(mode), + }, + }; +}); diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 09fa5a6..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,191 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); -const Autoprefixer = require('autoprefixer'); -const PostCssModules = require("postcss-modules"); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin"); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); - -const SUPPORTED_LANGS = /cs/; - -module.exports = (env) => { - const isProduction = false;//process.env.NODE_ENV; - const module = 'admin'; - const entryPoints = { - admin: './assets/js/app.js', - }; - - const config = { - entry: { - [module]: entryPoints[module] // Dynamicky přidáme pouze vybraný entry point - }, - - output: { - path: path.resolve(__dirname, 'dist', module), // každý modul bude mít svůj adresář - publicPath: `/dist/${module}/`, - filename: 'js/[name].js', - chunkFilename: 'js/[name].[fullhash:5].js' - }, - - // Development or production? - mode: process.env.NODE_ENV, - - // Source map generation - devtool: isProduction ? false : 'eval-cheap-module-source-map', - - module: { - rules: [ - { - // Exposes jQuery for use outside Webpack build - test: require.resolve('jquery'), - loader: 'expose-loader', - options: { - exposes: ['jQuery', '$', 'jquery'] - } - }, - { - test: /\.js$/, - exclude: /(node_modules)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - plugins: ['@babel/plugin-proposal-class-properties'] - } - } - }, - { - test: /\.tsx?$/, - use: 'raw-loader', - }, - { - test: /\.module.scss$/, - use: [{ - loader: MiniCssExtractPlugin.loader, - }, { - loader: 'css-loader', // translates CSS into CommonJS modules - options: { - sourceMap: !isProduction, - modules: { - localIdentName: isProduction ? '[hash:base64]' : '[path][local]__[hash:base64:5]', - }, - } - }, { - loader: 'postcss-loader', // Run post css actions - options: { - sourceMap: !isProduction, - plugins: function () { // post css plugins, can be exported to postcss.config.js - return [ - PostCssModules({ - generateScopedName: isProduction ? '[hash:base64]' : '[path][local]__[hash:base64:5]', - }), - Autoprefixer, - ]; - } - } - }, { - loader: 'sass-loader', // compiles Sass to CSS - options: { - sourceMap: !isProduction, - } - }] - }, - { - test: /\.(scss)$/, - exclude: /\.module.scss$/, - use: [{ - loader: MiniCssExtractPlugin.loader, - }, { - loader: 'css-loader', // translates CSS into CommonJS modules - options: { - sourceMap: !isProduction, - } - }, { - loader: 'postcss-loader', // Run post css actions - options: { - sourceMap: !isProduction, - postcssOptions: { - plugins: function () { // post css plugins, can be exported to postcss.config.js - return [ - // require('precss'), - Autoprefixer, - ]; - } - } - } - }, { - loader: 'sass-loader', // compiles Sass to CSS - options: { - sourceMap: !isProduction, - } - }] - }, - { - test: /\.(css)$/, - use: [ - 'style-loader', - 'css-loader', - ] - }, - { - test: /\.(ttf|woff|woff2|eot|svg)$/i, - type: 'asset/resource', - generator: { - filename: 'fonts/[hash][ext][query]' - } - }, - ] - }, - - plugins: [ - // remove old dist files - new CleanWebpackPlugin(), - - // Provides jQuery for other JS bundled with Webpack - new webpack.ProvidePlugin({ - $: "jquery", - jQuery: "jquery", - Popper: ["popper.js", "default"], - }), - - // some plugins with webpack include all locales which then is huge in size -> include only defined - new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, SUPPORTED_LANGS), - new webpack.ContextReplacementPlugin(/flatpickr[\/\\]dist[\/\\]l10n$/, SUPPORTED_LANGS), - - // extract css sheets to a separate file so we can include it directly in layout latte - new MiniCssExtractPlugin({ - filename: 'css/[name].css', - chunkFilename: 'css/[name].[hash:5].css', - }), - - ], - - resolve: { - modules: ['node_modules'], - alias: { - JsComponents: path.resolve(__dirname, 'src'), - 'adt-fancyadmin': path.resolve(__dirname), - '~/src': path.resolve(__dirname, 'src') - } - } - }; - - if (isProduction) { - config.plugins.push( - // Generate statistics - new BundleAnalyzerPlugin({ - analyzerMode: 'disabled', - generateStatsFile: true, - statsOptions: { source: false } - }), - ); - - config.plugins.push( - // Minify CSS - new CssMinimizerWebpackPlugin() - ) - } - - return config; -};