@fundamental-ngx/platform 0.48.0-rc.21 → 0.48.0-rc.23
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/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +6 -8
- package/esm2022/form/combobox/commons/base-combobox.mjs +6 -5
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +8 -8
- package/esm2022/form/form-generator/form-generator.service.mjs +8 -13
- package/esm2022/form/form-group/form-field/form-field.component.mjs +27 -29
- package/esm2022/form/form-group/form-group.component.mjs +37 -40
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +9 -8
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +10 -13
- package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
- package/esm2022/form/multi-input/base-multi-input.mjs +5 -4
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +4 -7
- package/esm2022/form/radio-group/radio-group.component.mjs +23 -24
- package/esm2022/form/select/commons/base-select.mjs +3 -3
- package/esm2022/form/step-input/base.step-input.mjs +25 -35
- package/esm2022/form/step-input/number/number-step-input.component.mjs +3 -3
- package/esm2022/form/step-input/step-input-action-button.mjs +6 -10
- package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +6 -8
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +10 -19
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +7 -9
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +7 -8
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +9 -20
- package/esm2022/list/list.component.mjs +7 -8
- package/esm2022/menu/menu.component.mjs +3 -4
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +8 -11
- package/esm2022/message-popover/message-popover.component.mjs +52 -53
- package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +3 -7
- package/esm2022/search-field/search-field.component.mjs +20 -21
- package/esm2022/settings-generator/settings-generator.service.mjs +9 -10
- package/esm2022/shared/form/base.input.mjs +7 -8
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +10 -15
- package/esm2022/split-menu-button/split-menu-button.component.mjs +7 -18
- package/esm2022/table/components/reset-button/reset-button.component.mjs +5 -6
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +6 -7
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +6 -8
- package/esm2022/table/components/table-group-row/table-group-row.component.mjs +3 -7
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +29 -13
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -11
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +5 -7
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +5 -8
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +4 -5
- package/esm2022/table/components/table-row/table-row.component.mjs +6 -13
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +34 -21
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +5 -8
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +6 -9
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +6 -9
- package/esm2022/table/table.component.mjs +39 -49
- package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +8 -10
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +6 -6
- package/esm2022/table-helpers/services/table-column-resize.service.mjs +14 -17
- package/esm2022/table-helpers/services/table-responsive.service.mjs +6 -11
- package/esm2022/table-helpers/services/table.service.mjs +20 -18
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +10 -18
- package/esm2022/wizard-generator/base-wizard-generator.mjs +12 -19
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +5 -4
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +7 -13
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +8 -7
- package/fesm2022/fundamental-ngx-platform-form.mjs +137 -174
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +24 -46
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +57 -60
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +21 -38
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +6 -8
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +9 -15
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +6 -17
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +42 -52
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +145 -157
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +9 -17
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +20 -33
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +2 -4
- package/form/form-generator/form-generator/form-generator.component.d.ts +1 -1
- package/form/form-generator/form-generator.service.d.ts +3 -7
- package/form/form-group/form-field/form-field.component.d.ts +12 -12
- package/form/form-group/form-group.component.d.ts +35 -31
- package/form/multi-combobox/commons/base-multi-combobox.d.ts +2 -2
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +3 -5
- package/form/multi-combobox/multi-combobox.interface.d.ts +3 -3
- package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -4
- package/form/radio-group/radio-group.component.d.ts +3 -3
- package/form/step-input/base.step-input.d.ts +5 -6
- package/form/step-input/step-input-action-button.d.ts +4 -7
- package/fundamental-ngx-platform-v0.48.0-rc.23.tgz +0 -0
- package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.d.ts +5 -8
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.d.ts +1 -1
- package/icon-tab-bar/icon-tab-bar.component.d.ts +4 -6
- package/list/list.component.d.ts +1 -3
- package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +2 -4
- package/message-popover/message-popover.component.d.ts +13 -20
- package/message-popover/models/message-popover-wrapper.interface.d.ts +2 -2
- package/package.json +4 -4
- package/search-field/search-field-mobile/search-field/search-field-mobile.component.d.ts +4 -6
- package/search-field/search-field.component.d.ts +6 -4
- package/settings-generator/settings-generator.service.d.ts +1 -1
- package/shared/form/base.input.d.ts +2 -2
- package/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.d.ts +4 -8
- package/split-menu-button/split-menu-button.component.d.ts +3 -8
- package/table/components/reset-button/reset-button.component.d.ts +2 -3
- package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +1 -2
- package/table/components/table-column-resizer/table-column-resizer.component.d.ts +1 -1
- package/table/components/table-group-row/table-group-row.component.d.ts +2 -5
- package/table/components/table-header-cell-content/table-header-cell-content.component.d.ts +11 -6
- package/table/components/table-header-row/table-header-row.component.d.ts +1 -1
- package/table/components/table-p13-dialog/columns/columns.component.d.ts +2 -4
- package/table/components/table-p13-dialog/filtering/filtering.component.d.ts +1 -4
- package/table/components/table-p13-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-p13-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/components/table-row/table-row.component.d.ts +2 -2
- package/table/components/table-toolbar/table-toolbar.component.d.ts +20 -7
- package/table/components/table-view-settings-dialog/filtering/filters.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/table.component.d.ts +4 -18
- package/table-helpers/directives/table-cell-header-popover.directive.d.ts +2 -3
- package/table-helpers/directives/table-cell-resizable.directive.d.ts +1 -1
- package/table-helpers/directives/table-data-source.directive.d.ts +1 -1
- package/table-helpers/services/table-column-resize.service.d.ts +2 -2
- package/table-helpers/services/table-responsive.service.d.ts +3 -5
- package/table-helpers/services/table.service.d.ts +12 -10
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +2 -1
- package/wizard-generator/base-wizard-generator.d.ts +4 -8
- package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +3 -7
- package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
- package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +0 -16
- package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
- package/search-field/search-field-mobile/search-field-mobile.module.d.ts +0 -7
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, Input, Output, QueryList, ViewChildren, ViewEncapsulation, inject } from '@angular/core';
|
|
2
2
|
import { FormGeneratorComponent, FormGeneratorService } from '@fundamental-ngx/platform/form';
|
|
3
3
|
import { isFunction } from '@fundamental-ngx/platform/shared';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { debounceTime
|
|
5
|
+
import { debounceTime } from 'rxjs/operators';
|
|
6
6
|
import { WizardGeneratorRefreshStrategy, WizardGeneratorService } from '../../wizard-generator.service';
|
|
7
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
8
|
import { TitleComponent } from '@fundamental-ngx/core/title';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../../wizard-generator.service";
|
|
@@ -44,7 +45,7 @@ export class WizardGeneratorStepComponent {
|
|
|
44
45
|
* @hidden
|
|
45
46
|
* An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)
|
|
46
47
|
*/
|
|
47
|
-
this.
|
|
48
|
+
this._destroyRef = inject(DestroyRef);
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
51
|
* @hidden
|
|
@@ -57,8 +58,6 @@ export class WizardGeneratorStepComponent {
|
|
|
57
58
|
*/
|
|
58
59
|
ngOnDestroy() {
|
|
59
60
|
this._wizardGeneratorService.removeWizardStepComponent(this.item.id);
|
|
60
|
-
this._onDestroy$.next();
|
|
61
|
-
this._onDestroy$.complete();
|
|
62
61
|
}
|
|
63
62
|
/** @hidden */
|
|
64
63
|
async ngOnChanges(changes) {
|
|
@@ -149,7 +148,9 @@ export class WizardGeneratorStepComponent {
|
|
|
149
148
|
const refreshSteps = strategies[WizardGeneratorRefreshStrategy.REFRESH_STEP_VISIBILITY] !== undefined;
|
|
150
149
|
const revalidateForms = strategies[WizardGeneratorRefreshStrategy.REVALIDATE_STEP_FORMS];
|
|
151
150
|
const refreshFormVisibility = strategies[WizardGeneratorRefreshStrategy.REFRESH_FORM_VISIBILITY];
|
|
152
|
-
control?.valueChanges
|
|
151
|
+
control?.valueChanges
|
|
152
|
+
.pipe(debounceTime(50), takeUntilDestroyed(this._destroyRef))
|
|
153
|
+
.subscribe(async () => {
|
|
153
154
|
if (refreshSteps) {
|
|
154
155
|
await this._wizardGeneratorService.refreshStepVisibility();
|
|
155
156
|
}
|
|
@@ -214,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
214
215
|
}], formsCreated: [{
|
|
215
216
|
type: Output
|
|
216
217
|
}] } });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWdlbmVyYXRvci1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd2l6YXJkLWdlbmVyYXRvci9jb21wb25lbnRzL3dpemFyZC1nZW5lcmF0b3Itc3RlcC93aXphcmQtZ2VuZXJhdG9yLXN0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWdlbmVyYXRvci1zdGVwL3dpemFyZC1nZW5lcmF0b3Itc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBRVQsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBR0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUV2QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekQsT0FBTyxFQUVILDhCQUE4QixFQUM5QixzQkFBc0IsRUFDekIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFVN0QsTUFBTSxPQUFPLDRCQUE0QjtJQXlFckMsY0FBYztJQUNkLFlBQ1ksdUJBQStDLEVBQy9DLHFCQUEyQztRQUQzQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBQy9DLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7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Q0FBQyxFQUFFLElBQUksQ0FBQztZQUU3QyxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDVCxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUM7YUFDM0Q7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUNwRDtJQUNMLENBQUM7OEdBL1BRLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHlSQUl2QixzQkFBc0IscUVDakR4QywyckJBa0JBLDRDRHlCYyxjQUFjLHVMQUFFLHNCQUFzQjs7MkZBRXZDLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDSSwyQkFBMkIsaUJBRXRCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDOzhIQU1YLGNBQWM7c0JBQW5ELFlBQVk7dUJBQUMsc0JBQXNCO2dCQU1wQyxJQUFJO3NCQURILEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFPTixjQUFjO3NCQURiLE1BQU07Z0JBT1AsWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaXphcmRTdGVwU3RhdHVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3dpemFyZCc7XG5cbmltcG9ydCB7XG4gICAgRHluYW1pY0Zvcm1Hcm91cCxcbiAgICBEeW5hbWljRm9ybVZhbHVlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybUdlbmVyYXRvclNlcnZpY2UsXG4gICAgU3VibWl0Rm9ybUV2ZW50UmVzdWx0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vZm9ybSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaXphcmRTdGVwRm9ybXMsIFdpemFyZFN0ZXBTdWJtaXR0ZWRGb3JtcyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvd2l6YXJkLWdlbmVyYXRvci1mb3Jtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgV2l6YXJkR2VuZXJhdG9ySXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvd2l6YXJkLWdlbmVyYXRvci1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaXphcmRHZW5lcmF0b3JTdGVwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtc3RlcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBEZXBlbmRlbmN5U3RlcHMsXG4gICAgV2l6YXJkR2VuZXJhdG9yUmVmcmVzaFN0cmF0ZWd5LFxuICAgIFdpemFyZEdlbmVyYXRvclNlcnZpY2Vcbn0gZnJvbSAnLi4vLi4vd2l6YXJkLWdlbmVyYXRvci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC13aXphcmQtZ2VuZXJhdG9yLXN0ZXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi93aXphcmQtZ2VuZXJhdG9yLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGl0bGVDb21wb25lbnQsIEZvcm1HZW5lcmF0b3JDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFdpemFyZEdlbmVyYXRvclN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBXaXphcmRHZW5lcmF0b3JTdGVwLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU3RlcCBGb3JtIEdlbmVyYXRvciBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oRm9ybUdlbmVyYXRvckNvbXBvbmVudCkgZm9ybUdlbmVyYXRvcnM6IFF1ZXJ5TGlzdDxGb3JtR2VuZXJhdG9yQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHN0ZXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpdGVtOiBXaXphcmRHZW5lcmF0b3JJdGVtO1xuXG4gICAgLyoqXG4gICAgICogV2l6YXJkIHN0ZXAgc3RhdHVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RlcFN0YXR1czogV2l6YXJkU3RlcFN0YXR1cztcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBmb3JtIGl0ZW1zIHNob3VsZCBoYXZlIGlkZW50aWNhbCBsYXlvdXQgcHJvdmlkZWQgZm9yIGZvcm0gZ3JvdXAuICovXG4gICAgQElucHV0KClcbiAgICB1bmlmaWVkTGF5b3V0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0cyB3aGVuIGFsbCBmb3JtcyBpbiB0aGUgc3RlcCBoYXMgYmVlbiBzdWJtaXRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1zU3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybVZhbHVlW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdHMgd2hlbiBhbGwgZm9ybXMgaW4gdGhlIHN0ZXAgaGFzIGJlZW4gY3JlYXRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1zQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcEZvcm1zPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3N1Ym1pdHRlZEZvcm1zOiBXaXphcmRTdGVwU3VibWl0dGVkRm9ybXMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtU3VibWl0dGVkJCA9IG5ldyBTdWJqZWN0PFdpemFyZFN0ZXBTdWJtaXR0ZWRGb3JtcyB8IG51bGw+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9ybXM6IFdpemFyZFN0ZXBGb3JtcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3RyYWNrZWRGaWVsZHM6IERlcGVuZGVuY3lTdGVwcztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfdmlzaWJsZUZvcm1Hcm91cElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9oaWRkZW5Gb3JtR3JvdXBWYWx1ZXM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF93aXphcmRHZW5lcmF0b3JTZXJ2aWNlOiBXaXphcmRHZW5lcmF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mb3JtR2VuZXJhdG9yU2VydmljZTogRm9ybUdlbmVyYXRvclNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm1zVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5yZW1vdmVXaXphcmRTdGVwQ29tcG9uZW50KHRoaXMuaXRlbS5pZCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnN0ZXBTdGF0dXMgJiYgY2hhbmdlcy5zdGVwU3RhdHVzLmN1cnJlbnRWYWx1ZSA9PT0gJ2N1cnJlbnQnICYmIHRoaXMuZm9ybUdlbmVyYXRvcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRm9ybXNTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgY3JlYXRlZCBmb3JtIGluc3RhbmNlIHRvIHRoZSBvYmplY3Qgb2YgdGhlIGZvcm1zLlxuICAgICAqIEBwYXJhbSBmb3JtIEZvcm0gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ga2V5IEZvcm0gSUQgZnJvbSBAc2VlIGl0ZW1cbiAgICAgKi9cbiAgICBhc3luYyBvbkZvcm1DcmVhdGVkKGZvcm06IER5bmFtaWNGb3JtR3JvdXAsIGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2Zvcm1zW2tleV0gPSB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5pdGVtLmZvcm1Hcm91cHM/LmZpbmQoKGcpID0+IGcuaWQgPT09IGtleSk/LnRpdGxlID8/ICcnLFxuICAgICAgICAgICAgZm9ybVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UucmVmcmVzaFN0ZXBWaXNpYmlsaXR5KCk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX2Zvcm1zKS5sZW5ndGggPT09IHRoaXMuaXRlbS5mb3JtR3JvdXBzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkQ29tcG9uZW50VG9QYXJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybXNDcmVhdGVkLmVtaXQodGhpcy5fZm9ybXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hpZGRlbkZvcm1Hcm91cFZhbHVlc1trZXldKSB7XG4gICAgICAgICAgICBmb3JtPy5wYXRjaFZhbHVlKHRoaXMuX2hpZGRlbkZvcm1Hcm91cFZhbHVlc1trZXldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RyYWNrRGVwZW5kZW5jeUZpZWxkc0NoYW5nZXMoZm9ybSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkcyBjb21wb25lbnQgdG8gdGhlIHNlcnZpY2UgZm9yIGZ1cnRoZXIgdXNhZ2UuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQ29tcG9uZW50VG9QYXJlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UuYWRkV2l6YXJkU3RlcENvbXBvbmVudCh0aGlzLCB0aGlzLml0ZW0uaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsYmFjayBmdW5jdGlvbiB3aGVuIGZvcm0gaGFzIGJlZW4gc3VibWl0dGVkLlxuICAgICAqIEBwYXJhbSByZXN1bHQgRm9ybSBzdWJtaXNzaW9uIHJlc3VsdC5cbiAgICAgKiBAcGFyYW0gaW5kZXggRm9ybSBpbmRleCBpbiB0aGUgc3RlcC5cbiAgICAgKi9cbiAgICBvbkZvcm1TdWJtaXR0ZWQocmVzdWx0OiBTdWJtaXRGb3JtRXZlbnRSZXN1bHQsIGluZGV4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3VibWl0dGVkRm9ybXNbaW5kZXhdID0gcmVzdWx0O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zdWJtaXR0ZWRGb3JtcykubGVuZ3RoID09PSB0aGlzLmZvcm1HZW5lcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gTGFzdCBmb3JtIHN1Ym1pc3Npb24uIFNlbmQgZGF0YSBiYWNrIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgICAgICAgICAgdGhpcy5fZm9ybVN1Ym1pdHRlZCQubmV4dCh0aGlzLl9zdWJtaXR0ZWRGb3Jtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHZpc2libGUgZm9ybXMgaW4gdGhlIHN0ZXAuXG4gICAgICovXG4gICAgZ2V0VmlzaWJsZUZvcm1zKCk6IFdpemFyZFN0ZXBGb3JtcyB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9mb3JtcykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVGb3JtR3JvdXBJZHNba2V5XSB8fCB0aGlzLl92aXNpYmxlRm9ybUdyb3VwSWRzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdGhpcy5fZm9ybXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIHByZXZpb3VzbHkgc3VibWl0dGVkIGZvcm0gdmFsdWVzIGFuZCByZS1zdWJtaXQgdGhlbSBhZ2Fpbi5cbiAgICAgKiBAcmV0dXJucyBTdWJqZWN0LCB3aGljaCB3aWxsIHJldHVybiBmb3JtcyB2YWx1ZS5cbiAgICAgKi9cbiAgICBzdWJtaXRGb3Jtcyhza2lwSWZVbnRvdWNoZWQgPSBmYWxzZSk6IFN1YmplY3Q8V2l6YXJkU3RlcFN1Ym1pdHRlZEZvcm1zIHwgbnVsbD4ge1xuICAgICAgICBpZiAoc2tpcElmVW50b3VjaGVkICYmICF0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLnN0ZXBTdWJtaXR0ZWQodGhpcy5pdGVtLmlkKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybVN1Ym1pdHRlZCQubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1TdWJtaXR0ZWQkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXNseSBzdWJtaXR0ZWQgZm9ybSB2YWx1ZXMgYW5kIHJlLXN1Ym1pdCB0aGVtIGFnYWluLlxuICAgICAgICB0aGlzLl9zdWJtaXR0ZWRGb3JtcyA9IHt9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtR2VuZXJhdG9ycy5mb3JFYWNoKChmb3JtQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvbXBvbmVudC5zdWJtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybVN1Ym1pdHRlZCQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBkZXNjcmlwdGlvbiBLZWVwcyB0cmFjayBvbiBkZXBlbmRlbmN5IGZpZWxkcyBmb3Igb3RoZXIgc3RlcHMgYW5kIHJlZnJlc2hlcyB0aGUgdmlldyB3aGVuIHRoZXkgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0gZm9ybVxuICAgICAqIEBwYXJhbSBrZXlcbiAgICAgKi9cbiAgICBwcml2YXRlIF90cmFja0RlcGVuZGVuY3lGaWVsZHNDaGFuZ2VzKGZvcm06IER5bmFtaWNGb3JtR3JvdXAsIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyYWNrZWRGaWVsZHMgPSB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLmdldFN0ZXBEZXBlbmRlbmN5RmllbGRzKHRoaXMuaXRlbS5pZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrZWRGaWVsZHMgJiYgdGhpcy5fdHJhY2tlZEZpZWxkc1trZXldKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLl90cmFja2VkRmllbGRzW2tleV0pLmZvckVhY2goKFtmaWVsZElkLCBzdHJhdGVnaWVzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9mb3JtR2VuZXJhdG9yU2VydmljZS5nZXRGb3JtQ29udHJvbChmb3JtLCBmaWVsZElkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hTdGVwcyA9IHN0cmF0ZWdpZXNbV2l6YXJkR2VuZXJhdG9yUmVmcmVzaFN0cmF0ZWd5LlJFRlJFU0hfU1RFUF9WSVNJQklMSVRZXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldmFsaWRhdGVGb3JtcyA9IHN0cmF0ZWdpZXNbV2l6YXJkR2VuZXJhdG9yUmVmcmVzaFN0cmF0ZWd5LlJFVkFMSURBVEVfU1RFUF9GT1JNU107XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvcm1WaXNpYmlsaXR5ID0gc3RyYXRlZ2llc1tXaXphcmRHZW5lcmF0b3JSZWZyZXNoU3RyYXRlZ3kuUkVGUkVTSF9GT1JNX1ZJU0lCSUxJVFldO1xuXG4gICAgICAgICAgICAgICAgY29udHJvbD8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDUwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaFN0ZXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLnJlZnJlc2hTdGVwVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdGVGb3Jtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLm5vdGlmeVN0ZXBzVG9SZXZhbGlkYXRlRm9ybXMocmV2YWxpZGF0ZUZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZyZXNoRm9ybVZpc2liaWxpdHk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5yZWZyZXNoRm9ybXNWaXNpYmlsaXR5KHJlZnJlc2hGb3JtVmlzaWJpbGl0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgZm9ybSB2YWx1ZSByZXZhbGlkYXRpb24gYW5kIGNoZWNrcyBpZiBmaWVsZCBpbiBmb3JtIHNob3VsZCBiZSB2aXNpYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZUZvcm1zU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1HZW5lcmF0b3JzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZvcm1HZW5lcmF0b3Igb2YgdGhpcy5mb3JtR2VuZXJhdG9ycy50b0FycmF5KCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmb3JtR2VuZXJhdG9yLnJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyBzdGVwIGZvcm0gZ3JvdXAgdmlzaWJpbGl0eS5cbiAgICAgKi9cbiAgICBhc3luYyByZWZyZXNoRm9ybXNWaXNpYmlsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl92aXNpYmxlRm9ybUdyb3VwSWRzID0ge307XG5cbiAgICAgICAgaWYgKCF0aGlzLml0ZW0uZm9ybUdyb3Vwcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBmb3JtR3JvdXAgb2YgdGhpcy5pdGVtLmZvcm1Hcm91cHMuZmlsdGVyKChmZykgPT4gaXNGdW5jdGlvbihmZy53aGVuKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UucmVmcmVzaEZvcm1WaXNpYmlsaXR5KGZvcm1Hcm91cCk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRoaXMuX3Zpc2libGVGb3JtR3JvdXBJZHNbZm9ybUdyb3VwLmlkXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX2Zvcm1zW2Zvcm1Hcm91cC5pZF0/LmZvcm07XG5cbiAgICAgICAgICAgIC8vIFN0b3JlIGZvcm0gdmFsdWUgc28gaXQgY291bGQgYmUgcmVzdG9yZWQgbGF0ZXIuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGRlbkZvcm1Hcm91cFZhbHVlc1tmb3JtR3JvdXAuaWRdID0gZm9ybT8udmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Zpc2libGVGb3JtR3JvdXBJZHNbZm9ybUdyb3VwLmlkXSA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAoaXRlbS50aXRsZSkge1xuICAgIDxoMyBmZC10aXRsZT57eyBpdGVtLnRpdGxlIH19PC9oMz5cbn1cbkBmb3IgKGZvcm0gb2YgaXRlbS5mb3JtR3JvdXBzOyB0cmFjayBmb3JtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgIEBpZiAoX3Zpc2libGVGb3JtR3JvdXBJZHNbZm9ybS5pZF0gIT09IGZhbHNlKSB7XG4gICAgICAgIDxmZHAtZm9ybS1nZW5lcmF0b3JcbiAgICAgICAgICAgIFttYWluVGl0bGVdPVwiZm9ybS50aXRsZVwiXG4gICAgICAgICAgICBbY29sdW1uTGF5b3V0XT1cImZvcm0uY29sdW1uTGF5b3V0XCJcbiAgICAgICAgICAgIFtub0FkZGl0aW9uYWxDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm0uaWRcIlxuICAgICAgICAgICAgW2Zvcm1JdGVtc109XCIkYW55KGZvcm0uZm9ybUl0ZW1zKVwiXG4gICAgICAgICAgICBbaGludF09XCJmb3JtLmd1aU9wdGlvbnM/LmhpbnQhXCJcbiAgICAgICAgICAgIFt1bmlmaWVkTGF5b3V0XT1cInVuaWZpZWRMYXlvdXRcIlxuICAgICAgICAgICAgKGZvcm1DcmVhdGVkKT1cIm9uRm9ybUNyZWF0ZWQoJGV2ZW50LCBmb3JtLmlkKVwiXG4gICAgICAgICAgICAoZm9ybVN1Ym1pdHRlZFN0YXR1cyk9XCJvbkZvcm1TdWJtaXR0ZWQoJGV2ZW50LCBmb3JtLmlkKVwiXG4gICAgICAgID48L2ZkcC1mb3JtLWdlbmVyYXRvcj5cbiAgICB9XG59XG4iXX0=
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWdlbmVyYXRvci1zdGVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vd2l6YXJkLWdlbmVyYXRvci9jb21wb25lbnRzL3dpemFyZC1nZW5lcmF0b3Itc3RlcC93aXphcmQtZ2VuZXJhdG9yLXN0ZXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS93aXphcmQtZ2VuZXJhdG9yL2NvbXBvbmVudHMvd2l6YXJkLWdlbmVyYXRvci1zdGVwL3dpemFyZC1nZW5lcmF0b3Itc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFHSCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBRXZCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTlDLE9BQU8sRUFFSCw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBVTdELE1BQU0sT0FBTyw0QkFBNEI7SUF5RXJDLGNBQWM7SUFDZCxZQUNZLHVCQUErQyxFQUMvQyxxQkFBMkM7UUFEM0MsNEJB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QUM7WUFFN0Msa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDO2FBQzNEO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDcEQ7SUFDTCxDQUFDOzhHQS9QUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix5UkFJdkIsc0JBQXNCLHFFQ3BEeEMsMnJCQWtCQSw0Q0Q0QmMsY0FBYyx1TEFBRSxzQkFBc0I7OzJGQUV2Qyw0QkFBNEI7a0JBUnhDLFNBQVM7K0JBQ0ksMkJBQTJCLGlCQUV0QixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQzs4SEFNWCxjQUFjO3NCQUFuRCxZQUFZO3VCQUFDLHNCQUFzQjtnQkFNcEMsSUFBSTtzQkFESCxLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sY0FBYztzQkFEYixNQUFNO2dCQU9QLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2l6YXJkU3RlcFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS93aXphcmQnO1xuXG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtR3JvdXAsXG4gICAgRHluYW1pY0Zvcm1WYWx1ZSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgIFN1Ym1pdEZvcm1FdmVudFJlc3VsdFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL2Zvcm0nO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpemFyZFN0ZXBGb3JtcywgV2l6YXJkU3RlcFN1Ym1pdHRlZEZvcm1zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtZ2VuZXJhdG9yLWZvcm1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXaXphcmRHZW5lcmF0b3JJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aXphcmQtZ2VuZXJhdG9yLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFdpemFyZEdlbmVyYXRvclN0ZXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3dpemFyZC1zdGVwLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICAgIERlcGVuZGVuY3lTdGVwcyxcbiAgICBXaXphcmRHZW5lcmF0b3JSZWZyZXNoU3RyYXRlZ3ksXG4gICAgV2l6YXJkR2VuZXJhdG9yU2VydmljZVxufSBmcm9tICcuLi8uLi93aXphcmQtZ2VuZXJhdG9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aXRsZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXdpemFyZC1nZW5lcmF0b3Itc3RlcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC1nZW5lcmF0b3Itc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtUaXRsZUNvbXBvbmVudCwgRm9ybUdlbmVyYXRvckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgV2l6YXJkR2VuZXJhdG9yU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIFdpemFyZEdlbmVyYXRvclN0ZXAsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTdGVwIEZvcm0gR2VuZXJhdG9yIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihGb3JtR2VuZXJhdG9yQ29tcG9uZW50KSBmb3JtR2VuZXJhdG9yczogUXVlcnlMaXN0PEZvcm1HZW5lcmF0b3JDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc3RlcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW06IFdpemFyZEdlbmVyYXRvckl0ZW07XG5cbiAgICAvKipcbiAgICAgKiBXaXphcmQgc3RlcCBzdGF0dXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGVwU3RhdHVzOiBXaXphcmRTdGVwU3RhdHVzO1xuXG4gICAgLyoqIFdoZXRoZXIgYWxsIGZvcm0gaXRlbXMgc2hvdWxkIGhhdmUgaWRlbnRpY2FsIGxheW91dCBwcm92aWRlZCBmb3IgZm9ybSBncm91cC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVuaWZpZWRMYXlvdXQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRzIHdoZW4gYWxsIGZvcm1zIGluIHRoZSBzdGVwIGhhcyBiZWVuIHN1Ym1pdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybXNTdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtVmFsdWVbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0cyB3aGVuIGFsbCBmb3JtcyBpbiB0aGUgc3RlcCBoYXMgYmVlbiBjcmVhdGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybXNDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwRm9ybXM+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc3VibWl0dGVkRm9ybXM6IFdpemFyZFN0ZXBTdWJtaXR0ZWRGb3JtcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1TdWJtaXR0ZWQkID0gbmV3IFN1YmplY3Q8V2l6YXJkU3RlcFN1Ym1pdHRlZEZvcm1zIHwgbnVsbD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtczogV2l6YXJkU3RlcEZvcm1zID0ge307XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHJhY2tlZEZpZWxkczogRGVwZW5kZW5jeVN0ZXBzO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF92aXNpYmxlRm9ybUdyb3VwSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGRlbkZvcm1Hcm91cFZhbHVlczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfd2l6YXJkR2VuZXJhdG9yU2VydmljZTogV2l6YXJkR2VuZXJhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZm9ybUdlbmVyYXRvclNlcnZpY2U6IEZvcm1HZW5lcmF0b3JTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3Jtc1Zpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UucmVtb3ZlV2l6YXJkU3RlcENvbXBvbmVudCh0aGlzLml0ZW0uaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoY2hhbmdlcy5zdGVwU3RhdHVzICYmIGNoYW5nZXMuc3RlcFN0YXR1cy5jdXJyZW50VmFsdWUgPT09ICdjdXJyZW50JyAmJiB0aGlzLmZvcm1HZW5lcmF0b3JzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZvcm1zU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBZGRzIGNyZWF0ZWQgZm9ybSBpbnN0YW5jZSB0byB0aGUgb2JqZWN0IG9mIHRoZSBmb3Jtcy5cbiAgICAgKiBAcGFyYW0gZm9ybSBGb3JtIGluc3RhbmNlXG4gICAgICogQHBhcmFtIGtleSBGb3JtIElEIGZyb20gQHNlZSBpdGVtXG4gICAgICovXG4gICAgYXN5bmMgb25Gb3JtQ3JlYXRlZChmb3JtOiBEeW5hbWljRm9ybUdyb3VwLCBrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9mb3Jtc1trZXldID0ge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXRlbS5mb3JtR3JvdXBzPy5maW5kKChnKSA9PiBnLmlkID09PSBrZXkpPy50aXRsZSA/PyAnJyxcbiAgICAgICAgICAgIGZvcm1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLnJlZnJlc2hTdGVwVmlzaWJpbGl0eSgpO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9mb3JtcykubGVuZ3RoID09PSB0aGlzLml0ZW0uZm9ybUdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZENvbXBvbmVudFRvUGFyZW50KCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1zQ3JlYXRlZC5lbWl0KHRoaXMuX2Zvcm1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9oaWRkZW5Gb3JtR3JvdXBWYWx1ZXNba2V5XSkge1xuICAgICAgICAgICAgZm9ybT8ucGF0Y2hWYWx1ZSh0aGlzLl9oaWRkZW5Gb3JtR3JvdXBWYWx1ZXNba2V5XSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFja0RlcGVuZGVuY3lGaWVsZHNDaGFuZ2VzKGZvcm0sIGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFkZHMgY29tcG9uZW50IHRvIHRoZSBzZXJ2aWNlIGZvciBmdXJ0aGVyIHVzYWdlLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZENvbXBvbmVudFRvUGFyZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLmFkZFdpemFyZFN0ZXBDb21wb25lbnQodGhpcywgdGhpcy5pdGVtLmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBmb3JtIGhhcyBiZWVuIHN1Ym1pdHRlZC5cbiAgICAgKiBAcGFyYW0gcmVzdWx0IEZvcm0gc3VibWlzc2lvbiByZXN1bHQuXG4gICAgICogQHBhcmFtIGluZGV4IEZvcm0gaW5kZXggaW4gdGhlIHN0ZXAuXG4gICAgICovXG4gICAgb25Gb3JtU3VibWl0dGVkKHJlc3VsdDogU3VibWl0Rm9ybUV2ZW50UmVzdWx0LCBpbmRleDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Ym1pdHRlZEZvcm1zW2luZGV4XSA9IHJlc3VsdDtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fc3VibWl0dGVkRm9ybXMpLmxlbmd0aCA9PT0gdGhpcy5mb3JtR2VuZXJhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIExhc3QgZm9ybSBzdWJtaXNzaW9uLiBTZW5kIGRhdGEgYmFjayB0byB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICAgICAgICAgIHRoaXMuX2Zvcm1TdWJtaXR0ZWQkLm5leHQodGhpcy5fc3VibWl0dGVkRm9ybXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB2aXNpYmxlIGZvcm1zIGluIHRoZSBzdGVwLlxuICAgICAqL1xuICAgIGdldFZpc2libGVGb3JtcygpOiBXaXphcmRTdGVwRm9ybXMge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZm9ybXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlRm9ybUdyb3VwSWRzW2tleV0gfHwgdGhpcy5fdmlzaWJsZUZvcm1Hcm91cElkc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHRoaXMuX2Zvcm1zW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENsZWFycyBwcmV2aW91c2x5IHN1Ym1pdHRlZCBmb3JtIHZhbHVlcyBhbmQgcmUtc3VibWl0IHRoZW0gYWdhaW4uXG4gICAgICogQHJldHVybnMgU3ViamVjdCwgd2hpY2ggd2lsbCByZXR1cm4gZm9ybXMgdmFsdWUuXG4gICAgICovXG4gICAgc3VibWl0Rm9ybXMoc2tpcElmVW50b3VjaGVkID0gZmFsc2UpOiBTdWJqZWN0PFdpemFyZFN0ZXBTdWJtaXR0ZWRGb3JtcyB8IG51bGw+IHtcbiAgICAgICAgaWYgKHNraXBJZlVudG91Y2hlZCAmJiAhdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5zdGVwU3VibWl0dGVkKHRoaXMuaXRlbS5pZCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1TdWJtaXR0ZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtU3VibWl0dGVkJDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIHByZXZpb3VzbHkgc3VibWl0dGVkIGZvcm0gdmFsdWVzIGFuZCByZS1zdWJtaXQgdGhlbSBhZ2Fpbi5cbiAgICAgICAgdGhpcy5fc3VibWl0dGVkRm9ybXMgPSB7fTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvcnMuZm9yRWFjaCgoZm9ybUNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db21wb25lbnQuc3VibWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1TdWJtaXR0ZWQkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAZGVzY3JpcHRpb24gS2VlcHMgdHJhY2sgb24gZGVwZW5kZW5jeSBmaWVsZHMgZm9yIG90aGVyIHN0ZXBzIGFuZCByZWZyZXNoZXMgdGhlIHZpZXcgd2hlbiB0aGV5IGNoYW5nZWQuXG4gICAgICogQHBhcmFtIGZvcm1cbiAgICAgKiBAcGFyYW0ga2V5XG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHJhY2tEZXBlbmRlbmN5RmllbGRzQ2hhbmdlcyhmb3JtOiBEeW5hbWljRm9ybUdyb3VwLCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90cmFja2VkRmllbGRzID0gdGhpcy5fd2l6YXJkR2VuZXJhdG9yU2VydmljZS5nZXRTdGVwRGVwZW5kZW5jeUZpZWxkcyh0aGlzLml0ZW0uaWQpO1xuXG4gICAgICAgIGlmICh0aGlzLl90cmFja2VkRmllbGRzICYmIHRoaXMuX3RyYWNrZWRGaWVsZHNba2V5XSkge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5fdHJhY2tlZEZpZWxkc1trZXldKS5mb3JFYWNoKChbZmllbGRJZCwgc3RyYXRlZ2llc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybUdlbmVyYXRvclNlcnZpY2UuZ2V0Rm9ybUNvbnRyb2woZm9ybSwgZmllbGRJZCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoU3RlcHMgPSBzdHJhdGVnaWVzW1dpemFyZEdlbmVyYXRvclJlZnJlc2hTdHJhdGVneS5SRUZSRVNIX1NURVBfVklTSUJJTElUWV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXZhbGlkYXRlRm9ybXMgPSBzdHJhdGVnaWVzW1dpemFyZEdlbmVyYXRvclJlZnJlc2hTdHJhdGVneS5SRVZBTElEQVRFX1NURVBfRk9STVNdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hGb3JtVmlzaWJpbGl0eSA9IHN0cmF0ZWdpZXNbV2l6YXJkR2VuZXJhdG9yUmVmcmVzaFN0cmF0ZWd5LlJFRlJFU0hfRk9STV9WSVNJQklMSVRZXTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2w/LnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnJlc2hTdGVwcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2UucmVmcmVzaFN0ZXBWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlRm9ybXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpemFyZEdlbmVyYXRvclNlcnZpY2Uubm90aWZ5U3RlcHNUb1JldmFsaWRhdGVGb3JtcyhyZXZhbGlkYXRlRm9ybXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaEZvcm1WaXNpYmlsaXR5Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLnJlZnJlc2hGb3Jtc1Zpc2liaWxpdHkocmVmcmVzaEZvcm1WaXNpYmlsaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGZvcm0gdmFsdWUgcmV2YWxpZGF0aW9uIGFuZCBjaGVja3MgaWYgZmllbGQgaW4gZm9ybSBzaG91bGQgYmUgdmlzaWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVGb3Jtc1N0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtR2VuZXJhdG9ycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmb3JtR2VuZXJhdG9yIG9mIHRoaXMuZm9ybUdlbmVyYXRvcnMudG9BcnJheSgpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZm9ybUdlbmVyYXRvci5yZWZyZXNoU3RlcHNWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgc3RlcCBmb3JtIGdyb3VwIHZpc2liaWxpdHkuXG4gICAgICovXG4gICAgYXN5bmMgcmVmcmVzaEZvcm1zVmlzaWJpbGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUZvcm1Hcm91cElkcyA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy5pdGVtLmZvcm1Hcm91cHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZm9ybUdyb3VwIG9mIHRoaXMuaXRlbS5mb3JtR3JvdXBzLmZpbHRlcigoZmcpID0+IGlzRnVuY3Rpb24oZmcud2hlbikpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl93aXphcmRHZW5lcmF0b3JTZXJ2aWNlLnJlZnJlc2hGb3JtVmlzaWJpbGl0eShmb3JtR3JvdXApO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB0aGlzLl92aXNpYmxlRm9ybUdyb3VwSWRzW2Zvcm1Hcm91cC5pZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9mb3Jtc1tmb3JtR3JvdXAuaWRdPy5mb3JtO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSBmb3JtIHZhbHVlIHNvIGl0IGNvdWxkIGJlIHJlc3RvcmVkIGxhdGVyLlxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRkZW5Gb3JtR3JvdXBWYWx1ZXNbZm9ybUdyb3VwLmlkXSA9IGZvcm0/LnZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlRm9ybUdyb3VwSWRzW2Zvcm1Hcm91cC5pZF0gPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGl0ZW0udGl0bGUpIHtcbiAgICA8aDMgZmQtdGl0bGU+e3sgaXRlbS50aXRsZSB9fTwvaDM+XG59XG5AZm9yIChmb3JtIG9mIGl0ZW0uZm9ybUdyb3VwczsgdHJhY2sgZm9ybTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICBAaWYgKF92aXNpYmxlRm9ybUdyb3VwSWRzW2Zvcm0uaWRdICE9PSBmYWxzZSkge1xuICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yXG4gICAgICAgICAgICBbbWFpblRpdGxlXT1cImZvcm0udGl0bGVcIlxuICAgICAgICAgICAgW2NvbHVtbkxheW91dF09XCJmb3JtLmNvbHVtbkxheW91dFwiXG4gICAgICAgICAgICBbbm9BZGRpdGlvbmFsQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmb3JtTmFtZV09XCJmb3JtLmlkXCJcbiAgICAgICAgICAgIFtmb3JtSXRlbXNdPVwiJGFueShmb3JtLmZvcm1JdGVtcylcIlxuICAgICAgICAgICAgW2hpbnRdPVwiZm9ybS5ndWlPcHRpb25zPy5oaW50IVwiXG4gICAgICAgICAgICBbdW5pZmllZExheW91dF09XCJ1bmlmaWVkTGF5b3V0XCJcbiAgICAgICAgICAgIChmb3JtQ3JlYXRlZCk9XCJvbkZvcm1DcmVhdGVkKCRldmVudCwgZm9ybS5pZClcIlxuICAgICAgICAgICAgKGZvcm1TdWJtaXR0ZWRTdGF0dXMpPVwib25Gb3JtU3VibWl0dGVkKCRldmVudCwgZm9ybS5pZClcIlxuICAgICAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3I+XG4gICAgfVxufVxuIl19
|