@theseam/ui-common 0.4.26 → 0.4.28-beta.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/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +1 -1
- package/datatable/datatable/datatable.component.d.ts +60 -9
- package/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.d.ts +25 -0
- package/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.d.ts +18 -0
- package/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.d.ts +16 -0
- package/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.d.ts +15 -0
- package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +2 -2
- package/datatable/datatable.module.d.ts +29 -20
- package/datatable/directives/datatable-column-filter-tpl.directive.d.ts +8 -0
- package/datatable/directives/datatable-column-filter.directive.d.ts +10 -0
- package/datatable/models/action-item-column-position.d.ts +13 -0
- package/datatable/models/columns-data-filter.d.ts +57 -0
- package/datatable/models/columns-data-filters/models.d.ts +65 -0
- package/datatable/models/columns-data-filters/search-date.columns-data-filter.d.ts +23 -0
- package/datatable/models/columns-data-filters/search-numeric.columns-data-filter.d.ts +22 -0
- package/datatable/models/columns-data-filters/search-text.columns-data-filter.d.ts +21 -0
- package/datatable/models/columns-data-filters/utils.d.ts +15 -0
- package/datatable/models/datatable-config.d.ts +90 -0
- package/datatable/models/table-column.d.ts +22 -1
- package/datatable/public-api.d.ts +14 -0
- package/datatable/services/columns-filters.service.d.ts +29 -0
- package/datatable/services/columns-manager.service.d.ts +7 -0
- package/datatable/utils/create-action-menu-column.d.ts +1 -1
- package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +2 -2
- package/esm2020/datatable/datatable/datatable.component.mjs +231 -31
- package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +2 -2
- package/esm2020/datatable/datatable-column-filter-menu/datatable-column-filter-menu.component.mjs +55 -0
- package/esm2020/datatable/datatable-column-filter-search-date/datatable-column-filter-search-date.component.mjs +54 -0
- package/esm2020/datatable/datatable-column-filter-search-numeric/datatable-column-filter-search-numeric.component.mjs +48 -0
- package/esm2020/datatable/datatable-column-filter-search-text/datatable-column-filter-search-text.component.mjs +44 -0
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
- package/esm2020/datatable/datatable-menu-bar/datatable-menu-bar.component.mjs +1 -1
- package/esm2020/datatable/datatable.module.mjs +49 -7
- package/esm2020/datatable/directives/datatable-column-filter-tpl.directive.mjs +16 -0
- package/esm2020/datatable/directives/datatable-column-filter.directive.mjs +26 -0
- package/esm2020/datatable/models/action-item-column-position.mjs +5 -0
- package/esm2020/datatable/models/columns-data-filter.mjs +10 -0
- package/esm2020/datatable/models/columns-data-filters/models.mjs +74 -0
- package/esm2020/datatable/models/columns-data-filters/search-date.columns-data-filter.mjs +113 -0
- package/esm2020/datatable/models/columns-data-filters/search-numeric.columns-data-filter.mjs +104 -0
- package/esm2020/datatable/models/columns-data-filters/search-text.columns-data-filter.mjs +86 -0
- package/esm2020/datatable/models/columns-data-filters/utils.mjs +28 -0
- package/esm2020/datatable/models/datatable-config.mjs +3 -0
- package/esm2020/datatable/models/table-column.mjs +1 -1
- package/esm2020/datatable/public-api.mjs +15 -1
- package/esm2020/datatable/services/columns-filters.service.mjs +109 -0
- package/esm2020/datatable/services/columns-manager.service.mjs +27 -2
- package/esm2020/datatable/utils/create-action-menu-column.mjs +4 -3
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
- package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +1 -1
- package/esm2020/framework/base-layout/base-layout.component.mjs +14 -4
- package/esm2020/framework/base-layout/base-layout.module.mjs +6 -1
- package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +21 -5
- package/esm2020/framework/base-layout/directives/base-layout-side-bar-header.directive.mjs +16 -0
- package/esm2020/framework/base-layout/index.mjs +2 -1
- package/esm2020/framework/nav/horizontal-nav/horizontal-nav.component.mjs +55 -0
- package/esm2020/framework/nav/index.mjs +6 -0
- package/esm2020/framework/nav/nav-item/nav-item.component.mjs +227 -0
- package/esm2020/framework/nav/nav-utils.mjs +107 -0
- package/esm2020/framework/nav/nav.models.mjs +2 -0
- package/esm2020/framework/nav/nav.module.mjs +67 -0
- package/esm2020/framework/nav/nav.service.mjs +204 -0
- package/esm2020/framework/public-api.mjs +2 -1
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +2 -2
- package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +28 -67
- package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +12 -5
- package/esm2020/framework/side-nav/side-nav.component.mjs +116 -38
- package/esm2020/framework/side-nav/side-nav.models.mjs +1 -1
- package/esm2020/framework/side-nav/side-nav.module.mjs +9 -39
- package/esm2020/framework/side-nav/side-nav.service.mjs +1 -1
- package/esm2020/framework/top-bar/index.mjs +3 -1
- package/esm2020/framework/top-bar/top-bar-compact-menu-btn-detail.directive.mjs +16 -0
- package/esm2020/framework/top-bar/top-bar-item.directive.mjs +10 -4
- package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +6 -4
- package/esm2020/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.mjs +16 -0
- package/esm2020/framework/top-bar/top-bar.component.mjs +55 -11
- package/esm2020/framework/top-bar/top-bar.module.mjs +15 -5
- package/esm2020/graphql/datatable/datatable-graphql.service.mjs +1 -1
- package/esm2020/graphql/datatable/index.mjs +4 -1
- package/esm2020/graphql/datatable/map-filter-states.mjs +1 -1
- package/esm2020/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.mjs +139 -0
- package/esm2020/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.mjs +75 -0
- package/esm2020/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.mjs +44 -0
- package/esm2020/layout/layout.service.mjs +12 -2
- package/esm2020/menu/menu-toggle.directive.mjs +7 -2
- package/esm2020/popover/popover/popover.component.mjs +7 -3
- package/esm2020/popover/popover.directive.mjs +6 -2
- package/esm2020/rich-text/public-api.mjs +1 -1
- package/esm2020/rich-text/rich-text/rich-text.component.mjs +24 -3
- package/esm2020/rich-text/utils/models.mjs +1 -1
- package/esm2020/rich-text/utils/utils.mjs +1 -1
- package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +5 -3
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs +2 -2
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +2 -2
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +1025 -62
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +905 -156
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-graphql.mjs +254 -1
- package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-layout.mjs +11 -2
- package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +6 -1
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-popover.mjs +11 -3
- package/fesm2015/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-rich-text.mjs +25 -2
- package/fesm2015/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table-cell-types.mjs +4 -2
- package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs +2 -2
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +2 -2
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +1010 -62
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +907 -156
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-graphql.mjs +254 -1
- package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-layout.mjs +11 -2
- package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +6 -1
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-popover.mjs +11 -3
- package/fesm2020/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-rich-text.mjs +23 -2
- package/fesm2020/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table-cell-types.mjs +4 -2
- package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/framework/base-layout/base-layout.component.d.ts +4 -2
- package/framework/base-layout/base-layout.component.scss +18 -10
- package/framework/base-layout/base-layout.module.d.ts +11 -10
- package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +8 -3
- package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +9 -0
- package/framework/base-layout/index.d.ts +1 -0
- package/framework/base-layout/styles/_variables.scss +21 -0
- package/framework/nav/_nav-theme.scss +4 -0
- package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +25 -0
- package/framework/nav/horizontal-nav/horizontal-nav.component.scss +50 -0
- package/framework/nav/index.d.ts +5 -0
- package/framework/nav/nav-item/nav-item.component.d.ts +74 -0
- package/framework/nav/nav-item/nav-item.component.scss +203 -0
- package/framework/nav/nav-utils.d.ts +20 -0
- package/framework/nav/nav.models.d.ts +77 -0
- package/framework/nav/nav.module.d.ts +17 -0
- package/framework/nav/nav.service.d.ts +27 -0
- package/framework/nav/styles/_themes/light/_variables.scss +56 -0
- package/framework/nav/styles/_themes/primary/_variables.scss +56 -0
- package/framework/nav/styles/_utilities.scss +3 -0
- package/framework/nav/styles/_variables.scss +2 -0
- package/framework/public-api.d.ts +1 -0
- package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +7 -14
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +7 -5
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +5 -3
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +3 -6
- package/framework/side-nav/side-nav.component.d.ts +13 -1
- package/framework/side-nav/side-nav.component.scss +0 -1
- package/framework/side-nav/side-nav.models.d.ts +7 -1
- package/framework/side-nav/side-nav.module.d.ts +1 -9
- package/framework/side-nav/styles/_themes/light/_variables.scss +24 -14
- package/framework/side-nav/styles/_themes/primary/_variables.scss +8 -0
- package/framework/top-bar/index.d.ts +2 -0
- package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +8 -0
- package/framework/top-bar/top-bar-item.directive.d.ts +4 -1
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +5 -2
- package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +8 -0
- package/framework/top-bar/top-bar.component.d.ts +25 -3
- package/framework/top-bar/top-bar.component.scss +7 -2
- package/framework/top-bar/top-bar.module.d.ts +10 -8
- package/graphql/datatable/datatable-graphql.service.d.ts +1 -1
- package/graphql/datatable/index.d.ts +3 -0
- package/graphql/datatable/map-filter-states.d.ts +2 -2
- package/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.d.ts +4 -0
- package/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.d.ts +4 -0
- package/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.d.ts +4 -0
- package/layout/layout.service.d.ts +9 -1
- package/menu/menu-toggle.directive.d.ts +2 -1
- package/package.json +2 -2
- package/popover/popover/popover.component.d.ts +4 -1
- package/popover/popover.directive.d.ts +2 -1
- package/rich-text/rich-text/rich-text.component.d.ts +6 -4
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +83 -14
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +38 -3
|
@@ -111,7 +111,7 @@ export class PopoverComponent {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
114
|
-
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: PopoverComponent, selector: "seam-popover", inputs: { template: "template", popoverClass: "popoverClass", baseWidth: "baseWidth" }, host: { listeners: { "@slideDown.start": "_onAnimationStart($event)", "@slideDown.done": "_animationDone.next($event)", "keydown": "_handleKeydown($event)" }, properties: { "@slideDown": "{\n value: _state,\n params: {\n enterAnimationDuration: enterAnimationDuration,\n exitAnimationDuration: exitAnimationDuration\n }\n }", "style.width": "_popoverWidth", "attr.role": "this._role", "attr.tabindex": "this._tabindex" }, classAttribute: "popover show m-2 position-static" }, ngImport: i0, template: "<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n", styles: [":host{display:block;max-width:800px;min-width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
114
|
+
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: PopoverComponent, selector: "seam-popover", inputs: { template: "template", popoverClass: "popoverClass", popover: "popover", popoverContext: "popoverContext", baseWidth: "baseWidth" }, host: { listeners: { "@slideDown.start": "_onAnimationStart($event)", "@slideDown.done": "_animationDone.next($event)", "keydown": "_handleKeydown($event)" }, properties: { "@slideDown": "{\n value: _state,\n params: {\n enterAnimationDuration: enterAnimationDuration,\n exitAnimationDuration: exitAnimationDuration\n }\n }", "style.width": "_popoverWidth", "attr.role": "this._role", "attr.tabindex": "this._tabindex" }, classAttribute: "popover show m-2 position-static" }, ngImport: i0, template: "<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: popover, popover: popover, popoverContext: popoverContext }\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n", styles: [":host{display:block;max-width:800px;min-width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
115
115
|
trigger('slideDown', [
|
|
116
116
|
transition(':enter', useAnimation(popoverExpandIn)),
|
|
117
117
|
transition(':leave', useAnimation(popoverExpandOut)),
|
|
@@ -136,7 +136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
136
136
|
'(@slideDown.start)': '_onAnimationStart($event)',
|
|
137
137
|
'(@slideDown.done)': '_animationDone.next($event)',
|
|
138
138
|
'[style.width]': '_popoverWidth'
|
|
139
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n", styles: [":host{display:block;max-width:800px;min-width:100%}\n"] }]
|
|
139
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"popover-body\">\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ $implicit: popover, popover: popover, popoverContext: popoverContext }\"></ng-template>\n </ng-container>\n\n <ng-template #noTemplate>\n Example\n <!-- <ng-content></ng-content> -->\n </ng-template>\n</div>\n", styles: [":host{display:block;max-width:800px;min-width:100%}\n"] }]
|
|
140
140
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { _role: [{
|
|
141
141
|
type: HostBinding,
|
|
142
142
|
args: ['attr.role']
|
|
@@ -147,10 +147,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
147
147
|
type: Input
|
|
148
148
|
}], popoverClass: [{
|
|
149
149
|
type: Input
|
|
150
|
+
}], popover: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], popoverContext: [{
|
|
153
|
+
type: Input
|
|
150
154
|
}], baseWidth: [{
|
|
151
155
|
type: Input
|
|
152
156
|
}], _handleKeydown: [{
|
|
153
157
|
type: HostListener,
|
|
154
158
|
args: ['keydown', ['$event']]
|
|
155
159
|
}] } });
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcG9wb3Zlci9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzlELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQW1DLE1BQU0sdUJBQXVCLENBQUE7OztBQTJCMUcsTUFBTSxPQUFPLGdCQUFnQjtJQTRCM0IscUVBQXFFO0lBQ3JFLElBQThCLEtBQUssS0FBSyxPQUFPLFFBQVEsQ0FBQSxDQUFDLENBQUM7SUFFekQsSUFBa0MsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBUTNEOzs7T0FHRztJQUNILElBQ0ksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFL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LENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQsIHRyYW5zaXRpb24sIHRyaWdnZXIsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IEVTQ0FQRSwgaGFzTW9kaWZpZXJLZXkgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgcG9wb3ZlckV4cGFuZEluLCBwb3BvdmVyRXhwYW5kT3V0LCBwb3BvdmVyU2xpZGVJbiwgcG9wb3ZlclNsaWRlT3V0IH0gZnJvbSAnLi4vcG9wb3Zlci1hbmltYXRpb25zJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIHVzZUFuaW1hdGlvbihwb3BvdmVyRXhwYW5kSW4pKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIHVzZUFuaW1hdGlvbihwb3BvdmVyRXhwYW5kT3V0KSksXG4gICAgXSlcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAncG9wb3ZlciBzaG93IG0tMiBwb3NpdGlvbi1zdGF0aWMnLFxuICAgICdbQHNsaWRlRG93bl0nOiBge1xuICAgICAgdmFsdWU6IF9zdGF0ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiBlbnRlckFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICBleGl0QW5pbWF0aW9uRHVyYXRpb246IGV4aXRBbmltYXRpb25EdXJhdGlvblxuICAgICAgfVxuICAgIH1gLFxuICAgICcoQHNsaWRlRG93bi5zdGFydCknOiAnX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KScsXG4gICAgJyhAc2xpZGVEb3duLmRvbmUpJzogJ19hbmltYXRpb25Eb25lLm5leHQoJGV2ZW50KScsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnX3BvcG92ZXJXaWR0aCdcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZW50ZXIgYW5pbWF0aW9uLiBIYXMgdG8gYmUgYSB2YWxpZCBDU1MgdmFsdWUgKGUuZy4gMTAwbXMpLiAqL1xuICBlbnRlckFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nID0gJzIyNW1zJ1xuXG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZXhpdCBhbmltYXRpb24uIEhhcyB0byBiZSBhIHZhbGlkIENTUyB2YWx1ZSAoZS5nLiA1MG1zKS4gKi9cbiAgZXhpdEFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nID0gJzIyNW1zJ1xuXG4gIC8qKiBTdGF0ZSBvZiB0aGUgZGlhbG9nIGFuaW1hdGlvbi4gKi9cbiAgX3N0YXRlOiAndm9pZCcgfCAnZW50ZXInIHwgJ2V4aXQnID0gJ2VudGVyJ1xuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYmVmb3JlIHRoZSBkaWFsb2cgZW50ZXJzIHRoZSB2aWV3LiAqL1xuICBfYmVmb3JlRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGVudGVycyB0aGUgdmlldy4gKi9cbiAgX2FmdGVyRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBiZWZvcmUgdGhlIGRpYWxvZyBleGl0cyB0aGUgdmlldy4gKi9cbiAgX2JlZm9yZUV4aXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGV4aXRzIHRoZSB2aWV3LiAqL1xuICBfYWZ0ZXJFeGl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBTdHJlYW0gb2YgYW5pbWF0aW9uIGBkb25lYCBldmVudHMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KClcblxuICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIGdldCBfcm9sZSgpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZy5yb2xlIH1cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSBnZXQgX3JvbGUoKSB7IHJldHVybiAnZGlhbG9nJyB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgZ2V0IF90YWJpbmRleCgpIHsgcmV0dXJuIC0xIH1cblxuICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvLyBAT3V0cHV0KCkgcmVhZG9ubHkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkIHwgJ2NsaWNrJyB8ICdrZXlkb3duJz4oKVxuXG4gIEBJbnB1dCgpIHBvcG92ZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgd2lkdGggZm9yIGEgcG9wb3ZlciB0aGF0IHdpbGwgc2NhbGUgZG93biBpZiB0aGUgd2luZG93IGlubmVyV2lkdGggaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBiYXNlV2lkdGgoKSB7IHJldHVybiB0aGlzLl9iYXNlV2lkdGgudmFsdWUgfVxuICBzZXQgYmFzZVdpZHRoKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgY29uc3QgX3ZhbCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBudWxsKVxuICAgIGlmIChfdmFsICE9PSB0aGlzLl9iYXNlV2lkdGgudmFsdWUpIHtcbiAgICAgIHRoaXMuX2Jhc2VXaWR0aC5uZXh0KF92YWwpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Jhc2VXaWR0aCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4oNjAwKVxuICAvLyBfcG9wb3ZlcldpZHRoJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+XG4gIF9wb3BvdmVyV2lkdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgUG9wb3ZlckNvbmZpZ1xuICApIHtcbiAgICAvLyBXZSB1c2UgYSBTdWJqZWN0IHdpdGggYSBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgcmF0aGVyIHRoYW4gYSBjYWxsYmFjayBhdHRhY2hlZCB0byAuZG9uZSxcbiAgICAvLyBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZmlyZSB0aGUgZG9uZSBldmVudCB0d2ljZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBlbWl0IGR1cGxpY2F0ZSBldmVudHMuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDA4NFxuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4ge1xuICAgICAgcmV0dXJuIHguZnJvbVN0YXRlID09PSB5LmZyb21TdGF0ZSAmJiB4LnRvU3RhdGUgPT09IHkudG9TdGF0ZVxuICAgIH0pKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgLy8gRW1pdCBsaWZlY3ljbGUgZXZlbnRzIGJhc2VkIG9uIGFuaW1hdGlvbiBgZG9uZWAgY2FsbGJhY2suXG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJykge1xuICAgICAgICB0aGlzLl9hZnRlckVudGVyLm5leHQoKVxuICAgICAgICB0aGlzLl9hZnRlckVudGVyLmNvbXBsZXRlKClcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ2VudGVyJyAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnIHx8IGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JykpIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJFeGl0Lm5leHQoKVxuICAgICAgICB0aGlzLl9hZnRlckV4aXQuY29tcGxldGUoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyB0aGlzLl9wb3BvdmVyV2lkdGgkID1cbiAgICB0aGlzLl9iYXNlV2lkdGgucGlwZShcbiAgICAgIHN3aXRjaE1hcChiYXNlV2lkdGggPT4ge1xuICAgICAgICBpZiAoYmFzZVdpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4gd2luZG93LmlubmVyV2lkdGggPCBiYXNlV2lkdGggPyBgJHt3aW5kb3cuaW5uZXJXaWR0aH1weGAgOiBgJHtiYXNlV2lkdGh9cHhgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICApLnN1YnNjcmliZSh3ID0+IHtcbiAgICAgIHRoaXMuX3BvcG92ZXJXaWR0aCA9IHdcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gICAgfSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIHRoaXMuY2xvc2VkLmNvbXBsZXRlKClcbiAgICB0aGlzLl9hbmltYXRpb25Eb25lLmNvbXBsZXRlKClcblxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICAvKiogU3RhcnRzIHRoZSBkaWFsb2cgZXhpdCBhbmltYXRpb24uICovXG4gIF9zdGFydEV4aXRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnZXhpdCdcblxuICAgIC8vIE1hcmsgdGhlIGNvbnRhaW5lciBmb3IgY2hlY2sgc28gaXQgY2FuIHJlYWN0IGlmIHRoZVxuICAgIC8vIHZpZXcgY29udGFpbmVyIGlzIHVzaW5nIE9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICAvKiogRW1pdCBsaWZlY3ljbGUgZXZlbnRzIGJhc2VkIG9uIGFuaW1hdGlvbiBgc3RhcnRgIGNhbGxiYWNrLiAqL1xuICBfb25BbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJykge1xuICAgICAgdGhpcy5fYmVmb3JlRW50ZXIubmV4dCgpXG4gICAgICB0aGlzLl9iZWZvcmVFbnRlci5jb21wbGV0ZSgpXG4gICAgfVxuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09ICdlbnRlcicgJiYgKGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJyB8fCBldmVudC50b1N0YXRlID09PSAnZXhpdCcpKSB7XG4gICAgICB0aGlzLl9iZWZvcmVFeGl0Lm5leHQoKVxuICAgICAgdGhpcy5fYmVmb3JlRXhpdC5jb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGtleWJvYXJkIGV2ZW50IGZyb20gdGhlIG1lbnUsIGRlbGVnYXRpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4gKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsgJyRldmVudCcgXSlcbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZVxuXG4gICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICBjYXNlIEVTQ0FQRTpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgLy8gdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpXG4gICAgICAgICAgdGhpcy5fc3RhcnRFeGl0aW5nKClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBub1RlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNub1RlbXBsYXRlPlxuICAgIEV4YW1wbGVcbiAgICA8IS0tIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gLS0+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcG9wb3Zlci9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL3BvcG92ZXIvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzlELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTs7O0FBNEJ6RSxNQUFNLE9BQU8sZ0JBQWdCO0lBNEIzQixxRUFBcUU7SUFDckUsSUFBOEIsS0FBSyxLQUFLLE9BQU8sUUFBUSxDQUFBLENBQUMsQ0FBQztJQUV6RCxJQUFrQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFZM0Q7OztPQUdHO0lBQ0gsSUFDSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUss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LEtBQUs7Z0JBcUZOLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25FdmVudCwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgRVNDQVBFLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2RlcydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBwb3BvdmVyRXhwYW5kSW4sIHBvcG92ZXJFeHBhbmRPdXQgfSBmcm9tICcuLi9wb3BvdmVyLWFuaW1hdGlvbnMnXG5pbXBvcnQgeyBUaGVTZWFtUG9wb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uL3BvcG92ZXIuZGlyZWN0aXZlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIHVzZUFuaW1hdGlvbihwb3BvdmVyRXhwYW5kSW4pKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIHVzZUFuaW1hdGlvbihwb3BvdmVyRXhwYW5kT3V0KSksXG4gICAgXSlcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAncG9wb3ZlciBzaG93IG0tMiBwb3NpdGlvbi1zdGF0aWMnLFxuICAgICdbQHNsaWRlRG93bl0nOiBge1xuICAgICAgdmFsdWU6IF9zdGF0ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiBlbnRlckFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICBleGl0QW5pbWF0aW9uRHVyYXRpb246IGV4aXRBbmltYXRpb25EdXJhdGlvblxuICAgICAgfVxuICAgIH1gLFxuICAgICcoQHNsaWRlRG93bi5zdGFydCknOiAnX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KScsXG4gICAgJyhAc2xpZGVEb3duLmRvbmUpJzogJ19hbmltYXRpb25Eb25lLm5leHQoJGV2ZW50KScsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnX3BvcG92ZXJXaWR0aCdcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZW50ZXIgYW5pbWF0aW9uLiBIYXMgdG8gYmUgYSB2YWxpZCBDU1MgdmFsdWUgKGUuZy4gMTAwbXMpLiAqL1xuICBlbnRlckFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nID0gJzIyNW1zJ1xuXG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZXhpdCBhbmltYXRpb24uIEhhcyB0byBiZSBhIHZhbGlkIENTUyB2YWx1ZSAoZS5nLiA1MG1zKS4gKi9cbiAgZXhpdEFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nID0gJzIyNW1zJ1xuXG4gIC8qKiBTdGF0ZSBvZiB0aGUgZGlhbG9nIGFuaW1hdGlvbi4gKi9cbiAgX3N0YXRlOiAndm9pZCcgfCAnZW50ZXInIHwgJ2V4aXQnID0gJ2VudGVyJ1xuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYmVmb3JlIHRoZSBkaWFsb2cgZW50ZXJzIHRoZSB2aWV3LiAqL1xuICBfYmVmb3JlRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGVudGVycyB0aGUgdmlldy4gKi9cbiAgX2FmdGVyRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBiZWZvcmUgdGhlIGRpYWxvZyBleGl0cyB0aGUgdmlldy4gKi9cbiAgX2JlZm9yZUV4aXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGV4aXRzIHRoZSB2aWV3LiAqL1xuICBfYWZ0ZXJFeGl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBTdHJlYW0gb2YgYW5pbWF0aW9uIGBkb25lYCBldmVudHMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KClcblxuICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIGdldCBfcm9sZSgpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZy5yb2xlIH1cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSBnZXQgX3JvbGUoKSB7IHJldHVybiAnZGlhbG9nJyB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgZ2V0IF90YWJpbmRleCgpIHsgcmV0dXJuIC0xIH1cblxuICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvLyBAT3V0cHV0KCkgcmVhZG9ubHkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkIHwgJ2NsaWNrJyB8ICdrZXlkb3duJz4oKVxuXG4gIEBJbnB1dCgpIHBvcG92ZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHBvcG92ZXI6IFRoZVNlYW1Qb3BvdmVyRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHBvcG92ZXJDb250ZXh0OiBhbnlcblxuICAvKipcbiAgICogRGVmaW5lcyBhIHdpZHRoIGZvciBhIHBvcG92ZXIgdGhhdCB3aWxsIHNjYWxlIGRvd24gaWYgdGhlIHdpbmRvdyBpbm5lcldpZHRoIGlzXG4gICAqIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYmFzZVdpZHRoKCkgeyByZXR1cm4gdGhpcy5fYmFzZVdpZHRoLnZhbHVlIH1cbiAgc2V0IGJhc2VXaWR0aCh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIGNvbnN0IF92YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgbnVsbClcbiAgICBpZiAoX3ZhbCAhPT0gdGhpcy5fYmFzZVdpZHRoLnZhbHVlKSB7XG4gICAgICB0aGlzLl9iYXNlV2lkdGgubmV4dChfdmFsKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9iYXNlV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KDYwMClcbiAgLy8gX3BvcG92ZXJXaWR0aCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPlxuICBfcG9wb3ZlcldpZHRoOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IFBvcG92ZXJDb25maWdcbiAgKSB7XG4gICAgLy8gV2UgdXNlIGEgU3ViamVjdCB3aXRoIGEgZGlzdGluY3RVbnRpbENoYW5nZWQsIHJhdGhlciB0aGFuIGEgY2FsbGJhY2sgYXR0YWNoZWQgdG8gLmRvbmUsXG4gICAgLy8gYmVjYXVzZSBzb21lIGJyb3dzZXJzIGZpcmUgdGhlIGRvbmUgZXZlbnQgdHdpY2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gZW1pdCBkdXBsaWNhdGUgZXZlbnRzLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjQwODRcbiAgICB0aGlzLl9hbmltYXRpb25Eb25lLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IHtcbiAgICAgIHJldHVybiB4LmZyb21TdGF0ZSA9PT0geS5mcm9tU3RhdGUgJiYgeC50b1N0YXRlID09PSB5LnRvU3RhdGVcbiAgICB9KSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIC8vIEVtaXQgbGlmZWN5Y2xlIGV2ZW50cyBiYXNlZCBvbiBhbmltYXRpb24gYGRvbmVgIGNhbGxiYWNrLlxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdlbnRlcicpIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJFbnRlci5uZXh0KClcbiAgICAgICAgdGhpcy5fYWZ0ZXJFbnRlci5jb21wbGV0ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09ICdlbnRlcicgJiYgKGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJyB8fCBldmVudC50b1N0YXRlID09PSAnZXhpdCcpKSB7XG4gICAgICAgIHRoaXMuX2FmdGVyRXhpdC5uZXh0KClcbiAgICAgICAgdGhpcy5fYWZ0ZXJFeGl0LmNvbXBsZXRlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gdGhpcy5fcG9wb3ZlcldpZHRoJCA9XG4gICAgdGhpcy5fYmFzZVdpZHRoLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoYmFzZVdpZHRoID0+IHtcbiAgICAgICAgaWYgKGJhc2VXaWR0aCkge1xuICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHdpbmRvdy5pbm5lcldpZHRoIDwgYmFzZVdpZHRoID8gYCR7d2luZG93LmlubmVyV2lkdGh9cHhgIDogYCR7YmFzZVdpZHRofXB4YClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUodyA9PiB7XG4gICAgICB0aGlzLl9wb3BvdmVyV2lkdGggPSB3XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyB0aGlzLmNsb3NlZC5jb21wbGV0ZSgpXG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZS5jb21wbGV0ZSgpXG5cbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLm5leHQodW5kZWZpbmVkKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUuY29tcGxldGUoKVxuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgZGlhbG9nIGV4aXQgYW5pbWF0aW9uLiAqL1xuICBfc3RhcnRFeGl0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gJ2V4aXQnXG5cbiAgICAvLyBNYXJrIHRoZSBjb250YWluZXIgZm9yIGNoZWNrIHNvIGl0IGNhbiByZWFjdCBpZiB0aGVcbiAgICAvLyB2aWV3IGNvbnRhaW5lciBpcyB1c2luZyBPblB1c2ggY2hhbmdlIGRldGVjdGlvbi5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICB9XG5cbiAgLyoqIEVtaXQgbGlmZWN5Y2xlIGV2ZW50cyBiYXNlZCBvbiBhbmltYXRpb24gYHN0YXJ0YCBjYWxsYmFjay4gKi9cbiAgX29uQW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdlbnRlcicpIHtcbiAgICAgIHRoaXMuX2JlZm9yZUVudGVyLm5leHQoKVxuICAgICAgdGhpcy5fYmVmb3JlRW50ZXIuY29tcGxldGUoKVxuICAgIH1cbiAgICBpZiAoZXZlbnQuZnJvbVN0YXRlID09PSAnZW50ZXInICYmIChldmVudC50b1N0YXRlID09PSAndm9pZCcgfHwgZXZlbnQudG9TdGF0ZSA9PT0gJ2V4aXQnKSkge1xuICAgICAgdGhpcy5fYmVmb3JlRXhpdC5uZXh0KClcbiAgICAgIHRoaXMuX2JlZm9yZUV4aXQuY29tcGxldGUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBrZXlib2FyZCBldmVudCBmcm9tIHRoZSBtZW51LCBkZWxlZ2F0aW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbICckZXZlbnQnIF0pXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGVcblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBFU0NBUEU6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIC8vIHRoaXMuY2xvc2VkLmVtaXQoJ2tleWRvd24nKVxuICAgICAgICAgIHRoaXMuX3N0YXJ0RXhpdGluZygpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGU7IGVsc2Ugbm9UZW1wbGF0ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcG9wb3ZlciwgcG9wb3ZlcjogcG9wb3ZlciwgcG9wb3ZlckNvbnRleHQ6IHBvcG92ZXJDb250ZXh0IH1cIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI25vVGVtcGxhdGU+XG4gICAgRXhhbXBsZVxuICAgIDwhLS0gPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiAtLT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|
|
@@ -116,6 +116,8 @@ export class TheSeamPopoverDirective {
|
|
|
116
116
|
this._closingActionsSubscription = this._popoverClosingActions().subscribe(() => this.closePopover());
|
|
117
117
|
this._compRef.instance.template = this.seamPopover;
|
|
118
118
|
this._compRef.instance.baseWidth = this.seamPopoverBaseWidth;
|
|
119
|
+
this._compRef.instance.popover = this;
|
|
120
|
+
this._compRef.instance.popoverContext = this.seamPopoverContext;
|
|
119
121
|
this._compRef.changeDetectorRef.markForCheck();
|
|
120
122
|
this._popoverClosedSubscription = this._compRef.instance._afterExit.subscribe(v => {
|
|
121
123
|
// console.log('closed', v)
|
|
@@ -229,7 +231,7 @@ export class TheSeamPopoverDirective {
|
|
|
229
231
|
}
|
|
230
232
|
}
|
|
231
233
|
TheSeamPopoverDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamPopoverDirective, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Directive });
|
|
232
|
-
TheSeamPopoverDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamPopoverDirective, selector: "[seamPopover]", inputs: { seamPopover: "seamPopover", seamPopoverBaseWidth: "seamPopoverBaseWidth", seamPopoverDisabled: "seamPopoverDisabled" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "mousedown": "_onMouseDown($event)", "click": "_onClick($event)", "document:keydown": "_onDocumentKeydown($event)" }, properties: { "attr.aria-expanded": "popoverOpen() || null" } }, exportAs: ["seamPopover"], ngImport: i0 });
|
|
234
|
+
TheSeamPopoverDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamPopoverDirective, selector: "[seamPopover]", inputs: { seamPopover: "seamPopover", seamPopoverContext: "seamPopoverContext", seamPopoverBaseWidth: "seamPopoverBaseWidth", seamPopoverDisabled: "seamPopoverDisabled" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "mousedown": "_onMouseDown($event)", "click": "_onClick($event)", "document:keydown": "_onDocumentKeydown($event)" }, properties: { "attr.aria-expanded": "popoverOpen() || null" } }, exportAs: ["seamPopover"], ngImport: i0 });
|
|
233
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamPopoverDirective, decorators: [{
|
|
234
236
|
type: Directive,
|
|
235
237
|
args: [{
|
|
@@ -243,6 +245,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
243
245
|
}]
|
|
244
246
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i2.FocusMonitor }]; }, propDecorators: { seamPopover: [{
|
|
245
247
|
type: Input
|
|
248
|
+
}], seamPopoverContext: [{
|
|
249
|
+
type: Input
|
|
246
250
|
}], seamPopoverBaseWidth: [{
|
|
247
251
|
type: Input
|
|
248
252
|
}], seamPopoverDisabled: [{
|
|
@@ -257,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
257
261
|
type: HostListener,
|
|
258
262
|
args: ['document:keydown', ['$event']]
|
|
259
263
|
}] } });
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcG9wb3Zlci9wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZCLCtCQUErQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRTlDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQWdCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFvRCxNQUFNLGVBQWUsQ0FBQTtBQUMxSSxPQUFPLEVBQUUsZUFBZSxFQUFhLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRixPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7Ozs7QUFFOUQsb0RBQW9EO0FBQ3BELE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQVd0RixNQUFNLE9BQU8sdUJBQXVCO0lBTWxDOzs7T0FHRztJQUNILElBQ0ksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUN0RSxJQUFJLG9CQUFvQixDQUFDLEtBQW9CO1FBQzNDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFO1lBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7SUFDSCxDQUFDO0lBR0QsSUFDSSxtQkFBbUIsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQ3BFLElBQUksbUJBQW1CLENBQUMsR0FBWSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFrQ3BHLFlBQVksQ0FBQyxLQUFpQjtRQUM1QixJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0MsdUVBQXVFO1lBQ3ZFLG9FQUFvRTtZQUNwRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtTQUNyRDtJQUNILENBQUM7SUFHRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDZixDQUFDO0lBR0Qsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtTQUNwQjtJQUNILENBQUM7SUFFRCxZQUNVLFdBQW9DLEVBQ3BDLGlCQUFtQyxFQUNuQyxRQUFpQixFQUNqQixhQUEyQjtRQUgzQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBOUVwQixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFnQjdDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQTtRQUtoRSx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQUVsRSxlQUFlO1FBQ2Ysb0NBQW9DO1FBQ3BDLDhCQUE4QjtRQUM5Qix3QkFBd0I7UUFDeEIsdUJBQXVCO1FBQ3ZCLCtCQUErQjtRQUMvQixVQUFVO1FBRVYscUVBQXFFO1FBQ3JFLCtCQUErQjtRQUMvQixVQUFVO1FBRVYsa0VBQWtFO1FBQ2xFLFNBQVM7UUFDVCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVJLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFDZixhQUFRLEdBQUcsS0FBSyxDQUFBO1FBR2hCLCtCQUEwQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUE7UUFDL0MsZ0NBQTJCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQTtRQUVqRCxpQkFBWSxHQUFHLElBQUksQ0FBQTtRQUUxQix1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLGNBQVMsR0FBNkIsSUFBSSxDQUFBO1FBdUQxQzs7O1dBR0c7UUFDSyxzQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQTtRQTlCeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFDaEYsMkJBQTJCLENBQUMsQ0FBQTtRQUVoQyxJQUFJLENBQUMscUJBQXFCO2FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQTthQUMvQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFDbkYsMkJBQTJCLENBQUMsQ0FBQTtRQUVoQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDN0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFBO1FBRTlDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQVFNLE1BQU07UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ25CO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU07U0FBRTtRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUVuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztTQUMxRSxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7UUFFdEcsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUVyRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFBO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFOUMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEYsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTthQUMxQjtZQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtZQUVwQixJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDN0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFBO1lBRTlDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFNO1NBQUU7UUFFN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtnQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDdkM7U0FDRjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUE7SUFDakQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQW1CO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7YUFDOUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO2FBQzNCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDbEMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2FBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVqQixPQUFPLGdCQUFnQixDQUFBO0lBQ3pCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU87WUFDTDtnQkFDRSxPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsUUFBUSxFQUFFLFFBQVE7YUFDbkI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixRQUFRLEVBQUUsUUFBUTthQUNuQjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFNBQXNCLFNBQVM7UUFDbkMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUE7U0FDdEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFBO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWE7UUFDbkIsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuQixnRUFBZ0U7Z0JBQ2hFLDBEQUEwRDtnQkFDMUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ2I7U0FDRjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCwyRkFBMkY7SUFDbkYsc0JBQXNCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUE7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQTtRQUMzRCxNQUFNLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQTtRQUVsQixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLENBQUM7O29IQXBRVSx1QkFBdUI7d0dBQXZCLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQVRuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6Qix1REFBdUQ7b0JBQ3ZELElBQUksRUFBRTt3QkFDSixlQUFlLEVBQUUsTUFBTTt3QkFDdkIsc0JBQXNCLEVBQUUsdUJBQXVCO3FCQUNoRDtvQkFDRCxRQUFRLEVBQUUsYUFBYTtpQkFDeEI7aUxBS1UsV0FBVztzQkFBbkIsS0FBSztnQkFPRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBV0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQW9DTixZQUFZO3NCQURYLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUUsUUFBUSxDQUFFO2dCQVV2QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUUsUUFBUSxDQUFFO2dCQU1uQyxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luLCBpc0Zha2VNb3VzZWRvd25Gcm9tU2NyZWVuUmVhZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgRVNDQVBFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJ1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5J1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSdcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50J1xuXG4vKiogT3B0aW9ucyBmb3IgYmluZGluZyBhIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXIuICovXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2VhbVBvcG92ZXJdJyxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVzZS1ob3N0LXByb3BlcnR5LWRlY29yYXRvclxuICBob3N0OiB7XG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ3BvcG92ZXJPcGVuKCkgfHwgbnVsbCdcbiAgfSxcbiAgZXhwb3J0QXM6ICdzZWFtUG9wb3Zlcidcbn0pXG5leHBvcnQgY2xhc3MgVGhlU2VhbVBvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgQElucHV0KCkgc2VhbVBvcG92ZXI/OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgd2lkdGggZm9yIGEgcG9wb3ZlciB0aGF0IHdpbGwgc2NhbGUgZG93biBpZiB0aGUgd2luZG93IGlubmVyV2lkdGggaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWFtUG9wb3ZlckJhc2VXaWR0aCgpIHsgcmV0dXJuIHRoaXMuX3NlYW1Qb3BvdmVyQmFzZVdpZHRoLnZhbHVlIH1cbiAgc2V0IHNlYW1Qb3BvdmVyQmFzZVdpZHRoKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgY29uc3QgX3ZhbCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBudWxsKVxuICAgIGlmIChfdmFsICE9PSB0aGlzLl9zZWFtUG9wb3ZlckJhc2VXaWR0aC52YWx1ZSkge1xuICAgICAgdGhpcy5fc2VhbVBvcG92ZXJCYXNlV2lkdGgubmV4dChfdmFsKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9zZWFtUG9wb3ZlckJhc2VXaWR0aCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbClcblxuICBASW5wdXQoKVxuICBnZXQgc2VhbVBvcG92ZXJEaXNhYmxlZCgpIHsgcmV0dXJuIHRoaXMuX3NlYW1Qb3BvdmVyRGlzYWJsZWQudmFsdWUgfVxuICBzZXQgc2VhbVBvcG92ZXJEaXNhYmxlZCh2YWw6IGJvb2xlYW4pIHsgdGhpcy5fc2VhbVBvcG92ZXJEaXNhYmxlZC5uZXh0KGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpKSB9XG4gIHByaXZhdGUgX3NlYW1Qb3BvdmVyRGlzYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuXG4gIC8vIG5nT25Jbml0KCkge1xuICAvLyAgIHRoaXMuX3NlYW1Qb3BvdmVyRGlzYWJsZWQucGlwZShcbiAgLy8gICAgIHN3aXRjaE1hcChkaXNhYmxlZCA9PiB7XG4gIC8vICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAvLyAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAvLyAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBpZiAoISh0aGlzLl9lbGVtZW50UmVmICYmIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcbiAgLy8gICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpXG4gIC8vICAgICB9KVxuICAvLyAgICkuc3Vic2NyaWJlKClcbiAgLy8gfVxuXG4gIHByaXZhdGUgX2FjdGl2ZSA9IGZhbHNlXG4gIHByaXZhdGUgX2Nsb3NpbmcgPSBmYWxzZVxuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBwcml2YXRlIF9jb21wUmVmOiBDb21wb25lbnRSZWY8UG9wb3ZlckNvbXBvbmVudD4gfCB1bmRlZmluZWQgfCBudWxsXG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZWRTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcbiAgcHJpdmF0ZSBfY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICBwdWJsaWMgcmVzdG9yZUZvY3VzID0gdHJ1ZVxuXG4gIC8vIFRyYWNraW5nIGlucHV0IHR5cGUgaXMgbmVjZXNzYXJ5IHNvIGl0J3MgcG9zc2libGUgdG8gb25seSBhdXRvLWZvY3VzXG4gIC8vIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBsaXN0IHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkIHZpYSB0aGUga2V5Ym9hcmRcbiAgX29wZW5lZEJ5OiAnbW91c2UnIHwgJ3RvdWNoJyB8IG51bGwgPSBudWxsXG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyAnJGV2ZW50JyBdKVxuICBfb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIoZXZlbnQpKSB7XG4gICAgICAvLyBTaW5jZSByaWdodCBvciBtaWRkbGUgYnV0dG9uIGNsaWNrcyB3b24ndCB0cmlnZ2VyIHRoZSBgY2xpY2tgIGV2ZW50LFxuICAgICAgLy8gd2Ugc2hvdWxkbid0IGNvbnNpZGVyIHRoZSBtZW51IGFzIG9wZW5lZCBieSBtb3VzZSBpbiB0aG9zZSBjYXNlcy5cbiAgICAgIHRoaXMuX29wZW5lZEJ5ID0gZXZlbnQuYnV0dG9uID09PSAwID8gJ21vdXNlJyA6IG51bGxcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsgJyRldmVudCcgXSlcbiAgX29uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudG9nZ2xlKClcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbICckZXZlbnQnIF0pXG4gIF9vbkRvY3VtZW50S2V5ZG93bihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSkge1xuICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvclxuICApIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsXG4gICAgICAgIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucylcblxuICAgIHRoaXMuX3NlYW1Qb3BvdmVyQmFzZVdpZHRoXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKHcgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29tcFJlZiAmJiB0aGlzLl9jb21wUmVmLmluc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy5fY29tcFJlZi5pbnN0YW5jZS5iYXNlV2lkdGggPSB3XG4gICAgICAgICAgdGhpcy5fY29tcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbG9zZVBvcG92ZXIoKVxuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG5cbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLm5leHQodW5kZWZpbmVkKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUuY29tcGxldGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdG91Y2ggc3RhcnQgZXZlbnRzIG9uIHRoZSB0cmlnZ2VyLlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB3ZSBjYW4gZWFzaWx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGFuZCByZW1vdmVFdmVudExpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlVG91Y2hTdGFydCA9ICgpID0+IHRoaXMuX29wZW5lZEJ5ID0gJ3RvdWNoJ1xuXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSB8fCB0aGlzLnNlYW1Qb3BvdmVyRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hY3RpdmUgfHwgIXRoaXMuc2VhbVBvcG92ZXIpIHsgcmV0dXJuIH1cbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlXG5cbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiAndHJhbnNwYXJlbnQnLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5nZXRPdmVybGF5UG9zaXRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSxcbiAgICB9KVxuXG4gICAgdGhpcy5fY29tcFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoUG9wb3ZlckNvbXBvbmVudCwgdGhpcy5fdmlld0NvbnRhaW5lclJlZikpXG5cbiAgICB0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMuX3BvcG92ZXJDbG9zaW5nQWN0aW9ucygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlUG9wb3ZlcigpKVxuXG4gICAgdGhpcy5fY29tcFJlZi5pbnN0YW5jZS50ZW1wbGF0ZSA9IHRoaXMuc2VhbVBvcG92ZXJcbiAgICB0aGlzLl9jb21wUmVmLmluc3RhbmNlLmJhc2VXaWR0aCA9IHRoaXMuc2VhbVBvcG92ZXJCYXNlV2lkdGhcbiAgICB0aGlzLl9jb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG5cbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkU3Vic2NyaXB0aW9uID0gdGhpcy5fY29tcFJlZi5pbnN0YW5jZS5fYWZ0ZXJFeGl0LnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdjbG9zZWQnLCB2KVxuICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldFBvcG92ZXIoKVxuXG4gICAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcblxuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2VcbiAgICAgIHRoaXMuX2Nsb3NpbmcgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB7IHJldHVybiB9XG5cbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9jb21wUmVmICYmIHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fY2xvc2luZyA9IHRydWVcbiAgICAgICAgdGhpcy5fY29tcFJlZi5pbnN0YW5jZS5fc3RhcnRFeGl0aW5nKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcG9wb3Zlck9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkgPz8gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbjogSFRNTEVsZW1lbnQpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhvcmlnaW4pXG4gICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLmdldFBvc2l0aW9ucygpKVxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG4gICAgICAud2l0aFB1c2godHJ1ZSlcblxuICAgIHJldHVybiBwb3NpdGlvblN0cmF0ZWd5XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9ucygpOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIHBvcG92ZXIgdHJpZ2dlci5cbiAgICogQHBhcmFtIG9yaWdpbiBTb3VyY2Ugb2YgdGhlIHBvcG92ZXIgdHJpZ2dlcidzIGZvY3VzLlxuICAgKi9cbiAgZm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJykge1xuICAgIGlmICh0aGlzLl9mb2N1c01vbml0b3IpIHtcbiAgICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50UmVmLCBvcmlnaW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJlc2V0cyB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgY2xvc2VkLCBtb3N0IGltcG9ydGFudGx5IHJlc3RvcmluZ1xuICAgKiBmb2N1cyB0byB0aGUgcG9wb3ZlciB0cmlnZ2VyIGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cbiAgICovXG4gIHByaXZhdGUgX3Jlc2V0UG9wb3ZlcigpOiB2b2lkIHtcbiAgICAvLyBXZSBzaG91bGQgcmVzZXQgZm9jdXMgaWYgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB1c2luZyBhIGtleWJvYXJkIG9yXG4gICAgLy8gaWYgd2UgaGF2ZSBhIHRvcC1sZXZlbCB0cmlnZ2VyIHdoaWNoIG1pZ2h0IGNhdXNlIGZvY3VzIHRvIGJlIGxvc3RcbiAgICAvLyB3aGVuIGNsaWNraW5nIG9uIHRoZSBiYWNrZHJvcC5cbiAgICBpZiAodGhpcy5yZXN0b3JlRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5fb3BlbmVkQnkpIHtcbiAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBmb2N1cyBzdHlsZSB3aWxsIHNob3cgdXAgYm90aCBmb3IgYHByb2dyYW1gIGFuZFxuICAgICAgICAvLyBga2V5Ym9hcmRgIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lmeSB3aGljaCBvbmUgaXQgaXMuXG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX29wZW5lZEJ5ID0gbnVsbFxuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciBhbiBhY3Rpb24gdGhhdCBzaG91bGQgY2xvc2UgdGhlIHBvcG92ZXIgb2NjdXJzLiAqL1xuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgY29uc3QgYmFja2Ryb3AgPSB0aGlzLl9vdmVybGF5UmVmPy5iYWNrZHJvcENsaWNrKCkgPz8gb2YoKVxuICAgIGNvbnN0IGRldGFjaG1lbnRzID0gdGhpcy5fb3ZlcmxheVJlZj8uZGV0YWNobWVudHMoKSA/PyBvZigpXG4gICAgY29uc3QgaG92ZXIgPSBvZigpXG5cbiAgICByZXR1cm4gbWVyZ2UoYmFja2Ryb3AsIGhvdmVyLCBkZXRhY2htZW50cylcbiAgfVxuXG59XG4iXX0=
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcG9wb3Zlci9wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZCLCtCQUErQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRTlDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQWdCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFvRCxNQUFNLGVBQWUsQ0FBQTtBQUMxSSxPQUFPLEVBQUUsZUFBZSxFQUFhLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuRixPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7Ozs7QUFFOUQsb0RBQW9EO0FBQ3BELE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQVd0RixNQUFNLE9BQU8sdUJBQXVCO0lBUWxDOzs7T0FHRztJQUNILElBQ0ksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUN0RSxJQUFJLG9CQUFvQixDQUFDLEtBQW9CO1FBQzNDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtR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UUFDM0QsTUFBTSxLQUFLLEdBQUcsRUFBRSxFQUFFLENBQUE7UUFFbEIsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUM1QyxDQUFDOztvSEF4UVUsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFUbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsdURBQXVEO29CQUN2RCxJQUFJLEVBQUU7d0JBQ0osZUFBZSxFQUFFLE1BQU07d0JBQ3ZCLHNCQUFzQixFQUFFLHVCQUF1QjtxQkFDaEQ7b0JBQ0QsUUFBUSxFQUFFLGFBQWE7aUJBQ3hCO2lMQUtVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU9GLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFXRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBb0NOLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBRSxRQUFRLENBQUU7Z0JBVXZDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBRSxRQUFRLENBQUU7Z0JBTW5DLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFFLFFBQVEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4sIGlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBFU0NBUEUgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnXG5pbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyLCBPdmVybGF5LCBPdmVybGF5UmVmLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXG5pbXBvcnQgeyBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJ1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCdcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnXG5cbi8qKiBPcHRpb25zIGZvciBiaW5kaW5nIGEgcGFzc2l2ZSBldmVudCBsaXN0ZW5lci4gKi9cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzZWFtUG9wb3Zlcl0nLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dXNlLWhvc3QtcHJvcGVydHktZGVjb3JhdG9yXG4gIGhvc3Q6IHtcbiAgICAnYXJpYS1oYXNwb3B1cCc6ICd0cnVlJyxcbiAgICAnW2F0dHIuYXJpYS1leHBhbmRlZF0nOiAncG9wb3Zlck9wZW4oKSB8fCBudWxsJ1xuICB9LFxuICBleHBvcnRBczogJ3NlYW1Qb3BvdmVyJ1xufSlcbmV4cG9ydCBjbGFzcyBUaGVTZWFtUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBASW5wdXQoKSBzZWFtUG9wb3Zlcj86IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsXG5cbiAgQElucHV0KCkgc2VhbVBvcG92ZXJDb250ZXh0PzogYW55XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSB3aWR0aCBmb3IgYSBwb3BvdmVyIHRoYXQgd2lsbCBzY2FsZSBkb3duIGlmIHRoZSB3aW5kb3cgaW5uZXJXaWR0aCBpc1xuICAgKiBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlYW1Qb3BvdmVyQmFzZVdpZHRoKCkgeyByZXR1cm4gdGhpcy5fc2VhbVBvcG92ZXJCYXNlV2lkdGgudmFsdWUgfVxuICBzZXQgc2VhbVBvcG92ZXJCYXNlV2lkdGgodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICBjb25zdCBfdmFsID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIG51bGwpXG4gICAgaWYgKF92YWwgIT09IHRoaXMuX3NlYW1Qb3BvdmVyQmFzZVdpZHRoLnZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWFtUG9wb3ZlckJhc2VXaWR0aC5uZXh0KF92YWwpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3NlYW1Qb3BvdmVyQmFzZVdpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWFtUG9wb3ZlckRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5fc2VhbVBvcG92ZXJEaXNhYmxlZC52YWx1ZSB9XG4gIHNldCBzZWFtUG9wb3ZlckRpc2FibGVkKHZhbDogYm9vbGVhbikgeyB0aGlzLl9zZWFtUG9wb3ZlckRpc2FibGVkLm5leHQoY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCkpIH1cbiAgcHJpdmF0ZSBfc2VhbVBvcG92ZXJEaXNhYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG5cbiAgLy8gbmdPbkluaXQoKSB7XG4gIC8vICAgdGhpcy5fc2VhbVBvcG92ZXJEaXNhYmxlZC5waXBlKFxuICAvLyAgICAgc3dpdGNoTWFwKGRpc2FibGVkID0+IHtcbiAgLy8gICAgICAgaWYgKGRpc2FibGVkKSB7XG4gIC8vICAgICAgICAgdGhpcy5jbG9zZSgpXG4gIC8vICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmICghKHRoaXMuX2VsZW1lbnRSZWYgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xuICAvLyAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgLy8gICAgIH0pXG4gIC8vICAgKS5zdWJzY3JpYmUoKVxuICAvLyB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2VcbiAgcHJpdmF0ZSBfY2xvc2luZyA9IGZhbHNlXG4gIHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCB1bmRlZmluZWQgfCBudWxsXG4gIHByaXZhdGUgX2NvbXBSZWY6IENvbXBvbmVudFJlZjxQb3BvdmVyQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB8IG51bGxcbiAgcHJpdmF0ZSBfcG9wb3ZlckNsb3NlZFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuICBwcml2YXRlIF9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIHB1YmxpYyByZXN0b3JlRm9jdXMgPSB0cnVlXG5cbiAgLy8gVHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcbiAgLy8gdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIGxpc3Qgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZFxuICBfb3BlbmVkQnk6ICdtb3VzZScgfCAndG91Y2gnIHwgbnVsbCA9IG51bGxcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbICckZXZlbnQnIF0pXG4gIF9vbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghaXNGYWtlTW91c2Vkb3duRnJvbVNjcmVlblJlYWRlcihldmVudCkpIHtcbiAgICAgIC8vIFNpbmNlIHJpZ2h0IG9yIG1pZGRsZSBidXR0b24gY2xpY2tzIHdvbid0IHRyaWdnZXIgdGhlIGBjbGlja2AgZXZlbnQsXG4gICAgICAvLyB3ZSBzaG91bGRuJ3QgY29uc2lkZXIgdGhlIG1lbnUgYXMgb3BlbmVkIGJ5IG1vdXNlIGluIHRob3NlIGNhc2VzLlxuICAgICAgdGhpcy5fb3BlbmVkQnkgPSBldmVudC5idXR0b24gPT09IDAgPyAnbW91c2UnIDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBfb25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy50b2dnbGUoKVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsgJyRldmVudCcgXSlcbiAgX29uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFKSB7XG4gICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpXG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yXG4gICkge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlVG91Y2hTdGFydCxcbiAgICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zKVxuXG4gICAgdGhpcy5fc2VhbVBvcG92ZXJCYXNlV2lkdGhcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUodyA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb21wUmVmICYmIHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgICB0aGlzLl9jb21wUmVmLmluc3RhbmNlLmJhc2VXaWR0aCA9IHdcbiAgICAgICAgICB0aGlzLl9jb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb3NlUG9wb3ZlcigpXG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsXG4gICAgICAgIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucylcblxuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0b3VjaCBzdGFydCBldmVudHMgb24gdGhlIHRyaWdnZXIuXG4gICAqIE5lZWRzIHRvIGJlIGFuIGFycm93IGZ1bmN0aW9uIHNvIHdlIGNhbiBlYXNpbHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIuXG4gICAqL1xuICBwcml2YXRlIF9oYW5kbGVUb3VjaFN0YXJ0ID0gKCkgPT4gdGhpcy5fb3BlbmVkQnkgPSAndG91Y2gnXG5cbiAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlIHx8IHRoaXMuc2VhbVBvcG92ZXJEaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5Qb3BvdmVyKClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlblBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSB8fCAhdGhpcy5zZWFtUG9wb3ZlcikgeyByZXR1cm4gfVxuICAgIHRoaXMuX2FjdGl2ZSA9IHRydWVcblxuICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICd0cmFuc3BhcmVudCcsXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmdldE92ZXJsYXlQb3NpdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLFxuICAgIH0pXG5cbiAgICB0aGlzLl9jb21wUmVmID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2gobmV3IENvbXBvbmVudFBvcnRhbChQb3BvdmVyQ29tcG9uZW50LCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKSlcblxuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fcG9wb3ZlckNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VQb3BvdmVyKCkpXG5cbiAgICB0aGlzLl9jb21wUmVmLmluc3RhbmNlLnRlbXBsYXRlID0gdGhpcy5zZWFtUG9wb3ZlclxuICAgIHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UuYmFzZVdpZHRoID0gdGhpcy5zZWFtUG9wb3ZlckJhc2VXaWR0aFxuICAgIHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UucG9wb3ZlciA9IHRoaXNcbiAgICB0aGlzLl9jb21wUmVmLmluc3RhbmNlLnBvcG92ZXJDb250ZXh0ID0gdGhpcy5zZWFtUG9wb3ZlckNvbnRleHRcbiAgICB0aGlzLl9jb21wUmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG5cbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkU3Vic2NyaXB0aW9uID0gdGhpcy5fY29tcFJlZi5pbnN0YW5jZS5fYWZ0ZXJFeGl0LnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdjbG9zZWQnLCB2KVxuICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldFBvcG92ZXIoKVxuXG4gICAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcblxuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2VcbiAgICAgIHRoaXMuX2Nsb3NpbmcgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB7IHJldHVybiB9XG5cbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9jb21wUmVmICYmIHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fY2xvc2luZyA9IHRydWVcbiAgICAgICAgdGhpcy5fY29tcFJlZi5pbnN0YW5jZS5fc3RhcnRFeGl0aW5nKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcG9wb3Zlck9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkgPz8gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbjogSFRNTEVsZW1lbnQpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhvcmlnaW4pXG4gICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLmdldFBvc2l0aW9ucygpKVxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG4gICAgICAud2l0aFB1c2godHJ1ZSlcblxuICAgIHJldHVybiBwb3NpdGlvblN0cmF0ZWd5XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9ucygpOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIHBvcG92ZXIgdHJpZ2dlci5cbiAgICogQHBhcmFtIG9yaWdpbiBTb3VyY2Ugb2YgdGhlIHBvcG92ZXIgdHJpZ2dlcidzIGZvY3VzLlxuICAgKi9cbiAgZm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJykge1xuICAgIGlmICh0aGlzLl9mb2N1c01vbml0b3IpIHtcbiAgICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50UmVmLCBvcmlnaW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJlc2V0cyB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgY2xvc2VkLCBtb3N0IGltcG9ydGFudGx5IHJlc3RvcmluZ1xuICAgKiBmb2N1cyB0byB0aGUgcG9wb3ZlciB0cmlnZ2VyIGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cbiAgICovXG4gIHByaXZhdGUgX3Jlc2V0UG9wb3ZlcigpOiB2b2lkIHtcbiAgICAvLyBXZSBzaG91bGQgcmVzZXQgZm9jdXMgaWYgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB1c2luZyBhIGtleWJvYXJkIG9yXG4gICAgLy8gaWYgd2UgaGF2ZSBhIHRvcC1sZXZlbCB0cmlnZ2VyIHdoaWNoIG1pZ2h0IGNhdXNlIGZvY3VzIHRvIGJlIGxvc3RcbiAgICAvLyB3aGVuIGNsaWNraW5nIG9uIHRoZSBiYWNrZHJvcC5cbiAgICBpZiAodGhpcy5yZXN0b3JlRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5fb3BlbmVkQnkpIHtcbiAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBmb2N1cyBzdHlsZSB3aWxsIHNob3cgdXAgYm90aCBmb3IgYHByb2dyYW1gIGFuZFxuICAgICAgICAvLyBga2V5Ym9hcmRgIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lmeSB3aGljaCBvbmUgaXQgaXMuXG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX29wZW5lZEJ5ID0gbnVsbFxuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciBhbiBhY3Rpb24gdGhhdCBzaG91bGQgY2xvc2UgdGhlIHBvcG92ZXIgb2NjdXJzLiAqL1xuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgY29uc3QgYmFja2Ryb3AgPSB0aGlzLl9vdmVybGF5UmVmPy5iYWNrZHJvcENsaWNrKCkgPz8gb2YoKVxuICAgIGNvbnN0IGRldGFjaG1lbnRzID0gdGhpcy5fb3ZlcmxheVJlZj8uZGV0YWNobWVudHMoKSA/PyBvZigpXG4gICAgY29uc3QgaG92ZXIgPSBvZigpXG5cbiAgICByZXR1cm4gbWVyZ2UoYmFja2Ryb3AsIGhvdmVyLCBkZXRhY2htZW50cylcbiAgfVxuXG59XG4iXX0=
|
|
@@ -2,4 +2,4 @@ export * from './rich-text/rich-text.component';
|
|
|
2
2
|
export * from './utils/models';
|
|
3
3
|
export * from './utils/utils';
|
|
4
4
|
export * from './rich-text.module';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9yaWNoLXRleHQvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlDQUFpQyxDQUFBO0FBRS9DLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxlQUFlLENBQUE7QUFFN0IsY0FBYyxvQkFBb0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcmljaC10ZXh0L3JpY2gtdGV4dC5jb21wb25lbnQnXG5cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbW9kZWxzJ1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy91dGlscydcblxuZXhwb3J0ICogZnJvbSAnLi9yaWNoLXRleHQubW9kdWxlJ1xuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
-
import { Component, EventEmitter, Inject, Input, Optional, Output, ViewChild, forwardRef } from '@angular/core';
|
|
2
|
+
import { Component, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewChild, forwardRef } from '@angular/core';
|
|
3
3
|
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
import 'quill-mention';
|
|
5
5
|
import { BehaviorSubject, Subject, combineLatest, filter, lastValueFrom, map, of, shareReplay, startWith, switchMap, take, tap } from 'rxjs';
|
|
@@ -248,6 +248,16 @@ export class RichTextComponent {
|
|
|
248
248
|
this._pollCalculatedRowHeight.next();
|
|
249
249
|
}, 0);
|
|
250
250
|
}
|
|
251
|
+
_handleKeydown(event) {
|
|
252
|
+
if (event.code === 'Escape') {
|
|
253
|
+
const qlEditor = this._quillEditor?.editorElem?.querySelector('.ql-editor');
|
|
254
|
+
if (notNullOrUndefined(qlEditor) && qlEditor === document.activeElement && qlEditor instanceof HTMLElement) {
|
|
255
|
+
event.preventDefault();
|
|
256
|
+
event.stopImmediatePropagation();
|
|
257
|
+
qlEditor.blur();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
251
261
|
constructor(_renderer, _customConfig) {
|
|
252
262
|
this._renderer = _renderer;
|
|
253
263
|
this._customConfig = _customConfig;
|
|
@@ -326,6 +336,14 @@ export class RichTextComponent {
|
|
|
326
336
|
}
|
|
327
337
|
this._templateSet.next(true);
|
|
328
338
|
}
|
|
339
|
+
ngOnDestroy() {
|
|
340
|
+
// hacky way to ensure mentions menu gets destroyed when component is destroyed
|
|
341
|
+
const mentionModule = this._quillEditor?.quillEditor.getModule('mention');
|
|
342
|
+
const hideMentionList = mentionModule?.hideMentionList;
|
|
343
|
+
if (hideMentionList && typeof hideMentionList === 'function') {
|
|
344
|
+
hideMentionList.call(mentionModule);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
329
347
|
_buildQuillConfig() {
|
|
330
348
|
this._configSet.next(false);
|
|
331
349
|
const config = {
|
|
@@ -501,7 +519,7 @@ export class RichTextComponent {
|
|
|
501
519
|
}
|
|
502
520
|
}
|
|
503
521
|
RichTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: RichTextComponent, deps: [{ token: i0.Renderer2 }, { token: THESEAM_QUILL_EDITOR_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
504
|
-
RichTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: RichTextComponent, selector: "seam-rich-text", inputs: { val: ["value", "val"], required: "required", placeholder: "placeholder", rows: "rows", resizable: "resizable", disableRichText: "disableRichText", displayCharacterCounter: "displayCharacterCounter", minLength: "minLength", maxLength: "maxLength", characterCounterTpl: "characterCounterTpl", characterCounterFn: "characterCounterFn", useMentions: "useMentions", mentionItems: "mentionItems", mentionSearchFn: "mentionSearchFn", mentionRenderListFn: "mentionRenderListFn", mentionListLoadingText: "mentionListLoadingText", mentionListEmptyText: "mentionListEmptyText" }, outputs: { quillEditorCreated: "quillEditorCreated", quillEditorChanged: "quillEditorChanged", quillContentChanged: "quillContentChanged", quillSelectionChanged: "quillSelectionChanged", quillFocus: "quillFocus", quillBlur: "quillBlur", mentionsUpdated: "mentionsUpdated" }, providers: [
|
|
522
|
+
RichTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: RichTextComponent, selector: "seam-rich-text", inputs: { val: ["value", "val"], required: "required", placeholder: "placeholder", rows: "rows", resizable: "resizable", disableRichText: "disableRichText", displayCharacterCounter: "displayCharacterCounter", minLength: "minLength", maxLength: "maxLength", characterCounterTpl: "characterCounterTpl", characterCounterFn: "characterCounterFn", useMentions: "useMentions", mentionItems: "mentionItems", mentionSearchFn: "mentionSearchFn", mentionRenderListFn: "mentionRenderListFn", mentionListLoadingText: "mentionListLoadingText", mentionListEmptyText: "mentionListEmptyText" }, outputs: { quillEditorCreated: "quillEditorCreated", quillEditorChanged: "quillEditorChanged", quillContentChanged: "quillContentChanged", quillSelectionChanged: "quillSelectionChanged", quillFocus: "quillFocus", quillBlur: "quillBlur", mentionsUpdated: "mentionsUpdated" }, host: { listeners: { "keydown": "_handleKeydown($event)" } }, providers: [
|
|
505
523
|
RICH_TEXT_VALUE_ACCESSOR
|
|
506
524
|
], viewQueries: [{ propertyName: "quillEditor", first: true, predicate: ["quillEditor"], descendants: true }, { propertyName: "defaultCharacterCounterTpl", first: true, predicate: ["characterCounter"], descendants: true }], ngImport: i0, template: "<div class=\"editor\" *ngIf=\"configSet$ | async\" [class.initializing]=\"!(initialized$ | async)\">\n <ng-container *ngIf=\"config$ | async as config\">\n <quill-editor\n #quillEditor\n seamInput\n [class.disabled]=\"readOnly\"\n [attr.disabled]=\"readOnly\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [readOnly]=\"readOnly\"\n [required]=\"required\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [format]=\"config.format\"\n [theme]=\"config.theme\"\n [modules]=\"config.modules\"\n [debug]=\"config.debug\"\n [formats]=\"config.formats\"\n [customToolbarPosition]=\"config.customToolbarPosition\"\n [sanitize]=\"config.sanitize\"\n [styles]=\"config.styles\"\n [strict]=\"config.strict\"\n [scrollingContainer]=\"config.scrollingContainer\"\n [bounds]=\"config.bounds\"\n [customOptions]=\"config.customOptions\"\n [customModules]=\"config.customModules\"\n [trackChanges]=\"config.trackChanges\"\n [preserveWhitespace]=\"config.preserveWhitespace\"\n [classes]=\"config.classes\"\n [trimOnValidation]=\"config.trimOnValidation\"\n [linkPlaceholder]=\"config.linkPlaceholder\"\n [compareValues]=\"config.compareValues\"\n [filterNull]=\"config.filterNull\"\n [debounceTime]=\"config.debounceTime\"\n [class.can-resize]=\"resizable\"\n (onEditorCreated)=\"_onEditorCreated($event)\"\n (onEditorChanged)=\"_onEditorChanged($event)\"\n (onContentChanged)=\"_onContentChanged($event)\"\n (onSelectionChanged)=\"_onSelectionChanged($event)\"\n (onFocus)=\"_onFocus($event)\"\n (onBlur)=\"_onBlur($event)\"></quill-editor>\n <ng-container *ngIf=\"displayCharacterCounter\">\n <ng-container\n [ngTemplateOutlet]=\"characterCounterTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: characterCount$ | async, minLength: minLength, maxLength: maxLength, characterCount: characterCount$ | async }\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #characterCounter let-implicit let-minLength=\"minLength\" let-maxLength=\"maxLength\" let-characterCount=\"characterCount\">\n <div class=\"small text-black-50 text-right\">\n <ng-container *ngIf=\"characterCount || characterCount === 0\">\n Character Count:\n <span [class.text-danger]=\"characterCount && ((maxLength && characterCount > maxLength) || (minLength && characterCount < minLength))\">\n {{ characterCount | number }}\n </span>\n <ng-container *ngIf=\"maxLength\">\n / {{ maxLength }}\n </ng-container>\n <span *ngIf=\"minLength\" class=\"font-italic\">\n (minimum {{ minLength }} expected)\n </span>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host .editor{position:relative}:host .editor.initializing:before{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:#f8f9fa;z-index:1}:host quill-editor.can-resize ::ng-deep .ql-editor{overflow:auto;resize:vertical}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] });
|
|
507
525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: RichTextComponent, decorators: [{
|
|
@@ -569,5 +587,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
569
587
|
}], defaultCharacterCounterTpl: [{
|
|
570
588
|
type: ViewChild,
|
|
571
589
|
args: ['characterCounter']
|
|
590
|
+
}], _handleKeydown: [{
|
|
591
|
+
type: HostListener,
|
|
592
|
+
args: ['keydown', ['$event']]
|
|
572
593
|
}] } });
|
|
573
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9yaWNoLXRleHQvcmljaC10ZXh0L3JpY2gtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcmljaC10ZXh0L3JpY2gtdGV4dC9yaWNoLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBb0MsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6SixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUNBQW1DLEVBQUUscUNBQXFDLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFalAsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWE7SUFDaEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQTtBQVVELE1BQU0sT0FBTyxpQkFBaUI7SUFVNUIsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUM1QyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDOUM7SUFDSCxDQUFDO0lBR0QsaUNBQWlDO0lBQ2pDLElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBZ0M7UUFDOUMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFHRDs7Ozs7O09BTUc7SUFDSCxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEtBQWdDO1FBQ3ZDLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7WUFFbEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFBO1NBQ3JDO0lBQ0gsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWlDO1FBQzdDLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUMvQztJQUNILENBQUM7SUFHRCxxQkFBcUI7SUFDckIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUM1QyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDOUM7SUFDSCxDQUFDO0lBR0QsbUVBQW1FO0lBQ25FOzs7Ozs7OztPQVFHO0lBQ0gsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFBO0lBQzlCLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFpQztRQUNuRCxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUVwRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUNJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQTtJQUN0QyxDQUFDO0lBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxLQUFpQztRQUMzRCxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUM3RDtJQUNILENBQUM7SUFHRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQXlCO1FBQ3JDLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7U0FDeEI7SUFDSCxDQUFDO0lBR0QsSUFDSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUF5QjtRQUNyQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxJQUNJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLO1FBQzNCLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtTQUNsQztJQUNILENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFhLGtCQUFrQjtRQUM3QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxLQUFtRDtRQUN4RSxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7U0FDakM7SUFDSCxDQUFDO0lBR0Q7Ozs7O09BS0c7SUFDSCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDMUIsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWlDO1FBQy9DLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUVoRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQ0ksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUE7SUFDakMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQXVEO1FBQ3RFLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDL0I7SUFDSCxDQUFDO0lBT0Q7O09BRUc7SUFDSCxJQUNJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUE7SUFDOUIsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEtBQXFEO1FBQ3ZFLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtTQUM5QjtJQUNILENBQUM7SUFHRDs7OztPQUlHO0lBQ0gsSUFDSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUE7SUFDbEMsQ0FBQztJQUNELElBQUksbUJBQW1CLENBQUMsS0FBcUQ7UUFDM0UsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1NBQ2xDO0lBQ0gsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxJQUNJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxzQkFBc0IsQ0FBQyxLQUFnQztRQUN6RCxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUE7U0FDckM7SUFDSCxDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILElBQ0ksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFBO0lBQ25DLENBQUM7SUFDRCxJQUFJLG9CQUFvQixDQUFDLEtBQWdDO1FBQ3ZELElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtTQUNuQztJQUNILENBQUM7SUFHRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPO1lBQ0wsRUFBRSxFQUFFLFdBQVc7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUNoQyxRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUE7SUFDSCxDQUFDO0lBV0QsSUFDSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzFCLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFvRDtRQUNsRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUV6QixtRUFBbUU7UUFDbkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDO0lBeUJELFlBQ21CLFNBQW9CLEVBQ29CLGFBQXdDO1FBRGhGLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDb0Isa0JBQWEsR0FBYixhQUFhLENBQTJCO1FBelVuRyxnQkFBVyxHQUFHLElBQUksV0FBVyxDQUFnQixJQUFJLENBQUMsQ0FBQTtRQVcxQyxjQUFTLEdBQUcsS0FBSyxDQUFBO1FBWWpCLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBb0JqQixVQUFLLEdBQUcsQ0FBQyxDQUFBO1FBZ0JULGVBQVUsR0FBRyxJQUFJLENBQUE7UUFXakIsY0FBUyxHQUFHLEtBQUssQ0FBQTtRQXVCakIscUJBQWdCLEdBQUcsS0FBSyxDQUFBO1FBd0J4Qiw2QkFBd0IsR0FBRyxLQUFLLENBQUE7UUFzQ2hDLHlCQUFvQixHQUE0QixJQUFJLENBQUE7UUFjcEQsd0JBQW1CLEdBQUcsNkJBQTZCLENBQUE7UUFtQm5ELGlCQUFZLEdBQVksS0FBSyxDQUFBO1FBaUI3QixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFtRCxTQUFTLENBQUMsQ0FBQTtRQUNqRyxrQkFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUMzRCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN2RSxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFBO1FBY08scUJBQWdCLEdBQWdDLHNCQUFzQixDQUFBO1FBZ0J0RSx5QkFBb0IsR0FBZ0MsMEJBQTBCLENBQUE7UUFnQjlFLDRCQUF1QixHQUFXLFlBQVksQ0FBQTtRQWdCOUMsMEJBQXFCLEdBQVcsbUJBQW1CLENBQUE7UUFXakQsdUJBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUE7UUFDMUQsdUJBQWtCLEdBQThELElBQUksWUFBWSxFQUFFLENBQUE7UUFDbEcsd0JBQW1CLEdBQWdDLElBQUksWUFBWSxFQUFFLENBQUE7UUFDckUsMEJBQXFCLEdBQWtDLElBQUksWUFBWSxFQUFFLENBQUE7UUFDekUsZUFBVSxHQUF3QixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ3BELGNBQVMsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUVsRCxvQkFBZSxHQUFrRCxJQUFJLFlBQVksRUFBRSxDQUFBO1FBa0JyRixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUV2Qiw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFBO1FBRTlDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQUNqRCxlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUUxQyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDaEQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQU1sRCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQXVDLFNBQVMsQ0FBQyxDQUFBO1FBQy9FLFlBQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRXBDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFrQyxFQUFFLENBQUMsQ0FBQTtRQUM3RSxzQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUE7UUFNOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7U0FDakMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFBO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDM0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ2QsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ2pGLENBQUE7YUFDRjtZQUVELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ3JELENBQUMsU0FBUyxFQUFFLENBQUE7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLHVCQUF1QjtRQUN2QiwwRkFBMEY7UUFDMUYsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUE7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNkLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJO1FBQ2hELFdBQVc7UUFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUViLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxtQkFBbUIsQ0FBQyxFQUMxRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUNqQyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRWIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDL0MsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRTNCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFBO1lBRXBELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFFdkYsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO29CQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUE7aUJBQ3RFO2FBQ0Y7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRWIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLElBQUksSUFBSSxDQUFBO1NBQ25FO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUzQixNQUFNLE1BQU0sR0FBNkI7WUFDdkMsR0FBRyxtQ0FBbUM7U0FDdkMsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUN0QixNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtZQUNuQixNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNmLE9BQU8sRUFBRSxLQUFLO2FBQ2YsQ0FBQTtTQUNGO2FBQ0k7WUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNsRCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNwRCxNQUFNLENBQUMsT0FBTyxHQUFHO2dCQUNmLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQzthQUN2QyxDQUFBO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsTUFBTSxjQUFjLEdBQXdCO2dCQUMxQyxHQUFHLE1BQU0sQ0FBQyxPQUFPO2dCQUNqQixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxxQ0FBcUM7b0JBQ3hDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCO29CQUNoRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsVUFBcUQsRUFBRSxXQUFtQixFQUFFLEVBQUU7d0JBQy9HLDREQUE0RDt3QkFDNUQsNkRBQTZEO3dCQUM3RCxNQUFNLGFBQWEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUUzRSxJQUFJLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxFQUFFOzRCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUE7eUJBQzlIO29CQUNILENBQUM7b0JBQ0QsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU87aUJBQzNCO2FBQ0YsQ0FBQTtZQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFBO1NBQ2hDO1FBRUQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ2hGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUMxRSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRCxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUM5RCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDcEQsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDcEUsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDaEUsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDMUQsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFekIsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQixDQUEyQyxJQUFPO1FBQzNFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN4RixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDaEM7UUFDRCxPQUFPLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtTQUN6QjtJQUNILENBQUM7SUFFRCx5RkFBeUY7SUFDekYsd0RBQXdEO0lBQ3hELDBGQUEwRjtJQUMxRiwrQ0FBK0M7SUFDL0Msd0NBQXdDO0lBRXhDLDRCQUE0QjtJQUM1QixvREFBb0Q7SUFDcEQsd0JBQXdCO0lBQ3hCLFVBQVU7SUFDVixTQUFTO0lBRVQsaUJBQWlCO0lBQ2pCLHdDQUF3QztJQUN4QyxJQUFJO0lBRUosSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFnQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUVuQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQUU7UUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQUU7SUFDMUMsQ0FBQztJQUdELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1FBRTNCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWxCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO0lBQzlCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrRDtRQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXBDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXNCO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFZO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBVztRQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUxQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1NBQ2pCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCLENBQUMsT0FBYztRQUM3QyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyxDQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBRSxDQUFBO1lBQzVELE1BQU0sY0FBYyxHQUFHLENBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUUsQ0FBQTtZQUU1RCxNQUFNLFdBQVcsR0FBb0MsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUMvRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQTtnQkFFNUYsSUFBSSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsRUFBRTtvQkFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtpQkFDeEI7cUJBQ0k7b0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyw2REFBNkQsRUFBRSxTQUFTLENBQUMsQ0FBQTtpQkFDdkY7Z0JBRUQsT0FBTyxHQUFHLENBQUE7WUFDWixDQUFDLEVBQW1DLEVBQUUsQ0FBQyxDQUFBO1lBRXZDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtZQUN0QixJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFO2dCQUNsRCx3REFBd0Q7Z0JBQ3hELFVBQVUsR0FBRyxJQUFJLENBQUE7YUFDbEI7aUJBQ0k7Z0JBQ0gsK0VBQStFO2dCQUMvRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUN0RSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUVoRCxJQUNFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3BFO29CQUNBLFVBQVUsR0FBRyxJQUFJLENBQUE7aUJBQ2xCO2FBQ0Y7WUFFRCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDOzs4R0E3bUJVLGlCQUFpQiwyQ0FpVk4sMkJBQTJCO2tHQWpWdEMsaUJBQWlCLCszQkFKakI7UUFDVCx3QkFBd0I7S0FDekIsdVBDekJILDZ4RkFpRUE7MkZEdENhLGlCQUFpQjtrQkFSN0IsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVCx3QkFBd0I7cUJBQ3pCOzswQkFtVkUsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywyQkFBMkI7NENBM1VqQyxHQUFHO3NCQUFsQixLQUFLO3VCQUFDLE9BQU87Z0JBS1YsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLFdBQVc7c0JBRGQsS0FBSztnQkFtQkYsSUFBSTtzQkFEUCxLQUFLO2dCQW1CRixTQUFTO3NCQURaLEtBQUs7Z0JBaUNGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBMkJGLHVCQUF1QjtzQkFEMUIsS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQWlCRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBZU8sa0JBQWtCO3NCQUE5QixLQUFLO2dCQWlCRixXQUFXO3NCQURkLEtBQUs7Z0JBb0JGLFlBQVk7c0JBRGYsS0FBSztnQkFtQkYsZUFBZTtzQkFEbEIsS0FBSztnQkFpQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWlCRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBaUJGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFvQkksa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUdILFdBQVc7c0JBRGQsU0FBUzt1QkFBQyxhQUFhO2dCQWNPLDBCQUEwQjtzQkFBeEQsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUHJvdmlkZXIsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQmx1ciwgQ29udGVudENoYW5nZSwgRWRpdG9yQ2hhbmdlQ29udGVudCwgRWRpdG9yQ2hhbmdlU2VsZWN0aW9uLCBGb2N1cywgUXVpbGxFZGl0b3JDb21wb25lbnQsIFNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBEZWx0YSB9IGZyb20gJ3F1aWxsJztcbmltcG9ydCAncXVpbGwtbWVudGlvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbGFzdFZhbHVlRnJvbSwgbWFwLCBvZiwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQsIG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBUaGVTZWFtQ2hhcmFjdGVyQ291bnRlckZuLCBUaGVTZWFtUXVpbGxFZGl0b3JDb25maWcsIFRoZVNlYW1RdWlsbE1lbnRpb25NZW51SXRlbSwgVGhlU2VhbVF1aWxsTWVudGlvbk1lbnVPcHRpb24sIFRoZVNlYW1RdWlsbE1lbnRpb25TZWFyY2hGbiwgVGhlU2VhbVF1aWxsTWVudGlvblNvdXJjZUZuLCBUaGVTZWFtUXVpbGxNb2R1bGVzIH0gZnJvbSAnLi4vdXRpbHMvbW9kZWxzJztcbmltcG9ydCB7IFRIRVNFQU1fUVVJTExfRURJVE9SX0NPTkZJRywgVEhFU0VBTV9RVUlMTF9FRElUT1JfQ09ORklHX0RFRkFVTFQsIFRIRVNFQU1fUVVJTExfTUVOVElPTl9PUFRJT05TX0RFRkFVTFQsIGRlZmF1bHRIdG1sQ2hhcmFjdGVyQ291bnRlckZuLCBkZWZhdWx0TWVudGlvblJlbmRlckxpc3RGbiwgZGVmYXVsdE1lbnRpb25TZWFyY2hGbiwgaXNNZW50aW9uTWVudU9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFJJQ0hfVEVYVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSaWNoVGV4dENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tcmljaC10ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JpY2gtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JpY2gtdGV4dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBSSUNIX1RFWFRfVkFMVUVfQUNDRVNTT1JcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSaWNoVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIG9uQ2hhbmdlOiBhbnlcbiAgb25Ub3VjaGVkOiBhbnlcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3ZhbHVlJykgdmFsOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlXG5cbiAgLyoqIEBkZWZhdWx0ICcnIChlbXB0eSBzdHJpbmcpICovXG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlclxuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyID0gJydcblxuICAvKipcbiAgICogSW5pdGlhbCByb3dzIHZpc2libGUgaW4gdGV4dCBhcmVhLCBzZXQgdXNpbmcgYGhlaWdodGAgYW5kIGBtaW5IZWlnaHRgLlxuICAgKlxuICAgKiBOT1RFOiBSZXNpemFibGUgZWRpdG9ycyB3aWxsIG5vdCBiZSBhYmxlIHRvIHNpemUgYmVsb3cgdGhlIGhlaWdodCBjYWxjdWxhdGVkIGZyb20gdGhpcyB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm93c1xuICB9XG4gIHNldCByb3dzKHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3Jvd3MgPSB2YWx1ZVxuXG4gICAgICB0aGlzLl9wb2xsQ2FsY3VsYXRlZFJvd0hlaWdodC5uZXh0KClcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfcm93cyA9IDVcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHRleHQgYXJlYSBjYW4gYmUgcmVzaXplZCB2ZXJ0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcmVzaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXNpemFibGVcbiAgfVxuICBzZXQgcmVzaXphYmxlKHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9yZXNpemFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3Jlc2l6YWJsZSA9IHRydWVcblxuICAvKiogQGRlZmF1bHQgZmFsc2UgKi9cbiAgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVxuICB9XG4gIHNldCByZWFkT25seSh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcmVhZE9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3JlYWRPbmx5ID0gZmFsc2VcblxuICAvLyBUT0RPOiBmaXggYnVnIHdoZXJlIGluaXRpYWwgaHRtbCB2YWx1ZSBpcyByZW5kZXJlZCBpbiBwbGFpbiB0ZXh0XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgb3ZlcnJpZGVzIGFsbCBvdGhlciBwcm92aWRlZCBzZXR0aW5ncyB0byBwcmVzZW50IHRoZSBlZGl0b3JcbiAgICogYXMgYSBzdGFuZGFyZCB0ZXh0Ym94LlxuICAgKlxuICAgKiBOT1RFOiBGb3IgdGhlIG1vbWVudCwgYDxwPjwvcD5gIHRhZ3MgYXJlIHN0aWxsIGFsbG93ZWQsIHRyaWdnZXJlZCBieSB0aGUgYEVudGVyYCBrZXkuXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zbGFiL3F1aWxsL2lzc3Vlcy8xNDMyXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZVJpY2hUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlUmljaFRleHRcbiAgfVxuICBzZXQgZGlzYWJsZVJpY2hUZXh0KHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlUmljaFRleHQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG5cbiAgICAgIHRoaXMuX3VwZGF0ZVF1aWxsQ29uZmlnKClcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZVJpY2hUZXh0ID0gZmFsc2VcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGRpc3BsYXlzIGEgY2hhcmFjdGVyIGNvdW50ZXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZWRpdG9yLlxuICAgKiBDaGFyYWN0ZXIgY291bnRlciB0ZXh0IGlzIGRldGVybWluZWQgYnkgdmFsdWVzIHByb3ZpZGVkIGluIGBtaW5MZW5ndGhgXG4gICAqIGFuZCBgbWF4TGVuZ3RoYC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY291bnQgYWxnb3JpdGhtIHN0cmlwcyBvdXQgaHRtbCBlbnRpdGllcyBhbmQgcmVwbGFjZXMgdGhlbVxuICAgKiB3aXRoIHNwYWNlcyB0byBnZXQgdGhlIHN0cmluZyBsZW5ndGguIFRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IsIHBhc3NcbiAgICogYSBjdXN0b20gZnVuY3Rpb24gdG8gYGNoYXJhY3RlckNvdW50ZXJGbmAuXG4gICAqXG4gICAqIFRvIG92ZXJyaWRlIGRlZmF1bHQgY2hhcmFjdGVyIGNvdW50ZXIgZGlzcGxheSwgcGFzcyBhIGN1c3RvbSB0ZW1wbGF0ZSB0byBgY2hhcmFjdGVyQ291bnRUcGxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc3BsYXlDaGFyYWN0ZXJDb3VudGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Q2hhcmFjdGVyQ291bnRlclxuICB9XG4gIHNldCBkaXNwbGF5Q2hhcmFjdGVyQ291bnRlcih2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fZGlzcGxheUNoYXJhY3RlckNvdW50ZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc3BsYXlDaGFyYWN0ZXJDb3VudGVyID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBnZXQgbWluTGVuZ3RoKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aFxuICB9XG4gIHNldCBtaW5MZW5ndGgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9taW5MZW5ndGggPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9taW5MZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZFxuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4TGVuZ3RoXG4gIH1cbiAgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX21heExlbmd0aCA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21heExlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFNldCB0byBvdmVycmlkZSBkZWZhdWx0IGNoYXJhY3RlciBjb3VudGVyIGRpc3BsYXkuXG4gICAqXG4gICAqIFRlbXBsYXRlIGNvbnRleHQgaW5jbHVkZXMgdmFyaWFibGVzIGBtaW5MZW5ndGhgLCBgbWF4TGVuZ3RoYCwgYW5kIGBjaGFyYWN0ZXJDb3VudGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgY2hhcmFjdGVyQ291bnRlclRwbCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXJhY3RlckNvdW50ZXJUcGxcbiAgfVxuICBzZXQgY2hhcmFjdGVyQ291bnRlclRwbCh2YWx1ZSkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9jaGFyYWN0ZXJDb3VudGVyVHBsID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfY2hhcmFjdGVyQ291bnRlclRwbDogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsXG5cbiAgLyoqXG4gICAqIFNldCB0byBvdmVycmlkZSBkZWZhdWx0IGNvdW50ZXIgZnVuY3Rpb24sIHdoaWNoIHN0cmlwcyBodG1sIGVudGl0aWVzIGFuZFxuICAgKiByZXBsYWNlcyB0aGVtIHdpdGggYSBzcGFjZS5cbiAgICovXG4gIEBJbnB1dCgpIGdldCBjaGFyYWN0ZXJDb3VudGVyRm4oKTogVGhlU2VhbUNoYXJhY3RlckNvdW50ZXJGbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXJhY3RlckNvdW50ZXJGblxuICB9XG4gIHNldCBjaGFyYWN0ZXJDb3VudGVyRm4odmFsdWU6IFRoZVNlYW1DaGFyYWN0ZXJDb3VudGVyRm4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2NoYXJhY3RlckNvdW50ZXJGbiA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2NoYXJhY3RlckNvdW50ZXJGbiA9IGRlZmF1bHRIdG1sQ2hhcmFjdGVyQ291bnRlckZuXG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcG9uZW50IHdpbGwgY29uZmlndXJlIHRoZSBRdWlsbCBlZGl0b3Igd2l0aCB0aGUgcXVpbGwtbWVudGlvbnMgZXh0ZW5zaW9uXG4gICAqIGFuZCBsaXN0ZW4gZm9yIHZhbHVlcyBwYXNzZWQgdG8gYG1lbnRpb25JdGVtc2AgdG8gcG9wdWxhdGUgdGhlIG1lbnRpb25zIG1lbnUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdXNlTWVudGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU1lbnRpb25zXG4gIH1cbiAgc2V0IHVzZU1lbnRpb25zKHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl91c2VNZW50aW9ucyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSlcblxuICAgICAgdGhpcy5fdXBkYXRlUXVpbGxDb25maWcoKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF91c2VNZW50aW9uczogYm9vbGVhbiA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdXNlcnMsIHVzZXIgZ3JvdXBzLCBvciBvdGhlciBlbnRpdGllcyB0byBkaXNwbGF5IGluIG1lbnRpb25zIG1lbnUuXG4gICAqIE1pbmltdW0gcmVxdWlyZWQgcHJvcGVydGllcyBhcmUgYGlkYCAodW5pcXVlKSBhbmQgYHZhbHVlYCwgd2hpY2ggYWN0cyBhcyB0aGUgbGFiZWwuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZW51IGlzIHRyaWdnZXJlZCBieSB0eXBpbmcgdGhlIGBAYCBzeW1ib2wgaW50byB0aGUgdGV4dCBhcmVhLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1lbnRpb25JdGVtcygpOiBUaGVTZWFtUXVpbGxNZW50aW9uTWVudUl0ZW1bXSB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tZW50aW9uSXRlbXMudmFsdWVcbiAgfVxuICBzZXQgbWVudGlvbkl0ZW1zKHZhbHVlOiBUaGVTZWFtUXVpbGxNZW50aW9uTWVudUl0ZW1bXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWVudGlvbkl0ZW1zLm5leHQodmFsdWUpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnRpb25JdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGhlU2VhbVF1aWxsTWVudGlvbk1lbnVJdGVtW10gfCBudWxsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIHB1YmxpYyBtZW50aW9uSXRlbXMkID0gdGhpcy5fbWVudGlvbkl0ZW1zLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgZmlsdGVyKG1lbnRpb25zID0+IG5vdE51bGxPclVuZGVmaW5lZChtZW50aW9ucykgJiYgbWVudGlvbnMubGVuZ3RoID4gMCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICApXG5cbiAgLyoqXG4gICAqIFNldCB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBmdW5jdGlvbiB3aGVuIHVzZXIgaXMgdHlwaW5nIGEgbWVudGlvbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBtZW50aW9uU2VhcmNoRm4oKTogVGhlU2VhbVF1aWxsTWVudGlvblNlYXJjaEZuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudGlvblNlYXJjaEZuXG4gIH1cbiAgc2V0IG1lbnRpb25TZWFyY2hGbih2YWx1ZTogVGhlU2VhbVF1aWxsTWVudGlvblNlYXJjaEZuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9tZW50aW9uU2VhcmNoRm4gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW50aW9uU2VhcmNoRm46IFRoZVNlYW1RdWlsbE1lbnRpb25TZWFyY2hGbiA9IGRlZmF1bHRNZW50aW9uU2VhcmNoRm5cblxuICAvKipcbiAgICogU2V0IHRvIG92ZXJyaWRlIGRlZmF1bHQgcmVuZGVyIGZ1bmN0aW9uIGZvciBtZW50aW9ucyBsaXN0LlxuICAgKlxuICAgKiBGdW5jdGlvbiBzaG91bGQgY2FsbCBgcmVuZGVyTGlzdGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbWVudGlvblJlbmRlckxpc3RGbigpOiBUaGVTZWFtUXVpbGxNZW50aW9uU291cmNlRm4ge1xuICAgIHJldHVybiB0aGlzLl9tZW50aW9uUmVuZGVyTGlzdEZuXG4gIH1cbiAgc2V0IG1lbnRpb25SZW5kZXJMaXN0Rm4odmFsdWU6IFRoZVNlYW1RdWlsbE1lbnRpb25Tb3VyY2VGbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWVudGlvblJlbmRlckxpc3RGbiA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnRpb25SZW5kZXJMaXN0Rm46IFRoZVNlYW1RdWlsbE1lbnRpb25Tb3VyY2VGbiA9IGRlZmF1bHRNZW50aW9uUmVuZGVyTGlzdEZuXG5cbiAgLyoqXG4gICAqIFNldCB0byBvdmVycmlkZSBkZWZhdWx0IHRleHQgc2hvd24gd2hpbGUgbWVudGlvbiBpdGVtcyBhcmUgbG9hZGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ0xvYWRpbmcuLi4nXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbWVudGlvbkxpc3RMb2FkaW5nVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tZW50aW9uTGlzdExvYWRpbmdUZXh0XG4gIH1cbiAgc2V0IG1lbnRpb25MaXN0TG9hZGluZ1RleHQodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWVudGlvbkxpc3RMb2FkaW5nVGV4dCA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnRpb25MaXN0TG9hZGluZ1RleHQ6IHN0cmluZyA9ICdMb2FkaW5nLi4uJ1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCB0ZXh0IHNob3duIHdoZW4gYSBtZW50aW9uIHNlYXJjaCByZXR1cm5zIG5vIGl0ZW1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnTm8gbWF0Y2hlcyBmb3VuZC4nXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbWVudGlvbkxpc3RFbXB0eVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudGlvbkxpc3RFbXB0eVRleHRcbiAgfVxuICBzZXQgbWVudGlvbkxpc3RFbXB0eVRleHQodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWVudGlvbkxpc3RFbXB0eVRleHQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW50aW9uTGlzdEVtcHR5VGV4dDogc3RyaW5nID0gJ05vIG1hdGNoZXMgZm91bmQuJ1xuXG4gIGdldCBtZW50aW9uTGlzdEVtcHR5SXRlbSgpOiBUaGVTZWFtUXVpbGxNZW50aW9uTWVudU9wdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAndW5kZWZpbmVkJyxcbiAgICAgIHZhbHVlOiB0aGlzLm1lbnRpb25MaXN0RW1wdHlUZXh0LFxuICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICBlbXB0eUxpc3Q6IHRydWVcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgcXVpbGxFZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcXVpbGxFZGl0b3JDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8RWRpdG9yQ2hhbmdlQ29udGVudCB8IEVkaXRvckNoYW5nZVNlbGVjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHF1aWxsQ29udGVudENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxDb250ZW50Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcXVpbGxTZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcXVpbGxGb2N1czogRXZlbnRFbWl0dGVyPEZvY3VzPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgcXVpbGxCbHVyOiBFdmVudEVtaXR0ZXI8Qmx1cj4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBAT3V0cHV0KCkgbWVudGlvbnNVcGRhdGVkOiBFdmVudEVtaXR0ZXI8VGhlU2VhbVF1aWxsTWVudGlvbk1lbnVPcHRpb25bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBAVmlld0NoaWxkKCdxdWlsbEVkaXRvcicpXG4gIGdldCBxdWlsbEVkaXRvcigpOiBUZW1wbGF0ZVJlZjxRdWlsbEVkaXRvckNvbXBvbmVudD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9xdWlsbEVkaXRvclxuICB9XG4gIHNldCBxdWlsbEVkaXRvcih2YWx1ZTogVGVtcGxhdGVSZWY8UXVpbGxFZGl0b3JDb21wb25lbnQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVpbGxFZGl0b3IgPSB2YWx1ZVxuXG4gICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIGZ1bGwgaHRtbCBpc24ndCBhdmFpbGFibGUgdW50aWwgdGhlIG5leHQgdGlja1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcG9sbENhbGN1bGF0ZWRSb3dIZWlnaHQubmV4dCgpXG4gICAgfSwgMClcbiAgfVxuICBwcml2YXRlIF9xdWlsbEVkaXRvcjogVGVtcGxhdGVSZWY8UXVpbGxFZGl0b3JDb21wb25lbnQ+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnY2hhcmFjdGVyQ291bnRlcicpIGRlZmF1bHRDaGFyYWN0ZXJDb3VudGVyVHBsOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG5cbiAgcHJpdmF0ZSBfaXNXcml0aW5nVmFsdWUgPSBmYWxzZVxuXG4gIHByaXZhdGUgX3BvbGxDYWxjdWxhdGVkUm93SGVpZ2h0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIHByaXZhdGUgX2NvbmZpZ1NldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gIHB1YmxpYyBjb25maWdTZXQkID0gdGhpcy5fY29uZmlnU2V0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBfc3R5bGVzU2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgcHJpdmF0ZSBfdGVtcGxhdGVTZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuXG4gIHB1YmxpYyBpbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICBwdWJsaWMgY2hhcmFjdGVyQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuICBwcml2YXRlIF9jb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1RdWlsbEVkaXRvckNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwdWJsaWMgY29uZmlnJCA9IHRoaXMuX2NvbmZpZy5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkTWVudGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10+KFtdKVxuICBwdWJsaWMgc2VsZWN0ZWRNZW50aW9ucyQgPSB0aGlzLl9zZWxlY3RlZE1lbnRpb25zLmFzT2JzZXJ2YWJsZSgpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRVNFQU1fUVVJTExfRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBfY3VzdG9tQ29uZmlnPzogVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnXG4gICkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9jb25maWdTZXQuYXNPYnNlcnZhYmxlKCksXG4gICAgICB0aGlzLl9zdHlsZXNTZXQuYXNPYnNlcnZhYmxlKCksXG4gICAgICB0aGlzLl90ZW1wbGF0ZVNldC5hc09ic2VydmFibGUoKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKHNldHMgPT4gc2V0cy5maW5kSW5kZXgocyA9PiAhcykgPT09IC0xKVxuICAgIClcblxuICAgIHRoaXMuY2hhcmFjdGVyQ291bnQkID0gdGhpcy5pbml0aWFsaXplZCQucGlwZShcbiAgICAgIGZpbHRlcihpID0+IGkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLmZvcm1Db250cm9sKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgICAgbWFwKHYgPT4gdGhpcy5jaGFyYWN0ZXJDb3VudGVyRm4odiB8fCAnJyBhcyBzdHJpbmcsIHRoaXMuX2NvbmZpZy52YWx1ZT8uZm9ybWF0KSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKDApXG4gICAgICB9KVxuICAgIClcblxuICAgIHRoaXMuc2VsZWN0ZWRNZW50aW9ucyQucGlwZShcbiAgICAgIHRhcChtZW50aW9ucyA9PiB0aGlzLm1lbnRpb25zVXBkYXRlZC5lbWl0KG1lbnRpb25zKSlcbiAgICApLnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiB0ZXN0IHRoaXMgbW9yZVxuICAgIC8vIGlnbm9yZSBxdWlsbCBpbml0aWFsIHZhbHVlQ2hhbmdlIGV2ZW50LCB0byBrZWVwIGZ1bmN0aW9uYWxpdHkgaW4gbGluZSB3aXRoIG90aGVyIGlucHV0c1xuICAgIGxldCBpbml0aWFsRW1pdENvbXBsZXRlID0gZmFsc2VcbiAgICB0aGlzLl9jb25maWdTZXQucGlwZShcbiAgICAgIGZpbHRlcihzID0+IHMpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIC8vIHNraXAoMSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiBpbml0aWFsRW1pdENvbXBsZXRlID0gdHJ1ZSlcbiAgICAgICkpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5faXNXcml0aW5nVmFsdWUgJiYgaW5pdGlhbEVtaXRDb21wbGV0ZSksXG4gICAgICB0YXAodmFsdWUgPT4gdGhpcy52YWx1ZSA9IHZhbHVlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX3BvbGxDYWxjdWxhdGVkUm93SGVpZ2h0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdHlsZXNTZXQubmV4dChmYWxzZSlcblxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkUm93c0hlaWdodCA9IGAke3RoaXMucm93cyAqIDEuNX1yZW1gXG5cbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLnJvd3MpICYmIG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9xdWlsbEVkaXRvcikpIHtcbiAgICAgICAgICBjb25zdCBlZGl0b3JFbCA9IHRoaXMuX3F1aWxsRWRpdG9yLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucWwtZWRpdG9yJylcblxuICAgICAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQoZWRpdG9yRWwpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShlZGl0b3JFbCwgJ2hlaWdodCcsIGNhbGN1bGF0ZWRSb3dzSGVpZ2h0KVxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWRpdG9yRWwsICdtaW4taGVpZ2h0JywgY2FsY3VsYXRlZFJvd3NIZWlnaHQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3R5bGVzU2V0Lm5leHQodHJ1ZSlcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fYnVpbGRRdWlsbENvbmZpZygpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY2hhcmFjdGVyQ291bnRlclRwbCkpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyQ291bnRlclRwbCA9IHRoaXMuZGVmYXVsdENoYXJhY3RlckNvdW50ZXJUcGwgfHwgbnVsbFxuICAgIH1cblxuICAgIHRoaXMuX3RlbXBsYXRlU2V0Lm5leHQodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkUXVpbGxDb25maWcoKSB7XG4gICAgdGhpcy5fY29uZmlnU2V0Lm5leHQoZmFsc2UpXG5cbiAgICBjb25zdCBjb25maWc6IFRoZVNlYW1RdWlsbEVkaXRvckNvbmZpZyA9IHtcbiAgICAgIC4uLlRIRVNFQU1fUVVJTExfRURJVE9SX0NPTkZJR19ERUZBVUxUXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlzYWJsZVJpY2hUZXh0KSB7XG4gICAgICBjb25maWcuZm9ybWF0ID0gJ3RleHQnXG4gICAgICBjb25maWcuZm9ybWF0cyA9IFtdXG4gICAgICBjb25maWcubW9kdWxlcyA9IHtcbiAgICAgICAgdG9vbGJhcjogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25maWcuZm9ybWF0ID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdmb3JtYXQnKVxuICAgICAgY29uZmlnLmZvcm1hdHMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2Zvcm1hdHMnKVxuICAgICAgY29uZmlnLm1vZHVsZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnbW9kdWxlcycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlTWVudGlvbnMpIHtcbiAgICAgIGNvbnN0IG1lbnRpb25Nb2R1bGVzOiBUaGVTZWFtUXVpbGxNb2R1bGVzID0ge1xuICAgICAgICAuLi5jb25maWcubW9kdWxlcyxcbiAgICAgICAgbWVudGlvbjoge1xuICAgICAgICAgIC4uLlRIRVNFQU1fUVVJTExfTUVOVElPTl9PUFRJT05TX0RFRkFVTFQsXG4gICAgICAgICAgcmVuZGVyTG9hZGluZzogKCkgPT4gdGhpcy5tZW50aW9uTGlzdExvYWRpbmdUZXh0LFxuICAgICAgICAgIHNvdXJjZTogYXN5bmMgKHNlYXJjaFRlcm06IHN0cmluZywgcmVuZGVyTGlzdDogKGxpc3Q6IGFueVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHZvaWQsIG1lbnRpb25DaGFyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIG1lbnUgaXMgdHJpZ2dlcmVkLFxuICAgICAgICAgICAgLy8gc28gaXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgbGF0ZXN0IHZhbHVlIGZyb20gbWVudGlvbkl0ZW1zJFxuICAgICAgICAgICAgY29uc3QgbWVudGlvbnNBc3luYyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5tZW50aW9uSXRlbXMkLnBpcGUodGFrZSgxKSkpXG5cbiAgICAgICAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQobWVudGlvbnNBc3luYykpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZW50aW9uUmVuZGVyTGlzdEZuKG1lbnRpb25zQXN5bmMsIHRoaXMubWVudGlvblNlYXJjaEZuLCB0aGlzLm1lbnRpb25MaXN0RW1wdHlJdGVtLCBzZWFyY2hUZXJtLCByZW5kZXJMaXN0LCBtZW50aW9uQ2hhcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmNvbmZpZy5tb2R1bGVzPy5tZW50aW9uLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbmZpZy5tb2R1bGVzID0gbWVudGlvbk1vZHVsZXNcbiAgICB9XG5cbiAgICBjb25maWcudGhlbWUgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3RoZW1lJylcbiAgICBjb25maWcuZGVidWcgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2RlYnVnJylcbiAgICBjb25maWcuY3VzdG9tVG9vbGJhclBvc2l0aW9uID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjdXN0b21Ub29sYmFyUG9zaXRpb24nKVxuICAgIGNvbmZpZy5zYW5pdGl6ZSA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnc2FuaXRpemUnKVxuICAgIGNvbmZpZy5zdHlsZXMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3N0eWxlcycpXG4gICAgY29uZmlnLnN0cmljdCA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnc3RyaWN0JylcbiAgICBjb25maWcuc2Nyb2xsaW5nQ29udGFpbmVyID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdzY3JvbGxpbmdDb250YWluZXInKVxuICAgIGNvbmZpZy5ib3VuZHMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2JvdW5kcycpXG4gICAgY29uZmlnLmN1c3RvbU9wdGlvbnMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2N1c3RvbU9wdGlvbnMnKVxuICAgIGNvbmZpZy5jdXN0b21Nb2R1bGVzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjdXN0b21Nb2R1bGVzJylcbiAgICBjb25maWcudHJhY2tDaGFuZ2VzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCd0cmFja0NoYW5nZXMnKVxuICAgIGNvbmZpZy5wcmVzZXJ2ZVdoaXRlc3BhY2UgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3ByZXNlcnZlV2hpdGVzcGFjZScpXG4gICAgY29uZmlnLmNsYXNzZXMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2NsYXNzZXMnKVxuICAgIGNvbmZpZy50cmltT25WYWxpZGF0aW9uID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCd0cmltT25WYWxpZGF0aW9uJylcbiAgICBjb25maWcubGlua1BsYWNlaG9sZGVyID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdsaW5rUGxhY2Vob2xkZXInKVxuICAgIGNvbmZpZy5jb21wYXJlVmFsdWVzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjb21wYXJlVmFsdWVzJylcbiAgICBjb25maWcuZmlsdGVyTnVsbCA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnZmlsdGVyTnVsbCcpXG4gICAgY29uZmlnLmRlYm91bmNlVGltZSA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnZGVib3VuY2VUaW1lJylcblxuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGNvbmZpZylcblxuICAgIC8vIHNldFRpbWVvdXQgYmMgbmd4LXF1aWxsIGxpYnJhcnkgZG9lc24ndCBsaXN0ZW4gZm9yIGlucHV0IGNoYW5nZXMsXG4gICAgLy8gc28gd2UgbXVzdCBkZXN0cm95IGFuZCBjcmVhdGUgdGhlIGNvbXBvbmVudCBlYWNoIHRpbWUgY29uZmlnIGlzIHVwZGF0ZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbmZpZ1NldC5uZXh0KHRydWUpXG4gICAgfSwgMClcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbmZpZ09yRGVmYXVsdDxLIGV4dGVuZHMga2V5b2YgVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnPihwcm9wOiBLKTogVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnW0tdIHtcbiAgICBpZiAodGhpcy5fY3VzdG9tQ29uZmlnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jdXN0b21Db25maWcsIHByb3ApKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29uZmlnW3Byb3BdXG4gICAgfVxuICAgIHJldHVybiBUSEVTRUFNX1FVSUxMX0VESVRPUl9DT05GSUdfREVGQVVMVFtwcm9wXVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUXVpbGxDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZ1NldC52YWx1ZSkge1xuICAgICAgdGhpcy5fYnVpbGRRdWlsbENvbmZpZygpXG4gICAgfVxuICB9XG5cbiAgLy8gTm90IHVzYWJsZSwgYmMgY29uZmlnIGhhcyB0byBiZSBzZXQgaW1tZWRpYXRlbHksIHBvdGVudGlhbGx5IGJlZm9yZSBtZW50aW9ucyBwb3B1bGF0ZS5cbiAgLy8gVG8gc2V0IGN1c3RvbURhdGFBdHRyaWJ1dGVzLCBwcm92aWRlIGEgY3VzdG9tIGNvbmZpZy5cbiAgLy8gcHJpdmF0ZSBfZ2V0Q3VzdG9tRGF0YUF0dHJpYnV0ZXMobWVudGlvbnM6IFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10pOiBzdHJpbmdbXSB7XG4gIC8vICAgcmV0dXJuIG1lbnRpb25zLnJlZHVjZSgoYWNjLCBtZW50aW9uKSA9PiB7XG4gIC8vICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWVudGlvbilcblxuICAvLyAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gIC8vICAgICAgIGlmIChhY2MuZmluZEluZGV4KGEgPT4gYSA9PT0ga2V5KSA9PT0gLTEpIHtcbiAgLy8gICAgICAgICBhY2MucHVzaChrZXkpXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pXG5cbiAgLy8gICAgIHJldHVybiBhY2NcbiAgLy8gICB9LCA8c3RyaW5nW10+W10gc2F0aXNmaWVzIHN0cmluZ1tdKVxuICAvLyB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVxuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVcblxuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7IHRoaXMub25DaGFuZ2UodmFsdWUpIH1cbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHsgdGhpcy5vblRvdWNoZWQoKSB9XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9pc1dyaXRpbmdWYWx1ZSA9IHRydWVcblxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG5cbiAgICB0aGlzLl9pc1dyaXRpbmdWYWx1ZSA9IGZhbHNlXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlYWRPbmx5ID0gaXNEaXNhYmxlZFxuICB9XG5cbiAgX29uRWRpdG9yQ3JlYXRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWlsbEVkaXRvckNyZWF0ZWQuZW1pdChldmVudClcbiAgfVxuXG4gIF9vbkVkaXRvckNoYW5nZWQoZXZlbnQ6IEVkaXRvckNoYW5nZUNvbnRlbnQgfCBFZGl0b3JDaGFuZ2VTZWxlY3Rpb24pIHtcbiAgICB0aGlzLnF1aWxsRWRpdG9yQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgX29uQ29udGVudENoYW5nZWQoZXZlbnQ6IENvbnRlbnRDaGFuZ2UpIHtcbiAgICB0aGlzLnF1aWxsQ29udGVudENoYW5nZWQuZW1pdChldmVudClcblxuICAgIHRoaXMuX3VwZGF0ZU1lbnRpb25zRnJvbURlbHRhKGV2ZW50LmNvbnRlbnQpXG4gIH1cblxuICBfb25TZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBTZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICB0aGlzLnF1aWxsU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgX29uRm9jdXMoZXZlbnQ6IEZvY3VzKSB7XG4gICAgdGhpcy5xdWlsbEZvY3VzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBfb25CbHVyKGV2ZW50OiBCbHVyKSB7XG4gICAgdGhpcy5xdWlsbEJsdXIuZW1pdChldmVudClcblxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYWNreSB3YXkgdG8gdHJhY2sgbWVudGlvbiBpbnNlcnRzL2RlbGV0ZXNcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZU1lbnRpb25zRnJvbURlbHRhKGNvbnRlbnQ6IERlbHRhKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChjb250ZW50Lm9wcykpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRNZW50aW9uSWRzID0gY29udGVudC5vcHMubWFwKG8gPT4gby5pbnNlcnQ/Lm1lbnRpb24/LmlkKS5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRNZW50aW9ucyA9IFsgLi4udGhpcy5fc2VsZWN0ZWRNZW50aW9ucy52YWx1ZSBdXG4gICAgICBjb25zdCBtZW50aW9uT3B0aW9ucyA9IFsgLi4udGhpcy5fbWVudGlvbkl0ZW1zLnZhbHVlIHx8IFtdIF1cblxuICAgICAgY29uc3QgbmV3TWVudGlvbnM6IFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10gPSBjb250ZW50TWVudGlvbklkcy5yZWR1Y2UoKGFjYywgbWVudGlvbklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc2VydE1lbnRpb24gPSBtZW50aW9uT3B0aW9ucy5maW5kKG0gPT4gaXNNZW50aW9uTWVudU9wdGlvbihtKSAmJiBtLmlkID09PSBtZW50aW9uSWQpXG5cbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChpbnNlcnRNZW50aW9uKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGluc2VydE1lbnRpb24pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdNZW50aW9uIGFkZGl0aW9uIGZhaWxlZCEgU2VsZWN0ZWQgbWVudGlvbiBvcHRpb24gbm90IGZvdW5kOicsIG1lbnRpb25JZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIDxUaGVTZWFtUXVpbGxNZW50aW9uTWVudU9wdGlvbltdPltdKVxuXG4gICAgICBsZXQgZW1pdFVwZGF0ZSA9IGZhbHNlXG4gICAgICBpZiAoc2VsZWN0ZWRNZW50aW9ucy5sZW5ndGggIT09IG5ld01lbnRpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiB0aGUgbGVuZ3RoIGhhcyBjaGFuZ2VkLCB3ZSBrbm93IGFuIHVwZGF0ZSBvY2N1cnJlZFxuICAgICAgICBlbWl0VXBkYXRlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgdGVzdCBpZHMgZm9yIG9sZCBhbmQgbmV3IGl0ZW1zIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGVtaXQgYSBjaGFuZ2VcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNZW50aW9uSWRzID0gdGhpcy5fc2VsZWN0ZWRNZW50aW9ucy52YWx1ZS5tYXAobSA9PiBtLmlkKVxuICAgICAgICBjb25zdCBuZXdNZW50aW9uSWRzID0gbmV3TWVudGlvbnMubWFwKG0gPT4gbS5pZClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRNZW50aW9uSWRzLmZpbmRJbmRleChtID0+ICFuZXdNZW50aW9uSWRzLmluY2x1ZGVzKG0pKSAhPT0gLTEgfHxcbiAgICAgICAgICBuZXdNZW50aW9uSWRzLmZpbmRJbmRleChtID0+ICFzZWxlY3RlZE1lbnRpb25JZHMuaW5jbHVkZXMobSkpICE9PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBlbWl0VXBkYXRlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbWl0VXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTWVudGlvbnMubmV4dChuZXdNZW50aW9ucylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJlZGl0b3JcIiAqbmdJZj1cImNvbmZpZ1NldCQgfCBhc3luY1wiIFtjbGFzcy5pbml0aWFsaXppbmddPVwiIShpbml0aWFsaXplZCQgfCBhc3luYylcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgICA8cXVpbGwtZWRpdG9yXG4gICAgICAjcXVpbGxFZGl0b3JcbiAgICAgIHNlYW1JbnB1dFxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgIFthdHRyLmRpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICBbbWluTGVuZ3RoXT1cIm1pbkxlbmd0aFwiXG4gICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICBbZm9ybWF0XT1cImNvbmZpZy5mb3JtYXRcIlxuICAgICAgW3RoZW1lXT1cImNvbmZpZy50aGVtZVwiXG4gICAgICBbbW9kdWxlc109XCJjb25maWcubW9kdWxlc1wiXG4gICAgICBbZGVidWddPVwiY29uZmlnLmRlYnVnXCJcbiAgICAgIFtmb3JtYXRzXT1cImNvbmZpZy5mb3JtYXRzXCJcbiAgICAgIFtjdXN0b21Ub29sYmFyUG9zaXRpb25dPVwiY29uZmlnLmN1c3RvbVRvb2xiYXJQb3NpdGlvblwiXG4gICAgICBbc2FuaXRpemVdPVwiY29uZmlnLnNhbml0aXplXCJcbiAgICAgIFtzdHlsZXNdPVwiY29uZmlnLnN0eWxlc1wiXG4gICAgICBbc3RyaWN0XT1cImNvbmZpZy5zdHJpY3RcIlxuICAgICAgW3Njcm9sbGluZ0NvbnRhaW5lcl09XCJjb25maWcuc2Nyb2xsaW5nQ29udGFpbmVyXCJcbiAgICAgIFtib3VuZHNdPVwiY29uZmlnLmJvdW5kc1wiXG4gICAgICBbY3VzdG9tT3B0aW9uc109XCJjb25maWcuY3VzdG9tT3B0aW9uc1wiXG4gICAgICBbY3VzdG9tTW9kdWxlc109XCJjb25maWcuY3VzdG9tTW9kdWxlc1wiXG4gICAgICBbdHJhY2tDaGFuZ2VzXT1cImNvbmZpZy50cmFja0NoYW5nZXNcIlxuICAgICAgW3ByZXNlcnZlV2hpdGVzcGFjZV09XCJjb25maWcucHJlc2VydmVXaGl0ZXNwYWNlXCJcbiAgICAgIFtjbGFzc2VzXT1cImNvbmZpZy5jbGFzc2VzXCJcbiAgICAgIFt0cmltT25WYWxpZGF0aW9uXT1cImNvbmZpZy50cmltT25WYWxpZGF0aW9uXCJcbiAgICAgIFtsaW5rUGxhY2Vob2xkZXJdPVwiY29uZmlnLmxpbmtQbGFjZWhvbGRlclwiXG4gICAgICBbY29tcGFyZVZhbHVlc109XCJjb25maWcuY29tcGFyZVZhbHVlc1wiXG4gICAgICBbZmlsdGVyTnVsbF09XCJjb25maWcuZmlsdGVyTnVsbFwiXG4gICAgICBbZGVib3VuY2VUaW1lXT1cImNvbmZpZy5kZWJvdW5jZVRpbWVcIlxuICAgICAgW2NsYXNzLmNhbi1yZXNpemVdPVwicmVzaXphYmxlXCJcbiAgICAgIChvbkVkaXRvckNyZWF0ZWQpPVwiX29uRWRpdG9yQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIChvbkVkaXRvckNoYW5nZWQpPVwiX29uRWRpdG9yQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKT1cIl9vbkNvbnRlbnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJfb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgKG9uRm9jdXMpPVwiX29uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAob25CbHVyKT1cIl9vbkJsdXIoJGV2ZW50KVwiPjwvcXVpbGwtZWRpdG9yPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5Q2hhcmFjdGVyQ291bnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGFyYWN0ZXJDb3VudGVyVHBsXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGFyYWN0ZXJDb3VudCQgfCBhc3luYywgbWluTGVuZ3RoOiBtaW5MZW5ndGgsIG1heExlbmd0aDogbWF4TGVuZ3RoLCBjaGFyYWN0ZXJDb3VudDogY2hhcmFjdGVyQ291bnQkIHwgYXN5bmMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NoYXJhY3RlckNvdW50ZXIgbGV0LWltcGxpY2l0IGxldC1taW5MZW5ndGg9XCJtaW5MZW5ndGhcIiBsZXQtbWF4TGVuZ3RoPVwibWF4TGVuZ3RoXCIgbGV0LWNoYXJhY3RlckNvdW50PVwiY2hhcmFjdGVyQ291bnRcIj5cbiAgPGRpdiBjbGFzcz1cInNtYWxsIHRleHQtYmxhY2stNTAgdGV4dC1yaWdodFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFyYWN0ZXJDb3VudCB8fCBjaGFyYWN0ZXJDb3VudCA9PT0gMFwiPlxuICAgICAgQ2hhcmFjdGVyIENvdW50OlxuICAgICAgPHNwYW4gW2NsYXNzLnRleHQtZGFuZ2VyXT1cImNoYXJhY3RlckNvdW50ICYmICgobWF4TGVuZ3RoICYmIGNoYXJhY3RlckNvdW50ID4gbWF4TGVuZ3RoKSB8fCAobWluTGVuZ3RoICYmIGNoYXJhY3RlckNvdW50IDwgbWluTGVuZ3RoKSlcIj5cbiAgICAgICAge3sgY2hhcmFjdGVyQ291bnQgfCBudW1iZXIgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtYXhMZW5ndGhcIj5cbiAgICAgICAgLyB7eyBtYXhMZW5ndGggfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW4gKm5nSWY9XCJtaW5MZW5ndGhcIiBjbGFzcz1cImZvbnQtaXRhbGljXCI+XG4gICAgICAgIChtaW5pbXVtIHt7IG1pbkxlbmd0aCB9fSBleHBlY3RlZClcbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9yaWNoLXRleHQvcmljaC10ZXh0L3JpY2gtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vcmljaC10ZXh0L3JpY2gtdGV4dC9yaWNoLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFvQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xNLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEYsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpKLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWpGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUVqUCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBYTtJQUNoRCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFB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O2dCQTJCRix1QkFBdUI7c0JBRDFCLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQVlGLFNBQVM7c0JBRFosS0FBSztnQkFpQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWVPLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFpQkYsV0FBVztzQkFEZCxLQUFLO2dCQW9CRixZQUFZO3NCQURmLEtBQUs7Z0JBbUJGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBaUJGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFpQkYsc0JBQXNCO3NCQUR6QixLQUFLO2dCQWlCRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBb0JJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFHSCxXQUFXO3NCQURkLFNBQVM7dUJBQUMsYUFBYTtnQkFjTywwQkFBMEI7c0JBQXhELFNBQVM7dUJBQUMsa0JBQWtCO2dCQUc3QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBQcm92aWRlciwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCbHVyLCBDb250ZW50Q2hhbmdlLCBFZGl0b3JDaGFuZ2VDb250ZW50LCBFZGl0b3JDaGFuZ2VTZWxlY3Rpb24sIEZvY3VzLCBRdWlsbEVkaXRvckNvbXBvbmVudCwgU2VsZWN0aW9uQ2hhbmdlIH0gZnJvbSAnbmd4LXF1aWxsJztcbmltcG9ydCB7IERlbHRhIH0gZnJvbSAncXVpbGwnO1xuaW1wb3J0ICdxdWlsbC1tZW50aW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBsYXN0VmFsdWVGcm9tLCBtYXAsIG9mLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCwgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IFRoZVNlYW1DaGFyYWN0ZXJDb3VudGVyRm4sIFRoZVNlYW1RdWlsbEVkaXRvckNvbmZpZywgVGhlU2VhbVF1aWxsTWVudGlvbk1lbnVJdGVtLCBUaGVTZWFtUXVpbGxNZW50aW9uTWVudU9wdGlvbiwgVGhlU2VhbVF1aWxsTWVudGlvblNlYXJjaEZuLCBUaGVTZWFtUXVpbGxNZW50aW9uU291cmNlRm4sIFRoZVNlYW1RdWlsbE1vZHVsZXMgfSBmcm9tICcuLi91dGlscy9tb2RlbHMnO1xuaW1wb3J0IHsgVEhFU0VBTV9RVUlMTF9FRElUT1JfQ09ORklHLCBUSEVTRUFNX1FVSUxMX0VESVRPUl9DT05GSUdfREVGQVVMVCwgVEhFU0VBTV9RVUlMTF9NRU5USU9OX09QVElPTlNfREVGQVVMVCwgZGVmYXVsdEh0bWxDaGFyYWN0ZXJDb3VudGVyRm4sIGRlZmF1bHRNZW50aW9uUmVuZGVyTGlzdEZuLCBkZWZhdWx0TWVudGlvblNlYXJjaEZuLCBpc01lbnRpb25NZW51T3B0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgUklDSF9URVhUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJpY2hUZXh0Q29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1yaWNoLXRleHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmljaC10ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmljaC10ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFJJQ0hfVEVYVF9WQUxVRV9BQ0NFU1NPUlxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJpY2hUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBvbkNoYW5nZTogYW55XG4gIG9uVG91Y2hlZDogYW55XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCd2YWx1ZScpIHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkXG4gIH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZVxuXG4gIC8qKiBAZGVmYXVsdCAnJyAoZW1wdHkgc3RyaW5nKSAqL1xuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnXG5cbiAgLyoqXG4gICAqIEluaXRpYWwgcm93cyB2aXNpYmxlIGluIHRleHQgYXJlYSwgc2V0IHVzaW5nIGBoZWlnaHRgIGFuZCBgbWluSGVpZ2h0YC5cbiAgICpcbiAgICogTk9URTogUmVzaXphYmxlIGVkaXRvcnMgd2lsbCBub3QgYmUgYWJsZSB0byBzaXplIGJlbG93IHRoZSBoZWlnaHQgY2FsY3VsYXRlZCBmcm9tIHRoaXMgdmFsdWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NcbiAgfVxuICBzZXQgcm93cyh2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9yb3dzID0gdmFsdWVcblxuICAgICAgdGhpcy5fcG9sbENhbGN1bGF0ZWRSb3dIZWlnaHQubmV4dCgpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3Jvd3MgPSA1XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCB0ZXh0IGFyZWEgY2FuIGJlIHJlc2l6ZWQgdmVydGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHJlc2l6YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzaXphYmxlXG4gIH1cbiAgc2V0IHJlc2l6YWJsZSh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcmVzaXphYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9yZXNpemFibGUgPSB0cnVlXG5cbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlcbiAgfVxuICBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3JlYWRPbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9yZWFkT25seSA9IGZhbHNlXG5cbiAgLy8gVE9ETzogZml4IGJ1ZyB3aGVyZSBpbml0aWFsIGh0bWwgdmFsdWUgaXMgcmVuZGVyZWQgaW4gcGxhaW4gdGV4dFxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIG92ZXJyaWRlcyBhbGwgb3RoZXIgcHJvdmlkZWQgc2V0dGluZ3MgdG8gcHJlc2VudCB0aGUgZWRpdG9yXG4gICAqIGFzIGEgc3RhbmRhcmQgdGV4dGJveC5cbiAgICpcbiAgICogTk9URTogRm9yIHRoZSBtb21lbnQsIGA8cD48L3A+YCB0YWdzIGFyZSBzdGlsbCBhbGxvd2VkLCB0cmlnZ2VyZWQgYnkgdGhlIGBFbnRlcmAga2V5LlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vc2xhYi9xdWlsbC9pc3N1ZXMvMTQzMlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVSaWNoVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZVJpY2hUZXh0XG4gIH1cbiAgc2V0IGRpc2FibGVSaWNoVGV4dCh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fZGlzYWJsZVJpY2hUZXh0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuXG4gICAgICB0aGlzLl91cGRhdGVRdWlsbENvbmZpZygpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVSaWNoVGV4dCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBkaXNwbGF5cyBhIGNoYXJhY3RlciBjb3VudGVyIGF0IHRoZSBib3R0b20gb2YgdGhlIGVkaXRvci5cbiAgICogQ2hhcmFjdGVyIGNvdW50ZXIgdGV4dCBpcyBkZXRlcm1pbmVkIGJ5IHZhbHVlcyBwcm92aWRlZCBpbiBgbWluTGVuZ3RoYFxuICAgKiBhbmQgYG1heExlbmd0aGAuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGNvdW50IGFsZ29yaXRobSBzdHJpcHMgb3V0IGh0bWwgZW50aXRpZXMgYW5kIHJlcGxhY2VzIHRoZW1cbiAgICogd2l0aCBzcGFjZXMgdG8gZ2V0IHRoZSBzdHJpbmcgbGVuZ3RoLiBUbyBvdmVycmlkZSB0aGlzIGJlaGF2aW9yLCBwYXNzXG4gICAqIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGBjaGFyYWN0ZXJDb3VudGVyRm5gLlxuICAgKlxuICAgKiBUbyBvdmVycmlkZSBkZWZhdWx0IGNoYXJhY3RlciBjb3VudGVyIGRpc3BsYXksIHBhc3MgYSBjdXN0b20gdGVtcGxhdGUgdG8gYGNoYXJhY3RlckNvdW50VHBsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNwbGF5Q2hhcmFjdGVyQ291bnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUNoYXJhY3RlckNvdW50ZXJcbiAgfVxuICBzZXQgZGlzcGxheUNoYXJhY3RlckNvdW50ZXIodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2Rpc3BsYXlDaGFyYWN0ZXJDb3VudGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9kaXNwbGF5Q2hhcmFjdGVyQ291bnRlciA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9taW5MZW5ndGhcbiAgfVxuICBzZXQgbWluTGVuZ3RoKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWluTGVuZ3RoID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWluTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWRcblxuICBASW5wdXQoKVxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21heExlbmd0aFxuICB9XG4gIHNldCBtYXhMZW5ndGgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9tYXhMZW5ndGggPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tYXhMZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBjaGFyYWN0ZXIgY291bnRlciBkaXNwbGF5LlxuICAgKlxuICAgKiBUZW1wbGF0ZSBjb250ZXh0IGluY2x1ZGVzIHZhcmlhYmxlcyBgbWluTGVuZ3RoYCwgYG1heExlbmd0aGAsIGFuZCBgY2hhcmFjdGVyQ291bnRgLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGNoYXJhY3RlckNvdW50ZXJUcGwoKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jaGFyYWN0ZXJDb3VudGVyVHBsXG4gIH1cbiAgc2V0IGNoYXJhY3RlckNvdW50ZXJUcGwodmFsdWUpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fY2hhcmFjdGVyQ291bnRlclRwbCA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2NoYXJhY3RlckNvdW50ZXJUcGw6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBjb3VudGVyIGZ1bmN0aW9uLCB3aGljaCBzdHJpcHMgaHRtbCBlbnRpdGllcyBhbmRcbiAgICogcmVwbGFjZXMgdGhlbSB3aXRoIGEgc3BhY2UuXG4gICAqL1xuICBASW5wdXQoKSBnZXQgY2hhcmFjdGVyQ291bnRlckZuKCk6IFRoZVNlYW1DaGFyYWN0ZXJDb3VudGVyRm4ge1xuICAgIHJldHVybiB0aGlzLl9jaGFyYWN0ZXJDb3VudGVyRm5cbiAgfVxuICBzZXQgY2hhcmFjdGVyQ291bnRlckZuKHZhbHVlOiBUaGVTZWFtQ2hhcmFjdGVyQ291bnRlckZuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLl9jaGFyYWN0ZXJDb3VudGVyRm4gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jaGFyYWN0ZXJDb3VudGVyRm4gPSBkZWZhdWx0SHRtbENoYXJhY3RlckNvdW50ZXJGblxuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBvbmVudCB3aWxsIGNvbmZpZ3VyZSB0aGUgUXVpbGwgZWRpdG9yIHdpdGggdGhlIHF1aWxsLW1lbnRpb25zIGV4dGVuc2lvblxuICAgKiBhbmQgbGlzdGVuIGZvciB2YWx1ZXMgcGFzc2VkIHRvIGBtZW50aW9uSXRlbXNgIHRvIHBvcHVsYXRlIHRoZSBtZW50aW9ucyBtZW51LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHVzZU1lbnRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl91c2VNZW50aW9uc1xuICB9XG4gIHNldCB1c2VNZW50aW9ucyh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fdXNlTWVudGlvbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG5cbiAgICAgIHRoaXMuX3VwZGF0ZVF1aWxsQ29uZmlnKClcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdXNlTWVudGlvbnM6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHVzZXJzLCB1c2VyIGdyb3Vwcywgb3Igb3RoZXIgZW50aXRpZXMgdG8gZGlzcGxheSBpbiBtZW50aW9ucyBtZW51LlxuICAgKiBNaW5pbXVtIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJlIGBpZGAgKHVuaXF1ZSkgYW5kIGB2YWx1ZWAsIHdoaWNoIGFjdHMgYXMgdGhlIGxhYmVsLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWVudSBpcyB0cmlnZ2VyZWQgYnkgdHlwaW5nIHRoZSBgQGAgc3ltYm9sIGludG8gdGhlIHRleHQgYXJlYS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBtZW50aW9uSXRlbXMoKTogVGhlU2VhbVF1aWxsTWVudGlvbk1lbnVJdGVtW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudGlvbkl0ZW1zLnZhbHVlXG4gIH1cbiAgc2V0IG1lbnRpb25JdGVtcyh2YWx1ZTogVGhlU2VhbVF1aWxsTWVudGlvbk1lbnVJdGVtW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX21lbnRpb25JdGVtcy5uZXh0KHZhbHVlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW50aW9uSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1RdWlsbE1lbnRpb25NZW51SXRlbVtdIHwgbnVsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwdWJsaWMgbWVudGlvbkl0ZW1zJCA9IHRoaXMuX21lbnRpb25JdGVtcy5hc09ic2VydmFibGUoKS5waXBlKFxuICAgIGZpbHRlcihtZW50aW9ucyA9PiBub3ROdWxsT3JVbmRlZmluZWQobWVudGlvbnMpICYmIG1lbnRpb25zLmxlbmd0aCA+IDApLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgKVxuXG4gIC8qKlxuICAgKiBTZXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggZnVuY3Rpb24gd2hlbiB1c2VyIGlzIHR5cGluZyBhIG1lbnRpb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbWVudGlvblNlYXJjaEZuKCk6IFRoZVNlYW1RdWlsbE1lbnRpb25TZWFyY2hGbiB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnRpb25TZWFyY2hGblxuICB9XG4gIHNldCBtZW50aW9uU2VhcmNoRm4odmFsdWU6IFRoZVNlYW1RdWlsbE1lbnRpb25TZWFyY2hGbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fbWVudGlvblNlYXJjaEZuID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudGlvblNlYXJjaEZuOiBUaGVTZWFtUXVpbGxNZW50aW9uU2VhcmNoRm4gPSBkZWZhdWx0TWVudGlvblNlYXJjaEZuXG5cbiAgLyoqXG4gICAqIFNldCB0byBvdmVycmlkZSBkZWZhdWx0IHJlbmRlciBmdW5jdGlvbiBmb3IgbWVudGlvbnMgbGlzdC5cbiAgICpcbiAgICogRnVuY3Rpb24gc2hvdWxkIGNhbGwgYHJlbmRlckxpc3RgLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1lbnRpb25SZW5kZXJMaXN0Rm4oKTogVGhlU2VhbVF1aWxsTWVudGlvblNvdXJjZUZuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudGlvblJlbmRlckxpc3RGblxuICB9XG4gIHNldCBtZW50aW9uUmVuZGVyTGlzdEZuKHZhbHVlOiBUaGVTZWFtUXVpbGxNZW50aW9uU291cmNlRm4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX21lbnRpb25SZW5kZXJMaXN0Rm4gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW50aW9uUmVuZGVyTGlzdEZuOiBUaGVTZWFtUXVpbGxNZW50aW9uU291cmNlRm4gPSBkZWZhdWx0TWVudGlvblJlbmRlckxpc3RGblxuXG4gIC8qKlxuICAgKiBTZXQgdG8gb3ZlcnJpZGUgZGVmYXVsdCB0ZXh0IHNob3duIHdoaWxlIG1lbnRpb24gaXRlbXMgYXJlIGxvYWRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdMb2FkaW5nLi4uJ1xuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1lbnRpb25MaXN0TG9hZGluZ1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudGlvbkxpc3RMb2FkaW5nVGV4dFxuICB9XG4gIHNldCBtZW50aW9uTGlzdExvYWRpbmdUZXh0KHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX21lbnRpb25MaXN0TG9hZGluZ1RleHQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW50aW9uTGlzdExvYWRpbmdUZXh0OiBzdHJpbmcgPSAnTG9hZGluZy4uLidcblxuICAvKipcbiAgICogU2V0IHRvIG92ZXJyaWRlIGRlZmF1bHQgdGV4dCBzaG93biB3aGVuIGEgbWVudGlvbiBzZWFyY2ggcmV0dXJucyBubyBpdGVtcy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ05vIG1hdGNoZXMgZm91bmQuJ1xuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG1lbnRpb25MaXN0RW1wdHlUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnRpb25MaXN0RW1wdHlUZXh0XG4gIH1cbiAgc2V0IG1lbnRpb25MaXN0RW1wdHlUZXh0KHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX21lbnRpb25MaXN0RW1wdHlUZXh0ID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudGlvbkxpc3RFbXB0eVRleHQ6IHN0cmluZyA9ICdObyBtYXRjaGVzIGZvdW5kLidcblxuICBnZXQgbWVudGlvbkxpc3RFbXB0eUl0ZW0oKTogVGhlU2VhbVF1aWxsTWVudGlvbk1lbnVPcHRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogJ3VuZGVmaW5lZCcsXG4gICAgICB2YWx1ZTogdGhpcy5tZW50aW9uTGlzdEVtcHR5VGV4dCxcbiAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgZW1wdHlMaXN0OiB0cnVlXG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIHF1aWxsRWRpdG9yQ3JlYXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHF1aWxsRWRpdG9yQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEVkaXRvckNoYW5nZUNvbnRlbnQgfCBFZGl0b3JDaGFuZ2VTZWxlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBxdWlsbENvbnRlbnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29udGVudENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHF1aWxsU2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHF1aWxsRm9jdXM6IEV2ZW50RW1pdHRlcjxGb2N1cz4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHF1aWxsQmx1cjogRXZlbnRFbWl0dGVyPEJsdXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgQE91dHB1dCgpIG1lbnRpb25zVXBkYXRlZDogRXZlbnRFbWl0dGVyPFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgQFZpZXdDaGlsZCgncXVpbGxFZGl0b3InKVxuICBnZXQgcXVpbGxFZGl0b3IoKTogUXVpbGxFZGl0b3JDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9xdWlsbEVkaXRvclxuICB9XG4gIHNldCBxdWlsbEVkaXRvcih2YWx1ZTogUXVpbGxFZGl0b3JDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9xdWlsbEVkaXRvciA9IHZhbHVlXG5cbiAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2UgZnVsbCBodG1sIGlzbid0IGF2YWlsYWJsZSB1bnRpbCB0aGUgbmV4dCB0aWNrXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9wb2xsQ2FsY3VsYXRlZFJvd0hlaWdodC5uZXh0KClcbiAgICB9LCAwKVxuICB9XG4gIHByaXZhdGUgX3F1aWxsRWRpdG9yOiBRdWlsbEVkaXRvckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2NoYXJhY3RlckNvdW50ZXInKSBkZWZhdWx0Q2hhcmFjdGVyQ291bnRlclRwbDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgY29uc3QgcWxFZGl0b3IgPSB0aGlzLl9xdWlsbEVkaXRvcj8uZWRpdG9yRWxlbT8ucXVlcnlTZWxlY3RvcignLnFsLWVkaXRvcicpXG4gICAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHFsRWRpdG9yKSAmJiBxbEVkaXRvciA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBxbEVkaXRvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcbiAgICAgICAgcWxFZGl0b3IuYmx1cigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNXcml0aW5nVmFsdWUgPSBmYWxzZVxuXG4gIHByaXZhdGUgX3BvbGxDYWxjdWxhdGVkUm93SGVpZ2h0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIHByaXZhdGUgX2NvbmZpZ1NldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gIHB1YmxpYyBjb25maWdTZXQkID0gdGhpcy5fY29uZmlnU2V0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBfc3R5bGVzU2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgcHJpdmF0ZSBfdGVtcGxhdGVTZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuXG4gIHB1YmxpYyBpbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICBwdWJsaWMgY2hhcmFjdGVyQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj5cblxuICBwcml2YXRlIF9jb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1RdWlsbEVkaXRvckNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwdWJsaWMgY29uZmlnJCA9IHRoaXMuX2NvbmZpZy5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkTWVudGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10+KFtdKVxuICBwdWJsaWMgc2VsZWN0ZWRNZW50aW9ucyQgPSB0aGlzLl9zZWxlY3RlZE1lbnRpb25zLmFzT2JzZXJ2YWJsZSgpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRVNFQU1fUVVJTExfRURJVE9SX0NPTkZJRykgcHJpdmF0ZSBfY3VzdG9tQ29uZmlnPzogVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnXG4gICkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9jb25maWdTZXQuYXNPYnNlcnZhYmxlKCksXG4gICAgICB0aGlzLl9zdHlsZXNTZXQuYXNPYnNlcnZhYmxlKCksXG4gICAgICB0aGlzLl90ZW1wbGF0ZVNldC5hc09ic2VydmFibGUoKSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKHNldHMgPT4gc2V0cy5maW5kSW5kZXgocyA9PiAhcykgPT09IC0xKVxuICAgIClcblxuICAgIHRoaXMuY2hhcmFjdGVyQ291bnQkID0gdGhpcy5pbml0aWFsaXplZCQucGlwZShcbiAgICAgIGZpbHRlcihpID0+IGkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLmZvcm1Db250cm9sKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgICAgbWFwKHYgPT4gdGhpcy5jaGFyYWN0ZXJDb3VudGVyRm4odiB8fCAnJyBhcyBzdHJpbmcsIHRoaXMuX2NvbmZpZy52YWx1ZT8uZm9ybWF0KSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKDApXG4gICAgICB9KVxuICAgIClcblxuICAgIHRoaXMuc2VsZWN0ZWRNZW50aW9ucyQucGlwZShcbiAgICAgIHRhcChtZW50aW9ucyA9PiB0aGlzLm1lbnRpb25zVXBkYXRlZC5lbWl0KG1lbnRpb25zKSlcbiAgICApLnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiB0ZXN0IHRoaXMgbW9yZVxuICAgIC8vIGlnbm9yZSBxdWlsbCBpbml0aWFsIHZhbHVlQ2hhbmdlIGV2ZW50LCB0byBrZWVwIGZ1bmN0aW9uYWxpdHkgaW4gbGluZSB3aXRoIG90aGVyIGlucHV0c1xuICAgIGxldCBpbml0aWFsRW1pdENvbXBsZXRlID0gZmFsc2VcbiAgICB0aGlzLl9jb25maWdTZXQucGlwZShcbiAgICAgIGZpbHRlcihzID0+IHMpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIC8vIHNraXAoMSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiBpbml0aWFsRW1pdENvbXBsZXRlID0gdHJ1ZSlcbiAgICAgICkpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5faXNXcml0aW5nVmFsdWUgJiYgaW5pdGlhbEVtaXRDb21wbGV0ZSksXG4gICAgICB0YXAodmFsdWUgPT4gdGhpcy52YWx1ZSA9IHZhbHVlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX3BvbGxDYWxjdWxhdGVkUm93SGVpZ2h0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdHlsZXNTZXQubmV4dChmYWxzZSlcblxuICAgICAgICBjb25zdCBjYWxjdWxhdGVkUm93c0hlaWdodCA9IGAke3RoaXMucm93cyAqIDEuNX1yZW1gXG5cbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLnJvd3MpICYmIG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9xdWlsbEVkaXRvcikpIHtcbiAgICAgICAgICBjb25zdCBlZGl0b3JFbCA9IHRoaXMuX3F1aWxsRWRpdG9yLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucWwtZWRpdG9yJylcblxuICAgICAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQoZWRpdG9yRWwpKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShlZGl0b3JFbCwgJ2hlaWdodCcsIGNhbGN1bGF0ZWRSb3dzSGVpZ2h0KVxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWRpdG9yRWwsICdtaW4taGVpZ2h0JywgY2FsY3VsYXRlZFJvd3NIZWlnaHQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3R5bGVzU2V0Lm5leHQodHJ1ZSlcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fYnVpbGRRdWlsbENvbmZpZygpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY2hhcmFjdGVyQ291bnRlclRwbCkpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyQ291bnRlclRwbCA9IHRoaXMuZGVmYXVsdENoYXJhY3RlckNvdW50ZXJUcGwgfHwgbnVsbFxuICAgIH1cblxuICAgIHRoaXMuX3RlbXBsYXRlU2V0Lm5leHQodHJ1ZSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIGhhY2t5IHdheSB0byBlbnN1cmUgbWVudGlvbnMgbWVudSBnZXRzIGRlc3Ryb3llZCB3aGVuIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcbiAgICBjb25zdCBtZW50aW9uTW9kdWxlID0gdGhpcy5fcXVpbGxFZGl0b3I/LnF1aWxsRWRpdG9yLmdldE1vZHVsZSgnbWVudGlvbicpXG4gICAgY29uc3QgaGlkZU1lbnRpb25MaXN0ID0gbWVudGlvbk1vZHVsZT8uaGlkZU1lbnRpb25MaXN0XG4gICAgaWYgKGhpZGVNZW50aW9uTGlzdCAmJiB0eXBlb2YgaGlkZU1lbnRpb25MaXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoaWRlTWVudGlvbkxpc3QuY2FsbChtZW50aW9uTW9kdWxlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkUXVpbGxDb25maWcoKSB7XG4gICAgdGhpcy5fY29uZmlnU2V0Lm5leHQoZmFsc2UpXG5cbiAgICBjb25zdCBjb25maWc6IFRoZVNlYW1RdWlsbEVkaXRvckNvbmZpZyA9IHtcbiAgICAgIC4uLlRIRVNFQU1fUVVJTExfRURJVE9SX0NPTkZJR19ERUZBVUxUXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlzYWJsZVJpY2hUZXh0KSB7XG4gICAgICBjb25maWcuZm9ybWF0ID0gJ3RleHQnXG4gICAgICBjb25maWcuZm9ybWF0cyA9IFtdXG4gICAgICBjb25maWcubW9kdWxlcyA9IHtcbiAgICAgICAgdG9vbGJhcjogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25maWcuZm9ybWF0ID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdmb3JtYXQnKVxuICAgICAgY29uZmlnLmZvcm1hdHMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2Zvcm1hdHMnKVxuICAgICAgY29uZmlnLm1vZHVsZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnbW9kdWxlcycpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlTWVudGlvbnMpIHtcbiAgICAgIGNvbnN0IG1lbnRpb25Nb2R1bGVzOiBUaGVTZWFtUXVpbGxNb2R1bGVzID0ge1xuICAgICAgICAuLi5jb25maWcubW9kdWxlcyxcbiAgICAgICAgbWVudGlvbjoge1xuICAgICAgICAgIC4uLlRIRVNFQU1fUVVJTExfTUVOVElPTl9PUFRJT05TX0RFRkFVTFQsXG4gICAgICAgICAgcmVuZGVyTG9hZGluZzogKCkgPT4gdGhpcy5tZW50aW9uTGlzdExvYWRpbmdUZXh0LFxuICAgICAgICAgIHNvdXJjZTogYXN5bmMgKHNlYXJjaFRlcm06IHN0cmluZywgcmVuZGVyTGlzdDogKGxpc3Q6IGFueVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHZvaWQsIG1lbnRpb25DaGFyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIG1lbnUgaXMgdHJpZ2dlcmVkLFxuICAgICAgICAgICAgLy8gc28gaXQgd2lsbCBhbHdheXMgaGF2ZSB0aGUgbGF0ZXN0IHZhbHVlIGZyb20gbWVudGlvbkl0ZW1zJFxuICAgICAgICAgICAgY29uc3QgbWVudGlvbnNBc3luYyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5tZW50aW9uSXRlbXMkLnBpcGUodGFrZSgxKSkpXG5cbiAgICAgICAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQobWVudGlvbnNBc3luYykpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZW50aW9uUmVuZGVyTGlzdEZuKG1lbnRpb25zQXN5bmMsIHRoaXMubWVudGlvblNlYXJjaEZuLCB0aGlzLm1lbnRpb25MaXN0RW1wdHlJdGVtLCBzZWFyY2hUZXJtLCByZW5kZXJMaXN0LCBtZW50aW9uQ2hhcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmNvbmZpZy5tb2R1bGVzPy5tZW50aW9uLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbmZpZy5tb2R1bGVzID0gbWVudGlvbk1vZHVsZXNcbiAgICB9XG5cbiAgICBjb25maWcudGhlbWUgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3RoZW1lJylcbiAgICBjb25maWcuZGVidWcgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2RlYnVnJylcbiAgICBjb25maWcuY3VzdG9tVG9vbGJhclBvc2l0aW9uID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjdXN0b21Ub29sYmFyUG9zaXRpb24nKVxuICAgIGNvbmZpZy5zYW5pdGl6ZSA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnc2FuaXRpemUnKVxuICAgIGNvbmZpZy5zdHlsZXMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3N0eWxlcycpXG4gICAgY29uZmlnLnN0cmljdCA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnc3RyaWN0JylcbiAgICBjb25maWcuc2Nyb2xsaW5nQ29udGFpbmVyID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdzY3JvbGxpbmdDb250YWluZXInKVxuICAgIGNvbmZpZy5ib3VuZHMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2JvdW5kcycpXG4gICAgY29uZmlnLmN1c3RvbU9wdGlvbnMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2N1c3RvbU9wdGlvbnMnKVxuICAgIGNvbmZpZy5jdXN0b21Nb2R1bGVzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjdXN0b21Nb2R1bGVzJylcbiAgICBjb25maWcudHJhY2tDaGFuZ2VzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCd0cmFja0NoYW5nZXMnKVxuICAgIGNvbmZpZy5wcmVzZXJ2ZVdoaXRlc3BhY2UgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ3ByZXNlcnZlV2hpdGVzcGFjZScpXG4gICAgY29uZmlnLmNsYXNzZXMgPSB0aGlzLl9nZXRDb25maWdPckRlZmF1bHQoJ2NsYXNzZXMnKVxuICAgIGNvbmZpZy50cmltT25WYWxpZGF0aW9uID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCd0cmltT25WYWxpZGF0aW9uJylcbiAgICBjb25maWcubGlua1BsYWNlaG9sZGVyID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdsaW5rUGxhY2Vob2xkZXInKVxuICAgIGNvbmZpZy5jb21wYXJlVmFsdWVzID0gdGhpcy5fZ2V0Q29uZmlnT3JEZWZhdWx0KCdjb21wYXJlVmFsdWVzJylcbiAgICBjb25maWcuZmlsdGVyTnVsbCA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnZmlsdGVyTnVsbCcpXG4gICAgY29uZmlnLmRlYm91bmNlVGltZSA9IHRoaXMuX2dldENvbmZpZ09yRGVmYXVsdCgnZGVib3VuY2VUaW1lJylcblxuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGNvbmZpZylcblxuICAgIC8vIHNldFRpbWVvdXQgYmMgbmd4LXF1aWxsIGxpYnJhcnkgZG9lc24ndCBsaXN0ZW4gZm9yIGlucHV0IGNoYW5nZXMsXG4gICAgLy8gc28gd2UgbXVzdCBkZXN0cm95IGFuZCBjcmVhdGUgdGhlIGNvbXBvbmVudCBlYWNoIHRpbWUgY29uZmlnIGlzIHVwZGF0ZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbmZpZ1NldC5uZXh0KHRydWUpXG4gICAgfSwgMClcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbmZpZ09yRGVmYXVsdDxLIGV4dGVuZHMga2V5b2YgVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnPihwcm9wOiBLKTogVGhlU2VhbVF1aWxsRWRpdG9yQ29uZmlnW0tdIHtcbiAgICBpZiAodGhpcy5fY3VzdG9tQ29uZmlnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jdXN0b21Db25maWcsIHByb3ApKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29uZmlnW3Byb3BdXG4gICAgfVxuICAgIHJldHVybiBUSEVTRUFNX1FVSUxMX0VESVRPUl9DT05GSUdfREVGQVVMVFtwcm9wXVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlUXVpbGxDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZ1NldC52YWx1ZSkge1xuICAgICAgdGhpcy5fYnVpbGRRdWlsbENvbmZpZygpXG4gICAgfVxuICB9XG5cbiAgLy8gTm90IHVzYWJsZSwgYmMgY29uZmlnIGhhcyB0byBiZSBzZXQgaW1tZWRpYXRlbHksIHBvdGVudGlhbGx5IGJlZm9yZSBtZW50aW9ucyBwb3B1bGF0ZS5cbiAgLy8gVG8gc2V0IGN1c3RvbURhdGFBdHRyaWJ1dGVzLCBwcm92aWRlIGEgY3VzdG9tIGNvbmZpZy5cbiAgLy8gcHJpdmF0ZSBfZ2V0Q3VzdG9tRGF0YUF0dHJpYnV0ZXMobWVudGlvbnM6IFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10pOiBzdHJpbmdbXSB7XG4gIC8vICAgcmV0dXJuIG1lbnRpb25zLnJlZHVjZSgoYWNjLCBtZW50aW9uKSA9PiB7XG4gIC8vICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobWVudGlvbilcblxuICAvLyAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gIC8vICAgICAgIGlmIChhY2MuZmluZEluZGV4KGEgPT4gYSA9PT0ga2V5KSA9PT0gLTEpIHtcbiAgLy8gICAgICAgICBhY2MucHVzaChrZXkpXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pXG5cbiAgLy8gICAgIHJldHVybiBhY2NcbiAgLy8gICB9LCA8c3RyaW5nW10+W10gc2F0aXNmaWVzIHN0cmluZ1tdKVxuICAvLyB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZVxuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVcblxuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7IHRoaXMub25DaGFuZ2UodmFsdWUpIH1cbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHsgdGhpcy5vblRvdWNoZWQoKSB9XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9pc1dyaXRpbmdWYWx1ZSA9IHRydWVcblxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG5cbiAgICB0aGlzLl9pc1dyaXRpbmdWYWx1ZSA9IGZhbHNlXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlYWRPbmx5ID0gaXNEaXNhYmxlZFxuICB9XG5cbiAgX29uRWRpdG9yQ3JlYXRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWlsbEVkaXRvckNyZWF0ZWQuZW1pdChldmVudClcbiAgfVxuXG4gIF9vbkVkaXRvckNoYW5nZWQoZXZlbnQ6IEVkaXRvckNoYW5nZUNvbnRlbnQgfCBFZGl0b3JDaGFuZ2VTZWxlY3Rpb24pIHtcbiAgICB0aGlzLnF1aWxsRWRpdG9yQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgX29uQ29udGVudENoYW5nZWQoZXZlbnQ6IENvbnRlbnRDaGFuZ2UpIHtcbiAgICB0aGlzLnF1aWxsQ29udGVudENoYW5nZWQuZW1pdChldmVudClcblxuICAgIHRoaXMuX3VwZGF0ZU1lbnRpb25zRnJvbURlbHRhKGV2ZW50LmNvbnRlbnQpXG4gIH1cblxuICBfb25TZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBTZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICB0aGlzLnF1aWxsU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgX29uRm9jdXMoZXZlbnQ6IEZvY3VzKSB7XG4gICAgdGhpcy5xdWlsbEZvY3VzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBfb25CbHVyKGV2ZW50OiBCbHVyKSB7XG4gICAgdGhpcy5xdWlsbEJsdXIuZW1pdChldmVudClcblxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYWNreSB3YXkgdG8gdHJhY2sgbWVudGlvbiBpbnNlcnRzL2RlbGV0ZXNcbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZU1lbnRpb25zRnJvbURlbHRhKGNvbnRlbnQ6IERlbHRhKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChjb250ZW50Lm9wcykpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRNZW50aW9uSWRzID0gY29udGVudC5vcHMubWFwKG8gPT4gby5pbnNlcnQ/Lm1lbnRpb24/LmlkKS5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRNZW50aW9ucyA9IFsgLi4udGhpcy5fc2VsZWN0ZWRNZW50aW9ucy52YWx1ZSBdXG4gICAgICBjb25zdCBtZW50aW9uT3B0aW9ucyA9IFsgLi4udGhpcy5fbWVudGlvbkl0ZW1zLnZhbHVlIHx8IFtdIF1cblxuICAgICAgY29uc3QgbmV3TWVudGlvbnM6IFRoZVNlYW1RdWlsbE1lbnRpb25NZW51T3B0aW9uW10gPSBjb250ZW50TWVudGlvbklkcy5yZWR1Y2UoKGFjYywgbWVudGlvbklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc2VydE1lbnRpb24gPSBtZW50aW9uT3B0aW9ucy5maW5kKG0gPT4gaXNNZW50aW9uTWVudU9wdGlvbihtKSAmJiBtLmlkID09PSBtZW50aW9uSWQpXG5cbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChpbnNlcnRNZW50aW9uKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGluc2VydE1lbnRpb24pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdNZW50aW9uIGFkZGl0aW9uIGZhaWxlZCEgU2VsZWN0ZWQgbWVudGlvbiBvcHRpb24gbm90IGZvdW5kOicsIG1lbnRpb25JZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH0sIDxUaGVTZWFtUXVpbGxNZW50aW9uTWVudU9wdGlvbltdPltdKVxuXG4gICAgICBsZXQgZW1pdFVwZGF0ZSA9IGZhbHNlXG4gICAgICBpZiAoc2VsZWN0ZWRNZW50aW9ucy5sZW5ndGggIT09IG5ld01lbnRpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiB0aGUgbGVuZ3RoIGhhcyBjaGFuZ2VkLCB3ZSBrbm93IGFuIHVwZGF0ZSBvY2N1cnJlZFxuICAgICAgICBlbWl0VXBkYXRlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgdGVzdCBpZHMgZm9yIG9sZCBhbmQgbmV3IGl0ZW1zIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGVtaXQgYSBjaGFuZ2VcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNZW50aW9uSWRzID0gdGhpcy5fc2VsZWN0ZWRNZW50aW9ucy52YWx1ZS5tYXAobSA9PiBtLmlkKVxuICAgICAgICBjb25zdCBuZXdNZW50aW9uSWRzID0gbmV3TWVudGlvbnMubWFwKG0gPT4gbS5pZClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRNZW50aW9uSWRzLmZpbmRJbmRleChtID0+ICFuZXdNZW50aW9uSWRzLmluY2x1ZGVzKG0pKSAhPT0gLTEgfHxcbiAgICAgICAgICBuZXdNZW50aW9uSWRzLmZpbmRJbmRleChtID0+ICFzZWxlY3RlZE1lbnRpb25JZHMuaW5jbHVkZXMobSkpICE9PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBlbWl0VXBkYXRlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbWl0VXBkYXRlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTWVudGlvbnMubmV4dChuZXdNZW50aW9ucylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJlZGl0b3JcIiAqbmdJZj1cImNvbmZpZ1NldCQgfCBhc3luY1wiIFtjbGFzcy5pbml0aWFsaXppbmddPVwiIShpbml0aWFsaXplZCQgfCBhc3luYylcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgICA8cXVpbGwtZWRpdG9yXG4gICAgICAjcXVpbGxFZGl0b3JcbiAgICAgIHNlYW1JbnB1dFxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgIFthdHRyLmRpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICBbbWluTGVuZ3RoXT1cIm1pbkxlbmd0aFwiXG4gICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICBbZm9ybWF0XT1cImNvbmZpZy5mb3JtYXRcIlxuICAgICAgW3RoZW1lXT1cImNvbmZpZy50aGVtZVwiXG4gICAgICBbbW9kdWxlc109XCJjb25maWcubW9kdWxlc1wiXG4gICAgICBbZGVidWddPVwiY29uZmlnLmRlYnVnXCJcbiAgICAgIFtmb3JtYXRzXT1cImNvbmZpZy5mb3JtYXRzXCJcbiAgICAgIFtjdXN0b21Ub29sYmFyUG9zaXRpb25dPVwiY29uZmlnLmN1c3RvbVRvb2xiYXJQb3NpdGlvblwiXG4gICAgICBbc2FuaXRpemVdPVwiY29uZmlnLnNhbml0aXplXCJcbiAgICAgIFtzdHlsZXNdPVwiY29uZmlnLnN0eWxlc1wiXG4gICAgICBbc3RyaWN0XT1cImNvbmZpZy5zdHJpY3RcIlxuICAgICAgW3Njcm9sbGluZ0NvbnRhaW5lcl09XCJjb25maWcuc2Nyb2xsaW5nQ29udGFpbmVyXCJcbiAgICAgIFtib3VuZHNdPVwiY29uZmlnLmJvdW5kc1wiXG4gICAgICBbY3VzdG9tT3B0aW9uc109XCJjb25maWcuY3VzdG9tT3B0aW9uc1wiXG4gICAgICBbY3VzdG9tTW9kdWxlc109XCJjb25maWcuY3VzdG9tTW9kdWxlc1wiXG4gICAgICBbdHJhY2tDaGFuZ2VzXT1cImNvbmZpZy50cmFja0NoYW5nZXNcIlxuICAgICAgW3ByZXNlcnZlV2hpdGVzcGFjZV09XCJjb25maWcucHJlc2VydmVXaGl0ZXNwYWNlXCJcbiAgICAgIFtjbGFzc2VzXT1cImNvbmZpZy5jbGFzc2VzXCJcbiAgICAgIFt0cmltT25WYWxpZGF0aW9uXT1cImNvbmZpZy50cmltT25WYWxpZGF0aW9uXCJcbiAgICAgIFtsaW5rUGxhY2Vob2xkZXJdPVwiY29uZmlnLmxpbmtQbGFjZWhvbGRlclwiXG4gICAgICBbY29tcGFyZVZhbHVlc109XCJjb25maWcuY29tcGFyZVZhbHVlc1wiXG4gICAgICBbZmlsdGVyTnVsbF09XCJjb25maWcuZmlsdGVyTnVsbFwiXG4gICAgICBbZGVib3VuY2VUaW1lXT1cImNvbmZpZy5kZWJvdW5jZVRpbWVcIlxuICAgICAgW2NsYXNzLmNhbi1yZXNpemVdPVwicmVzaXphYmxlXCJcbiAgICAgIChvbkVkaXRvckNyZWF0ZWQpPVwiX29uRWRpdG9yQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIChvbkVkaXRvckNoYW5nZWQpPVwiX29uRWRpdG9yQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKT1cIl9vbkNvbnRlbnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJfb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgKG9uRm9jdXMpPVwiX29uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAob25CbHVyKT1cIl9vbkJsdXIoJGV2ZW50KVwiPjwvcXVpbGwtZWRpdG9yPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5Q2hhcmFjdGVyQ291bnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGFyYWN0ZXJDb3VudGVyVHBsXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGFyYWN0ZXJDb3VudCQgfCBhc3luYywgbWluTGVuZ3RoOiBtaW5MZW5ndGgsIG1heExlbmd0aDogbWF4TGVuZ3RoLCBjaGFyYWN0ZXJDb3VudDogY2hhcmFjdGVyQ291bnQkIHwgYXN5bmMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NoYXJhY3RlckNvdW50ZXIgbGV0LWltcGxpY2l0IGxldC1taW5MZW5ndGg9XCJtaW5MZW5ndGhcIiBsZXQtbWF4TGVuZ3RoPVwibWF4TGVuZ3RoXCIgbGV0LWNoYXJhY3RlckNvdW50PVwiY2hhcmFjdGVyQ291bnRcIj5cbiAgPGRpdiBjbGFzcz1cInNtYWxsIHRleHQtYmxhY2stNTAgdGV4dC1yaWdodFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFyYWN0ZXJDb3VudCB8fCBjaGFyYWN0ZXJDb3VudCA9PT0gMFwiPlxuICAgICAgQ2hhcmFjdGVyIENvdW50OlxuICAgICAgPHNwYW4gW2NsYXNzLnRleHQtZGFuZ2VyXT1cImNoYXJhY3RlckNvdW50ICYmICgobWF4TGVuZ3RoICYmIGNoYXJhY3RlckNvdW50ID4gbWF4TGVuZ3RoKSB8fCAobWluTGVuZ3RoICYmIGNoYXJhY3RlckNvdW50IDwgbWluTGVuZ3RoKSlcIj5cbiAgICAgICAge3sgY2hhcmFjdGVyQ291bnQgfCBudW1iZXIgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtYXhMZW5ndGhcIj5cbiAgICAgICAgLyB7eyBtYXhMZW5ndGggfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW4gKm5nSWY9XCJtaW5MZW5ndGhcIiBjbGFzcz1cImZvbnQtaXRhbGljXCI+XG4gICAgICAgIChtaW5pbXVtIHt7IG1pbkxlbmd0aCB9fSBleHBlY3RlZClcbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|