@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
|
@@ -4,9 +4,10 @@ import { DOWN_ARROW, ENTER, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
|
|
|
4
4
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Host, HostListener, Inject, Input, Optional, Output, QueryList, Self, SkipSelf, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';
|
|
5
5
|
import { ControlContainer, NgControl, NgForm } from '@angular/forms';
|
|
6
6
|
import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
|
|
7
|
-
import { BehaviorSubject, Observable,
|
|
8
|
-
import { delay,
|
|
7
|
+
import { BehaviorSubject, Observable, asyncScheduler, filter, firstValueFrom, isObservable, map, observeOn, of, startWith, switchMap } from 'rxjs';
|
|
8
|
+
import { delay, tap } from 'rxjs/operators';
|
|
9
9
|
import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
|
|
10
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
11
|
import { KeyUtil, RepeatDirective } from '@fundamental-ngx/cdk/utils';
|
|
11
12
|
import { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';
|
|
12
13
|
import { InfiniteScrollDirective } from '@fundamental-ngx/core/infinite-scroll';
|
|
@@ -149,8 +150,6 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
149
150
|
/** @hidden */
|
|
150
151
|
this._items = [];
|
|
151
152
|
/** @hidden */
|
|
152
|
-
this._destroyed = new Subject();
|
|
153
|
-
/** @hidden */
|
|
154
153
|
this._ariaSetSize = new Observable();
|
|
155
154
|
/** @hidden */
|
|
156
155
|
this._translationResolver = new TranslationResolver();
|
|
@@ -257,7 +256,7 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
257
256
|
this._multiSelect = false;
|
|
258
257
|
}
|
|
259
258
|
this._selectionModel = new SelectionModel(this._multiSelect, this.selectedItems);
|
|
260
|
-
this._selectionModel.changed.pipe(
|
|
259
|
+
this._selectionModel.changed.pipe(takeUntilDestroyed(this._destroyed)).subscribe(() => {
|
|
261
260
|
this.selectedItems = this._selectionModel.selected;
|
|
262
261
|
const event = new SelectionChangeEvent();
|
|
263
262
|
event.selectedItems = this.selectedItems;
|
|
@@ -349,7 +348,7 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
349
348
|
}
|
|
350
349
|
this.loadingLabel = this._translationResolver.resolve(this._language, 'platformList.loadingAriaLabel');
|
|
351
350
|
await this._liveAnnouncer.announce(this.loadingLabel, 'assertive');
|
|
352
|
-
}), delay(this.delayTime),
|
|
351
|
+
}), delay(this.delayTime), takeUntilDestroyed(this._destroyed))
|
|
353
352
|
.subscribe((result) => {
|
|
354
353
|
if (isPresent(result)) {
|
|
355
354
|
for (let i = this._items.length, j = 0; j < result.length; ++i, ++j) {
|
|
@@ -438,7 +437,7 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
438
437
|
.open()
|
|
439
438
|
.pipe(
|
|
440
439
|
// Set new items when component is fully initiated and all child components are available.
|
|
441
|
-
this._waitForViewInit(),
|
|
440
|
+
this._waitForViewInit(), takeUntilDestroyed(this._destroyed))
|
|
442
441
|
.subscribe((data) => {
|
|
443
442
|
this._dsItems = data || [];
|
|
444
443
|
this.stateChanges.next(this._dsItems);
|
|
@@ -749,4 +748,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
|
|
|
749
748
|
type: HostListener,
|
|
750
749
|
args: ['click', ['$event']]
|
|
751
750
|
}] } });
|
|
752
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hGLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsT0FBTyxFQUVQLGNBQWMsRUFDZCxNQUFNLEVBQ04sY0FBYyxFQUNkLFlBQVksRUFDWixHQUFHLEVBQ0gsU0FBUyxFQUNULEVBQUUsRUFDRixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLEtBQUss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QUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBVU4sYUFBYTtzQkFEWixLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFXRixZQUFZO3NCQURmLEtBQUs7Z0JBa0JGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixTQUFTO3NCQURaLEtBQUs7Z0JBa0JGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQVlOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLE1BQU07c0JBREwsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt2QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFLM0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLHdCQUF3QjtnQkFLdEMsU0FBUztzQkFEUixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBZ0p0RSxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyLCBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIE9ic2VydmFibGUsXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpcHRpb24sXG4gICAgYXN5bmNTY2hlZHVsZXIsXG4gICAgZmlsdGVyLFxuICAgIGZpcnN0VmFsdWVGcm9tLFxuICAgIGlzT2JzZXJ2YWJsZSxcbiAgICBtYXAsXG4gICAgb2JzZXJ2ZU9uLFxuICAgIG9mLFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBLZXlVdGlsLCBOdWxsYWJsZSwgUmVwZWF0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHtcbiAgICBMaXN0Q29tcG9uZW50IGFzIENvcmVMaXN0Q29tcG9uZW50LFxuICAgIEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUixcbiAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICBMaXN0VW5yZWFkSW5kaWNhdG9yXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NrZWxldG9uJztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBGZFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHtcbiAgICBBcnJheUxpc3REYXRhU291cmNlLFxuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgTGlzdERhdGFTb3VyY2UsXG4gICAgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBpc0JsYW5rLFxuICAgIGlzRGF0YVNvdXJjZSxcbiAgICBpc1ByZXNlbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgQmFzZUxpc3RJdGVtLCBMSVNUX0lURU1fVFlQRSwgTGlzdEl0ZW1EZWYgfSBmcm9tICcuL2Jhc2UtbGlzdC1pdGVtJztcbmltcG9ydCB7IEZkcExpc3RDb21wb25lbnQgfSBmcm9tICcuL2ZkcExpc3RDb21wb25lbnQudG9rZW4nO1xuaW1wb3J0IHsgTGlzdENvbmZpZyB9IGZyb20gJy4vbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgTG9hZE1vcmVDb250ZW50Q29udGV4dCwgTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9sb2FkLW1vcmUtY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmRwTGlzdCwgRmRwTGlzdERhdGFTb3VyY2UsIExpc3RUeXBlLCBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbGlzdCc7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25DaGFuZ2VFdmVudCB7XG4gICAgLyoqIFNlbGVjdGVkIGl0ZW1zICovXG4gICAgc2VsZWN0ZWRJdGVtczogQmFzZUxpc3RJdGVtW107XG4gICAgLyoqIEluZGV4ICovXG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxubGV0IG5leHRMaXN0SWQgPSAwO1xuXG4vKipcbiAqIFRoZSBMaXN0IGNvbXBvbmVudCByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBsaXN0IGl0ZW0gdHlwZXMuXG4gKiBJdCBpcyB1c2VkIHRvIGRpc3BsYXkgYSBsaXN0IGZlYXR1cmVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybDogJy4vbGlzdC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRkRfRk9STV9GSUVMRF9DT05UUk9MLCB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBGZHBMaXN0Q29tcG9uZW50LCB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudCB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29yZUxpc3RDb21wb25lbnQsXG4gICAgICAgIEJ1c3lJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgICAgIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLFxuICAgICAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUmVwZWF0RGlyZWN0aXZlLFxuICAgICAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBBc3luY1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQ8VD5cbiAgICBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXRcbiAgICBpbXBsZW1lbnRzIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGZHBMaXN0PEJhc2VMaXN0SXRlbT5cbntcbiAgICAvKiogIEFuIGFycmF5IHRoYXQgaG9sZHMgYSBsaXN0IG9mIGFsbCBzZWxlY3RlZCBpdGVtcy4gKiovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBkZWZpbmUgc2l6ZSBvZiBpdGVtcyBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFTZXRzaXplOiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lcyB3aGV0aGVyIGl0ZW1zIGFyZSBtdWx0aXNlbGVjdGFibGUgZm9yIHNjcmVlbiByZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTXVsdGlzZWxlY3RhYmxlOiBib29sZWFuO1xuXG4gICAgLyoqIFRpdGxlIHVzZWQgb24gYnV0dG9uIHdoZW4gZGF0YSBsb2FkcyBvbiBidXR0b24gY2xpY2suICovXG4gICAgQElucHV0KClcbiAgICBsb2FkVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBMYWJlbCB1c2VkIG9uIGFubm91bmNlIG1lc3NhZ2Ugb2YgZGF0YSB3YXMgbG9hZGVkIGZvciBzY3JlZW4gcmVhZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmdMYWJlbCA9ICcnO1xuXG4gICAgLyoqIFdhaXQgdGltZSBmb3IgbmV3IGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVsYXlUaW1lOiBudW1iZXI7XG5cbiAgICAvKiogSXRlbXMgdG8gYmUgbG9hZGVkIGF0IG9uY2UuIEludGluaXR5IChubyBsaW1pdCkgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1TaXplID0gSW5maW5pdHk7XG5cbiAgICAvKiogRW5hYmxlcyBsYXp5IGxvYWRNb3JlIG9mIGRhdGEuICovXG4gICAgQElucHV0KClcbiAgICBsb2FkTW9yZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZGF0YSBsb2FkIG9uIHNjcm9sbCBmb3IgdHJ1ZVxuICAgICAqIGZhbHNlOiBlbmFibGVzIGRhdGEgbG9hZGluZyBvbiBidXR0b24gY2xpY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICAvKiogZGVmaW5lIHRoZSByb2xlIHRvIGN1c3RvbSByZXF1aXJlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGUgPSAnbGlzdCc7XG5cbiAgICAvKiogTGlzdFR5cGUgJ2luYWN0aXZlJyB8ICdhY3RpdmUnIHwgJ25hdmlnYXRpb24nIHwgJ2RldGFpbCcgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqIE1heCBoZWlnaHQgZm9yIHZpZXdwb3J0IHRvIGRpc3BsYXkgc2Nyb2xsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgcmVtb3ZlZCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBTY3JvbGwgb2Zmc2V0IHBlcmNlbnRhZ2UgdG8gdHJpZ2dlciBzY3JvbGwgZXZlbnQuICovXG4gICAgQElucHV0KClcbiAgICBzY3JvbGxPZmZzZXRQZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgICAvKiogRWVuYWJsZXMgc2VsZWN0aW9uIHN0eWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHNlbGVjdGlvbi4gVHlwZXMgaW5jbHVkZTpcbiAgICAgKiAnbm9uZSd8ICdtdWx0aScgfCAnc2luZ2xlJ3wnZGVsZXRlJy5cbiAgICAgKiBMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoKS4nXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgcmFkaW8gYnV0dG9uIGFuZCBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByb3cgbGV2ZWwgU2VsZWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd1NlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3Jvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1zZWxlY3Rpb24tcm93Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZWQgJiYgdGhpcy5oYXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIERhdGFzb3VyY2UgZm9yIHN1Z2dlc3Rpb24gbGlzdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVkID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gWydmZC1saXN0LS1uYXZpZ2F0aW9uJ107XG4gICAgICAgIGlmICh0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZkLWxpc3QtLW5hdmlnYXRpb24tb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NMaXN0KTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGVkO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRpb25JbmRpY2F0b3IuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbmF2aWdhdGlvbkluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1pbmRpY2F0aW9uJyk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRpb25JbmRpY2F0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzQnlMaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc0J5TGluZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCeUxpbmUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1ieWxpbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQnlMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQnlMaW5lO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzT2JqZWN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc09iamVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNPYmplY3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1vYmplY3QtbGlzdCcpO1xuICAgIH1cblxuICAgIGdldCBoYXNPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVucmVhZEluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW50ZXJjZXB0IHRhYiBrZXkgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludGVyY2VwdFRhYktleSA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHNlbGVjdGVkIGl0ZW0gaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQWNjZXNzIGNoaWxkIGVsZW1lbnQsIGZvciBjaGVja2luZyBsaW5rIGNvbnRlbnQgKi9cbiAgICBAVmlld0NoaWxkKCdsaW5rJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgYW5jaG9yOiBFbGVtZW50UmVmPEhUTUxMaW5rRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBMaXN0SXRlbURlZikpXG4gICAgbGlzdEl0ZW1EZWY6IExpc3RJdGVtRGVmO1xuXG4gICAgLyoqIExvYWQgTW9yZSBMaXN0IGl0ZW0gY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlKVxuICAgIGxvYWRNb3JlQ29udGVudDogTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIENoaWxkIGl0ZW1zIG9mIHRoZSBMaXN0LiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCYXNlTGlzdEl0ZW0pLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF91bEVsZW1lbnQoKTogTnVsbGFibGU8SFRNTFVMaXN0RWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmZkLWxpc3QnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlzcGxheSBsb2FkaW5nIHN5bWJvbFxuICAgICAqL1xuICAgIF9sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGtleU1hbmdlciB0byBoYW5kbGUga2V5Ym9yZCBldmVudHMgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9rZXlNYW5hZ2VyOiBOdWxsYWJsZTxGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYXJpYVNldFNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IG5ldyBPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogTGlzdERhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIGlzIHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzQnlMaW5lOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25JbmRpY2F0b3I6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBvYmplY3QgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNPYmplY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmVyZmllcyBwYXJ0aWFsIG5hdmlnYXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFydGlhbE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGUgbW9kZWwgYmFja2luZyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIG11bHRpc2VsZWN0aW9uXG4gICAgICogYmluZGluZyBpbiB0ZW1wYXRlIHRvIGFwcGVuZCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkdmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciByb3cgbGV2ZWwgc2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcm93U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gVG8gc3RvcmUgKi9cbiAgICBwcml2YXRlIF90ZW1wSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNJdGVtczogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBGZExhbmd1YWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZnRlclZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnPzogTGlzdENvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBVcGRhdGUgbmF2Z2lhdGlvbiBzdHlsZXMgZm9yIG5vbiBuYXZpZ2F0ZWQgaXRlbXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfdXBkYXRlTmF2aWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+ID0gJzAnO1xuICAgICAgICBjb25zdCBlbGVtZW50OiBOdWxsYWJsZTxIVE1MRWxlbWVudD4gPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQ/LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQocGFyZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtSWQgPSBwYXJlbnQ/LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1uYXZpZ2F0ZWQnKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uX2ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gZWwucXVlcnlTZWxlY3RvcignYScpO1xuICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnZmQtbGlzdF9faXRlbScpICYmICEhbGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogc2VsZWN0aW9uIG1hbmFnZW1lbnQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgY2hhbmdlZCBodHRwczovL2dpdGh1Yi5jb20vU0FQL2Z1bmRhbWVudGFsLW5neC9pc3N1ZXMvODAwOFxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJvd1NlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50LCBzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aVNlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IGNvbnRleHQgZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KCk6IExvYWRNb3JlQ29udGVudENvbnRleHQge1xuICAgICAgICBjb25zdCAkaW1wbGljaXQgPSB7XG4gICAgICAgICAgICBsb2FkVGl0bGU6IHRoaXMubG9hZFRpdGxlLFxuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5fbG9hZGluZyxcbiAgICAgICAgICAgIGxvYWRpbmdMYWJlbDogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGxhbmd1YWdlKSA9PiB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZ3VhZ2UsICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5sb2FkaW5nTGFiZWwpO1xuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgIGxhc3RDaHVuazoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fbGFzdEluZGV4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWw6IHRoaXMuX2RzSXRlbXMubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQsXG4gICAgICAgICAgICAuLi4kaW1wbGljaXRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIGxpcyBjb21wb25lbnQgd2l0aCBzZWxlY3Rpb24gbW9kZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LSR7bmV4dExpc3RJZCsrfWA7XG5cbiAgICAgICAgLy8gdXNpbmcgc2VsZWN0aW9uIE1vZGVsIGZvciBtdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFyaWFNdWx0aXNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT4odGhpcy5fbXVsdGlTZWxlY3QsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO1xuICAgICAgICAgICAgZXZlbnQuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBLZXlib2FyZCBtYW5hZ2VyIG9uIGxpc3QgaXRlbXMsIHNldCB2YWx1ZXMgd2hlbiBwYXNzZWQgdmlhIGFycmF5XG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZnRlclZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+KHRoaXMubGlzdEl0ZW1zKS53aXRoV3JhcCgpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuY2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0aGlzLmxpc3RJdGVtcyksIG9ic2VydmVPbihhc3luY1NjaGVkdWxlcikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVMaXN0SXRlbXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdmZC1idXN5LWluZGljYXRvcicpO1xuICAgICAgICBpbmRpY2F0b3I/LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICcnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGhhbmRsaW5lIGtleWJvYXJkIG9wZXJhdGlvbnNcbiAgICAgKiBpbiB0ZW1wbGF0ZSBvbiBsaXN0IGFuZCBsaXN0IGl0ZW1zXG4gICAgICovXG4gICAgX2hhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBOdWxsYWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5fa2V5TWFuYWdlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmICF0aGlzLmludGVyY2VwdFRhYktleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbUluZGV4OiBOdWxsYWJsZTxudW1iZXI+ID0gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg7XG5cbiAgICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJdGVtSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldEN1cnJlbnRBY3RpdmVJdGVtSW5kZXgoYWN0aXZlSXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uc2V0QWN0aXZlSXRlbShhY3RpdmVJdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBiaW5kZWQgaW4gdGVtcGxhdGUgb24gc2Nyb2xsXG4gICAgICovXG4gICAgX3Njcm9sbEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZyAmJiB0aGlzLmxvYWRPblNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fZ2V0TW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBsb2FkIG1vcmUgb24gZW50ZXIgb3Igc3BhY2UgcHJlc3NcbiAgICAgKi9cbiAgICBfbG9hZE9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBsYXp5IGxvYWRpbmcgZGF0YVxuICAgICAqIHVzZWQgaW4gdGVtcGxhdGVcbiAgICAgKiBvbnNjcm9sbCBhbmQgb24gbW9yZSBidXR0b24gY2xpY2tcbiAgICAgKi9cbiAgICBfZ2V0TW9yZURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBvZih0aGlzLl9sb2FkTmV3SXRlbXMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcChhc3luYyAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCbGFuayhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignPT09SW52YWxpZCBSZXNwb25zZSByZWNlaXZlZD09PScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0xhYmVsID0gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodGhpcy5sb2FkaW5nTGFiZWwsICdhc3NlcnRpdmUnKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkZWxheSh0aGlzLmRlbGF5VGltZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1ByZXNlbnQocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5faXRlbXMubGVuZ3RoLCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7ICsraSwgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1tpXSA9IHJlc3VsdFtqXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogdXNlZCBpbiB0ZW1wYXRlIHRvIGdldCBTZWxlY3RlZCBpdGVtcyBmcm9tIGEgbGlzdFxuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgX29uU2VsZWN0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0dXBMaXN0SXRlbShpdGVtOiBCYXNlTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaXRlbS5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xuICAgICAgICBpdGVtLnJvd1NlbGVjdGlvbiA9IHRoaXMucm93U2VsZWN0aW9uO1xuICAgICAgICBpdGVtLl9oYXNCeUxpbmUgPSB0aGlzLmhhc0J5TGluZTtcbiAgICAgICAgaXRlbS5pdGVtU2VsZWN0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0odGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmluZGV4T2YoaXRlbSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZHNJdGVtcy5sZW5ndGggIT09IG51bGwgJiYgdGhpcy5pdGVtU2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9sYXN0SW5kZXggPSB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zLnNsaWNlKHRoaXMuX3N0YXJ0SW5kZXgsIHRoaXMuX2xhc3RJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2RzSXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHNJdGVtcyA9IFtdO1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydCBMaXN0RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXSBhcyBEYXRhU291cmNlXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b0RhdGFTdHJlYW0oc291cmNlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPik6IExpc3REYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gPExpc3REYXRhU291cmNlPFQ+PnNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gd29yayBvbiB0b3Agb2YgYXJyYXlzXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIGNvbnN0IGluaXREYXRhU291cmNlID0gdGhpcy5fdG9EYXRhU3RyZWFtKGRzKTtcbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyBzaW5nbGUgcG9pbnQgb2YgZGF0YSBlbnRyeSB0byB0aGUgY29tcG9uZW50LiBXZSBkb250IHdhbnQgdG8gc2V0IGRhdGEgb24gZGlmZmVyZW50XG4gICAgICAgICAqIHBsYWNlcy4gSWYgYW55IG5ldyBkYXRhIGNvbWVzIGluIGVpdGhlciB5b3UgZG8gYSBzZWFyY2ggYW5kIHlvdSB3YW50IHRvIHBhc3MgaW5pdGlhbCBkYXRhXG4gICAgICAgICAqIGl0cyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBpbml0RGF0YVNvdXJjZVxuICAgICAgICAgICAgLm9wZW4oKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gU2V0IG5ldyBpdGVtcyB3aGVuIGNvbXBvbmVudCBpcyBmdWxseSBpbml0aWF0ZWQgYW5kIGFsbCBjaGlsZCBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgdGhpcy5fd2FpdEZvclZpZXdJbml0KCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc0l0ZW1zID0gZGF0YSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2RzSXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gcXVldWUgaXMgZW1wdHkuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChpbml0RGF0YVNvdXJjZS5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMuX2xvYWRpbmcgPSB0cnVlKSkpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIGluaXREYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoUGFyYW1zID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIG1hdGNoUGFyYW1zLnNldCgncXVlcnknLCAnKicpO1xuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ2xpbWl0JywgdGhpcy5pdGVtU2l6ZSk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIGluaXREYXRhU291cmNlLm1hdGNoKG1hdGNoUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4gaW5pdERhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sb2FkTmV3SXRlbXMoKTogVFtdIHtcbiAgICAgICAgdGhpcy5fc3RhcnRJbmRleCA9IHRoaXMuX3N0YXJ0SW5kZXggKyB0aGlzLml0ZW1TaXplO1xuICAgICAgICB0aGlzLl9sYXN0SW5kZXggPSB0aGlzLl9sYXN0SW5kZXggKyB0aGlzLml0ZW1TaXplO1xuICAgICAgICB0aGlzLl90ZW1wSXRlbXMgPSB0aGlzLl9kc0l0ZW1zLnNsaWNlKHRoaXMuX3N0YXJ0SW5kZXgsIHRoaXMuX2xhc3RJbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBpdGVtIHdpdGggcmFkaW8gYnV0dG9uIHN0eWxlcywgY2hlY2ssIHVuY2hlY2t1cGRhdGVzXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVTaW5nbGVTZWxlY3QoZXZlbnQ6IEV2ZW50LCBzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQuY2xvc2VzdCgnLmZkLWxpc3RfX2l0ZW0nKTtcbiAgICAgICAgY29uc3QgcmFkaW8gPSBwYXJlbnQgPyBwYXJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkdmFsdWUgPSByYWRpbyA/ICg8SFRNTElucHV0RWxlbWVudD5yYWRpbykudmFsdWUgOiBudWxsO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoaXRlbS5yYWRpb0J1dHRvbkNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0aW9uVmFsdWUgPSB0aGlzLl9zZWxlY3RlZHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpID09PSBzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAndHJ1ZScpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgLy8gaGFuZGxlcyBtdXRsaSBzZWxlY3Qgb24gcm93IGxldmVsIHdpdGhvdXQgY2hlY2tib3hcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlcyBzaW5nbGUgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IHJhZGlvYnV0dG9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIGl0ZW0uYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLXNlbGVjdGVkJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUlkID0gJzAnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIGNoZWNrYm94IHN0eWxlcyxjaGVjayx1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpICE9PSBzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gbmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcpO1xuICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcsIGAkeyFzZWxlY3R9YCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2V0dGluZyB2YWx1ZXMgZnJvbSBsaXN0IHRvIGxpc3QgaXRlbXNcbiAgICAgKiBleGFtcGxlOlxuICAgICAqIERvZXMgbGlzdCBpdGVtIGhhcyBuYXZpZ2F0aW9uLFxuICAgICAqIHNob3VsZCBzaG93IGFycm93cyxcbiAgICAgKiB3aWxsIGl0IGJlIGNvbXBhY3QgbW9kZSxcbiAgICAgKiBzaG91bGQgYmUgaW4gd2hpY2ggc2VsZWN0aW9uIG1vZGVcbiAgICAgKiBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBkYXRhc291cmNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTGlzdEl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5saXN0SXRlbXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5maXJzdC5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYXJpYVNldFNpemUgPSB0aGlzLmFyaWFTZXRzaXplXG4gICAgICAgICAgICA/IG9mKHRoaXMuYXJpYVNldHNpemUpXG4gICAgICAgICAgICA6IHRoaXMuX2RhdGFTb3VyY2UgJiYgdGhpcy5fZGF0YVNvdXJjZS5kYXRhUHJvdmlkZXI/LmdldFRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgPyB0aGlzLl9kYXRhU291cmNlLmRhdGFQcm92aWRlci5nZXRUb3RhbEl0ZW1zKClcbiAgICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPGRpdlxuICAgIGZkLWxpc3RcbiAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyXCJcbiAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgW2J5bGluZV09XCJoYXNCeUxpbmVcIlxuICAgIFtjbGFzcy5mZC1saXN0LS1uYXZpZ2F0aW9uXT1cIm5hdmlnYXRlZCB8fCBuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBbbmF2aWdhdGlvbkluZGljYXRvcl09XCJuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBbc3R5bGUub3V0bGluZV09XCInbm9uZSdcIlxuICAgIChrZXlkb3duKT1cIl9rZXlNYW5hZ2VyPy5vbktleWRvd24oJGV2ZW50KTsgX2hhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgKGNoYW5nZSk9XCJfb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJfYXJpYVNldFNpemUgfCBhc3luY1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwiYXJpYU11bHRpc2VsZWN0YWJsZVwiXG4gICAgW3JvbGVdPVwicm9sZVwiXG4gICAgW3VucmVhZEluZGljYXRvcl09XCJ1bnJlYWRJbmRpY2F0b3JcIlxuPlxuICAgIEBpZiAobG9hZE1vcmUgJiYgbG9hZE9uU2Nyb2xsKSB7XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICAgICAgc2l6ZT1cImxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1idXN5LWluZGljYXRvci1jdXN0b20gZmQtbGlzdF9faXRlbS0tZ3Jvd2luZ1wiXG4gICAgICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJfbG9hZGluZyAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cIl9sb2FkaW5nXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2xvYWRpbmcgPyAoJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZmQtbGlzdFxuICAgICAgICAgICAgICAgIGZkSW5maW5pdGVTY3JvbGxcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWxpc3RfX2luZmluaXRlLXNjcm9sbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAob25TY3JvbGxBY3Rpb24pPVwiX3Njcm9sbEhhbmRsZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Njcm9sbFBlcmNlbnRdPVwic2Nyb2xsT2Zmc2V0UGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgICAgW3JvbGVdPVwicm9sZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChfaXRlbXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgX2l0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdEl0ZW1EZWYudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICghbGlzdEl0ZW1zLmxlbmd0aCAmJiAhX2ZpcnN0TG9hZGluZ0RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWhhc0J5TGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luXT1cIidhdXRvIDAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lcz1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI0MCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDhweFwiIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCI2MFwiIHk9XCIyMFwiIHdpZHRoPVwiMzAlXCIgaGVpZ2h0PVwiOFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgfVxuICAgIEBpZiAoIWxvYWRPblNjcm9sbCkge1xuICAgICAgICBAaWYgKF9pdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgX2l0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKCFsaXN0SXRlbXMubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgIEBpZiAoIWhhc0J5TGluZSkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiIHR5cGU9XCJ0ZXh0XCIgdGV4dExpbmVzPVwiMVwiIHdpZHRoPVwiNDAlXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ4cHhcIiBbc3R5bGUubWFyZ2luXT1cIidhdXRvIDAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMjBcIiB3aWR0aD1cIjMwJVwiIGhlaWdodD1cIjhcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lKSB7XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAjbGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2dldE1vcmVEYXRhKClcIlxuICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtbGlzdF9faXRlbS0tY3VzdG9tLWNvbnRlbnRdPVwibG9hZE1vcmVDb250ZW50XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWxpc3RfX2l0ZW0gZmQtbGlzdF9faXRlbS0tZ3Jvd2luZyBmZC1saXN0X19pdGVtLS1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVFbGVtZW50Q29udGVudD5cbiAgICAgICAgQGlmIChsb2FkTW9yZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1saXN0X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkTW9yZUNvbnRlbnQudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmZC1saXN0X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2xvYWRpbmcgPyAoJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKSA6IGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICAgICAge3sgbG9hZFRpdGxlIH19XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiI2xvYWRcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
751
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hGLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBRVYsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcs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c0JBRFgsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBVU4sYUFBYTtzQkFEWixLQUFLO2dCQUtGLEtBQUs7c0JBRFIsS0FBSztnQkFXRixZQUFZO3NCQURmLEtBQUs7Z0JBa0JGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixTQUFTO3NCQURaLEtBQUs7Z0JBa0JGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQVlOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLE1BQU07c0JBREwsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt2QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFLM0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLHdCQUF3QjtnQkFLdEMsU0FBUztzQkFEUixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBNkl0RSxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyLCBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIE9ic2VydmFibGUsXG4gICAgU3Vic2NyaXB0aW9uLFxuICAgIGFzeW5jU2NoZWR1bGVyLFxuICAgIGZpbHRlcixcbiAgICBmaXJzdFZhbHVlRnJvbSxcbiAgICBpc09ic2VydmFibGUsXG4gICAgbWFwLFxuICAgIG9ic2VydmVPbixcbiAgICBvZixcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEtleVV0aWwsIE51bGxhYmxlLCBSZXBlYXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2luZmluaXRlLXNjcm9sbCc7XG5pbXBvcnQge1xuICAgIExpc3RDb21wb25lbnQgYXMgQ29yZUxpc3RDb21wb25lbnQsXG4gICAgRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgIExpc3RVbnJlYWRJbmRpY2F0b3Jcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgU2tlbGV0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2tlbGV0b24nO1xuaW1wb3J0IHsgRkRfTEFOR1VBR0UsIEZkTGFuZ3VhZ2UsIEZkVHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xufVxuXG5sZXQgbmV4dExpc3RJZCA9IDA7XG5cbi8qKlxuICogVGhlIExpc3QgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjb250YWluZXIgZm9yIGxpc3QgaXRlbSB0eXBlcy5cbiAqIEl0IGlzIHVzZWQgdG8gZGlzcGxheSBhIGxpc3QgZmVhdHVyZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZkcExpc3RDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICctMSdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb3JlTGlzdENvbXBvbmVudCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUsXG4gICAgICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIEFzeW5jUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudDxUPlxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgTGlzdFVucmVhZEluZGljYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZkcExpc3Q8QmFzZUxpc3RJdGVtPlxue1xuICAgIC8qKiAgQW4gYXJyYXkgdGhhdCBob2xkcyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuXG4gICAgLyoqIGRlZmluZSBzaXplIG9mIGl0ZW1zIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVNldHNpemU6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgaXRlbXMgYXJlIG11bHRpc2VsZWN0YWJsZSBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG5cbiAgICAvKiogVGl0bGUgdXNlZCBvbiBidXR0b24gd2hlbiBkYXRhIGxvYWRzIG9uIGJ1dHRvbiBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIExhYmVsIHVzZWQgb24gYW5ub3VuY2UgbWVzc2FnZSBvZiBkYXRhIHdhcyBsb2FkZWQgZm9yIHNjcmVlbiByZWFkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZ0xhYmVsID0gJyc7XG5cbiAgICAvKiogV2FpdCB0aW1lIGZvciBuZXcgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkZWxheVRpbWU6IG51bWJlcjtcblxuICAgIC8qKiBJdGVtcyB0byBiZSBsb2FkZWQgYXQgb25jZS4gSW50aW5pdHkgKG5vIGxpbWl0KSBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVNpemUgPSBJbmZpbml0eTtcblxuICAgIC8qKiBFbmFibGVzIGxhenkgbG9hZE1vcmUgb2YgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRNb3JlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBkYXRhIGxvYWQgb24gc2Nyb2xsIGZvciB0cnVlXG4gICAgICogZmFsc2U6IGVuYWJsZXMgZGF0YSBsb2FkaW5nIG9uIGJ1dHRvbiBjbGljay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIC8qKiBkZWZpbmUgdGhlIHJvbGUgdG8gY3VzdG9tIHJlcXVpcmVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBMaXN0VHlwZSAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnbmF2aWdhdGlvbicgfCAnZGV0YWlsJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKiogTWF4IGhlaWdodCBmb3Igdmlld3BvcnQgdG8gZGlzcGxheSBzY3JvbGwuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyByZW1vdmVkIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFNjcm9sbCBvZmZzZXQgcGVyY2VudGFnZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNjcm9sbE9mZnNldFBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBFZW5hYmxlcyBzZWxlY3Rpb24gc3R5bGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0aW9uLiBUeXBlcyBpbmNsdWRlOlxuICAgICAqICdub25lJ3wgJ211bHRpJyB8ICdzaW5nbGUnfCdkZWxldGUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICgpLidcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnbm9uZScuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25UeXBlID0gJ25vbmUnO1xuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByYWRpbyBidXR0b24gYW5kIGNoZWNrYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJvdyBsZXZlbCBTZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93U2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlZCAmJiB0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcExpc3REYXRhU291cmNlPFQ+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZWQgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2ZkLWxpc3QtLW5hdmlnYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1vYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc0xpc3QpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGlvbkluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1uYXZpZ2F0aW9uLWluZGljYXRpb24nKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNCeUxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzQnlMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc0J5TGluZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLWJ5bGluZScpO1xuICAgIH1cblxuICAgIGdldCBoYXNCeUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCeUxpbmU7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNPYmplY3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzT2JqZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc09iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLW9iamVjdC1saXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09iamVjdDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5yZWFkSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBpbnRlcmNlcHQgdGFiIGtleSBuYXZpZ2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW50ZXJjZXB0VGFiS2V5ID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBBY2Nlc3MgY2hpbGQgZWxlbWVudCwgZm9yIGNoZWNraW5nIGxpbmsgY29udGVudCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpbmsnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBhbmNob3I6IEVsZW1lbnRSZWY8SFRNTExpbmtFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IExpc3RJdGVtRGVmKSlcbiAgICBsaXN0SXRlbURlZjogTGlzdEl0ZW1EZWY7XG5cbiAgICAvKiogTG9hZCBNb3JlIExpc3QgaXRlbSBjb250ZW50ICovXG4gICAgQENvbnRlbnRDaGlsZChMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUpXG4gICAgbG9hZE1vcmVDb250ZW50OiBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKiogQ2hpbGQgaXRlbXMgb2YgdGhlIExpc3QuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEJhc2VMaXN0SXRlbSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3VsRWxlbWVudCgpOiBOdWxsYWJsZTxIVE1MVUxpc3RFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmQtbGlzdCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkaXNwbGF5IGxvYWRpbmcgc3ltYm9sXG4gICAgICovXG4gICAgX2xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICoga2V5TWFuZ2VyIHRvIGhhbmRsZSBrZXlib3JkIGV2ZW50cyB1c2VkIGluIHRlbXBsYXRlXG4gICAgICovXG4gICAgX2tleU1hbmFnZXI6IE51bGxhYmxlPEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2FyaWFTZXRTaXplOiBPYnNlcnZhYmxlPG51bWJlcj4gPSBuZXcgT2JzZXJ2YWJsZSgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IExpc3REYXRhU291cmNlPFQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmFuc2xhdGlvblJlc29sdmVyID0gbmV3IFRyYW5zbGF0aW9uUmVzb2x2ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgQnkgbGluZSBpcyBwcmVzZW50IGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhc0J5TGluZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGxpc3QgaXRlbXMgYXJlIG5hdmlnYWJsZVxuICAgICAqIHlvdSBzaG91bGQgaW5kaWNhdGUgdGhvc2UgYnkgZGlzcGxheWluZyBhIG5hdmlnYXRpb24gYXJyb3dcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5kaWNhdG9yOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgb2JqZWN0IHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzT2JqZWN0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZlcmZpZXMgcGFydGlhbCBuYXZpZ2F0aW9uIGVuYWJsZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3BhcnRpYWxOYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhlIG1vZGVsIGJhY2tpbmcgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyBtdWx0aXNlbGVjdGlvblxuICAgICAqIGJpbmRpbmcgaW4gdGVtcGF0ZSB0byBhcHBlbmQgY2xhc3NcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tdWx0aVNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgcm93IGxldmVsIHNlbGVjdGlvbiBtb2RlIGlzIGVuYWJsZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3Jvd1NlbGVjdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuIFRvIHN0b3JlICovXG4gICAgcHJpdmF0ZSBfdGVtcEl0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RhcnRJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RJbmRleCA9IHRoaXMuaXRlbVNpemU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGZvciBkYXRhIHNvdXJjZSBoYW5kbGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYW5ndWFnZTogRmRMYW5ndWFnZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWZ0ZXJWaWV3SW5pdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBASW5qZWN0KEZEX0xBTkdVQUdFKSBwcml2YXRlIHJlYWRvbmx5IF9sYW5ndWFnZSQ6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIHByb3RlY3RlZCBfbGlzdENvbmZpZz86IExpc3RDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2NoYW5nZURldGVjdG9yUmVmLCBlbGVtZW50UmVmLCBuZ0NvbnRyb2wsIGNvbnRyb2xDb250YWluZXIsIG5nRm9ybSwgZm9ybUZpZWxkLCBmb3JtQ29udHJvbCk7XG4gICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb24gVXBkYXRlIG5hdmdpYXRpb24gc3R5bGVzIGZvciBub24gbmF2aWdhdGVkIGl0ZW1zXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKiBzZXByYXRlIFBSIGZvciBjdXN0b20gZXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPiA9ICcwJztcbiAgICAgICAgY29uc3QgZWxlbWVudDogTnVsbGFibGU8SFRNTEVsZW1lbnQ+ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBldmVudC50YXJnZXQgOiBudWxsO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50Py5jbG9zZXN0KCcuZmQtbGlzdF9faXRlbScpO1xuICAgICAgICBpZiAoaXNQcmVzZW50KHBhcmVudCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUlkID0gcGFyZW50Py5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtbmF2aWdhdGVkJyk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5rRWxlbWVudCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnKSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWxpc3RfX2l0ZW0nKSAmJiAhIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICBsaW5rRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHNlbGVjdGlvbiBtYW5hZ2VtZW50IHNob3VsZCBiZSBjb21wbGV0ZWx5IGNoYW5nZWQgaHR0cHM6Ly9naXRodWIuY29tL1NBUC9mdW5kYW1lbnRhbC1uZ3gvaXNzdWVzLzgwMDhcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNpbmdsZVNlbGVjdChldmVudCwgc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBjb250ZXh0IGZvciBsb2FkIG1vcmUgYnV0dG9uICovXG4gICAgZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpOiBMb2FkTW9yZUNvbnRlbnRDb250ZXh0IHtcbiAgICAgICAgY29uc3QgJGltcGxpY2l0ID0ge1xuICAgICAgICAgICAgbG9hZFRpdGxlOiB0aGlzLmxvYWRUaXRsZSxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRoaXMuX2xvYWRpbmcsXG4gICAgICAgICAgICBsb2FkaW5nTGFiZWw6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChsYW5ndWFnZSkgPT4gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKGxhbmd1YWdlLCAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9hZGluZ0xhYmVsKTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBsYXN0Q2h1bms6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX2xhc3RJbmRleFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9kc0l0ZW1zLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0LFxuICAgICAgICAgICAgLi4uJGltcGxpY2l0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBsaXMgY29tcG9uZW50IHdpdGggc2VsZWN0aW9uIG1vZGVcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SXRlbXMoKTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pZCA9IGBmZHAtbGlzdC0ke25leHRMaXN0SWQrK31gO1xuXG4gICAgICAgIC8vIHVzaW5nIHNlbGVjdGlvbiBNb2RlbCBmb3IgbXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcmlhTXVsdGlzZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+KHRoaXMuX211bHRpU2VsZWN0LCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtcbiAgICAgICAgICAgIGV2ZW50LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleDogTnVsbGFibGU8bnVtYmVyPiA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuXG4gICAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRBY3RpdmVJdGVtSW5kZXgoYWN0aXZlSXRlbUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICAgID8gdGhpcy5fZGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuZ2V0VG90YWxJdGVtcygpXG4gICAgICAgICAgICAgIDogb2YodGhpcy5saXN0SXRlbXMubGVuZ3RoKTtcblxuICAgICAgICB0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbiA9IHRoaXMubGlzdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciB8fCBpdGVtLmxpc3RUeXBlID09PSAnZGV0YWlsJyk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cDogQmFzZUxpc3RJdGVtIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50R3JvdXBJdGVtSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgdXNlIGluZGV4IGZyb20gdGhlIGl0ZXJhdGlvbiBkdWUgdG8gcG9zc2libGUgZ3JvdXAgaXRlbSBleGlzdGVuY2UsIHdlIG5lZWQgdG8gdHJhY2sgaXQgbWFudWFsbHkuXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcGFydGlhbE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5hdmlnYXRlZCA9IHRoaXMubmF2aWdhdGVkO1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciA9IHRoaXMubmF2aWdhdGlvbkluZGljYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RUeXBlID0gdGhpcy5saXN0VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLl90eXBlID09PSBMSVNUX0lURU1fVFlQRS5IRUFERVIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXA/Lmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW93bnMnLCBjdXJyZW50R3JvdXBJdGVtSWRzLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcyA9IFtdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IGl0ZW07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgIT09IExJU1RfSVRFTV9UWVBFLklURU0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uYXJpYVNldFNpemUgPSB0aGlzLl9hcmlhU2V0U2l6ZTtcblxuICAgICAgICAgICAgaXRlbS5hcmlhUG9zaW5zZXQgPSArK2l0ZW1JbmRleDtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cEl0ZW1JZHMucHVzaChpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGhpcy5saXN0SXRlbXMubGFzdCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yVmlld0luaXQ8U291cmNlRGF0YVR5cGU+KCkge1xuICAgICAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxTb3VyY2VEYXRhVHlwZT4pOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPiA9PlxuICAgICAgICAgICAgc291cmNlLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzcmMpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGFmdGVyVmlld0luaXQpID0+IGFmdGVyVmlld0luaXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHNyYylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9pbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlJCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9vbGJhclwiPjwvbmctY29udGVudD5cbjxkaXZcbiAgICBmZC1saXN0XG4gICAgW2F0dHIuaWRdPVwiaWRcIlxuICAgIFtub0JvcmRlcl09XCJub0JvcmRlclwiXG4gICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICAgIFtieWxpbmVdPVwiaGFzQnlMaW5lXCJcbiAgICBbY2xhc3MuZmQtbGlzdC0tbmF2aWdhdGlvbl09XCJuYXZpZ2F0ZWQgfHwgbmF2aWdhdGlvbkluZGljYXRvclwiXG4gICAgW25hdmlnYXRpb25JbmRpY2F0b3JdPVwibmF2aWdhdGlvbkluZGljYXRvclwiXG4gICAgW3N0eWxlLm91dGxpbmVdPVwiJ25vbmUnXCJcbiAgICAoa2V5ZG93bik9XCJfa2V5TWFuYWdlcj8ub25LZXlkb3duKCRldmVudCk7IF9oYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgIChjaGFuZ2UpPVwiX29uU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiX2FyaWFTZXRTaXplIHwgYXN5bmNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cImFyaWFNdWx0aXNlbGVjdGFibGVcIlxuICAgIFtyb2xlXT1cInJvbGVcIlxuICAgIFt1bnJlYWRJbmRpY2F0b3JdPVwidW5yZWFkSW5kaWNhdG9yXCJcbj5cbiAgICBAaWYgKGxvYWRNb3JlICYmIGxvYWRPblNjcm9sbCkge1xuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoX2l0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIF9pdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtRGVmLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWxpc3RJdGVtcy5sZW5ndGggJiYgIV9maXJzdExvYWRpbmdEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoYXNCeUxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjQ4cHhcIiBbc3R5bGUubWFyZ2luXT1cIidhdXRvIDAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjBcIiB3aWR0aD1cIjQwJVwiIGhlaWdodD1cIjEyXCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMjBcIiB3aWR0aD1cIjMwJVwiIGhlaWdodD1cIjhcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIH1cbiAgICBAaWYgKCFsb2FkT25TY3JvbGwpIHtcbiAgICAgICAgQGlmIChfaXRlbXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIF9pdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdEl0ZW1EZWYudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmICghbGlzdEl0ZW1zLmxlbmd0aCAmJiAhX2ZpcnN0TG9hZGluZ0RvbmUpIHtcbiAgICAgICAgICAgICAgICBAaWYgKCFoYXNCeUxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjBcIiB3aWR0aD1cIjQwJVwiIGhlaWdodD1cIjEyXCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobG9hZE1vcmUgJiYgIWxvYWRPblNjcm9sbCAmJiBfZmlyc3RMb2FkaW5nRG9uZSkge1xuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgI2xpc3RJdGVtXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9nZXRNb3JlRGF0YSgpXCJcbiAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfbG9hZE9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZkLWxpc3RfX2l0ZW0tLWN1c3RvbS1jb250ZW50XT1cImxvYWRNb3JlQ29udGVudFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlRWxlbWVudENvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgIH1cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRNb3JlRWxlbWVudENvbnRlbnQ+XG4gICAgICAgIEBpZiAobG9hZE1vcmVDb250ZW50KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|