@microsoft/windows-admin-center-sdk 2.186.0 → 2.296.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1103 -1209
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/actions/actions.module.js +2 -2
- package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -2
- package/angular/esm2015/src/controls/actions/items/action-button/action-button-renderer.component.js +5 -5
- package/angular/esm2015/src/controls/actions/items/action-dropdown/action-dropdown.component.js +31 -13
- package/angular/esm2015/src/controls/actions/items/action-item.component.js +7 -3
- package/angular/esm2015/src/controls/badge/badge-base.component.js +2 -13
- package/angular/esm2015/src/controls/badge/bugfixes-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/coming-soon-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/credssp-enabled-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/critical-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/custom-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/feedback-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/improvement-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/new-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/new-feature-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/preview-badge.component.js +42 -70
- package/angular/esm2015/src/controls/badge/warning-badge.component.js +42 -70
- package/angular/esm2015/src/controls/breadcrumb/breadcrumb.component.js +6 -6
- package/angular/esm2015/src/controls/breadcrumb-header/breadcrumb-header.component.js +2 -2
- package/angular/esm2015/src/controls/data-table/data-table-column.component.js +5 -3
- package/angular/esm2015/src/controls/data-table/data-table.component.js +20 -26
- package/angular/esm2015/src/controls/data-table/extensions/data-table-column-picker-extension.js +2 -1
- package/angular/esm2015/src/controls/details/details.component.js +2 -2
- package/angular/esm2015/src/controls/dialog/base-dialog.component.js +1 -1
- package/angular/esm2015/src/controls/dialog/confirmation-dialog/confirmation-dialog.component.js +20 -30
- package/angular/esm2015/src/controls/dialog/dialog.service.js +7 -3
- package/angular/esm2015/src/controls/dropdown/dropdown.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +50 -40
- package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +3 -3
- package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +14 -13
- package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/form-field.component.js +16 -4
- package/angular/esm2015/src/controls/form/form-field/options-form-field/form-field-option.component.js +5 -3
- package/angular/esm2015/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.js +25 -21
- package/angular/esm2015/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.js +5 -5
- package/angular/esm2015/src/controls/form/form-field/search/search-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/form-field/tags/tags-form-field.component.js +2 -2
- package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +4 -10
- package/angular/esm2015/src/controls/form/validation-alert/validation-alert.js +1 -1
- package/angular/esm2015/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.js +17 -1
- package/angular/esm2015/src/controls/icon/layered-icon/layered-icon.component.js +12 -1
- package/angular/esm2015/src/controls/icon/layered-icon/status/status-icon.component.js +53 -9
- package/angular/esm2015/src/controls/loading-wheel/loading-wheel.component.js +17 -1
- package/angular/esm2015/src/controls/master-view/master-view.component.js +34 -30
- package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +13 -29
- package/angular/esm2015/src/controls/schema-form/schema-form-content.component.js +7 -4
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +23 -35
- package/angular/esm2015/src/controls/settings/settings.component.js +28 -1
- package/angular/esm2015/src/controls/settings/settings.module.js +8 -3
- package/angular/esm2015/src/controls/tooltip/tooltip-host.component.js +16 -5
- package/angular/esm2015/src/controls/wizard/wizard.component.js +38 -6
- package/angular/esm2015/src/directives/clamp/clamp.directive.js +26 -7
- package/angular/esm2015/src/directives/discard/discard.directive.js +2 -2
- package/angular/esm2015/src/directives/markdown/markdown.directive.js +5 -18
- package/angular/esm2015/src/generated/strings.js +1 -1
- package/angular/esm2015/src/guards/experiment.guard.service.js +14 -1
- package/angular/esm2015/src/pipes/boolean-converter-pipe.js +11 -1
- package/angular/esm2015/src/pipes/byte-unit-converter-pipe.js +11 -1
- package/angular/esm2015/src/pipes/enum-converter-pipe.js +16 -1
- package/angular/esm2015/src/pipes/format-pipe.js +11 -1
- package/angular/esm2015/src/pipes/highlight-pipe.js +11 -1
- package/angular/esm2015/src/pipes/yesno-converter-pipe.js +11 -1
- package/angular/esm2015/src/service/gateway.service.js +8 -5
- package/angular/esm2015/src/service/notification.service.js +23 -1
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1042 -1069
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/package.json +0 -1
- package/angular/src/controls/actions/items/action-dropdown/action-dropdown.component.d.ts +2 -0
- package/angular/src/controls/actions/items/action-item.component.d.ts +11 -1
- package/angular/src/controls/badge/badge-base.component.d.ts +0 -4
- package/angular/src/controls/data-table/data-table-column.component.d.ts +2 -1
- package/angular/src/controls/data-table/data-table.component.d.ts +4 -0
- package/angular/src/controls/dialog/base-dialog.component.d.ts +1 -1
- package/angular/src/controls/form/form-field/form-field.component.d.ts +10 -1
- package/angular/src/controls/form/form-field/options-form-field/form-field-option.component.d.ts +5 -1
- package/angular/src/controls/form/validation-alert/validation-alert.component.d.ts +0 -4
- package/angular/src/controls/form/validation-alert/validation-alert.d.ts +0 -1
- package/angular/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.d.ts +16 -0
- package/angular/src/controls/icon/layered-icon/layered-icon.component.d.ts +11 -0
- package/angular/src/controls/icon/layered-icon/status/status-icon.component.d.ts +13 -2
- package/angular/src/controls/loading-wheel/loading-wheel.component.d.ts +16 -0
- package/angular/src/controls/master-view/master-view.component.d.ts +1 -0
- package/angular/src/controls/pivot/pivot-tab.component.d.ts +0 -1
- package/angular/src/controls/pivot/pivot.component.d.ts +4 -0
- package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +6 -5
- package/angular/src/controls/settings/settings.component.d.ts +27 -0
- package/angular/src/controls/settings/settings.module.d.ts +7 -6
- package/angular/src/controls/tooltip/tooltip-host.component.d.ts +1 -1
- package/angular/src/controls/wizard/wizard.component.d.ts +23 -0
- package/angular/src/directives/clamp/clamp.directive.d.ts +5 -0
- package/angular/src/directives/markdown/markdown.directive.d.ts +2 -3
- package/angular/src/generated/strings.d.ts +9 -0
- package/angular/src/guards/experiment.guard.service.d.ts +13 -0
- package/angular/src/pipes/boolean-converter-pipe.d.ts +10 -0
- package/angular/src/pipes/byte-unit-converter-pipe.d.ts +10 -0
- package/angular/src/pipes/enum-converter-pipe.d.ts +15 -0
- package/angular/src/pipes/format-pipe.d.ts +10 -0
- package/angular/src/pipes/highlight-pipe.d.ts +10 -0
- package/angular/src/pipes/yesno-converter-pipe.d.ts +10 -0
- package/angular/src/service/gateway.service.d.ts +3 -1
- package/angular/src/service/notification.service.d.ts +22 -0
- package/core/base/environment.d.ts +7 -0
- package/core/base/environment.js.map +1 -1
- package/core/base/versioned-object.js +2 -2
- package/core/base/versioned-object.js.map +1 -1
- package/core/data/cim-stream.js +8 -1
- package/core/data/cim-stream.js.map +1 -1
- package/core/data/core-environment.d.ts +4 -0
- package/core/data/core-environment.js +1 -0
- package/core/data/core-environment.js.map +1 -1
- package/core/data/crypto.js +10 -9
- package/core/data/crypto.js.map +1 -1
- package/core/data/file-transfer.js +5 -1
- package/core/data/file-transfer.js.map +1 -1
- package/core/data/gateway-connection.d.ts +11 -1
- package/core/data/gateway-connection.js +51 -9
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/http-constants.d.ts +5 -1
- package/core/data/http-constants.js +5 -1
- package/core/data/http-constants.js.map +1 -1
- package/core/data/net.d.ts +15 -11
- package/core/data/net.js +44 -41
- package/core/data/net.js.map +1 -1
- package/core/data/node-connection.d.ts +2 -2
- package/core/data/node-connection.js.map +1 -1
- package/core/data/powershell-stream.js +11 -3
- package/core/data/powershell-stream.js.map +1 -1
- package/core/data/powershell.d.ts +17 -1
- package/core/data/powershell.js +35 -9
- package/core/data/powershell.js.map +1 -1
- package/core/data/settings-manager.d.ts +9 -0
- package/core/data/settings-manager.js +18 -1
- package/core/data/settings-manager.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts +5 -4
- package/core/generated/powershell-scripts.js +5 -4
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/host/host-core-manager.d.ts +36 -0
- package/core/host/host-core-manager.js +134 -0
- package/core/host/host-core-manager.js.map +1 -0
- package/core/host/host-core-message-type.d.ts +12 -0
- package/core/host/host-core-message-type.js +17 -0
- package/core/host/host-core-message-type.js.map +1 -0
- package/core/host/host-core-messages.d.ts +14 -0
- package/core/host/host-core-messages.js +3 -0
- package/core/host/host-core-messages.js.map +1 -0
- package/core/manifest/manifest-loader.d.ts +2 -1
- package/core/manifest/manifest-loader.js +27 -18
- package/core/manifest/manifest-loader.js.map +1 -1
- package/core/notification/notification.js +4 -0
- package/core/notification/notification.js.map +1 -1
- package/core/security/authorization-manager.d.ts +44 -0
- package/core/security/authorization-manager.js +111 -5
- package/core/security/authorization-manager.js.map +1 -1
- package/core/security/sign-on-manager.d.ts +109 -0
- package/core/security/sign-on-manager.js +119 -0
- package/core/security/sign-on-manager.js.map +1 -0
- package/core/security/tag-manager.js.map +1 -1
- package/core/shared/cluster-inventory/cluster-inventory-cache.js +3 -2
- package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.d.ts +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.js +1 -1
- package/core/shared/gateway-inventory/gateway-inventory-cache.js.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.js +2 -1
- package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
- package/core/shared/tool-inventory/tool-inventory-cache.js +1 -1
- package/core/shared/tool-inventory/tool-inventory-cache.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +5 -5
- package/styles/css/fonts.css +2 -2
- package/styles/css/main.css +1 -1
- package/styles/fonts/ServMDL2/ServMDL2-4.62.woff +0 -0
- package/styles/fonts/ServMDL2/ServMDL2.json +238 -2039
- package/styles/fonts/ServMDL2/ServMDL2.scss +238 -2039
- package/tools/gulp-manifest-resource/index.js +3 -1
- package/tools/gulp-manifest-resource/index.js.map +1 -1
- package/tools/gulp-ps-cim/index.js +1 -1
- package/tools/gulp-ps-cim/index.js.map +1 -1
- package/tools/gulp-ps-cim/powershell-cim-config-schema.json +1 -1
- package/tools/gulp-ps-code/index.js +36 -2
- package/tools/gulp-ps-code/index.js.map +1 -1
- package/tools/gulp-ps-code/ps-code-convert.js +4 -8
- package/tools/gulp-ps-code/ps-code-convert.js.map +1 -1
- package/tools/gulp-ps-resjson/index.js +79 -74
- package/tools/gulp-ps-resjson/index.js.map +1 -1
- package/tools/module-template/build/pipelines/codeinspector.yml +27 -0
- package/tools/module-template/gulpfile.ts/common/lint.ts +3 -3
- package/tools/module-template/gulpfile.ts/common/pack.ts +14 -14
- package/tools/module-template/gulpfile.ts/common/ui-test-automation.ts +40 -0
- package/tools/module-template/gulpfile.ts/common/utilities.ts +10 -10
- package/tools/module-template/gulpfile.ts/common/validate.ts +14 -4
- package/tools/module-template/gulpfile.ts/index.ts +20 -8
- package/tools/wac-cli/src/upgrade/file-updater.d.ts +1 -0
- package/tools/wac-cli/src/upgrade/file-updater.js +7 -1
- package/tools/wac-cli/src/upgrade/file-updater.js.map +1 -1
- package/styles/fonts/ServMDL2/ServMDL2-4.33.woff +0 -0
package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js
CHANGED
|
@@ -175,7 +175,7 @@ export class DateTimeFormFieldComponent extends DateLikeFormFieldComponent {
|
|
|
175
175
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropDown = _t.first);
|
|
176
176
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.calendar = _t.first);
|
|
177
177
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.clock = _t.first);
|
|
178
|
-
} }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c3, decls: 24, vars: 27, consts: [[3, "formField"], [1, "sme-arrange-stack-h", "sme-focus-zone", "sme-form-field-editor"], [1, "sme-combobox", 3, "autoToggle", "disabled", "autoWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "ngModel", "placeholder", "ngModelChange"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], ["dropDownButton", ""], [1, "sme-icon", "sme-icon-dateTime2"], [1, "sme-dropdown-content", "sme-dropdown-interaction-enabled", "sme-focus-trap", 3, "id"], [1, "sme-datetime-dropdown"], [1, "sme-datetime-main-content"], ["type", "calendar", "orientation", "vertical", 3, "ngModel", "required", "hideHeader", "ngModelChange"], ["calendar", ""], ["type", "clock", "orientation", "vertical", 3, "ngModel", "required", "hideHeader", "ngModelChange"], ["clock", ""], [1, "sme-datetime-confirmation"], ["tabindex", "0", 3, "click"], [1, "sme-icon", "sme-icon-size-xxs", "sme-icon-accept"], [1, "sme-icon", "sme-icon-size-xxs", "sme-icon-clear"], [3, "alert"]], template: function DateTimeFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
} }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c3, decls: 24, vars: 27, consts: [[3, "formField"], [1, "sme-arrange-stack-h", "sme-focus-zone", "sme-form-field-editor"], [1, "sme-combobox", 3, "autoToggle", "disabled", "autoWidth", "toggled"], ["dropDown", ""], [1, "sme-combobox-header", "sme-dropdown-toggle", 3, "keydown"], ["dropdownHeader", ""], ["type", "text", "role", "combobox", "spellcheck", "false", "autocapitalize", "off", "autocomplete", "off", 3, "ngModel", "placeholder", "ngModelChange"], ["textInput", ""], ["type", "button", "tabindex", "-1", "role", "presentation", "aria-hidden", "true", 1, "sme-button-trigger", "sme-button-auto-width", 3, "click"], ["dropDownButton", ""], [1, "sme-icon", "sme-icon-dateTime2"], [1, "sme-dropdown-content", "sme-dropdown-interaction-enabled", "sme-focus-trap", 3, "id"], [1, "sme-datetime-dropdown"], [1, "sme-datetime-main-content"], ["type", "calendar", "orientation", "vertical", 3, "ngModel", "required", "hideHeader", "ngModelChange"], ["calendar", ""], ["type", "clock", "orientation", "vertical", 3, "ngModel", "required", "hideHeader", "ngModelChange"], ["clock", ""], [1, "sme-datetime-confirmation"], ["tabindex", "0", 1, "sme-focus-zone", 3, "click"], [1, "sme-icon", "sme-icon-size-xxs", "sme-icon-accept"], [1, "sme-icon", "sme-icon-size-xxs", "sme-icon-clear"], [3, "alert"]], template: function DateTimeFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
179
179
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
180
180
|
i0.ɵɵelementStart(0, "sme-form-field-layout", 0);
|
|
181
181
|
i0.ɵɵelementStart(1, "div", 1);
|
|
@@ -257,4 +257,4 @@ export class DateTimeFormFieldComponent extends DateLikeFormFieldComponent {
|
|
|
257
257
|
type: ViewChild,
|
|
258
258
|
args: ['clock']
|
|
259
259
|
}] }); })();
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUvZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUvZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN4RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQUV6Rjs7R0FFRztBQUtILE1BQU0sT0FBTywwQkFBMkIsU0FBUSwwQkFBMEI7SUFzQ3RFOzs7T0FHRztJQUNILFlBQVksUUFBa0I7UUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7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ciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVMaWtlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RhdGUvZGF0ZS1saWtlJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGF0ZS9kYXRlLXRpbWUnO1xyXG5pbXBvcnQgeyBEYXRlVHlwZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtdHlwZSc7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgR2xvYmFsaXphdGlvbiB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9nbG9iYWxpemF0aW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsb2NrRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vY2xvY2svY2xvY2stZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlTGlrZUZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtbGlrZS9kYXRlLWxpa2UtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIERhdGVUaW1lIEZvcm0gRmllbGQgQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImRhdGV0aW1lXCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBEYXRlTGlrZUZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RhdGVUaW1lRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwdWJsaWMgZHJvcERvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJylcclxuICAgIHB1YmxpYyBjYWxlbmRhcjogQ2FsZW5kYXJGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2xvY2snKVxyXG4gICAgcHVibGljIGNsb2NrOiBDbG9ja0Zvcm1GaWVsZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGVkaXRhYmxlIGRpc3BsYXkgdmFsdWUgb2YgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbmRpY2F0ZXMgaWYgdGhlIGRpc3BsYXkgdmFsdWUgaXMgdmFsaWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZVZhbGlkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaW5kaWNhdGVzIGlmIGEgdmFsdWUgY2hhbmdlIGlzIGV4cGVjdGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBlY3RWYWx1ZUNoYW5nZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybWVkaWF0ZSBzdG9yZSBmb3IgZHJvcCBkb3duIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW50ZXJNZWRpYXRlVmFsdWU6IERhdGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQHNlZSBEYXRlVGltZUZvcm1GaWVsZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBpbmplY3RvciBUaGUgYW5ndWxhciBpbmplY3Rpb24gc2VydmljZS4gcmVxdWlyZWQgYnkgQHNlZSBTbWVJbmplY3RhYmxlIGRlY29yYXRvciBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbnRlck1lZGlhdGVWYWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0b2dnbGVkIHN0YXRlIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRHJvcGRvd25Ub2dnbGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVudGVyOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wRG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdERyb3BEb3duVmFsdWUoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24ub25Ub2dnbGVDbGljayhldmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRG93bkFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7IHJldHVybjsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdmFsdWUgY2hhbmdlcyBmcm9tIHRoZSBkYXRlIGlucHV0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21taXREaXNwbGF5VmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheURhdGUgPSBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVWYWxpZCA9ICFpc05hTihkaXNwbGF5RGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0VmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVWYWxpZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy52YWx1ZSwgRGF0ZVR5cGUuRGF0ZSk7XHJcbiAgICAgICAgICAgIERhdGVUaW1lLmNvcHlEYXRlKGRpc3BsYXlEYXRlLCB2YWx1ZUFzRGF0ZSk7XHJcbiAgICAgICAgICAgIERhdGVUaW1lLmNvcHlUaW1lKGRpc3BsYXlEYXRlLCB2YWx1ZUFzRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUeXBlID0gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGVUeXBlKSA/IHRoaXMuZGV0ZWN0ZWREYXRlVHlwZSA6IHRoaXMuZGF0ZVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBEYXRlVHlwZS5jb252ZXJ0KHZhbHVlQXNEYXRlLCBkYXRlVHlwZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBjaGFuZ2VzLCBpbiB0aGUgVUkgb3IgcHJvZ3JhbW1hdGljYWxseS5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQodmFsdWU6IERhdGVMaWtlKSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5leHBlY3RWYWx1ZUNoYW5nZSkge1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVBc0RhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHZhbHVlLCBEYXRlVHlwZS5EYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWVBc0RhdGUudG9Mb2NhbGVTdHJpbmcoR2xvYmFsaXphdGlvbi5sb2NhbGVJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4cGVjdFZhbHVlQ2hhbmdlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgb24gbmcgbW9kZWwgY2hhbmdlcywgcHJldmVudHMgZHJvcGRvd24gY2hhbmdlcyBmcm9tIGdvaW5nIHRvIGZvcm0gbW9kZWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5nTW9kZWxDaGFuZ2UodmFsdWU6IERhdGVMaWtlLCBkYXRlQ2hhbmdlZD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodmFsdWUsIERhdGVUeXBlLkRhdGUpO1xyXG5cclxuICAgICAgICBpZiAoZGF0ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgeWVhciA9IHZhbHVlQXNEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB2YWx1ZUFzRGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gdmFsdWVBc0RhdGUuZ2V0TW9udGgoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJNZWRpYXRlVmFsdWUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBob3VycyA9IHZhbHVlQXNEYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHZhbHVlQXNEYXRlLmdldE1pbnV0ZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlck1lZGlhdGVWYWx1ZS5zZXRIb3Vycyhob3VycywgbWludXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VycyBjb21taXRzIGRyb3AgZG93biBjaGFuZ2VzLCB0aGV5IGFyZSBzYXZlZCB0byBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tbWl0RHJvcERvd25WYWx1ZShldmVudDogRXZlbnQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnRlck1lZGlhdGVWYWx1ZTtcclxuICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNwbGF5VmFsdWVWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaW52YWxpZERpc3BsYXlWYWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGUuSW52YWxpZERhdGVUaW1lLmZvcm1hdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZ2V0TG9jYWxlRGF0ZVN0cmluZ0Zvcm1hdChHbG9iYWxpemF0aW9uLmxvY2FsZUlkLnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzRGF0ZVRpbWUoYykgfHwgc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJycsXHJcbiAgICAgICAgICAgIGRyb3BEb3duQ29udGVudDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWZvY3VzLXpvbmUgc21lLWZvcm0tZmllbGQtZWRpdG9yXCI+XHJcbiAgICA8c21lLWRyb3Bkb3duICNkcm9wRG93biBbYXV0b1RvZ2dsZV09XCJmYWxzZVwiIGNsYXNzPVwic21lLWNvbWJvYm94XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2F1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgKHRvZ2dsZWQpPVwib25Ecm9wZG93blRvZ2dsZWQoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2ICNkcm9wZG93bkhlYWRlciBjbGFzcz1cInNtZS1jb21ib2JveC1oZWFkZXIgc21lLWRyb3Bkb3duLXRvZ2dsZVwiIChrZXlkb3duKT1cIm9uVG9nZ2xlS2V5ZG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbKG5nTW9kZWwpXT1cImRpc3BsYXlWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbW1pdERpc3BsYXlWYWx1ZSgpXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCA/IHRydWUgOiBudWxsXCIgXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiJ25vbmUnXCIgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcclxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiAjZHJvcERvd25CdXR0b24gdHlwZT1cImJ1dHRvblwiIFthdHRyLmRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIiB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZHJvcERvd24uaXNPcGVuXCJcclxuICAgICAgICAgIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJkcm9wRG93bi5pc09wZW5cIiBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soJGV2ZW50LCB0cnVlKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kYXRlVGltZTJcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLWRyb3Bkb3duLWNvbnRlbnQgc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWQgc21lLWZvY3VzLXRyYXBcIiBbaWRdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1kYXRldGltZS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1kYXRldGltZS1tYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPHNtZS1mb3JtLWZpZWxkICNjYWxlbmRhciB0eXBlPVwiY2FsZW5kYXJcIiBbbmdNb2RlbF09XCJpbnRlck1lZGlhdGVWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTmdNb2RlbENoYW5nZSgkZXZlbnQsIHRydWUpXCJcclxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtoaWRlSGVhZGVyXT1cInRydWVcIiBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+XHJcbiAgICAgICAgICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxzbWUtZm9ybS1maWVsZCAjY2xvY2sgdHlwZT1cImNsb2NrXCIgW25nTW9kZWxdPVwiaW50ZXJNZWRpYXRlVmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbk5nTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIiBbaGlkZUhlYWRlcl09XCJ0cnVlXCIgb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPlxyXG4gICAgICAgICAgICA8L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWRhdGV0aW1lLWNvbmZpcm1hdGlvblwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5hcHBseVwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbW1pdERyb3BEb3duVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tc2l6ZS14eHMgc21lLWljb24tYWNjZXB0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cInRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xlYXJcIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkcm9wRG93bi5vblRvZ2dsZUNsaWNrKCRldmVudCwgdHJ1ZSk7XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1zaXplLXh4cyBzbWUtaWNvbi1jbGVhclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NtZS1kcm9wZG93bj5cclxuICA8L2Rpdj5cclxuICA8c21lLXZhbGlkYXRpb24tYWxlcnQgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtdmFsaWRhdGlvbi1hbGVydD5cclxuPC9zbWUtZm9ybS1maWVsZC1sYXlvdXQ+XHJcbiJdfQ==
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUvZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZGF0ZXRpbWUvZGF0ZXRpbWUtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN4RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQUV6Rjs7R0FFRztBQUtILE1BQU0sT0FBTywwQkFBMkIsU0FBUSwwQkFBMEI7SUFzQ3RFOzs7T0FHRztJQUNILFlBQVksUUFBa0I7UUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7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ciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVMaWtlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RhdGUvZGF0ZS1saWtlJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGF0ZS9kYXRlLXRpbWUnO1xyXG5pbXBvcnQgeyBEYXRlVHlwZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtdHlwZSc7XHJcbmltcG9ydCB7IEtleUNvZGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvYWNjZXNzaWJpbGl0eS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgR2xvYmFsaXphdGlvbiB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9nbG9iYWxpemF0aW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsb2NrRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vY2xvY2svY2xvY2stZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlTGlrZUZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtbGlrZS9kYXRlLWxpa2UtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIERhdGVUaW1lIEZvcm0gRmllbGQgQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cImRhdGV0aW1lXCJdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBEYXRlTGlrZUZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RhdGVUaW1lRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bicpXHJcbiAgICBwdWJsaWMgZHJvcERvd246IERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJylcclxuICAgIHB1YmxpYyBjYWxlbmRhcjogQ2FsZW5kYXJGb3JtRmllbGRDb21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2xvY2snKVxyXG4gICAgcHVibGljIGNsb2NrOiBDbG9ja0Zvcm1GaWVsZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGVkaXRhYmxlIGRpc3BsYXkgdmFsdWUgb2YgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbmRpY2F0ZXMgaWYgdGhlIGRpc3BsYXkgdmFsdWUgaXMgdmFsaWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZVZhbGlkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaW5kaWNhdGVzIGlmIGEgdmFsdWUgY2hhbmdlIGlzIGV4cGVjdGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleHBlY3RWYWx1ZUNoYW5nZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuIGludGVybWVkaWF0ZSBzdG9yZSBmb3IgZHJvcCBkb3duIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW50ZXJNZWRpYXRlVmFsdWU6IERhdGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQHNlZSBEYXRlVGltZUZvcm1GaWVsZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBpbmplY3RvciBUaGUgYW5ndWxhciBpbmplY3Rpb24gc2VydmljZS4gcmVxdWlyZWQgYnkgQHNlZSBTbWVJbmplY3RhYmxlIGRlY29yYXRvciBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbnRlck1lZGlhdGVWYWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0b2dnbGVkIHN0YXRlIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRHJvcGRvd25Ub2dnbGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBrZXlkb3duIGV2ZW50cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRvZ2dsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVudGVyOiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wRG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdERyb3BEb3duVmFsdWUoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24ub25Ub2dnbGVDbGljayhldmVudCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRG93bkFycm93OiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93bi5vblRvZ2dsZUNsaWNrKGV2ZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiB7IHJldHVybjsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdmFsdWUgY2hhbmdlcyBmcm9tIHRoZSBkYXRlIGlucHV0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21taXREaXNwbGF5VmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheURhdGUgPSBuZXcgRGF0ZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVWYWxpZCA9ICFpc05hTihkaXNwbGF5RGF0ZS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0VmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWVWYWxpZCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy52YWx1ZSwgRGF0ZVR5cGUuRGF0ZSk7XHJcbiAgICAgICAgICAgIERhdGVUaW1lLmNvcHlEYXRlKGRpc3BsYXlEYXRlLCB2YWx1ZUFzRGF0ZSk7XHJcbiAgICAgICAgICAgIERhdGVUaW1lLmNvcHlUaW1lKGRpc3BsYXlEYXRlLCB2YWx1ZUFzRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUeXBlID0gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGVUeXBlKSA/IHRoaXMuZGV0ZWN0ZWREYXRlVHlwZSA6IHRoaXMuZGF0ZVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBEYXRlVHlwZS5jb252ZXJ0KHZhbHVlQXNEYXRlLCBkYXRlVHlwZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBjaGFuZ2VzLCBpbiB0aGUgVUkgb3IgcHJvZ3JhbW1hdGljYWxseS5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQodmFsdWU6IERhdGVMaWtlKSB7XHJcbiAgICAgICAgc3VwZXIub25WYWx1ZUNoYW5nZWQodmFsdWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5leHBlY3RWYWx1ZUNoYW5nZSkge1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVBc0RhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHZhbHVlLCBEYXRlVHlwZS5EYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWVBc0RhdGUudG9Mb2NhbGVTdHJpbmcoR2xvYmFsaXphdGlvbi5sb2NhbGVJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4cGVjdFZhbHVlQ2hhbmdlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgb24gbmcgbW9kZWwgY2hhbmdlcywgcHJldmVudHMgZHJvcGRvd24gY2hhbmdlcyBmcm9tIGdvaW5nIHRvIGZvcm0gbW9kZWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5nTW9kZWxDaGFuZ2UodmFsdWU6IERhdGVMaWtlLCBkYXRlQ2hhbmdlZD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodmFsdWUsIERhdGVUeXBlLkRhdGUpO1xyXG5cclxuICAgICAgICBpZiAoZGF0ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgeWVhciA9IHZhbHVlQXNEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB2YWx1ZUFzRGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gdmFsdWVBc0RhdGUuZ2V0TW9udGgoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJNZWRpYXRlVmFsdWUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBob3VycyA9IHZhbHVlQXNEYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHZhbHVlQXNEYXRlLmdldE1pbnV0ZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlck1lZGlhdGVWYWx1ZS5zZXRIb3Vycyhob3VycywgbWludXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VycyBjb21taXRzIGRyb3AgZG93biBjaGFuZ2VzLCB0aGV5IGFyZSBzYXZlZCB0byBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tbWl0RHJvcERvd25WYWx1ZShldmVudDogRXZlbnQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnRlck1lZGlhdGVWYWx1ZTtcclxuICAgICAgICB0aGlzLmRyb3BEb3duLm9uVG9nZ2xlQ2xpY2soZXZlbnQsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNwbGF5VmFsdWVWYWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaW52YWxpZERpc3BsYXlWYWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGUuSW52YWxpZERhdGVUaW1lLmZvcm1hdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUuZ2V0TG9jYWxlRGF0ZVN0cmluZ0Zvcm1hdChHbG9iYWxpemF0aW9uLmxvY2FsZUlkLnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzRGF0ZVRpbWUoYykgfHwgc3VwZXIudmFsaWRhdGUoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIHRoZSBpZEJhZyB1c2VkIGJ5IHRoaXMgY29tcG9uZW50IHRvIHN0b3JlIHVuaXF1ZSBlbGVtZW50IGlkcy5cclxuICAgICAqIGlkIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIGJlIHRoZSBAc2VlIEJhc2VDb21wb25lbnQgc3VwZXIgY2xhc3MuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJZEJhZygpOiBNc2Z0U21lLlN0cmluZ01hcDxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXRhaWxzU3BhbjogJycsXHJcbiAgICAgICAgICAgIGRyb3BEb3duQ29udGVudDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtZm9ybS1maWVsZC1sYXlvdXQgW2Zvcm1GaWVsZF09XCJ0aGlzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWZvY3VzLXpvbmUgc21lLWZvcm0tZmllbGQtZWRpdG9yXCI+XHJcbiAgICA8c21lLWRyb3Bkb3duICNkcm9wRG93biBbYXV0b1RvZ2dsZV09XCJmYWxzZVwiIGNsYXNzPVwic21lLWNvbWJvYm94XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2F1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgKHRvZ2dsZWQpPVwib25Ecm9wZG93blRvZ2dsZWQoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2ICNkcm9wZG93bkhlYWRlciBjbGFzcz1cInNtZS1jb21ib2JveC1oZWFkZXIgc21lLWRyb3Bkb3duLXRvZ2dsZVwiIChrZXlkb3duKT1cIm9uVG9nZ2xlS2V5ZG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgPGlucHV0ICN0ZXh0SW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwiY29tYm9ib3hcIiBbKG5nTW9kZWwpXT1cImRpc3BsYXlWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbW1pdERpc3BsYXlWYWx1ZSgpXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaWRCYWcuZHJvcERvd25Db250ZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJsb2FkaW5nT3JEaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJpZEJhZy5kcm9wRG93bkNvbnRlbnRcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImRyb3BEb3duLmlzT3BlblwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCInbm9uZSdcIiBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxyXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgLz5cclxuICAgICAgICA8YnV0dG9uICNkcm9wRG93bkJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZ09yRGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmFyaWEtcHJlc3NlZF09XCJkcm9wRG93bi5pc09wZW5cIlxyXG4gICAgICAgICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImRyb3BEb3duLmlzT3BlblwiIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZHJvcERvd24ub25Ub2dnbGVDbGljaygkZXZlbnQsIHRydWUpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWRhdGVUaW1lMlwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtZHJvcGRvd24tY29udGVudCBzbWUtZHJvcGRvd24taW50ZXJhY3Rpb24tZW5hYmxlZCBzbWUtZm9jdXMtdHJhcFwiIFtpZF09XCJpZEJhZy5kcm9wRG93bkNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWRhdGV0aW1lLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWRhdGV0aW1lLW1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8c21lLWZvcm0tZmllbGQgI2NhbGVuZGFyIHR5cGU9XCJjYWxlbmRhclwiIFtuZ01vZGVsXT1cImludGVyTWVkaWF0ZVZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25OZ01vZGVsQ2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCIgW2hpZGVIZWFkZXJdPVwidHJ1ZVwiIG9yaWVudGF0aW9uPVwidmVydGljYWxcIj5cclxuICAgICAgICAgICAgPC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPHNtZS1mb3JtLWZpZWxkICNjbG9jayB0eXBlPVwiY2xvY2tcIiBbbmdNb2RlbF09XCJpbnRlck1lZGlhdGVWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTmdNb2RlbENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiIFtoaWRlSGVhZGVyXT1cInRydWVcIiBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+XHJcbiAgICAgICAgICAgIDwvc21lLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtZGF0ZXRpbWUtY29uZmlybWF0aW9uXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5hcHBseVwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbW1pdERyb3BEb3duVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tc2l6ZS14eHMgc21lLWljb24tYWNjZXB0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmNsZWFyXCIgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZHJvcERvd24ub25Ub2dnbGVDbGljaygkZXZlbnQsIHRydWUpO1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tc2l6ZS14eHMgc21lLWljb24tY2xlYXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zbWUtZHJvcGRvd24+XHJcbiAgPC9kaXY+XHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=
|
|
@@ -170,6 +170,13 @@ export class FormFieldComponent extends BaseComponent {
|
|
|
170
170
|
get loadingOrDisabled() {
|
|
171
171
|
return (this.disabled || this.loading) ? true : null;
|
|
172
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* The form field's UTA id getter.
|
|
175
|
+
* The ID is based on the form field name that's set on the ngModel.
|
|
176
|
+
*/
|
|
177
|
+
get dataUtaId() {
|
|
178
|
+
return this.utaId ? this.utaId : this.ngModel && this.ngModel.name && this.ngModel.name.toString();
|
|
179
|
+
}
|
|
173
180
|
/**
|
|
174
181
|
* Placeholder for the combined disabled state
|
|
175
182
|
*/
|
|
@@ -841,10 +848,10 @@ FormFieldComponent.selector = 'sme-form-field';
|
|
|
841
848
|
} if (rf & 2) {
|
|
842
849
|
let _t;
|
|
843
850
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.subFormTemplate = _t.first);
|
|
844
|
-
} }, hostVars:
|
|
845
|
-
i0.ɵɵattribute("disabled", ctx.loadingOrDisabled)("aria-disabled", ctx.loadingOrDisabled);
|
|
851
|
+
} }, hostVars: 15, hostBindings: function FormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
852
|
+
i0.ɵɵattribute("disabled", ctx.loadingOrDisabled)("aria-disabled", ctx.loadingOrDisabled)("data-uta-id", ctx.dataUtaId);
|
|
846
853
|
i0.ɵɵclassProp("sme-form-field-auto-height", ctx.compact)("sme-form-field-minimal", ctx.minimal)("sme-disabled", ctx.loadingOrDisabled)("sme-form-field-error-alert-border", ctx.errorAlertBorder)("sme-form-field-orientation-horizontal", ctx.isHorizontalLayout)("sme-form-field-orientation-vertical", ctx.isVerticalLayout);
|
|
847
|
-
} }, inputs: { type: "type", hideHeader: "hideHeader", hideHeaderSpace: "hideHeaderSpace", required: "required", autofocus: "autofocus", placeholder: "placeholder", label: "label", description: "description", compact: "compact", minimal: "minimal", readonly: "readonly", instructions: "instructions", tooltipTemplate: "tooltipTemplate", tooltip: "tooltip", tooltipContext: "tooltipContext", disabledInput: ["disabled", "disabledInput"], loading: "loading", loadingMessage: "loadingMessage", pendingMessage: "pendingMessage", immediateValidation: "immediateValidation", orientation: "orientation", formFieldContainer: "formFieldContainer" }, outputs: { change: "change" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature] });
|
|
854
|
+
} }, inputs: { type: "type", hideHeader: "hideHeader", hideHeaderSpace: "hideHeaderSpace", required: "required", autofocus: "autofocus", placeholder: "placeholder", label: "label", description: "description", compact: "compact", minimal: "minimal", readonly: "readonly", instructions: "instructions", tooltipTemplate: "tooltipTemplate", tooltip: "tooltip", tooltipContext: "tooltipContext", disabledInput: ["disabled", "disabledInput"], loading: "loading", loadingMessage: "loadingMessage", pendingMessage: "pendingMessage", utaId: "utaId", immediateValidation: "immediateValidation", orientation: "orientation", formFieldContainer: "formFieldContainer" }, outputs: { change: "change" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature] });
|
|
848
855
|
__decorate([
|
|
849
856
|
SmeInject(NgControl, true),
|
|
850
857
|
__metadata("design:type", NgControl)
|
|
@@ -944,6 +951,11 @@ __decorate([
|
|
|
944
951
|
type: Input
|
|
945
952
|
}], pendingMessage: [{
|
|
946
953
|
type: Input
|
|
954
|
+
}], utaId: [{
|
|
955
|
+
type: Input
|
|
956
|
+
}], dataUtaId: [{
|
|
957
|
+
type: HostBinding,
|
|
958
|
+
args: ['attr.data-uta-id']
|
|
947
959
|
}], immediateValidation: [{
|
|
948
960
|
type: Input
|
|
949
961
|
}], change: [{
|
|
@@ -975,4 +987,4 @@ const ɵSmeInternalFormFieldComponent_BaseFactory = /*@__PURE__*/ i0.ɵɵgetInhe
|
|
|
975
987
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SmeInternalFormFieldComponent, [{
|
|
976
988
|
type: Directive
|
|
977
989
|
}], null, null); })();
|
|
978
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsV0FBVyxFQUMvRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJB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N0IsNkJBQTZCOzBGQUE3Qiw2QkFBNkI7dUZBQTdCLDZCQUE2QjtjQUZsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWVJbmplY3QgfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycy9pbmplY3Rpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERpc2FibGVkQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2V2ZW50cy9kaXNhYmxlZENoYW5nZWQuZXZlbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi8uLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0LCBWYWxpZGF0aW9uQWxlcnRzLCBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFjY2Vzc29yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSwgRm9ybUZpZWxkQWdncmVnYXRvciwgU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiB9IGZyb20gJy4vZm9ybS1maWVsZC1hZ2dyZWdhdG9yJztcclxuaW1wb3J0IHsgQ2hlY2tBc3luY1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZEFzeW5jVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFzeW5jLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRDb250YWluZXIgfSBmcm9tICcuL2Zvcm0tZmllbGQtY29udGFpbmVyJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3JpZW50YXRpb24gfSBmcm9tICcuL2Zvcm0tZmllbGQtb3JpZW50YXRpb24nO1xyXG5pbXBvcnQgeyBDaGVja1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNvbXBvbmVudCBjbGFzcyBmb3IgZm9ybSBmaWVsZHNcclxuICogQSBjaXJjdWxhciByZWZlcmVuY2Ugd291bGQgYmUgY3JlYXRlZCBieSBpbmplY3RpbmcgYm90aCBuZ01vZGVsXHJcbiAqIGFuZCBwcm92aWRpbmcgQHNlZSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgQHNlZSBWYWxpZGF0b3IgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBzYW1lIGNvbXBvbmVudC5cclxuICogVGhlcmVmb3JlLCB3ZSBoYXZlIGJyb2tlbiB0aGUgRm9ybUZpZWxkIGNvbXBvbmVudCBpbnRvIDMgcGFydHMuXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBoYW5kbGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBAc2VlIFZhbGlkYXRvciBhbmQgQHNlZSBOR19WQUxJREFUT1JTXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGhhbmRsZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEBzZWUgQ29udHJvbFZhbHVlQWNjZXNzb3IgYW5kIEBzZWUgTkdfVkFMVUVfQUNDRVNTT1JcclxuICogIC0gVGhpcyBAc2VlIEZvcm1GaWVsZENvbXBvbmVudCBpcyBvdXIgZ2x1ZSB0aGF0IHB1bGxzIGl0IGFsbCB0b2dldGhlciB3aXRoIGxhYmVscyBhbmQgYWxlcnRzIGFuZCBpbmplY3RzIHRoZSBOZ0NvbnRyb2wgaW5zdGFuY2Ugc2FmZWx5LlxyXG4gKlxyXG4gKiBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCBhbGwgdGhyZWUgY29tcG9uZW50cyBtdXN0IHVzZSB0aGUgc2FtZSBiYXNlIHNlbGVjdG9yIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yLlxyXG4gKiBUaGlzIGlzIGVuZm9yY2VkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGNvbXBvbmVudCxcclxuICogSG93ZXZlciB0aGUgZGlyZWN0aXZlcyBhcmUgZG9uZSBieSBjb252ZW50aW9uIGFuZCB3aWxsIGp1c3QgY3Jhc2ggaWYgdGhlIGluamVjdG9yIGNhbm5vdCBmaW5kIHRoZW0uXHJcbiAqXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBGb3JtIGZpZWxkcyBAaWQgc21lLWZvcm0tZmllbGRzLWNvbXBvbmVudH1cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBlbXBoYXNpemVkIHNlYXJjaCBidXR0b24gQGlkIHNlYXJjaC1lbXBoYXNpc31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBoaWRkZW4gbGFiZWwgQGlkIHNlYXJjaC1oaWRkZW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50Lmh0bWx9XHJcbiAgKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIHJlcXVpcmVkIGZpZWxkIEBpZCBzZWFyY2gtcmVxdWlyZWR9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1yZXF1aXJlZC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLXJlcXVpcmVkLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENhbGVuZGFyIEBpZCBjYWxlbmRhcn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jYWxlbmRhci5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDbG9jayBAaWQgY2xvY2t9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2Nsb2NrLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jbG9jay5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBEYXRldGltZSBAaWQgZGF0ZXRpbWV9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RhdGV0aW1lLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kYXRldGltZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIGVycm9yIEBpZCB2YWxpZGF0aW9uLWVycm9yfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gcGVuZGluZyBAaWQgdmFsaWRhdGlvbi1wZW5kaW5nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLXBlbmRpbmcuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tcGVuZGluZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIHdpdGggY3VzdG9tIG1hcmtkb3duIEBpZCB2YWxpZGF0aW9uLW1hcmtkb3dufVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLW1hcmtkb3duLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1tYXJrZG93bi5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBCYXNpYyBjb21ib2JveCBAaWQgY29tYm9ib3h9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDb21ib2JveCB3aXRoIHNlYXJjaCBAaWQgY29tYm9ib3gtc2VhcmNofVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1zZWFyY2guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LXNlYXJjaC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBNdWx0aXBsZSBzZWxlY3QgY29tYm94Ym94IEBpZCBjb21ib2JveC1tdWx0aX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGkuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIG1pbndpZHRoIEBpZCBjb21ib2JveC1tdWx0aS1taW53aWR0aH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGktbWlud2lkdGguY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLW1pbndpZHRoLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIGN1c3RvbSB0b29sdGlwIEBpZCBjdXN0b20tdG9vbHRpcH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY3VzdG9tLXRvb2x0aXAuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2N1c3RvbS10b29sdGlwLmNvbXBvbmVudC5odG1sfVxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUZpZWxkQ29tcG9uZW50PFRTdHJpbmdzLCBUTW9kZWw+XHJcbiAgICBleHRlbmRzIEJhc2VDb21wb25lbnQ8VFN0cmluZ3M+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2VsZWN0b3IgdGhhdCBhbGwgZm9ybSBmaWVsZHMgbXVzdCB1c2UgaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSB3aXRoXHJcbiAgICAgKiBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGFuZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHNlbGVjdG9yID0gJ3NtZS1mb3JtLWZpZWxkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIGZpZWxkIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gVGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGhlYWRlciBvZiB0aGlzIGZvcm0gZmllbGQgc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHZpZXcgKGJ1dCBub3QgbmVjZXNzYXJpbHkgZnJvbSBhcmlhKVxyXG4gICAgICogTm90IHN1cHBvcnRlZCBvbiBhbGwgZm9ybSBmaWVsZHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoaWRlSGVhZGVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRvIG1haW50YWluIHRoZSBzcGFjZSBsZWZ0IGFmdGVyIGhpZGRpbmcgaGVhZGVyXHJcbiAgICAgKi9cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVIZWFkZXJTcGFjZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHJlcXVpcmVzIGEgdmFsdWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVxdWlyZXMgYSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwbGFjZWhvbGRlciBmb3IgdGhlIGludGVybmFsIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoaXMgY29udHJvbCB0byB0aGUgdXNlclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGVtcGxhdGUgcmVmIG9mIGEgc3ViZm9ybSBvZiB0aGlzIGNvbXBvbmVudC4gVGhlIHdheSB0aGlzIHRlbXBsYXRlIHJlZiBpcyB1c2VkIHZhcmllcyBmb3JtIGZpZWxkIHRvIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXHJcbiAgICBwdWJsaWMgc3ViRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGQ7IEEgZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIHRoZSBtZWFuaW5nIGFuZCBwdXJwb3NlIG9mIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtYXV0by1oZWlnaHQnKVxyXG4gICAgcHVibGljIGNvbXBhY3Q6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtbWluaW1hbCcpXHJcbiAgICBwdWJsaWMgbWluaW1hbDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIHJlYWRvbmx5LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluc3RydWN0aW9ucyBvZiB0aGlzIGNvbnRyb2w7IEEgYnVpbHQgaW4gZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIGhvdyB0aGlzIGNvbnRyb2wgd29ya3MuXHJcbiAgICAgKiBUaGlzIHNob3VsZCBiZSBwcm92aWRlZCBieSB0aGUgY29udHJvbCBhbmQgYXBwbGllcyB0byBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjb250cm9sLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXMgYW4gYXR0cmlidXRlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBpbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEluc3RydWN0aW9ucztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaW5zdHJ1Y3Rpb25zKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsSW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBwcm92aWRlZCwgcmVuZGVycyBhIGN1c3RvbSB0b29sdGlwIGZvciB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvb2x0aXAuIElmIG5vdCBwcm92aWRlZCwgZGV0YWlscyBwcm9wZXJ0eSB3aWxsIGJlIHVzZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcENvbnRleHQ6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgZm9ybSBjb250cm9sIGlzIHRydWx5IGRpc2FibGVkXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgYWNjZXNzb3IgKG1vZGVsKSwgaW5wdXQsIG9yIGFuY2VzdG9yIGlzIGRpc2FibGVkXHJcbiAgICAgKiBJdHMgdmFsdWUgaXMgc2V0IG9ubHkgb24gRG9DaGVjay5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgZGlzYWJsZWQsIG91ciBtb2RlbCBpcyBkaXNhYmxlZCBvciBhbiBhbmNlc3RvciBpcyBkaXNhYmxlZFxyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBwZW5kaW5nIHZhbGlkYXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLnBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwudG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1kaXNhYmxlZCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGdldCBsb2FkaW5nT3JEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSA/IHRydWUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBib3VuZCBpbnB1dCBvZiB0aGUgZGlzYWJsZWQgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZSA+IFJlYXNvbjogc2VlICdkaXNhYmxlZCcgcHJvcGVydHkgYWJvdmVcclxuICAgIEBJbnB1dCgnZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGRpc2FibGVkSW5wdXQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHNob3cgd2hpbGUgbG9hZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IHdoaWxlIHBlbmRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwZW5kaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBjb21iaW5lZCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBpbnRlcm5hbERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZElucHV0IHx8IHRoaXMuZGlzYWJsZWRCeU1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFuY2VzdG9yRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGRpc2FibGVkIHN0YXRlIGlzIGJlaW5nIHJlZmxlY3RlZCBpbiB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4cGVjdERpc2FibGVkQnlJbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkaXNhYmxlZEJ5TW9kZWw6IGJvb2xlYW47XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdHJpbmdzID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uRm9ybS5WYWxpZGF0aW9uO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICgodGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lKSA/IHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCkgOiBzdHJpbmdzLlVua25vd25GaWVsZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQuXHJcbiAgICAgKiBzYWZlIHdyYXBwZXIgYXJvdW5kIHRoaXMuYWNjZXNzb3IudmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBUTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yLndyaXRlVmFsdWUodmFsdWUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd0luZm9CdWJibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICghIXRoaXMucmVzb2x2ZWRUaXRsZSB8fCAhIXRoaXMucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAgfHwgdGhpcy5kZXRhaWxzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdncmVnYXRlIHByb3BlcnR5IGZvciB0aGUgZGV0YWlscyBmb3Igb2YgdGhpcyBjb250cm9sIChkZXNjcmlwdGlvbiBtZXJnZWQgd2l0aCBpbnN0cnVjdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBhbGVydCB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgbm9uLWVycm9yIGFzeW5jIGFsZXJ0cyB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBub25FcnJvckFzeW5jQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgaW1tZWRpYXRlIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGltbWVkaWF0ZVZhbGlkYXRpb246IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8VE1vZGVsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgaW1tZWRpYXRlVmFsaWRhdGlvbi5cclxuICAgICAqIFRoaXMgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBkZWZhdWx0SW1tZWRpYXRlVmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1lcnJvci1hbGVydC1ib3JkZXInKVxyXG4gICAgcHVibGljIGVycm9yQWxlcnRCb3JkZXI6IEJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgZm9ybSBmaWVsZCBzaG91bGQgbGF5b3V0IGhvcml6b250YWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLWhvcml6b250YWwnKVxyXG4gICAgcHVibGljIGdldCBpc0hvcml6b250YWxMYXlvdXQoKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSBGb3JtRmllbGRPcmllbnRhdGlvbi5mcm9tQmluZGFibGVUeXBlKHRoaXMub3JpZW50YXRpb24pIHx8XHJcbiAgICAgICAgICAgIEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24pO1xyXG4gICAgICAgIHJldHVybiBvcmllbnRhdGlvbiA9PT0gRm9ybUZpZWxkT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgZm9ybSBmaWVsZCBzaG91bGQgbGF5b3V0IHZlcnRpY2FsbHlcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzVmVydGljYWxMYXlvdXQoKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSBGb3JtRmllbGRPcmllbnRhdGlvbi5mcm9tQmluZGFibGVUeXBlKHRoaXMub3JpZW50YXRpb24pIHx8XHJcbiAgICAgICAgICAgIEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24pO1xyXG4gICAgICAgIHJldHVybiBvcmllbnRhdGlvbiA9PT0gRm9ybUZpZWxkT3JpZW50YXRpb24uVmVydGljYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGRlc2lyZWQgb3JpZW50YXRpb24gb2YgdGhlIGZvcm0gZmllbGQuXHJcbiAgICAgKiBXaGVuIHByb3ZpZGVkLCB0aGUgZm9ybSBmaWVsZCB3aWxsIG5vIGxvbmdlciBkeW5hbWljYWxseSBjaGFuZyBpdHMgb3JpZW50YXRpb24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgb3JpZW50YXRpb246IEZvcm1GaWVsZE9yaWVudGF0aW9uLkJpbmRhYmxlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBjYWxjdWxhdGVkIG9yaWVudGF0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYWxjdWxhdGVkT3JpZW50YXRpb246IEZvcm1GaWVsZE9yaWVudGF0aW9uLkJpbmRhYmxlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBOZ0NvbnRyb2wgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoTmdDb250cm9sLCB0cnVlKVxyXG4gICAgcHVibGljIG5nTW9kZWw6IE5nQ29udHJvbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIGFjY2Vzc29yOiBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZTxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlKVxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3I6IEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAU21lSW5qZWN0KEZvcm1GaWVsZEFzeW5jVmFsaWRhdG9yRGlyZWN0aXZlLCB0cnVlKVxyXG4gICAgcHJpdmF0ZSBhc3luY1ZhbGlkYXRvcjogRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZEFnZ3JlZ2F0b3IgcGFyZW50IGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAU21lSW5qZWN0KFNNRV9GT1JNX0ZJRUxEX0FHR1JFR0FUT1JfUFJPVklERVIsIHRydWUpXHJcbiAgICBwcml2YXRlIGFnZ3JlZ2F0b3I6IEZvcm1GaWVsZEFnZ3JlZ2F0b3I7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIExheW91dCBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUiwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSlcclxuICAgIHByaXZhdGUgbGF5b3V0OiBMYXlvdXQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIENoYW5nZURldGVjdG9yUmVmIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAU21lSW5qZWN0KENoYW5nZURldGVjdG9yUmVmKVxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZvcm1GaWVsZENvbnRhaW5lcjogRm9ybUZpZWxkQ29udGFpbmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGZvciB0aGUgYXZhaWxhYmxlIHdpZHRoIGZvciBzdWJmaWVsZHMgdG8gY29uc3VtZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IHN1YkZpZWxkTGF5b3V0V2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHBsYWNlaG9sZGVyIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGludGVybmFsRGVzY3JpcHRpb246IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVybmFsIHBsYWNlaG9sZGVyIGZvciB0aGUgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGludGVybmFsSW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIb2xkcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0aWFsVmFsdWU6IFRNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBpbml0aWFsIHZhbHVlIGhhcyBiZWVuIHRyYWNrZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB2YWx1ZUluaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgd2lkdGggdG8gYmFzZSBsYXlvdXQgZGVjaXNpb25zIG9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGxheW91dFdpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7IHJldHVybiAwOyB9XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50ID8gZWxlbWVudC5vZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggOiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbGF5b3V0IHdpZHRoIGFzIGRldGVjdGVkIG9uIHRoZSBsYXN0IERvQ2hlY2soKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2Ugb2YgQHNlZSBGb3JtRmllbGRDb21wb25lbnRcclxuICAgICAqIEBwYXJhbSBpbmplY3RvciB0aGUgYW5ndWxhciBpbmplY3Rpb24gc2VydmljZSBmb3IgdGhlIGJhc2UgY2xhc3NlcyBAU21lSW5qZWN0YWJsZSBBbm5vdGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnJztcclxuICAgICAgICB0aGlzLmF1dG9mb2N1cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmFsdWVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbiA9IHRoaXMuZGVmYXVsdEltbWVkaWF0ZVZhbGlkYXRpb247XHJcbiAgICAgICAgdGhpcy5hbmNlc3RvckRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUTW9kZWw+KCk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gPSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCA9IHRoaXMubGF5b3V0V2lkdGg7XHJcblxyXG4gICAgICAgIC8vIFJ1bnRpbWUgTGludGluZyBpcyBub3QgbmVjZXNzYXJpbHkgdXNlZnVsIGZvciBmcmFtZXdvcmsgY29udHJvbHMgc3VjaCBhc1xyXG4gICAgICAgIC8vIGZvcm0gZmllbGRzIHNpbmNlIHRoZXkgYXJlIGRlc2lnbmVkIHdpdGggYWNjZXNzaWJpbGl0eSBpbiBtaW5kLlxyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdzbWUtbGludC1kaXNhYmxlJywgJycpO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0ZSBzZWxlY3RvciB0byBiZSBpbiB0aGUgJ3NtZS1mb3JtLWZpZWxkW3R5cGU9XCI8dHlwZT5cIl0nIGZvcm1hdFxyXG4gICAgICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudHMgZGVyaXZlZCBmcm9tICR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBtdXN0IHVzZSBhIGJhc2Ugc2VsZWN0b3Igb2YgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9W3R5cGU9XCIuLi5cIl1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwidHlwZVwiIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiBhbGwgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IGNvbXBvbmVudHNgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5uZ01vZGVsKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn0gY29tcG9uZW50cyByZXF1aXJlIHRoZSB1c2Ugb2YgYW4gTmdDb250cm9sIGRpcmVjdGl2ZSBzdWNoIGFzIFtuZ01vZGVsXSwgW2Zvcm1Db250cm9sTmFtZV0sIG9yIFtmb3JtQ29udHJvbF1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5jaGVja1ZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC52YWxpZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIuaW1tZWRpYXRlVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltbWVkaWF0ZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC52YWxpZDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIuaXNEaXJ0eSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwuZGlydHk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBob29rIHVwIGxheW91dCBkaXJlY3RpdmUgdG8gZ2V0IGxheW91dCB3aWR0aFxyXG4gICAgICAgIGlmICh0aGlzLmxheW91dCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMueWllbGRPbkxheW91dENoYW5nZWQoKTsgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciB2YWxpZGF0b3JzIGN1c3RvbVZhbGlkYXRlIGV2ZW50LlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsaWRhdG9yLmN1c3RvbVZhbGlkYXRlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgLy8gTWVyZ2Ugb3VyIGFsZXJ0cyB3aXRoIHRoZSBhbGVydHMgb2JqZWN0IGdpdmVuIGluIHRoZSBldmVudCBhcmdzXHJcbiAgICAgICAgICAgIChhcmdzOiBDaGVja1ZhbGlkYXRpb25FdmVudEFyZ3MpID0+IHsgTXNmdFNtZS5kZWVwQXNzaWduKGFyZ3MuYWxlcnRzLCB0aGlzLnZhbGlkYXRlKGFyZ3MuZm9ybUNvbnRyb2wpKTsgfVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIHZhbGlkYXRvcnMgYWxlcnQgZXZlbnQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy52YWxpZGF0b3IuYWxlcnQuc3Vic2NyaWJlKChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpID0+IHsgdGhpcy5vbkFsZXJ0KGFsZXJ0cyk7IH0pKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXN5bmNWYWxpZGF0b3IgJiYgIXRoaXMuYXN5bmNWYWxpZGF0b3IuY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgYXN5bmNWYWxpZGF0b3JzIGN1c3RvbUFzeW5jVmFsaWRhdGUgZXZlbnQuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXN5bmNWYWxpZGF0b3IuY3VzdG9tQXN5bmNWYWxpZGF0ZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSBvdXIgYWxlcnRzIHdpdGggdGhlIGFsZXJ0cyBvYmplY3QgZ2l2ZW4gaW4gdGhlIGV2ZW50IGFyZ3NcclxuICAgICAgICAgICAgICAgIChhcmdzOiBDaGVja0FzeW5jVmFsaWRhdGlvbkV2ZW50QXJncykgPT4geyBhcmdzLmFsZXJ0cy5wdXNoKHRoaXMuYXN5bmNWYWxpZGF0ZShhcmdzLmZvcm1Db250cm9sKSk7IH1cclxuICAgICAgICAgICAgKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIGFzeW5jVmFsaWRhdG9ycyBhc3luY0FsZXJ0IGV2ZW50LlxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFzeW5jVmFsaWRhdG9yLmFzeW5jQWxlcnQuc3Vic2NyaWJlKChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpID0+IHsgdGhpcy5vbkFzeW5jQWxlcnQoYWxlcnRzKTsgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBsaXN0ZW4gdG8gZGlzYWJsZWQgc3RhdGUgY2hhbmdlcyBmcm9tIG91ciBtb2RlbFxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWNjZXNzb3IuZGlzYWJsZWRDaGFuZ2Uuc3Vic2NyaWJlKChkaXNhYmxlZCA9PiB0aGlzLm5nTW9kZWxEaXNhYmxlZENoYW5nZWQoZGlzYWJsZWQpKSkpO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gbmdNb2RlbCBzdGF0dXMgY2hhbmdlcy5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nTW9kZWwuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoc3RhdHVzID0+IHRoaXMub25TdGF0dXNDaGFuZ2VkKHN0YXR1cykpKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nTW9kZWwudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMub25WYWx1ZUNoYW5nZWQodmFsdWUpKSk7XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBwYXJlbnQgYWdncmVnYXRvciwgdGhlbiByZWdpc3RlciB0byBpdFxyXG4gICAgICAgIGlmICh0aGlzLmFnZ3JlZ2F0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdG9yLmFkZEZvcm1GaWVsZCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG91ciBtb2RlbCBtYXkgaGF2ZSBzdGFydGVkIGluIHRoZSBkaXNhYmxlZCBzdGF0ZSwgc28gaW5pdGlhbGl6ZSBvdXIgdHJhY2tpbmcgcHJvcGVydHkgdG8gdGhlIGN1cnJlbnQgYWNjZXNzb3Igc3RhdGUuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0aGlzLmFjY2Vzc29yLmRpc2FibGVkO1xyXG5cclxuICAgICAgICAvLyBlbnN1cmUgb3VyIG1vZGVsIHN0YXJ0cyBpbiBhIHByaXN0aW5lIHN0YXRlXHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgLy8gYSBiaXQgaGFja3ksIGJ1dCB0aGlzIHdvcmtzIHRvIHRyaWdnZXIgdmFsaWRhdGlvbiBpbW1lZGlhdGVseSB3aGVuIHRoZSBmb3JtIGxvYWRzLlxyXG4gICAgICAgIC8vIHRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgd2l0aCBlZGl0YWJsZSBncmlkcyB1c2luZyBmb3JtRmllbGRDb250YWluZXIsIHVzZSBleHBsaWNpdCBpbW1lZGlhdGVWYWxpZGF0aW9uIGNhbGwgYWJvdmUuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1GaWVsZENvbnRhaW5lciAmJiB0aGlzLmltbWVkaWF0ZVZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBEb0NoZWNrIGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xyXG4gICAgICAgIHN1cGVyLm5nRG9DaGVjaygpO1xyXG4gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIG91ciBsYXlvdXRcclxuICAgICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IHRoaXMubGF5b3V0V2lkdGg7XHJcbiAgICAgICAgaWYgKGxheW91dFdpZHRoICE9PSB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoID0gbGF5b3V0V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBzeW5jaHJvbml6ZXMgdGhlIGV4cGVjdGVkIGRpc2FibGVkIHN0YXRlIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgbW9kZWxcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZSA9IHRoaXMuaW50ZXJuYWxEaXNhYmxlZDtcclxuICAgICAgICBpZiAoZGlzYWJsZSA9PT0gdGhpcy5hY2Nlc3Nvci5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlzYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbmNlc3RvckRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3RvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkQnlNb2RlbCkge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3RvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5lbmFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMubG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlZElucHV0KSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHNldCBhbmNlc3RvcnMuIE91ciBhbmNlc3RyeSBzaG91bGQgbmV2ZXIgY2hhbmdlLCBzbyB3ZSBjYW4gc2F2ZSBwZXJmIGJ5IGNvbGxlY3RpbmcgdGhpcyBub3cuXHJcbiAgICAgICAgY29uc3QgZmllbGRzZXRBbmNlc3RvcnMgPSA8SFRNTEZpZWxkU2V0RWxlbWVudFtdPkRvbS5nZXRBbGxBbmNlc3RvcnMoXHJcbiAgICAgICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnRklFTERTRVQnXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gbGlzdGVuIHRvIHRoZSBjdXN0b20gZGlzYWJsZWRDaGFuZ2VkIGV2ZW50IG9uIG91ciBhbmNlc3RvciBmaWVsZHNldHNcclxuICAgICAgICBjb25zdCBkaXNhYmxlZENoYW5nZWRPYnNlcnZhYmxlcyA9IGZpZWxkc2V0QW5jZXN0b3JzLm1hcChmID0+IGZyb21FdmVudChmLCBEaXNhYmxlZENoYW5nZWRFdmVudC50eXBlTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICBtZXJnZSguLi5kaXNhYmxlZENoYW5nZWRPYnNlcnZhYmxlcykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCA9IGZpZWxkc2V0QW5jZXN0b3JzLnNvbWUoZiA9PiBmLmRpc2FibGVkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBvdXIgYW5jZXN0cmFsIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgICAgdGhpcy5hbmNlc3RvckRpc2FibGVkID0gZmllbGRzZXRBbmNlc3RvcnMuc29tZShmID0+IGYuZGlzYWJsZWQpO1xyXG4gICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uRGVzdHJveSBpbnRlcmZhY2VcclxuICAgICAqIGRlcml2ZWQgY2xhc3NlcyBhcmUgYWx3YXlzIGV4cGVjdGVkIHRvIGNhbGwgc3VwZXIubmdPbkRlc3Ryb3koKSB3aGVuIG92ZXJyaWRpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBhcmVudCBhZ2dyZWdhdG9yLCB0aGVuIHJlZ2lzdGVyIHRvIGl0XHJcbiAgICAgICAgaWYgKHRoaXMuYWdncmVnYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0b3IucmVtb3ZlRm9ybUZpZWxkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBsYXlvdXQgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuICAgICAgICAvLyA2MDBweCBpcyBicmVha3BvaW50IGZvciBmb3JtIGZpZWxkIHZlcnRpY2FsL2hvcml6b250YWwgbGF5b3V0XHJcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSBsYXlvdXRXaWR0aCA+PSA2MDAgPyBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsIDogRm9ybUZpZWxkT3JpZW50YXRpb24uVmVydGljYWw7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uICE9PSBvcmllbnRhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy55aWVsZE9uT3JpZW50YXRpb25DaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgb3JpZW50YXRpb24gaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25PcmllbnRhdGlvbkNoYW5nZWQoKSB7XHJcbiAgICAgICAgLy8gVG8gYmUgaW1wbGVtZW50ZWQgb3B0aW9uYWxseSBieSBkZXJpdmVkIGNvbXBvbmVudHMuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBsYXlvdXQgaGFzIGJlZW4gY2hhbmdlZC5cclxuICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSB5aWVsZE9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5nSXNEZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBmaWVsZCB0byBpdHMgaW5pdGlhbCB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgYmFzZSBvbiB0aGUgaW5pdGlhbCB2YWx1ZXMgdHlwZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldENsZWFyVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcGllcyB0aGUgZmllbGRzIHZhbHVlIHRvIHRoZSBjbGlwYm9hcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb3B5VG9DbGlwYm9hcmQoKSB7XHJcbiAgICAgICAgTXNmdFNtZS5jb3B5VG9DbGlwYm9hcmQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIGJlIGRpc3BsYXllZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3VsZERpc3BsYXlIZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmhpZGVIZWFkZXIgJiYgKCEhKHRoaXMubGFiZWwgfHwgdGhpcy5kZXRhaWxzKSB8fCB0aGlzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoaXMgZm9ybSBmaWVsZCBpcyB2YWxpZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGZvcm0gZmllbGQgaXMgZGlydHkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0RpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwuZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgZm9ybSBmaWVsZCBhcyBwcmlzdGluZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1hcmtBc1ByaXN0aW5lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgZm9ybSBmaWVsZCBhcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1hcmtBc0RpcnR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIHRoZSBmb2N1cyB0byB0aGUgY3VycmVudCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmb2N1cygpIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gRG9tLmdldE5leHRGb2N1c2FibGVFbGVtZW50KHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgbmV4dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBjb250cm9sIGlzIGRpc2FibGVkIG9yIGVuYWJsZWQuXHJcbiAgICAgKiBAcGFyYW0gZGlzYWJsZWQgVGhlIG5ldyBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbmdNb2RlbERpc2FibGVkQ2hhbmdlZChkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBleHBlY3REaXNhYmxlZCA9IHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yIHx8IHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXhwZWN0RGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQnlNb2RlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIGNsZWFyaW5nIHRoZSBmaWVsZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCB2YWx1ZSB0eXBlXHJcbiAgICAgKiBEZXJpdmVkIGZpZWxkcyBtYXkgb3ZlcnJpZGUgdGhpcyB0byBjaGFuZ2UgdGhlIGNsZWFyIHZhbHVlIGJlaGF2aW9yXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRDbGVhclZhbHVlKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5pbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5pbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8YW55PltdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdGhpcy5pbml0aWFsVmFsdWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+Jyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8YW55PmZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHZhbGlkYXRpb24gdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBjIFRoZSBmb3JtIGNvbnRyb2wgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBhc3luY2hyb25vdXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBhc3luY1ZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uQWxlcnRzPiB7XHJcbiAgICAgICAgLy8gVG8gYmUgaW1wbGVtZW50ZWQgb3B0aW9uYWxseSBieSBkZXJpdmVkIGNvbXBvbmVudHMuXHJcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyBhbnkgdGltZSB2YWx1ZSBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlRGV0YWlscygpIHtcclxuICAgICAgICBjb25zdCBkZXRhaWxzID0gW107XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICBkZXRhaWxzLnB1c2godGhpcy5kZXNjcmlwdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UodGhpcy5pbnN0cnVjdGlvbnMpKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmluc3RydWN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXBhcmF0ZSBkZXRhaWxzIGFuZCBpbnN0cnVjdGlvbnMgd2l0aCBkb3VibGUgbGluZSBicmVha3MuXHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscy5sZW5ndGggPiAwID8gZGV0YWlscy5qb2luKCdcXG5cXG4nKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbml0aWFsIGhvc3QgY2xhc3NlcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgZWxlbWVudFxyXG4gICAgICogV2hlbiBjYWxsZWQgaW4gdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcyBpbml0aWFsaXphdGlvbiwgVGhlc2UgY2xhc3NlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8gdGhlIGhvc3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtZm9ybS1maWVsZCdcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBjaGFuZ2VzLCBpbiB0aGUgVUkgb3IgcHJvZ3JhbW1hdGljYWxseS5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5yZXBvcnRDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5nTW9kZWxbJ3VwZGF0ZSddLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoYW5nZS5lbWl0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHRoZSBjb250cm9sIGhhcyBiZWVuIHJlLWNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0gc3RhdHVzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uU3RhdHVzQ2hhbmdlZChzdGF0dXM6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWdncmVnYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0b3IudXBkYXRlU3RhdHVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlcmUgYXJlIGFsZXJ0IGNoYW5nZXMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICogQHBhcmFtIGFsZXJ0cyB0aGUgYWxlcnRzIGZyb20gdGhlIHZhbGlkYXRvciBkaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uQWxlcnQoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSB7XHJcbiAgICAgICAgdGhpcy5ub25FcnJvckFsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlcmUgYXJlIGFsZXJ0IGNoYW5nZXMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICogQHBhcmFtIGFsZXJ0cyB0aGUgYWxlcnRzIGZyb20gdGhlIHZhbGlkYXRvciBkaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uQXN5bmNBbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMgPSB0aGlzLnJlbW92ZUVycm9yQWxlcnRzKGFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGVycm9yIGFsZXJ0cyBmcm9tIGEgVmFsaWRhdGlvbkFsZXJ0IE9iamVjdHNcclxuICAgICAqIGVycm9ycyB3aWxsIGJlIHN1cmZhY2VkIGluIHRoZSB0aGlzLm5nTW9kZWwuY29udHJvbC5lcnJvcnMgaW5zdGVhZFxyXG4gICAgICogQHBhcmFtIGFsZXJ0cyB0aGUgYWxlcnRzIHRvIGZpbHRlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUVycm9yQWxlcnRzKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cyk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIGNvbnN0IG5vbkVycm9yQWxlcnRzID0ge307XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWxlcnRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0ID0gYWxlcnRzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChhbGVydCAmJiAoPFZhbGlkYXRpb25BbGVydD5hbGVydCkudmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIG5vbkVycm9yQWxlcnRzW2tleV0gPSBhbGVydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub25FcnJvckFsZXJ0cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGZvcm0gZmllbGQgYm9yZGVyIHRvIHJlZmxlY3QgZXJyb3IgYWxlcnRzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlQm9yZGVyU3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxlcnQgJiYgdGhpcy5hbGVydC5zZXZlcml0eSA9PT0gVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3JcclxuICAgICAgICAgICAgJiYgKHRoaXMuYWxlcnQudmFsaWQgfHwgdGhpcy5hbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckFsZXJ0Qm9yZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYWN0aXZlIGFsZXJ0cyBvZiB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFsZXJ0cygpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmdzID0gPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3M7XHJcbiAgICAgICAgdGhpcy5hbGVydCA9IG51bGw7XHJcbiAgICAgICAgLy8gV2hlbiBpbiBhIGxvYWRpbmcgc3RhdGUsIHNob3cgdGhhdCBhbGVydCBvbmx5LlxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydCA9IHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxvYWRpbmdNZXNzYWdlIHx8IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uTG9hZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBwZW5kaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wZW5kaW5nTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbi5QZW5kaW5nLm1lc3NhZ2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZ2F0aGVyIG91ciBhbGVydHMuXHJcbiAgICAgICAgY29uc3QgYWxlcnRzQXJyYXk6IE1zZnRTbWUuTmFtZVZhbHVlPHN0cmluZywgYW55PltdID0gW107XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQWxlcnRzKTtcclxuICAgICAgICB0aGlzLmFkZFZpc2libGVBbGVydHMoYWxlcnRzQXJyYXksIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5nTW9kZWwuY29udHJvbC5lcnJvcnMpO1xyXG5cclxuICAgICAgICAvLyBjbGVhciBhY3RpdmUgYWxlcnQgaWYgdGhlcmUgYXJlIG5vIGFsZXJ0c1xyXG4gICAgICAgIGlmIChhbGVydHNBcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci51cGRhdGVBbGVydChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1GaWVsZEVycm9yTmFtZXMgPSB7IHJlcXVpcmVkOiAncmVxdWlyZWQnLCBpbnZhbGlkRGlzcGxheVZhbHVlOiAnaW52YWxpZERpc3BsYXlWYWx1ZScgfTtcclxuICAgICAgICAvLyBQcmUgc29ydCBmb3IgaW52YWxpZCBkaXNwbGF5IGVycm9ycyB0byBjb21lIGJlZm9yZSByZXF1aXJlZCBlcnJvcnMsIHRoZXkgaGF2ZSB0aGUgc2FtZSBzZXZlcml0eVxyXG4gICAgICAgIGFsZXJ0c0FycmF5LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEubmFtZSA9PT0gZm9ybUZpZWxkRXJyb3JOYW1lcy5yZXF1aXJlZCAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGEubmFtZSA9PT0gZm9ybUZpZWxkRXJyb3JOYW1lcy5pbnZhbGlkRGlzcGxheVZhbHVlICYmIGIubmFtZSA9PT0gZm9ybUZpZWxkRXJyb3JOYW1lcy5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBzb3J0ZWRBbGVydHMgPSBhbGVydHNBcnJheVxyXG4gICAgICAgICAgICAubWFwKGUgPT4gdGhpcy5nZXRBbGVydChlLm5hbWUsIGUudmFsdWUpKVxyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc29ydCBvbiB2YWxpZCBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKGEudmFsaWQgIT09IGIudmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS52YWxpZCA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNvcnQgb24gc2V2ZXJpdHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnNldmVyaXR5ICE9PSBiLnNldmVyaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc2V2ZXJpdHkgPCBiLnNldmVyaXR5ID8gMSA6IC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGV5IGFyZSBjb25zaWRlcmVkIGVxdWFsIGZvciBzb3J0aW5nXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNvcnRlZEFsZXJ0cy5zb21lKGFsZXJ0ID0+IHtcclxuICAgICAgICAgICAgLy8gU2hvdyBhbGVydCBpbiB0aGVzZSBzY2VuYXJpb3M6XHJcbiAgICAgICAgICAgIC8vIC0gSWYgdGhlIGZvcm0gZmllbGQgaXMgcmVxdWlyZWQgYW5kIGl0IGlzIG5vdCB0aGUgaW5pdGlhbCBsb2FkIG9mIHRoZSBmb3JtXHJcbiAgICAgICAgICAgIC8vIC0gSWYgYSBjdXN0b20gYWxlcnQgbWFya3Mgc2hvd1doZW5QcmlzaXRpbmUgYXMgdHJ1ZVxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBhbGVydCBpcyBtYXJrZWQgYXMgdmFsaWRcclxuICAgICAgICAgICAgLy8gLSBBbnkgb3RoZXIgYWxlcnRzIGFmdGVyIHRoZSBmb3JtIGlzIG1hcmtlZCBhcyBkaXJ0eVxyXG4gICAgICAgICAgICBpZiAoYWxlcnQuc2V2ZXJpdHkgIT09IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yIHx8IGFsZXJ0LnZhbGlkIHx8IGFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0ID0gYWxlcnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci51cGRhdGVBbGVydChhbGVydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQm9yZGVyU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZFZpc2libGVBbGVydHModGFyZ2V0OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSwgYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSB7XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0cykpIHtcclxuICAgICAgICAgICAgTXNmdFNtZS5mb3JFYWNoS2V5KGFsZXJ0cywgKGssIHYpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghKDxWYWxpZGF0aW9uQWxlcnQ+dikuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goeyBuYW1lOiBrLCB2YWx1ZTogdiB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0cyBhbiBhbGVydCBvYmplY3QgZnJvbSBhIGtleSBhbmQgdmFsaWRhdGlvbiByZXN1bHRcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEFsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogVmFsaWRhdGlvblJlc3VsdCk6IFZhbGlkYXRpb25BbGVydCB7XHJcbiAgICAgICAgLy8gaWYgdGhlIGFsZXJ0IGlzIGZhbHNlLCBudWxsLCBvciB2YWxpZCB3aXRoIG5vIG1lc3NhZ2UsIHRoZW4gaXRzIG5vdCByZWFsbHkgYW4gYWxlcnQgdGhhdCBuZWVkcyB0byBiZSBzaG93biBhbmQgc2hvdWxkIGJlIGlnbm9yZWRcclxuICAgICAgICBpZiAoYWxlcnQgPT09IGZhbHNlXHJcbiAgICAgICAgICAgIHx8IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoYWxlcnQpXHJcbiAgICAgICAgICAgIHx8ICgoYWxlcnQgYXMgVmFsaWRhdGlvbkFsZXJ0KS52YWxpZCA9PT0gdHJ1ZSkgJiYgTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvY2Vzc2VkQWxlcnQ6IFZhbGlkYXRpb25BbGVydDtcclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGFsZXJ0IGlzIGEgc3RyaW5nLCBzaG93IGl0IGFzIGFuIGVycm9yXHJcbiAgICAgICAgaWYgKHR5cGVvZiBhbGVydCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcHJvY2Vzc2VkQWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZXZlcml0eTogVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3IsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiA8c3RyaW5nPmFsZXJ0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gdGhpcy5nZXRLbm93bk5nQWxlcnQoa2V5LCBhbGVydCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEFsZXJ0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgYWxlcnQgaXMgYSBzaW1wbGUgdHJ1ZSwgd2UgZG9udCByZWFsbHkga25vdyBob3cgdG8gZGVhbCB3aXRoIGl0LCBzbyBqdXN0IGNyZWF0ZSBhbiBlbXB0eSB2YWxpZGF0aW9uIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkQWxlcnQgPSBhbGVydCA9PT0gdHJ1ZSA/IHt9IDogeyAuLi5hbGVydCB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbGlkIGlzIG5vdCBzZXQsIHRoZW4gc2V0IGl0IGV4cGxpY2l0bHkgdG8gZmFsc2VcclxuICAgICAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHByb2Nlc3NlZEFsZXJ0LnZhbGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0LnZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gbWVzc2FnZSwgY3JlYXRlIGEgZGVmYXVsdCBvbmVcclxuICAgICAgICAgICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShwcm9jZXNzZWRBbGVydC5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0Lm1lc3NhZ2UgPSBgVmFsaWRhdGlvbiBmYWlsZWQ6ICR7a2V5fWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgc2V2ZXJpdHkgaXMgbm90IHNldCBjb3JyZWN0bHkgYW5kIHRoZSBmaWVsZCBpcyBub3QgdmFsaWQsIHRoZW4gc2V0IGl0IHRvIGVycm9yXHJcbiAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEFsZXJ0LnZhbGlkICYmIE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHlbcHJvY2Vzc2VkQWxlcnQuc2V2ZXJpdHldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0LnNldmVyaXR5ID0gVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkuRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRBbGVydDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20ga25vd24gYW5ndWxhciBhbGVydCBrZXlzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRLbm93bk5nQWxlcnQoa2V5OiBzdHJpbmcsIGFsZXJ0OiBhbnkpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIGNvbnN0IHZTdHJpbmdzID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uRm9ybS5WYWxpZGF0aW9uO1xyXG4gICAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgLy8gZmlyc3QgY2hlY2sgZm9yIGtub3duIGFuZ3VsYXIgJ2J1aWx0LWluJyB2YWxpZGF0aW9uc1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdtaW4nOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuTWluLmZvcm1hdC5mb3JtYXQodGhpcy5maWVsZE5hbWUsIGFsZXJ0Lm1pbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdtYXgnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuTWF4LmZvcm1hdC5mb3JtYXQodGhpcy5maWVsZE5hbWUsIGFsZXJ0Lm1heCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5SZXF1aXJlZC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLkVtYWlsLmZvcm1hdC5mb3JtYXQodGhpcy5maWVsZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbkxlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdtYXhsZW5ndGgnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuTWF4TGVuZ3RoLmZvcm1hdC5mb3JtYXQodGhpcy5maWVsZE5hbWUsIGFsZXJ0LnJlcXVpcmVkTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ3BhdHRlcm4nOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUGF0dGVybi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZFBhdHRlcm4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShtZXNzYWdlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG5cclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKGFsZXJ0KSkge1xyXG4gICAgICAgICAgICAvLyBtZXJnZSBhbGVydCBwcm9wZXJ0aWVzIGlmIHRoZXkgZXhpc3RcclxuICAgICAgICAgICAgdmFsaWQgPSAhIWFsZXJ0LnZhbGlkO1xyXG4gICAgICAgICAgICBzZXZlcml0eSA9IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoYWxlcnQuc2V2ZXJpdHkpID8gc2V2ZXJpdHkgOiBhbGVydC5zZXZlcml0eTtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoYWxlcnQubWVzc2FnZSkgPyBtZXNzYWdlIDogYWxlcnQubWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbGlkOiB2YWxpZCxcclxuICAgICAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluIHNvbWUgY2FzZXMsIHdlIG5lZWQgYSBjb21iaW5lZCB2ZXJzaW9uIG9mIHRoZSBsYWJlbCBhbmQgZGVzY3JpcHRpb24gc28gdGhhdCB0aGUgc2NyZWVuIHJlYWQgY2FuIHJlYWQgaXQgYXBwcm9wcmlhdGVseS5cclxuICAgICAqIENvbW1vbiBjYXNlcyBmb3IgdGhpcyBhcmUgd2hlbiB1c2luZyByb2xlPVwiZ3JvdXBcIiBvciByb2xlPVwicmFkaW9Hcm91cFwiIGJlY2F1c2UgdGhleSBkb2VzIG5vdCBzdXBwb3J0IGFyaWEtZGVzY3JpYmVkYnlcclxuICAgICAqIHdlIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGJ5IHNwbGl0dGluZyB0aGUgZGVzY3JpcHRpb24gYW5kIGFuZCBsYWJlbCB3aXRoIGEgJy4nIChwZXJpb2QpXCJcclxuICAgICAqIFRPRE86IHZlcmlmeSBob3cgdGhpcyBsb2NhbGl6ZXMgb3IgZmluZCBhIGJldHRlciB3YXkuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRNZXJnZWREZXNjcmlwdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UodGhpcy5sYWJlbCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH0uICR7dGhpcy5kZXNjcmlwdGlvbn1gO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJuYWwgYmFzZSBjb21wb25lbnQgZm9yIFNNRSBmb3IgZmllbGRzLiBJdCBzaW1wbHkgcmVtb3ZlcyB0aGUgbmVlZCB0byBzdXBwbHkgdGhlIHN0cmluZyB0eXBlIHBhcmFtZXRlciB0byBGb3JtRmllbGRDb21wb25lbnRcclxuICogVGhpcyBjbGFzcyBpcyBleHBvcnRlZCBmcm9tIHRoaXMgZmlsZSwgYnV0IG5vdCBtZWFudCB0byBiZSBleHBvcnRlZCBmcm9tIGluZGV4LnRzIGJ1bmRsZXMuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudDxUTW9kZWw+IGV4dGVuZHMgRm9ybUZpZWxkQ29tcG9uZW50PFN0cmluZ3MsIFRNb2RlbD4ge1xyXG4gICAgLy8gU2hvdWxkIFJlbWFpbiBFbXB0eS5cclxufVxyXG4iXX0=
|
|
990
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsV0FBVyxFQUMvRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUE0QiwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUV6Rzs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7QUFFSCxtREFBbUQ7QUFDbkQsTUFBTSxPQUFnQixrQkFDbEIsU0FBUSxhQUF1QjtJQWtaL0I7OztPQUdHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFqWXBCOztXQUVHO1FBR0ksb0JBQWUsR0FBRyxJQUFJLENBQUM7UUE4UHZCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQStIckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDO1FBQzdELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXJELDJFQUEyRTtRQUMzRSxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUxQyx3RUFBd0U7UUFDeEUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQ3RGLDJDQUEyQztZQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixrQkFBa0IsQ0FBQyxRQUFRLGdDQUFnQyxrQkFBa0IsQ0FBQyxRQUFRLGNBQWMsQ0FBQyxDQUFDO1NBQ3BKO0lBQ0wsQ0FBQztJQW5YRDs7T0FFRztJQUNILElBQ1csV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBVyxXQUFXLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBZ0JEOzs7T0FHRztJQUNILElBQ1csWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsSUFBVyxZQUFZLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBb0JEOzs7O09BSUc7SUFDSCxJQUFXLFFBQVE7UUFDZixtRkFBbUY7UUFDbkYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFHVyxpQkFBaUI7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBaUNEOzs7T0FHRztJQUNILElBQ1csU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBWSxnQkFBZ0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9FLENBQUM7SUFzQkQsSUFBYyxTQUFTO1FBQ25CLE1BQU0sT0FBTyxHQUFhLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEcsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxJQUFXLEtBQUssQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQVcsdUJBQXVCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUErQkQ7OztPQUdHO0lBQ0gsSUFBYywwQkFBMEI7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUtEOztPQUVHO0lBQ0gsSUFDVyxrQkFBa0I7UUFDekIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN2RSxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RSxPQUFPLFdBQVcsS0FBSyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDVyxnQkFBZ0I7UUFDdkIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN2RSxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RSxPQUFPLFdBQVcsS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7SUFDekQsQ0FBQztJQTJERDs7T0FFRztJQUNILElBQWMsbUJBQW1CO1FBQzdCLE1BQU0sT0FBTyxHQUFnQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUM1RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDL0IsQ0FBQztJQXNCRDs7T0FFRztJQUNILElBQVksV0FBVztRQUNuQixNQUFNLE9BQU8sR0FBZ0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQUU7UUFDM0IsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUN6RixDQUFDO0lBcUNEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLGtCQUFrQixDQUFDLFFBQVEsYUFBYSxDQUFDLENBQUM7U0FDeEc7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLDJDQUEyQztZQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsUUFBUSw4R0FBOEcsQ0FBQyxDQUFDO1NBQ2pLO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzlCLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7Z0JBQy9DLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO29CQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3pDO2dCQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUFDO1NBQ0w7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RztRQUVELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTO1FBQzNELGtFQUFrRTtRQUNsRSxDQUFDLElBQThCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RyxDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsRUFBRTtZQUN6RSw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTO1lBQ3JFLGtFQUFrRTtZQUNsRSxDQUFDLElBQW1DLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZHLENBQUMsQ0FBQztZQUVILHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuSTtRQUNELGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVySCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRyxzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsdUhBQXVIO1FBQ3ZILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFFOUMsOENBQThDO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRDLHFGQUFxRjtRQUNyRixnSUFBZ0k7UUFDaEksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixvREFBb0Q7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFdBQVcsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3RDLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3BDLE9BQU87U0FDVjtRQUVELElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7YUFDeEM7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVNLGVBQWU7UUFDbEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLCtHQUErRztRQUMvRyxNQUFNLGlCQUFpQixHQUEwQixHQUFHLENBQUMsZUFBZSxDQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFDOUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSxDQUM1RCxDQUFDO1FBRUYsdUVBQXVFO1FBQ3ZFLE1BQU0sMEJBQTBCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixLQUFLLENBQUMsR0FBRywwQkFBMEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVc7UUFDZCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsc0RBQXNEO1FBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFHRDs7TUFFRTtJQUNRLGVBQWU7UUFDckIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxnRUFBZ0U7UUFDaEUsTUFBTSxXQUFXLEdBQUcsV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFDekcsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssV0FBVyxFQUFFO1lBQzVDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVEOztNQUVFO0lBQ1Esb0JBQW9CO1FBQzFCLHNEQUFzRDtJQUMxRCxDQUFDO0lBRUQ7O01BRUU7SUFFTSxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVEOztNQUVFO0lBRU0seUJBQXlCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQjtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sc0JBQXNCLENBQUMsUUFBaUI7UUFDOUMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ25GLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO2dCQUMvQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7YUFDdEM7WUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDbkM7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sYUFBYTtRQUNuQixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbEMsT0FBWSxFQUFFLENBQUM7U0FDbEI7UUFFRCxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM5QixLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNYLE9BQVksRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDWixPQUFZLEtBQUssQ0FBQzthQUNyQjtZQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQzthQUM1QjtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFFBQVEsQ0FBQyxDQUFjO1FBQzdCLHNEQUFzRDtRQUN0RCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDTyxhQUFhLENBQUMsQ0FBYztRQUNsQyxzREFBc0Q7UUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sYUFBYTtRQUNuQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuQztRQUVELDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFCQUFxQjtRQUMzQixPQUFPLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUN4QyxnQkFBZ0I7U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQzthQUFNO1lBQ0gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUMxQztZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUM3QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDdEI7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGVBQWUsQ0FBQyxNQUFXO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDTyxPQUFPLENBQUMsTUFBd0I7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxZQUFZLENBQUMsTUFBd0I7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FBQyxNQUF3QjtRQUM5QyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksS0FBSyxJQUFzQixLQUFNLENBQUMsS0FBSyxFQUFFO2dCQUN6QyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQy9CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLHVCQUF1QixDQUFDLEtBQUs7ZUFDaEUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVk7UUFDbEIsTUFBTSxPQUFPLEdBQVksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTzthQUMzRixDQUFDO1lBQ0YsT0FBTztTQUNWO1FBRUQsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjO3VCQUNyQixPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTzthQUM3RSxDQUFDO1lBQ0YsT0FBTztTQUNWO1FBRUQscUJBQXFCO1FBQ3JCLE1BQU0sV0FBVyxHQUFxQyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhFLDRDQUE0QztRQUM1QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsT0FBTztTQUNWO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztRQUNqRyxrR0FBa0c7UUFDbEcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsbUJBQW1CLEVBQUU7Z0JBQy9GLE9BQU8sQ0FBQyxDQUFDO2FBQ1o7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7Z0JBQy9GLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDYjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxXQUFXO2FBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ1gsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNyQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0I7WUFFRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1lBRUQsa0RBQWtEO1lBQ2xELE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7UUFFUCxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLGlDQUFpQztZQUNqQyw2RUFBNkU7WUFDN0Usc0RBQXNEO1lBQ3RELG9DQUFvQztZQUNwQyx1REFBdUQ7WUFDdkQsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLHVCQUF1QixDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakgsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ25CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBd0MsRUFBRSxNQUF3QjtRQUN2RixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQW1CLENBQUUsQ0FBQyxNQUFNLEVBQUU7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0QztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxRQUFRLENBQUMsR0FBVyxFQUFFLEtBQXVCO1FBQ25ELG1JQUFtSTtRQUNuSSxJQUFJLEtBQUssS0FBSyxLQUFLO2VBQ1osT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztlQUNoQyxDQUFFLEtBQXlCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBRSxLQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLGNBQStCLENBQUM7UUFFcEMsZ0RBQWdEO1FBQ2hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLGNBQWMsR0FBRztnQkFDYixLQUFLLEVBQUUsS0FBSztnQkFDWixRQUFRLEVBQUUsdUJBQXVCLENBQUMsS0FBSztnQkFDdkMsT0FBTyxFQUFVLEtBQUs7YUFDekIsQ0FBQztTQUNMO2FBQU07WUFFSCxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFFakIsZ0hBQWdIO2dCQUNoSCxjQUFjLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsbUJBQU0sS0FBSyxDQUFFLENBQUM7Z0JBRXBELHVEQUF1RDtnQkFDdkQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNqRCxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztpQkFDaEM7Z0JBRUQsK0NBQStDO2dCQUMvQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3BELGNBQWMsQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2lCQUN4RDtnQkFFRCxvRkFBb0Y7Z0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDdEcsY0FBYyxDQUFDLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUM7aUJBQzNEO2FBQ0o7U0FFSjtRQUNELE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNPLGVBQWUsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUM3QyxNQUFNLFFBQVEsR0FBYSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pHLElBQUksT0FBZSxDQUFDO1FBQ3BCLHVEQUF1RDtRQUV2RCxRQUFRLEdBQUcsRUFBRTtZQUNULEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ1IsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEUsTUFBTTthQUNUO1lBQ0QsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDUixPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO2FBQ1Q7WUFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDO2dCQUNiLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxRCxNQUFNO2FBQ1Q7WUFDRCxLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUNWLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNO2FBQ1Q7WUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUNkLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU07YUFDVDtZQUNELEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ2QsT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakYsTUFBTTthQUNUO1lBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDWixPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNoRixNQUFNO2FBQ1Q7WUFDRCxPQUFPLENBQUMsQ0FBQztnQkFDTCxNQUFNO2FBQ1Q7U0FDSjtRQUVELElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBRTdDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEMsdUNBQXVDO1lBQ3ZDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN0QixRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2pGLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDaEY7UUFFRCxPQUFPO1lBQ0gsS0FBSyxFQUFFLEtBQUs7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsT0FBTztTQUNuQixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08seUJBQXlCO1FBQy9CLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM5QyxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7U0FDakM7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsQ0FBQzs7QUE3a0NEOzs7R0FHRztBQUNvQiwyQkFBUSxHQUFHLGdCQUFnQixDQUFDO3VHQVJqQyxrQkFBa0I7MEVBQWxCLGtCQUFrQjtvQ0F5RHRCLFdBQVc7Ozs7Ozs7O0FBdVF6QjtJQURDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDOzhCQUNYLFNBQVM7bURBQUM7QUFNMUI7SUFEQyxTQUFTLENBQUMsMEJBQTBCLENBQUM7OEJBQ3BCLDBCQUEwQjtvREFBUztBQU1yRDtJQURDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQzs4QkFDcEIsMkJBQTJCO3FEQUFDO0FBTS9DO0lBREMsU0FBUyxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQzs4QkFDMUIsZ0NBQWdDOzBEQUFDO0FBTXpEO0lBREMsU0FBUyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQzs7c0RBQ1o7QUFNeEM7SUFEQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzs7a0RBQzVDO0FBTXZCO0lBREMsU0FBUyxDQUFDLGlCQUFpQixDQUFDOzhCQUNBLGlCQUFpQjs2REFBQztBQTZRL0M7SUFEQyxLQUFLLEVBQUU7Ozs7OERBS1A7QUFNRDtJQURDLEtBQUssRUFBRTs7OzttRUFLUDt1RkEvbkJpQixrQkFBa0I7Y0FGdkMsU0FBUzsyREFnQkMsSUFBSTtrQkFEVixLQUFLO1lBUUMsVUFBVTtrQkFEaEIsS0FBSztZQVFDLGVBQWU7a0JBRHJCLEtBQUs7WUFPQyxRQUFRO2tCQURkLEtBQUs7WUFPQyxTQUFTO2tCQURmLEtBQUs7WUFPQyxXQUFXO2tCQURqQixLQUFLO1lBT0MsS0FBSztrQkFEWCxLQUFLO1lBT0MsZUFBZTtrQkFEckIsWUFBWTttQkFBQyxXQUFXO1lBT2QsV0FBVztrQkFEckIsS0FBSztZQVdDLE9BQU87a0JBRmIsS0FBSzs7a0JBQ0wsV0FBVzttQkFBQyxrQ0FBa0M7WUFLeEMsT0FBTztrQkFGYixLQUFLOztrQkFDTCxXQUFXO21CQUFDLDhCQUE4QjtZQU9wQyxRQUFRO2tCQURkLEtBQUs7WUFRSyxZQUFZO2tCQUR0QixLQUFLO1lBYUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLE9BQU87a0JBRGIsS0FBSztZQU9DLGNBQWM7a0JBRHBCLEtBQUs7WUErQkssaUJBQWlCO2tCQUgzQixXQUFXO21CQUFDLG9CQUFvQjs7a0JBQ2hDLFdBQVc7bUJBQUMsZUFBZTs7a0JBQzNCLFdBQVc7bUJBQUMsb0JBQW9CO1lBVTFCLGFBQWE7a0JBRG5CLEtBQUs7bUJBQUMsVUFBVTtZQU9WLE9BQU87a0JBRGIsS0FBSztZQU9DLGNBQWM7a0JBRHBCLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsS0FBSztrQkFEWCxLQUFLO1lBUUssU0FBUztrQkFEbkIsV0FBVzttQkFBQyxrQkFBa0I7WUFvRnhCLG1CQUFtQjtrQkFEekIsS0FBSztZQUlDLE1BQU07a0JBRFosTUFBTTtZQVlBLGdCQUFnQjtrQkFEdEIsV0FBVzttQkFBQyx5Q0FBeUM7WUFPM0Msa0JBQWtCO2tCQUQ1QixXQUFXO21CQUFDLDZDQUE2QztZQVcvQyxnQkFBZ0I7a0JBRDFCLFdBQVc7bUJBQUMsMkNBQTJDO1lBWWpELFdBQVc7a0JBRGpCLEtBQUs7WUFZQyxPQUFPLE1BTU4sUUFBUSxNQU1SLFNBQVMsTUFNVCxjQUFjLE1BTWQsVUFBVSxNQU1WLE1BQU0sTUFNSixpQkFBaUIsTUFHcEIsa0JBQWtCO2tCQUR4QixLQUFLO1lBMlFFLG9CQUFvQixNQVVwQix5QkFBeUI7QUF5ZHJDOzs7R0FHRztBQUVILG1EQUFtRDtBQUNuRCxNQUFNLE9BQWdCLDZCQUFzQyxTQUFRLGtCQUFtQzs7bUtBQWpGLDZCQUE2QjtxRkFBN0IsNkJBQTZCOzBGQUE3Qiw2QkFBNkI7dUZBQTdCLDZCQUE2QjtjQUZsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IERvbSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZG9tL2RvbSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbWVJbmplY3QgfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycy9pbmplY3Rpb24uZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IERpc2FibGVkQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2V2ZW50cy9kaXNhYmxlZENoYW5nZWQuZXZlbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi8uLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0LCBWYWxpZGF0aW9uQWxlcnRzLCBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFjY2Vzc29yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSwgRm9ybUZpZWxkQWdncmVnYXRvciwgU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiB9IGZyb20gJy4vZm9ybS1maWVsZC1hZ2dyZWdhdG9yJztcclxuaW1wb3J0IHsgQ2hlY2tBc3luY1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZEFzeW5jVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFzeW5jLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRDb250YWluZXIgfSBmcm9tICcuL2Zvcm0tZmllbGQtY29udGFpbmVyJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkT3JpZW50YXRpb24gfSBmcm9tICcuL2Zvcm0tZmllbGQtb3JpZW50YXRpb24nO1xyXG5pbXBvcnQgeyBDaGVja1ZhbGlkYXRpb25FdmVudEFyZ3MsIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS1maWVsZC12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNvbXBvbmVudCBjbGFzcyBmb3IgZm9ybSBmaWVsZHNcclxuICogQSBjaXJjdWxhciByZWZlcmVuY2Ugd291bGQgYmUgY3JlYXRlZCBieSBpbmplY3RpbmcgYm90aCBuZ01vZGVsXHJcbiAqIGFuZCBwcm92aWRpbmcgQHNlZSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgQHNlZSBWYWxpZGF0b3IgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBzYW1lIGNvbXBvbmVudC5cclxuICogVGhlcmVmb3JlLCB3ZSBoYXZlIGJyb2tlbiB0aGUgRm9ybUZpZWxkIGNvbXBvbmVudCBpbnRvIDMgcGFydHMuXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBoYW5kbGVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBAc2VlIFZhbGlkYXRvciBhbmQgQHNlZSBOR19WQUxJREFUT1JTXHJcbiAqICAtIFRoZSBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGhhbmRsZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEBzZWUgQ29udHJvbFZhbHVlQWNjZXNzb3IgYW5kIEBzZWUgTkdfVkFMVUVfQUNDRVNTT1JcclxuICogIC0gVGhpcyBAc2VlIEZvcm1GaWVsZENvbXBvbmVudCBpcyBvdXIgZ2x1ZSB0aGF0IHB1bGxzIGl0IGFsbCB0b2dldGhlciB3aXRoIGxhYmVscyBhbmQgYWxlcnRzIGFuZCBpbmplY3RzIHRoZSBOZ0NvbnRyb2wgaW5zdGFuY2Ugc2FmZWx5LlxyXG4gKlxyXG4gKiBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCBhbGwgdGhyZWUgY29tcG9uZW50cyBtdXN0IHVzZSB0aGUgc2FtZSBiYXNlIHNlbGVjdG9yIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yLlxyXG4gKiBUaGlzIGlzIGVuZm9yY2VkIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGNvbXBvbmVudCxcclxuICogSG93ZXZlciB0aGUgZGlyZWN0aXZlcyBhcmUgZG9uZSBieSBjb252ZW50aW9uIGFuZCB3aWxsIGp1c3QgY3Jhc2ggaWYgdGhlIGluamVjdG9yIGNhbm5vdCBmaW5kIHRoZW0uXHJcbiAqXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBGb3JtIGZpZWxkcyBAaWQgc21lLWZvcm0tZmllbGRzLWNvbXBvbmVudH1cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9vdmVydmlldy5tZH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBlbXBoYXNpemVkIHNlYXJjaCBidXR0b24gQGlkIHNlYXJjaC1lbXBoYXNpc31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWVtcGhhc2l6ZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBTZWFyY2ggd2l0aCBoaWRkZW4gbGFiZWwgQGlkIHNlYXJjaC1oaWRkZW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1oaWRkZW4tbGFiZWwuY29tcG9uZW50Lmh0bWx9XHJcbiAgKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIHJlcXVpcmVkIGZpZWxkIEBpZCBzZWFyY2gtcmVxdWlyZWR9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NlYXJjaC1yZXF1aXJlZC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLXJlcXVpcmVkLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENhbGVuZGFyIEBpZCBjYWxlbmRhcn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jYWxlbmRhci5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDbG9jayBAaWQgY2xvY2t9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2Nsb2NrLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jbG9jay5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBEYXRldGltZSBAaWQgZGF0ZXRpbWV9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RhdGV0aW1lLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9kYXRldGltZS5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIGVycm9yIEBpZCB2YWxpZGF0aW9uLWVycm9yfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLWVycm9yLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gcGVuZGluZyBAaWQgdmFsaWRhdGlvbi1wZW5kaW5nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLXBlbmRpbmcuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tcGVuZGluZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBWYWxpZGF0aW9uIHdpdGggY3VzdG9tIG1hcmtkb3duIEBpZCB2YWxpZGF0aW9uLW1hcmtkb3dufVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLW1hcmtkb3duLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1tYXJrZG93bi5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBCYXNpYyBjb21ib2JveCBAaWQgY29tYm9ib3h9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBDb21ib2JveCB3aXRoIHNlYXJjaCBAaWQgY29tYm9ib3gtc2VhcmNofVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1zZWFyY2guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LXNlYXJjaC5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICogQGV4YW1wbGUge0BsYWJlbCBNdWx0aXBsZSBzZWxlY3QgY29tYm94Ym94IEBpZCBjb21ib2JveC1tdWx0aX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGkuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIG1pbndpZHRoIEBpZCBjb21ib2JveC1tdWx0aS1taW53aWR0aH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGktbWlud2lkdGguY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LW11bHRpLW1pbndpZHRoLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib2JveCB3aXRoIGN1c3RvbSB0b29sdGlwIEBpZCBjdXN0b20tdG9vbHRpcH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY3VzdG9tLXRvb2x0aXAuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2N1c3RvbS10b29sdGlwLmNvbXBvbmVudC5odG1sfVxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUZpZWxkQ29tcG9uZW50PFRTdHJpbmdzLCBUTW9kZWw+XHJcbiAgICBleHRlbmRzIEJhc2VDb21wb25lbnQ8VFN0cmluZ3M+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEZvcm1GaWVsZEFnZ3JlZ2F0YWJsZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2VsZWN0b3IgdGhhdCBhbGwgZm9ybSBmaWVsZHMgbXVzdCB1c2UgaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSB3aXRoXHJcbiAgICAgKiBAc2VlIEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlIGFuZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHNlbGVjdG9yID0gJ3NtZS1mb3JtLWZpZWxkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0eXBlIG9mIGZpZWxkIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gVGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGhlYWRlciBvZiB0aGlzIGZvcm0gZmllbGQgc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHZpZXcgKGJ1dCBub3QgbmVjZXNzYXJpbHkgZnJvbSBhcmlhKVxyXG4gICAgICogTm90IHN1cHBvcnRlZCBvbiBhbGwgZm9ybSBmaWVsZHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoaWRlSGVhZGVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRvIG1haW50YWluIHRoZSBzcGFjZSBsZWZ0IGFmdGVyIGhpZGRpbmcgaGVhZGVyXHJcbiAgICAgKi9cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVIZWFkZXJTcGFjZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIHJlcXVpcmVzIGEgdmFsdWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVxdWlyZXMgYSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwbGFjZWhvbGRlciBmb3IgdGhlIGludGVybmFsIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoaXMgY29udHJvbCB0byB0aGUgdXNlclxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGVtcGxhdGUgcmVmIG9mIGEgc3ViZm9ybSBvZiB0aGlzIGNvbXBvbmVudC4gVGhlIHdheSB0aGlzIHRlbXBsYXRlIHJlZiBpcyB1c2VkIHZhcmllcyBmb3JtIGZpZWxkIHRvIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXHJcbiAgICBwdWJsaWMgc3ViRm9ybVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGQ7IEEgZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIHRoZSBtZWFuaW5nIGFuZCBwdXJwb3NlIG9mIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERlc2NyaXB0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtYXV0by1oZWlnaHQnKVxyXG4gICAgcHVibGljIGNvbXBhY3Q6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtbWluaW1hbCcpXHJcbiAgICBwdWJsaWMgbWluaW1hbDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIHJlYWRvbmx5LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluc3RydWN0aW9ucyBvZiB0aGlzIGNvbnRyb2w7IEEgYnVpbHQgaW4gZGVzY3JpcHRpb24gZm9yIHRoZSB1c2VyIG9mIGhvdyB0aGlzIGNvbnRyb2wgd29ya3MuXHJcbiAgICAgKiBUaGlzIHNob3VsZCBiZSBwcm92aWRlZCBieSB0aGUgY29udHJvbCBhbmQgYXBwbGllcyB0byBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjb250cm9sLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXMgYW4gYXR0cmlidXRlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBpbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEluc3RydWN0aW9ucztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaW5zdHJ1Y3Rpb25zKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsSW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBwcm92aWRlZCwgcmVuZGVycyBhIGN1c3RvbSB0b29sdGlwIGZvciB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvb2x0aXAuIElmIG5vdCBwcm92aWRlZCwgZGV0YWlscyBwcm9wZXJ0eSB3aWxsIGJlIHVzZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSB0b29sdGlwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdG9vbHRpcENvbnRleHQ6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgZm9ybSBjb250cm9sIGlzIHRydWx5IGRpc2FibGVkXHJcbiAgICAgKiBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgYWNjZXNzb3IgKG1vZGVsKSwgaW5wdXQsIG9yIGFuY2VzdG9yIGlzIGRpc2FibGVkXHJcbiAgICAgKiBJdHMgdmFsdWUgaXMgc2V0IG9ubHkgb24gRG9DaGVjay5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgZGlzYWJsZWQsIG91ciBtb2RlbCBpcyBkaXNhYmxlZCBvciBhbiBhbmNlc3RvciBpcyBkaXNhYmxlZFxyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBwZW5kaW5nIHZhbGlkYXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLnBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwudG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1kaXNhYmxlZCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGdldCBsb2FkaW5nT3JEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSA/IHRydWUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBib3VuZCBpbnB1dCBvZiB0aGUgZGlzYWJsZWQgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZSA+IFJlYXNvbjogc2VlICdkaXNhYmxlZCcgcHJvcGVydHkgYWJvdmVcclxuICAgIEBJbnB1dCgnZGlzYWJsZWQnKVxyXG4gICAgcHVibGljIGRpc2FibGVkSW5wdXQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9ybSBmaWVsZCBpcyBsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHNob3cgd2hpbGUgbG9hZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWVzc2FnZSB0byBzaG93IHdoaWxlIHBlbmRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwZW5kaW5nTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGRhdGFVdGFJZCBpZiBwYXNzZWQgaW5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB1dGFJZDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvcm0gZmllbGQncyBVVEEgaWQgZ2V0dGVyLlxyXG4gICAgICogVGhlIElEIGlzIGJhc2VkIG9uIHRoZSBmb3JtIGZpZWxkIG5hbWUgdGhhdCdzIHNldCBvbiB0aGUgbmdNb2RlbC5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdXRhLWlkJylcclxuICAgIHB1YmxpYyBnZXQgZGF0YVV0YUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXRhSWQgPyB0aGlzLnV0YUlkIDogdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lICYmIHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNvbWJpbmVkIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0IGludGVybmFsRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkSW5wdXQgfHwgdGhpcy5kaXNhYmxlZEJ5TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGFuY2VzdG9yIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYW5jZXN0b3JEaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZSBpcyBiZWluZyByZWZsZWN0ZWQgaW4gdGhlIGN1cnJlbnQgbW9kZWxcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHBlY3REaXNhYmxlZEJ5QW5jZXN0b3I6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUlucHV0OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRpc2FibGVkQnlNb2RlbDogYm9vbGVhbjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGZpZWxkTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZ3MgPSAoPFN0cmluZ3M+TXNmdFNtZS5zZWxmKCkuUmVzb3VyY2VzLnN0cmluZ3MpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb247XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKCh0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLm5hbWUpID8gdGhpcy5uZ01vZGVsLm5hbWUudG9TdHJpbmcoKSA6IHN0cmluZ3MuVW5rbm93bkZpZWxkTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZC5cclxuICAgICAqIHNhZmUgd3JhcHBlciBhcm91bmQgdGhpcy5hY2Nlc3Nvci52YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzb3Iud3JpdGVWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93SW5mb0J1YmJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKCEhdGhpcy5yZXNvbHZlZFRpdGxlIHx8ICEhdGhpcy5yZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRvb2x0aXBUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b29sdGlwVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXNvbHZlZFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCB8fCB0aGlzLmRldGFpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZ2dyZWdhdGUgcHJvcGVydHkgZm9yIHRoZSBkZXRhaWxzIGZvciBvZiB0aGlzIGNvbnRyb2wgKGRlc2NyaXB0aW9uIG1lcmdlZCB3aXRoIGluc3RydWN0aW9ucylcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRldGFpbHM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IGFsZXJ0IHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFZhbGlkYXRpb25BbGVydDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IG5vbi1lcnJvciBhbGVydHMgdG8gZGlzcGxheSBmb3IgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbm9uRXJyb3JBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYXN5bmMgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQXN5bmNBbGVydHM6IFZhbGlkYXRpb25BbGVydHM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCBpbW1lZGlhdGUgdmFsaWRhdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW1tZWRpYXRlVmFsaWRhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpbW1lZGlhdGVWYWxpZGF0aW9uLlxyXG4gICAgICogVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWVycm9yLWFsZXJ0LWJvcmRlcicpXHJcbiAgICBwdWJsaWMgZXJyb3JBbGVydEJvcmRlcjogQm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgaG9yaXpvbnRhbGx5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzSG9yaXpvbnRhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgdmVydGljYWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLXZlcnRpY2FsJylcclxuICAgIHB1YmxpYyBnZXQgaXNWZXJ0aWNhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVzaXJlZCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cclxuICAgICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb3JtIGZpZWxkIHdpbGwgbm8gbG9uZ2VyIGR5bmFtaWNhbGx5IGNoYW5nIGl0cyBvcmllbnRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNhbGN1bGF0ZWQgb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZWRPcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIE5nQ29udHJvbCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChOZ0NvbnRyb2wsIHRydWUpXHJcbiAgICBwdWJsaWMgbmdNb2RlbDogTmdDb250cm9sO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRBY2Nlc3NvckRpcmVjdGl2ZSlcclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHZhbGlkYXRvcjogRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5qZWN0ZWQgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUsIHRydWUpXHJcbiAgICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yOiBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWdncmVnYXRvciBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoU01FX0ZPUk1fRklFTERfQUdHUkVHQVRPUl9QUk9WSURFUiwgdHJ1ZSlcclxuICAgIHByaXZhdGUgYWdncmVnYXRvcjogRm9ybUZpZWxkQWdncmVnYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgTGF5b3V0IHBhcmVudCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFNtZUluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KVxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBTbWVJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9ybUZpZWxkQ29udGFpbmVyOiBGb3JtRmllbGRDb250YWluZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSBhdmFpbGFibGUgd2lkdGggZm9yIHN1YmZpZWxkcyB0byBjb25zdW1lXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgc3ViRmllbGRMYXlvdXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxJbnN0cnVjdGlvbnM6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXRpYWxWYWx1ZTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGluaXRpYWwgdmFsdWUgaGFzIGJlZW4gdHJhY2tlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHZhbHVlSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCB0byBiYXNlIGxheW91dCBkZWNpc2lvbnMgb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXQgbGF5b3V0V2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHsgcmV0dXJuIDA7IH1cclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQgPyBlbGVtZW50Lm9mZnNldFBhcmVudC5jbGllbnRXaWR0aCA6IGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBsYXlvdXQgd2lkdGggYXMgZGV0ZWN0ZWQgb24gdGhlIGxhc3QgRG9DaGVjaygpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIEZvcm1GaWVsZENvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIHRoZSBhbmd1bGFyIGluamVjdGlvbiBzZXJ2aWNlIGZvciB0aGUgYmFzZSBjbGFzc2VzIEBTbWVJbmplY3RhYmxlIEFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uID0gdGhpcy5kZWZhdWx0SW1tZWRpYXRlVmFsaWRhdGlvbjtcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3RvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWw7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuXHJcbiAgICAgICAgLy8gUnVudGltZSBMaW50aW5nIGlzIG5vdCBuZWNlc3NhcmlseSB1c2VmdWwgZm9yIGZyYW1ld29yayBjb250cm9scyBzdWNoIGFzXHJcbiAgICAgICAgLy8gZm9ybSBmaWVsZHMgc2luY2UgdGhleSBhcmUgZGVzaWduZWQgd2l0aCBhY2Nlc3NpYmlsaXR5IGluIG1pbmQuXHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3NtZS1saW50LWRpc2FibGUnLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIHNlbGVjdG9yIHRvIGJlIGluIHRoZSAnc21lLWZvcm0tZmllbGRbdHlwZT1cIjx0eXBlPlwiXScgZm9ybWF0XHJcbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09IEZvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50cyBkZXJpdmVkIGZyb20gJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IG11c3QgdXNlIGEgYmFzZSBzZWxlY3RvciBvZiAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn1bdHlwZT1cIi4uLlwiXWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25Jbml0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJ0eXBlXCIgYXR0cmlidXRlIGlzIHJlcXVpcmVkIG9uIGFsbCAke0Zvcm1GaWVsZENvbXBvbmVudC5zZWxlY3Rvcn0gY29tcG9uZW50c2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5nTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBjb21wb25lbnRzIHJlcXVpcmUgdGhlIHVzZSBvZiBhbiBOZ0NvbnRyb2wgZGlyZWN0aXZlIHN1Y2ggYXMgW25nTW9kZWxdLCBbZm9ybUNvbnRyb2xOYW1lXSwgb3IgW2Zvcm1Db250cm9sXWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmNoZWNrVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pbW1lZGlhdGVWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLnZhbGlkO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZENvbnRhaW5lci5pc0RpcnR5ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhvb2sgdXAgbGF5b3V0IGRpcmVjdGl2ZSB0byBnZXQgbGF5b3V0IHdpZHRoXHJcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy55aWVsZE9uTGF5b3V0Q2hhbmdlZCgpOyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIHZhbGlkYXRvcnMgY3VzdG9tVmFsaWRhdGUgZXZlbnQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy52YWxpZGF0b3IuY3VzdG9tVmFsaWRhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAvLyBNZXJnZSBvdXIgYWxlcnRzIHdpdGggdGhlIGFsZXJ0cyBvYmplY3QgZ2l2ZW4gaW4gdGhlIGV2ZW50IGFyZ3NcclxuICAgICAgICAgICAgKGFyZ3M6IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncykgPT4geyBNc2Z0U21lLmRlZXBBc3NpZ24oYXJncy5hbGVydHMsIHRoaXMudmFsaWRhdGUoYXJncy5mb3JtQ29udHJvbCkpOyB9XHJcbiAgICAgICAgKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgdmFsaWRhdG9ycyBhbGVydCBldmVudC5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbGlkYXRvci5hbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQWxlcnQoYWxlcnRzKTsgfSkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvciAmJiAhdGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciBhc3luY1ZhbGlkYXRvcnMgY3VzdG9tQXN5bmNWYWxpZGF0ZSBldmVudC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hc3luY1ZhbGlkYXRvci5jdXN0b21Bc3luY1ZhbGlkYXRlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIG91ciBhbGVydHMgd2l0aCB0aGUgYWxlcnRzIG9iamVjdCBnaXZlbiBpbiB0aGUgZXZlbnQgYXJnc1xyXG4gICAgICAgICAgICAgICAgKGFyZ3M6IENoZWNrQXN5bmNWYWxpZGF0aW9uRXZlbnRBcmdzKSA9PiB7IGFyZ3MuYWxlcnRzLnB1c2godGhpcy5hc3luY1ZhbGlkYXRlKGFyZ3MuZm9ybUNvbnRyb2wpKTsgfVxyXG4gICAgICAgICAgICApKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgYXN5bmNWYWxpZGF0b3JzIGFzeW5jQWxlcnQgZXZlbnQuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYXN5bmNWYWxpZGF0b3IuYXN5bmNBbGVydC5zdWJzY3JpYmUoKGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykgPT4geyB0aGlzLm9uQXN5bmNBbGVydChhbGVydHMpOyB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxpc3RlbiB0byBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VzIGZyb20gb3VyIG1vZGVsXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2Nlc3Nvci5kaXNhYmxlZENoYW5nZS5zdWJzY3JpYmUoKGRpc2FibGVkID0+IHRoaXMubmdNb2RlbERpc2FibGVkQ2hhbmdlZChkaXNhYmxlZCkpKSk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBuZ01vZGVsIHN0YXR1cyBjaGFuZ2VzLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShzdGF0dXMgPT4gdGhpcy5vblN0YXR1c0NoYW5nZWQoc3RhdHVzKSkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vblZhbHVlQ2hhbmdlZCh2YWx1ZSkpKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBhcmVudCBhZ2dyZWdhdG9yLCB0aGVuIHJlZ2lzdGVyIHRvIGl0XHJcbiAgICAgICAgaWYgKHRoaXMuYWdncmVnYXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0b3IuYWRkRm9ybUZpZWxkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gb3VyIG1vZGVsIG1heSBoYXZlIHN0YXJ0ZWQgaW4gdGhlIGRpc2FibGVkIHN0YXRlLCBzbyBpbml0aWFsaXplIG91ciB0cmFja2luZyBwcm9wZXJ0eSB0byB0aGUgY3VycmVudCBhY2Nlc3NvciBzdGF0ZS5cclxuICAgICAgICB0aGlzLmRpc2FibGVkQnlNb2RlbCA9IHRoaXMuYWNjZXNzb3IuZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIC8vIGVuc3VyZSBvdXIgbW9kZWwgc3RhcnRzIGluIGEgcHJpc3RpbmUgc3RhdGVcclxuICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuICAgICAgICAvLyBhIGJpdCBoYWNreSwgYnV0IHRoaXMgd29ya3MgdG8gdHJpZ2dlciB2YWxpZGF0aW9uIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGZvcm0gbG9hZHMuXHJcbiAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIGVkaXRhYmxlIGdyaWRzIHVzaW5nIGZvcm1GaWVsZENvbnRhaW5lciwgdXNlIGV4cGxpY2l0IGltbWVkaWF0ZVZhbGlkYXRpb24gY2FsbCBhYm92ZS5cclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUZpZWxkQ29udGFpbmVyICYmIHRoaXMuaW1tZWRpYXRlVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIERvQ2hlY2sgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb3VyIGxheW91dFxyXG4gICAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gdGhpcy5sYXlvdXRXaWR0aDtcclxuICAgICAgICBpZiAobGF5b3V0V2lkdGggIT09IHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHN5bmNocm9uaXplcyB0aGUgZXhwZWN0ZWQgZGlzYWJsZWQgc3RhdGUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBkaXNhYmxlID0gdGhpcy5pbnRlcm5hbERpc2FibGVkO1xyXG4gICAgICAgIGlmIChkaXNhYmxlID09PSB0aGlzLmFjY2Vzc29yLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXNhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuY2VzdG9yRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdERpc2FibGVkQnlJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWRCeU1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkSW5wdXQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGZpZWxkc2V0IGFuY2VzdG9ycy4gT3VyIGFuY2VzdHJ5IHNob3VsZCBuZXZlciBjaGFuZ2UsIHNvIHdlIGNhbiBzYXZlIHBlcmYgYnkgY29sbGVjdGluZyB0aGlzIG5vdy5cclxuICAgICAgICBjb25zdCBmaWVsZHNldEFuY2VzdG9ycyA9IDxIVE1MRmllbGRTZXRFbGVtZW50W10+RG9tLmdldEFsbEFuY2VzdG9ycyhcclxuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdGSUVMRFNFVCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBsaXN0ZW4gdG8gdGhlIGN1c3RvbSBkaXNhYmxlZENoYW5nZWQgZXZlbnQgb24gb3VyIGFuY2VzdG9yIGZpZWxkc2V0c1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzID0gZmllbGRzZXRBbmNlc3RvcnMubWFwKGYgPT4gZnJvbUV2ZW50KGYsIERpc2FibGVkQ2hhbmdlZEV2ZW50LnR5cGVOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIG1lcmdlKC4uLmRpc2FibGVkQ2hhbmdlZE9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNlc3RvckRpc2FibGVkID0gZmllbGRzZXRBbmNlc3RvcnMuc29tZShmID0+IGYuZGlzYWJsZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBpbml0aWFsaXplIG91ciBhbmNlc3RyYWwgZGlzYWJsZWQgc3RhdGVcclxuICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmaWVsZHNldEFuY2VzdG9ycy5zb21lKGYgPT4gZi5kaXNhYmxlZCk7XHJcbiAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgT25EZXN0cm95IGludGVyZmFjZVxyXG4gICAgICogZGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5uZ09uRGVzdHJveSgpIHdoZW4gb3ZlcnJpZGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcGFyZW50IGFnZ3JlZ2F0b3IsIHRoZW4gcmVnaXN0ZXIgdG8gaXRcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci5yZW1vdmVGb3JtRmllbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIC8vIDYwMHB4IGlzIGJyZWFrcG9pbnQgZm9yIGZvcm0gZmllbGQgdmVydGljYWwvaG9yaXpvbnRhbCBsYXlvdXRcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IGxheW91dFdpZHRoID49IDYwMCA/IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWwgOiBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBvcmllbnRhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgeWllbGRPbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGZpZWxkIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBiYXNlIG9uIHRoZSBpbml0aWFsIHZhbHVlcyB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Q2xlYXJWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBmaWVsZHMgdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgICAgICBNc2Z0U21lLmNvcHlUb0NsaXBib2FyZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZUhlYWRlciAmJiAoISEodGhpcy5sYWJlbCB8fCB0aGlzLmRldGFpbHMpIHx8IHRoaXMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhpcyBmb3JtIGZpZWxkIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZm9ybSBmaWVsZCBpcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHByaXN0aW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzRGlydHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGZvY3VzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC5cclxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgbmV3IGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBuZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdERpc2FibGVkID0gdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgfHwgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHBlY3REaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gY2xlYXJpbmcgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZhbHVlIHR5cGVcclxuICAgICAqIERlcml2ZWQgZmllbGRzIG1heSBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgY2xlYXIgdmFsdWUgYmVoYXZpb3JcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldENsZWFyVmFsdWUoKTogVE1vZGVsIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxhbnk+W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT4nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIG9wdGlvbmFsbHkgYnkgZGVyaXZlZCBjb21wb25lbnRzLlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFzeW5jVmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25BbGVydHM+IHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGFueSB0aW1lIHZhbHVlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVEZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmluc3RydWN0aW9ucykpIHtcclxuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHRoaXMuaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcGFyYXRlIGRldGFpbHMgYW5kIGluc3RydWN0aW9ucyB3aXRoIGRvdWJsZSBsaW5lIGJyZWFrcy5cclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzLmxlbmd0aCA+IDAgPyBkZXRhaWxzLmpvaW4oJ1xcblxcbicpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1mb3JtLWZpZWxkJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMsIGluIHRoZSBVSSBvciBwcm9ncmFtbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLnJlcG9ydENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdNb2RlbFsndXBkYXRlJ10ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlLmVtaXQoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmUtY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKHN0YXR1czogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci51cGRhdGVTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25BbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQWxlcnRzID0gdGhpcy5yZW1vdmVFcnJvckFsZXJ0cyhhbGVydHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25Bc3luY0FsZXJ0KGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZXJyb3IgYWxlcnRzIGZyb20gYSBWYWxpZGF0aW9uQWxlcnQgT2JqZWN0c1xyXG4gICAgICogZXJyb3JzIHdpbGwgYmUgc3VyZmFjZWQgaW4gdGhlIHRoaXMubmdNb2RlbC5jb250cm9sLmVycm9ycyBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgdG8gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgY29uc3Qgbm9uRXJyb3JBbGVydHMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhbGVydHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSBhbGVydHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0ICYmICg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgbm9uRXJyb3JBbGVydHNba2V5XSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vbkVycm9yQWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCBib3JkZXIgdG8gcmVmbGVjdCBlcnJvciBhbGVydHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVCb3JkZXJTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGVydCAmJiB0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAmJiAodGhpcy5hbGVydC52YWxpZCB8fCB0aGlzLmFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQWxlcnRCb3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBhbGVydHMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBbGVydHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxlcnQgPSBudWxsO1xyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBsb2FkaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2FkaW5nTWVzc2FnZSB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLkxvYWRpbmcubWVzc2FnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGluIGEgcGVuZGluZyBzdGF0ZSwgc2hvdyB0aGF0IGFsZXJ0IG9ubHkuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucGVuZGluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb24uUGVuZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGdhdGhlciBvdXIgYWxlcnRzLlxyXG4gICAgICAgIGNvbnN0IGFsZXJ0c0FycmF5OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5ub25FcnJvckFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgYWN0aXZlIGFsZXJ0IGlmIHRoZXJlIGFyZSBubyBhbGVydHNcclxuICAgICAgICBpZiAoYWxlcnRzQXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3JkZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRmllbGRFcnJvck5hbWVzID0geyByZXF1aXJlZDogJ3JlcXVpcmVkJywgaW52YWxpZERpc3BsYXlWYWx1ZTogJ2ludmFsaWREaXNwbGF5VmFsdWUnIH07XHJcbiAgICAgICAgLy8gUHJlIHNvcnQgZm9yIGludmFsaWQgZGlzcGxheSBlcnJvcnMgdG8gY29tZSBiZWZvcmUgcmVxdWlyZWQgZXJyb3JzLCB0aGV5IGhhdmUgdGhlIHNhbWUgc2V2ZXJpdHlcclxuICAgICAgICBhbGVydHNBcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQgJiYgYi5uYW1lID09PSBmb3JtRmllbGRFcnJvck5hbWVzLmludmFsaWREaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWxlcnRzID0gYWxlcnRzQXJyYXlcclxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMuZ2V0QWxlcnQoZS5uYW1lLCBlLnZhbHVlKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHNvcnQgb24gdmFsaWQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnZhbGlkICE9PSBiLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWQgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IG9uIHNldmVyaXR5XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNldmVyaXR5IDwgYi5zZXZlcml0eSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBmb3Igc29ydGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb3J0ZWRBbGVydHMuc29tZShhbGVydCA9PiB7XHJcbiAgICAgICAgICAgIC8vIFNob3cgYWxlcnQgaW4gdGhlc2Ugc2NlbmFyaW9zOlxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBmb3JtIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBpdCBpcyBub3QgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgZm9ybVxyXG4gICAgICAgICAgICAvLyAtIElmIGEgY3VzdG9tIGFsZXJ0IG1hcmtzIHNob3dXaGVuUHJpc2l0aW5lIGFzIHRydWVcclxuICAgICAgICAgICAgLy8gLSBJZiB0aGUgYWxlcnQgaXMgbWFya2VkIGFzIHZhbGlkXHJcbiAgICAgICAgICAgIC8vIC0gQW55IG90aGVyIGFsZXJ0cyBhZnRlciB0aGUgZm9ybSBpcyBtYXJrZWQgYXMgZGlydHlcclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldmVyaXR5ICE9PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvciB8fCBhbGVydC52YWxpZCB8fCBhbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IGFsZXJ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQoYWxlcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRWaXNpYmxlQWxlcnRzKHRhcmdldDogTXNmdFNtZS5OYW1lVmFsdWU8c3RyaW5nLCBhbnk+W10sIGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhbGVydHMpKSB7XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShhbGVydHMsIChrLCB2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISg8VmFsaWRhdGlvbkFsZXJ0PnYpLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHsgbmFtZTogaywgdmFsdWU6IHYgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20gYSBrZXkgYW5kIHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRBbGVydChrZXk6IHN0cmluZywgYWxlcnQ6IFZhbGlkYXRpb25SZXN1bHQpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBmYWxzZSwgbnVsbCwgb3IgdmFsaWQgd2l0aCBubyBtZXNzYWdlLCB0aGVuIGl0cyBub3QgcmVhbGx5IGFuIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgc2hvd24gYW5kIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgaWYgKGFsZXJ0ID09PSBmYWxzZVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0KVxyXG4gICAgICAgICAgICB8fCAoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkudmFsaWQgPT09IHRydWUpICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKChhbGVydCBhcyBWYWxpZGF0aW9uQWxlcnQpLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBhIHN0cmluZywgc2hvdyBpdCBhcyBhbiBlcnJvclxyXG4gICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogPHN0cmluZz5hbGVydFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzZWRBbGVydCA9IHRoaXMuZ2V0S25vd25OZ0FsZXJ0KGtleSwgYWxlcnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGFsZXJ0IGlzIGEgc2ltcGxlIHRydWUsIHdlIGRvbnQgcmVhbGx5IGtub3cgaG93IHRvIGRlYWwgd2l0aCBpdCwgc28ganVzdCBjcmVhdGUgYW4gZW1wdHkgdmFsaWRhdGlvbiBvYmplY3RcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gYWxlcnQgPT09IHRydWUgPyB7fSA6IHsgLi4uYWxlcnQgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB2YWxpZCBpcyBub3Qgc2V0LCB0aGVuIHNldCBpdCBleHBsaWNpdGx5IHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChwcm9jZXNzZWRBbGVydC52YWxpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UocHJvY2Vzc2VkQWxlcnQubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5tZXNzYWdlID0gYFZhbGlkYXRpb24gZmFpbGVkOiAke2tleX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNldmVyaXR5IGlzIG5vdCBzZXQgY29ycmVjdGx5IGFuZCB0aGUgZmllbGQgaXMgbm90IHZhbGlkLCB0aGVuIHNldCBpdCB0byBlcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydC52YWxpZCAmJiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3Byb2Nlc3NlZEFsZXJ0LnNldmVyaXR5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5zZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGFsZXJ0IG9iamVjdCBmcm9tIGtub3duIGFuZ3VsYXIgYWxlcnQga2V5c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S25vd25OZ0FsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogYW55KTogVmFsaWRhdGlvbkFsZXJ0IHtcclxuICAgICAgICBjb25zdCB2U3RyaW5ncyA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbjtcclxuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBrbm93biBhbmd1bGFyICdidWlsdC1pbicgdmFsaWRhdGlvbnNcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWluJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5taW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4Jzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5tYXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUmVxdWlyZWQuZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5FbWFpbC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5NaW5MZW5ndGguZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heExlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLlBhdHRlcm4uZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRQYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2V2ZXJpdHkgPSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvcjtcclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShhbGVydCkpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgYWxlcnQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgICAgIHZhbGlkID0gISFhbGVydC52YWxpZDtcclxuICAgICAgICAgICAgc2V2ZXJpdHkgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0LnNldmVyaXR5KSA/IHNldmVyaXR5IDogYWxlcnQuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0Lm1lc3NhZ2UpID8gbWVzc2FnZSA6IGFsZXJ0Lm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWxpZDogdmFsaWQsXHJcbiAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIGEgY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHNvIHRoYXQgdGhlIHNjcmVlbiByZWFkIGNhbiByZWFkIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgKiBDb21tb24gY2FzZXMgZm9yIHRoaXMgYXJlIHdoZW4gdXNpbmcgcm9sZT1cImdyb3VwXCIgb3Igcm9sZT1cInJhZGlvR3JvdXBcIiBiZWNhdXNlIHRoZXkgZG9lcyBub3Qgc3VwcG9ydCBhcmlhLWRlc2NyaWJlZGJ5XHJcbiAgICAgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBieSBzcGxpdHRpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbmQgbGFiZWwgd2l0aCBhICcuJyAocGVyaW9kKVwiXHJcbiAgICAgKiBUT0RPOiB2ZXJpZnkgaG93IHRoaXMgbG9jYWxpemVzIG9yIGZpbmQgYSBiZXR0ZXIgd2F5LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMubGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9LiAke3RoaXMuZGVzY3JpcHRpb259YDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgZm9yIGZpZWxkcy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXIgdG8gRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAqIFRoaXMgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGlzIGZpbGUsIGJ1dCBub3QgbWVhbnQgdG8gYmUgZXhwb3J0ZWQgZnJvbSBpbmRleC50cyBidW5kbGVzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8VE1vZGVsPiBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxTdHJpbmdzLCBUTW9kZWw+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19
|