@fundamental-ngx/platform 0.48.0-rc.21 → 0.48.0-rc.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +6 -8
- package/esm2022/form/combobox/commons/base-combobox.mjs +6 -5
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +8 -8
- package/esm2022/form/form-generator/form-generator.service.mjs +8 -13
- package/esm2022/form/form-group/form-field/form-field.component.mjs +27 -29
- package/esm2022/form/form-group/form-group.component.mjs +37 -40
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +9 -8
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +10 -13
- package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
- package/esm2022/form/multi-input/base-multi-input.mjs +5 -4
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +4 -7
- package/esm2022/form/radio-group/radio-group.component.mjs +23 -24
- package/esm2022/form/select/commons/base-select.mjs +3 -3
- package/esm2022/form/step-input/base.step-input.mjs +25 -35
- package/esm2022/form/step-input/number/number-step-input.component.mjs +3 -3
- package/esm2022/form/step-input/step-input-action-button.mjs +6 -10
- package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +6 -8
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +10 -19
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +7 -9
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +7 -8
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +9 -20
- package/esm2022/list/list.component.mjs +7 -8
- package/esm2022/menu/menu.component.mjs +3 -4
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +8 -11
- package/esm2022/message-popover/message-popover.component.mjs +52 -53
- package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +3 -7
- package/esm2022/search-field/search-field.component.mjs +20 -21
- package/esm2022/settings-generator/settings-generator.service.mjs +9 -10
- package/esm2022/shared/form/base.input.mjs +7 -8
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +10 -15
- package/esm2022/split-menu-button/split-menu-button.component.mjs +7 -18
- package/esm2022/table/components/reset-button/reset-button.component.mjs +5 -6
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +6 -7
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +6 -8
- package/esm2022/table/components/table-group-row/table-group-row.component.mjs +3 -7
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +29 -13
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +7 -11
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +5 -7
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +5 -8
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +5 -8
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +4 -5
- package/esm2022/table/components/table-row/table-row.component.mjs +6 -13
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +34 -21
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +5 -8
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +6 -9
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +6 -9
- package/esm2022/table/table.component.mjs +39 -49
- package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +1 -1
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +8 -10
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +6 -6
- package/esm2022/table-helpers/services/table-column-resize.service.mjs +14 -17
- package/esm2022/table-helpers/services/table-responsive.service.mjs +6 -11
- package/esm2022/table-helpers/services/table.service.mjs +20 -18
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +10 -18
- package/esm2022/wizard-generator/base-wizard-generator.mjs +12 -19
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +5 -4
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +7 -13
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +8 -7
- package/fesm2022/fundamental-ngx-platform-form.mjs +137 -174
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +24 -46
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +57 -60
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +21 -38
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +6 -8
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +6 -7
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +9 -15
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +6 -17
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +42 -52
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +145 -157
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +9 -17
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +20 -33
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +2 -4
- package/form/form-generator/form-generator/form-generator.component.d.ts +1 -1
- package/form/form-generator/form-generator.service.d.ts +3 -7
- package/form/form-group/form-field/form-field.component.d.ts +12 -12
- package/form/form-group/form-group.component.d.ts +35 -31
- package/form/multi-combobox/commons/base-multi-combobox.d.ts +2 -2
- package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +3 -5
- package/form/multi-combobox/multi-combobox.interface.d.ts +3 -3
- package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -4
- package/form/radio-group/radio-group.component.d.ts +3 -3
- package/form/step-input/base.step-input.d.ts +5 -6
- package/form/step-input/step-input-action-button.d.ts +4 -7
- package/fundamental-ngx-platform-v0.48.0-rc.23.tgz +0 -0
- package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.d.ts +5 -8
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.d.ts +1 -1
- package/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.d.ts +1 -1
- package/icon-tab-bar/icon-tab-bar.component.d.ts +4 -6
- package/list/list.component.d.ts +1 -3
- package/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.d.ts +2 -4
- package/message-popover/message-popover.component.d.ts +13 -20
- package/message-popover/models/message-popover-wrapper.interface.d.ts +2 -2
- package/package.json +4 -4
- package/search-field/search-field-mobile/search-field/search-field-mobile.component.d.ts +4 -6
- package/search-field/search-field.component.d.ts +6 -4
- package/settings-generator/settings-generator.service.d.ts +1 -1
- package/shared/form/base.input.d.ts +2 -2
- package/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.d.ts +4 -8
- package/split-menu-button/split-menu-button.component.d.ts +3 -8
- package/table/components/reset-button/reset-button.component.d.ts +2 -3
- package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +1 -2
- package/table/components/table-column-resizer/table-column-resizer.component.d.ts +1 -1
- package/table/components/table-group-row/table-group-row.component.d.ts +2 -5
- package/table/components/table-header-cell-content/table-header-cell-content.component.d.ts +11 -6
- package/table/components/table-header-row/table-header-row.component.d.ts +1 -1
- package/table/components/table-p13-dialog/columns/columns.component.d.ts +2 -4
- package/table/components/table-p13-dialog/filtering/filtering.component.d.ts +1 -4
- package/table/components/table-p13-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-p13-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/components/table-row/table-row.component.d.ts +2 -2
- package/table/components/table-toolbar/table-toolbar.component.d.ts +20 -7
- package/table/components/table-view-settings-dialog/filtering/filters.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/grouping/grouping.component.d.ts +1 -4
- package/table/components/table-view-settings-dialog/sorting/sorting.component.d.ts +1 -4
- package/table/table.component.d.ts +4 -18
- package/table-helpers/directives/table-cell-header-popover.directive.d.ts +2 -3
- package/table-helpers/directives/table-cell-resizable.directive.d.ts +1 -1
- package/table-helpers/directives/table-data-source.directive.d.ts +1 -1
- package/table-helpers/services/table-column-resize.service.d.ts +2 -2
- package/table-helpers/services/table-responsive.service.d.ts +3 -5
- package/table-helpers/services/table.service.d.ts +12 -10
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +2 -1
- package/wizard-generator/base-wizard-generator.d.ts +4 -8
- package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +3 -7
- package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
- package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +0 -16
- package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
- package/search-field/search-field-mobile/search-field-mobile.module.d.ts +0 -7
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Injectable, computed, signal } from '@angular/core';
|
|
2
2
|
import equal from 'fast-deep-equal';
|
|
3
3
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
4
4
|
import { skip } from 'rxjs/operators';
|
|
5
5
|
import { DEFAULT_TABLE_STATE } from '../constants';
|
|
6
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export class TableService {
|
|
8
9
|
constructor() {
|
|
9
10
|
/** Table state stream. */
|
|
10
11
|
this.tableState$ = new BehaviorSubject(DEFAULT_TABLE_STATE);
|
|
11
12
|
/** @hidden */
|
|
12
|
-
this._semanticHighlighting$ =
|
|
13
|
+
this._semanticHighlighting$ = signal('');
|
|
13
14
|
/** @hidden */
|
|
14
|
-
this._isFilteringFromHeaderDisabled$ =
|
|
15
|
+
this._isFilteringFromHeaderDisabled$ = signal(false);
|
|
15
16
|
/** @hidden */
|
|
16
|
-
this._isShownNavigationColumn$ =
|
|
17
|
+
this._isShownNavigationColumn$ = signal(false);
|
|
17
18
|
/** @hidden */
|
|
18
|
-
this._semanticHighlightingColumnWidth$ =
|
|
19
|
+
this._semanticHighlightingColumnWidth$ = signal(0);
|
|
19
20
|
/** Visible columns stream. */
|
|
20
|
-
this.visibleColumns$ =
|
|
21
|
+
this.visibleColumns$ = signal([]);
|
|
21
22
|
/** Visible columns length. */
|
|
22
|
-
this.visibleColumnsLength =
|
|
23
|
+
this.visibleColumnsLength = computed(() => this.visibleColumns$().length);
|
|
23
24
|
/** Popping columns stream. */
|
|
24
|
-
this.poppingColumns$ =
|
|
25
|
+
this.poppingColumns$ = signal([]);
|
|
25
26
|
/** Popping columns length. */
|
|
26
27
|
this._poppingColumnsLength = 0;
|
|
27
28
|
/** Table columns stream. */
|
|
@@ -53,16 +54,18 @@ export class TableService {
|
|
|
53
54
|
/** Listen for immediate changes in table subcomponents (mostly table column) */
|
|
54
55
|
this.detectChanges$ = new Subject();
|
|
55
56
|
/** Sort rules stream. */
|
|
56
|
-
this.sortRules$ =
|
|
57
|
+
this.sortRules$ = signal(new Map());
|
|
57
58
|
/**
|
|
58
59
|
* Filter Rules Map stream. Where key is column key, and value is the associated filter rules.
|
|
59
60
|
* Many filters can be applied to one column.
|
|
60
61
|
*/
|
|
61
|
-
this.filterRules$ =
|
|
62
|
+
this.filterRules$ = signal(new Map());
|
|
62
63
|
/**
|
|
63
64
|
* Group Rules Map stream. Where key is column key and value is associated group rule
|
|
64
65
|
*/
|
|
65
|
-
this.
|
|
66
|
+
this.groupRulesSubject = new BehaviorSubject(new Map());
|
|
67
|
+
/** Group Rules Map signal. */
|
|
68
|
+
this.groupRules$ = toSignal(this.groupRulesSubject);
|
|
66
69
|
}
|
|
67
70
|
/** Get current state/settings of the Table. */
|
|
68
71
|
getTableState() {
|
|
@@ -276,15 +279,14 @@ export class TableService {
|
|
|
276
279
|
* @param columns Visible columns to share.
|
|
277
280
|
*/
|
|
278
281
|
setVisibleColumns(columns) {
|
|
279
|
-
this.visibleColumns$.
|
|
280
|
-
this.visibleColumnsLength = columns.length;
|
|
282
|
+
this.visibleColumns$.set(columns);
|
|
281
283
|
}
|
|
282
284
|
/**
|
|
283
285
|
* Shares popping columns array across listeners.
|
|
284
286
|
* @param columns Popping columns to share.
|
|
285
287
|
*/
|
|
286
288
|
setPoppingColumns(columns) {
|
|
287
|
-
this.poppingColumns$.
|
|
289
|
+
this.poppingColumns$.set(columns);
|
|
288
290
|
this._poppingColumnsLength = columns.length;
|
|
289
291
|
}
|
|
290
292
|
/**
|
|
@@ -293,21 +295,21 @@ export class TableService {
|
|
|
293
295
|
*/
|
|
294
296
|
buildGroupRulesMap(state = this.getTableState()) {
|
|
295
297
|
const groupMap = new Map(state.groupBy.map((rule) => [rule.field, rule]));
|
|
296
|
-
this.
|
|
298
|
+
this.groupRulesSubject.next(groupMap);
|
|
297
299
|
}
|
|
298
300
|
/**
|
|
299
301
|
* Constructs sorting rules based on the table state.
|
|
300
302
|
* @param state Table state
|
|
301
303
|
*/
|
|
302
304
|
buildSortRulesMap(state = this.getTableState()) {
|
|
303
|
-
this.sortRules$.
|
|
305
|
+
this.sortRules$.set(new Map(state.sortBy.filter((rule) => rule.field).map((rule) => [rule.field, rule])));
|
|
304
306
|
}
|
|
305
307
|
/**
|
|
306
308
|
* Constructs filter rules based on the table state.
|
|
307
309
|
* @param state Table state.
|
|
308
310
|
*/
|
|
309
311
|
buildFilterRulesMap(state = this.getTableState()) {
|
|
310
|
-
this.filterRules$.
|
|
312
|
+
this.filterRules$.set(state.filterBy.reduce((hash, rule) => {
|
|
311
313
|
const key = rule.field;
|
|
312
314
|
if (!hash.has(key)) {
|
|
313
315
|
hash.set(key, []);
|
|
@@ -334,4 +336,4 @@ function setCurrentPageToState(state, currentPage) {
|
|
|
334
336
|
const newPageState = { ...state.page, currentPage };
|
|
335
337
|
return { ...state, page: newPageState };
|
|
336
338
|
}
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGFibGUtaGVscGVycy9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFnQ25ELE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRUksMEJBQTBCO1FBQ2pCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxjQUFjO1FBQ0wsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEUsY0FBYztRQUNMLG9DQUErQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQy9FLGNBQWM7UUFDTCw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN6RSxjQUFjO1FBQ0wsc0NBQWlDLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsOEJBQThCO1FBQ3JCLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLDhCQUE4QjtRQUM5Qix5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsOEJBQThCO1FBQ3JCLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLDhCQUE4QjtRQUM5QiwwQkFBcUIsR0FBRyxDQUFDLENBQUM7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O0lBRUQ7O09BRUc7SUFDSCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQzs4R0FoWVEsWUFBWTtrSEFBWixZQUFZOzsyRkFBWixZQUFZO2tCQUR4QixVQUFVOztBQW9ZWCxTQUFTLHFCQUFxQixDQUFDLEtBQWlCLEVBQUUsV0FBbUI7SUFDakUsTUFBTSxZQUFZLEdBQW1CLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3BFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBERUZBVUxUX1RBQkxFX1NUQVRFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkZpbHRlciwgQ29sbGVjdGlvbkdyb3VwLCBDb2xsZWN0aW9uUGFnZSwgQ29sbGVjdGlvblNvcnQsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uc0NoYW5nZSxcbiAgICBGaWx0ZXJDaGFuZ2UsXG4gICAgRnJlZXplQ2hhbmdlLFxuICAgIEdyb3VwQ2hhbmdlLFxuICAgIFBhZ2VDaGFuZ2UsXG4gICAgU2VhcmNoQ2hhbmdlLFxuICAgIFNvcnRDaGFuZ2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uJztcblxuZXhwb3J0IHR5cGUgVGFibGVTdGF0ZUNoYW5nZSA9XG4gICAgfCBUYWJsZVN0YXRlUHJvcGVydHk8J3NvcnQnLCBTb3J0Q2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdwYWdlJywgUGFnZUNoYW5nZT5cbiAgICB8IFRhYmxlU3RhdGVQcm9wZXJ0eTwnZmlsdGVyJywgRmlsdGVyQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdncm91cCcsIEdyb3VwQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdmcmVlemUnLCBGcmVlemVDaGFuZ2U+XG4gICAgfCBUYWJsZVN0YXRlUHJvcGVydHk8J2NvbHVtbnMnLCBDb2x1bW5zQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdzZWFyY2gnLCBTZWFyY2hDaGFuZ2U+O1xuXG5leHBvcnQgdHlwZSBUYWJsZVN0YXRlUHJvcGVydHk8XG4gICAgVCA9ICdzb3J0JyB8ICdwYWdlJyB8ICdmaWx0ZXInIHwgJ2dyb3VwJyB8ICdmcmVlemUnIHwgJ2NvbHVtbnMnIHwgJ3NlYXJjaCcsXG4gICAgUCA9IFNvcnRDaGFuZ2UgfCBQYWdlQ2hhbmdlIHwgRmlsdGVyQ2hhbmdlIHwgR3JvdXBDaGFuZ2UgfCBGcmVlemVDaGFuZ2UgfCBDb2x1bW5zQ2hhbmdlXG4+ID0ge1xuICAgIHR5cGU6IFQ7XG4gICAgc3RhdGU6IFA7XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlIHtcbiAgICAvKiogVGFibGUgc3RhdGUgc3RyZWFtLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChERUZBVUxUX1RBQkxFX1NUQVRFKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9zZW1hbnRpY0hpZ2hsaWdodGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzRmlsdGVyaW5nRnJvbUhlYWRlckRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgICAvKiogVmlzaWJsZSBjb2x1bW5zIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSB2aXNpYmxlQ29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+KFtdKTtcbiAgICAvKiogVmlzaWJsZSBjb2x1bW5zIGxlbmd0aC4gKi9cbiAgICB2aXNpYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIFBvcHBpbmcgY29sdW1ucyBzdHJlYW0uICovXG4gICAgcmVhZG9ubHkgcG9wcGluZ0NvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPihbXSk7XG4gICAgLyoqIFBvcHBpbmcgY29sdW1ucyBsZW5ndGguICovXG4gICAgX3BvcHBpbmdDb2x1bW5zTGVuZ3RoID0gMDtcbiAgICAvKiogVGFibGUgY29sdW1ucyBzdHJlYW0uICovXG4gICAgcmVhZG9ubHkgdGFibGVDb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4oW10pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgdGFibGVTdGF0ZUNoYW5nZXMkID0gdGhpcy50YWJsZVN0YXRlJC5waXBlKHNraXAoMSkpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHNlYXJjaCBzdGF0ZSBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaENoYW5nZSQgPSBuZXcgU3ViamVjdDxTZWFyY2hDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gc29ydCBzdGF0ZSBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2UkID0gbmV3IFN1YmplY3Q8U29ydENoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBmaWx0ZXIgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICByZWFkb25seSBmaWx0ZXJDaGFuZ2UkID0gbmV3IFN1YmplY3Q8RmlsdGVyQ2hhbmdlPigpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGdyb3VwIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgZ3JvdXBDaGFuZ2UkID0gbmV3IFN1YmplY3Q8R3JvdXBDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gZnJlZXplIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgZnJlZXplQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEZyZWV6ZUNoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBjb2x1bW5zIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uc0NoYW5nZSQgPSBuZXcgU3ViamVjdDxDb2x1bW5zQ2hhbmdlPigpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHBhZ2Ugc3RhdGUgY2hhbmdlcy4gKi9cbiAgICByZWFkb25seSBwYWdlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFBhZ2VDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gbmV3IGZldGNoIG9mIGRhdGEgaXMgbmVlZGVkLiAqL1xuICAgIHJlYWRvbmx5IG5lZWRGZXRjaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8VGFibGVTdGF0ZUNoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBsb2FkaW5nIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgdGFibGVMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBMaXN0ZW4gZm9yIHNvZnQgY2hhbmdlcyBpbiB0YWJsZSBzdWJjb21wb25lbnRzIChtb3N0bHkgdGFibGUgY29sdW1uKSAqL1xuICAgIHJlYWRvbmx5IG1hcmtGb3JDaGVjayQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBMaXN0ZW4gZm9yIGltbWVkaWF0ZSBjaGFuZ2VzIGluIHRhYmxlIHN1YmNvbXBvbmVudHMgKG1vc3RseSB0YWJsZSBjb2x1bW4pICovXG4gICAgcmVhZG9ubHkgZGV0ZWN0Q2hhbmdlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBTb3J0IHJ1bGVzIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSBzb3J0UnVsZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXA8c3RyaW5nLCBDb2xsZWN0aW9uU29ydD4+KG5ldyBNYXAoKSk7XG4gICAgLyoqXG4gICAgICogRmlsdGVyIFJ1bGVzIE1hcCBzdHJlYW0uIFdoZXJlIGtleSBpcyBjb2x1bW4ga2V5LCBhbmQgdmFsdWUgaXMgdGhlIGFzc29jaWF0ZWQgZmlsdGVyIHJ1bGVzLlxuICAgICAqIE1hbnkgZmlsdGVycyBjYW4gYmUgYXBwbGllZCB0byBvbmUgY29sdW1uLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGZpbHRlclJ1bGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPHN0cmluZywgQ29sbGVjdGlvbkZpbHRlcltdPj4obmV3IE1hcCgpKTtcblxuICAgIC8qKlxuICAgICAqIEdyb3VwIFJ1bGVzIE1hcCBzdHJlYW0uIFdoZXJlIGtleSBpcyBjb2x1bW4ga2V5IGFuZCB2YWx1ZSBpcyBhc3NvY2lhdGVkIGdyb3VwIHJ1bGVcbiAgICAgKi9cbiAgICByZWFkb25seSBncm91cFJ1bGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPHN0cmluZywgQ29sbGVjdGlvbkdyb3VwPj4obmV3IE1hcCgpKTtcblxuICAgIC8qKiBHZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgZ2V0VGFibGVTdGF0ZSgpOiBUYWJsZVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVTdGF0ZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIHNldFRhYmxlU3RhdGUoc3RhdGU6IFRhYmxlU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZVN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgbG9hZGluZyBzdGF0ZSBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlTG9hZGluZyQubmV4dChpc0xvYWRpbmcpO1xuICAgIH1cblxuICAgIC8qKiBOb3RpZnkgYWJvdXQgY2hhbmdlcyBpbiB0YWJsZSBzdWJjb21wb25lbnRzIChtb3N0bHkgdGFibGUgY29sdW1uKSBhbmQgZGV0ZWN0IHRoZW0gb24gbmV4dCBkZXRlY3RvciBjaGVjay4gKi9cbiAgICBtYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIE5vdGlmeSBhYm91dCBjaGFuZ2VzIGluIHRhYmxlIHN1YmNvbXBvbmVudHMgKG1vc3RseSB0YWJsZSBjb2x1bW4pIGFuZCBkZXRlY3QgdGhlbSBpbW1lZGlhdGVseS4gKi9cbiAgICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoICovXG4gICAgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBzZWFyY2hJbnB1dCB9O1xuXG4gICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzZXRDdXJyZW50UGFnZVRvU3RhdGUoc3RhdGUsIDEpKTtcblxuICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHNlYXJjaElucHV0LCBwcmV2aW91czogcHJldlN0YXRlLnNlYXJjaElucHV0IH07XG5cbiAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdzZWFyY2gnLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICB0aGlzLnNlYXJjaENoYW5nZSQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgbmV3IHNvcnQgcnVsZXMgKi9cbiAgICBzZXRTb3J0KHNvcnRSdWxlczogQ29sbGVjdGlvblNvcnRbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldlNvcnRSdWxlcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLnNvcnRCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3U29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdID0gc29ydFJ1bGVzID8gWy4uLnNvcnRSdWxlc10gOiBbXTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBzb3J0Qnk6IG5ld1NvcnRSdWxlcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldlNvcnRSdWxlcywgc3RhdGUuc29ydEJ5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHNldEN1cnJlbnRQYWdlVG9TdGF0ZShzdGF0ZSwgMSkpO1xuICAgICAgICAgICAgdGhpcy5idWlsZFNvcnRSdWxlc01hcCgpO1xuICAgICAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5zb3J0QnksIHByZXZpb3VzOiBwcmV2U29ydFJ1bGVzIH07XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU29ydFJ1bGVzTWFwKCk7XG5cbiAgICAgICAgICAgIHRoaXMubmVlZEZldGNoJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ3NvcnQnLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQWRkIHNvcnQgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhZGRTb3J0KHNvcnRSdWxlczogQ29sbGVjdGlvblNvcnRbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldlNvcnRSdWxlcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLnNvcnRCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3U29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdID0gW1xuICAgICAgICAgICAgLi4ucHJldlNvcnRSdWxlcy5maWx0ZXIoKGV4aXN0aW5nKSA9PiAhc29ydFJ1bGVzLmZpbmQoKHsgZmllbGQgfSkgPT4gZmllbGQgPT09IGV4aXN0aW5nLmZpZWxkKSksXG4gICAgICAgICAgICAuLi5zb3J0UnVsZXNcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBzb3J0Qnk6IG5ld1NvcnRSdWxlcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldlNvcnRSdWxlcywgc3RhdGUuc29ydEJ5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHNldEN1cnJlbnRQYWdlVG9TdGF0ZShzdGF0ZSwgMSkpO1xuICAgICAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5zb3J0QnksIHByZXZpb3VzOiBwcmV2U29ydFJ1bGVzIH07XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU29ydFJ1bGVzTWFwKCk7XG5cbiAgICAgICAgICAgIHRoaXMubmVlZEZldGNoJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ3NvcnQnLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2V0IG5ldyBzb3J0IHJ1bGVzICovXG4gICAgc2V0RmlsdGVycyhmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2RmlsdGVyUnVsZXMgPSAocHJldlN0YXRlICYmIHByZXZTdGF0ZS5maWx0ZXJCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3RmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSA9IGZpbHRlclJ1bGVzID8gWy4uLmZpbHRlclJ1bGVzXSA6IFtdO1xuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBmaWx0ZXJCeTogbmV3RmlsdGVyUnVsZXMgfTtcblxuICAgICAgICBpZiAoIWVxdWFsKHByZXZGaWx0ZXJSdWxlcywgc3RhdGUuZmlsdGVyQnkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc2V0Q3VycmVudFBhZ2VUb1N0YXRlKHN0YXRlLCAxKSk7XG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLmZpbHRlckJ5LCBwcmV2aW91czogcHJldkZpbHRlclJ1bGVzIH07XG5cbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJSdWxlc01hcCgpO1xuICAgICAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoeyB0eXBlOiAnZmlsdGVyJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQWRkIGZpbHRlciBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZEZpbHRlcnMocnVsZXNUb0FkZDogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2RmlsdGVyUnVsZXMgPSAocHJldlN0YXRlICYmIHByZXZTdGF0ZS5maWx0ZXJCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3RmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSA9IFtcbiAgICAgICAgICAgIC4uLnByZXZGaWx0ZXJSdWxlcy5maWx0ZXIoKGV4aXN0aW5nKSA9PiAhcnVsZXNUb0FkZC5maW5kKCh7IGZpZWxkIH0pID0+IGZpZWxkID09PSBleGlzdGluZy5maWVsZCkpLFxuICAgICAgICAgICAgLi4ucnVsZXNUb0FkZFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIGZpbHRlckJ5OiBuZXdGaWx0ZXJSdWxlcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldkZpbHRlclJ1bGVzLCBzdGF0ZS5maWx0ZXJCeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzZXRDdXJyZW50UGFnZVRvU3RhdGUoc3RhdGUsIDEpKTtcbiAgICAgICAgICAgIGNvbnN0IGV2dCA9IHsgY3VycmVudDogc3RhdGUuZmlsdGVyQnksIHByZXZpb3VzOiBwcmV2RmlsdGVyUnVsZXMgfTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJSdWxlc01hcCgpO1xuXG4gICAgICAgICAgICB0aGlzLm5lZWRGZXRjaCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdmaWx0ZXInLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmVzIGZpbHRlcnMgZm9yIHRoZSBwcm92aWRlZCBmaWVsZHMgKi9cbiAgICByZW1vdmVGaWx0ZXJzKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXZGaWx0ZXJSdWxlcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLmZpbHRlckJ5KSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdGaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdID0gcHJldkZpbHRlclJ1bGVzLmZpbHRlcihcbiAgICAgICAgICAgIChleGlzdGluZykgPT4gIWZpZWxkcy5pbmNsdWRlcyhleGlzdGluZy5maWVsZClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBmaWx0ZXJCeTogbmV3RmlsdGVyUnVsZXMgfTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc2V0Q3VycmVudFBhZ2VUb1N0YXRlKHN0YXRlLCAxKSk7XG4gICAgICAgIGNvbnN0IGV2dCA9IHsgY3VycmVudDogc3RhdGUuZmlsdGVyQnksIHByZXZpb3VzOiBwcmV2RmlsdGVyUnVsZXMgfTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlclJ1bGVzTWFwKCk7XG5cbiAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdmaWx0ZXInLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZSQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgZ3JvdXAgcnVsZXMgKi9cbiAgICBzZXRHcm91cHMoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldkdyb3VwcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLmdyb3VwQnkpIHx8IFtdO1xuXG4gICAgICAgIGNvbnN0IG5ld0dyb3VwczogQ29sbGVjdGlvbkdyb3VwW10gPSBncm91cHMgPyBbLi4uZ3JvdXBzXSA6IFtdO1xuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBncm91cEJ5OiBuZXdHcm91cHMgfTtcblxuICAgICAgICBpZiAoIWVxdWFsKHByZXZHcm91cHMsIHN0YXRlLmdyb3VwQnkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5ncm91cEJ5LCBwcmV2aW91czogcHJldkdyb3VwcyB9O1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3VwUnVsZXNNYXAoKTtcblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdncm91cCcsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQWRkIGdyb3VwIHJ1bGVzIHRvIHRoZSBleGlzdGluZyBvbmVzICovXG4gICAgYWRkR3JvdXBzKGdyb3Vwc1RvQWRkOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldkdyb3VwcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLmdyb3VwQnkpIHx8IFtdO1xuXG4gICAgICAgIGNvbnN0IG5ld0dyb3VwczogQ29sbGVjdGlvbkdyb3VwW10gPSBbXG4gICAgICAgICAgICAuLi5wcmV2R3JvdXBzLmZpbHRlcigoZXhpc3RpbmcpID0+ICFncm91cHNUb0FkZC5maW5kKCh7IGZpZWxkIH0pID0+IGZpZWxkID09PSBleGlzdGluZy5maWVsZCkpLFxuICAgICAgICAgICAgLi4uZ3JvdXBzVG9BZGRcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBncm91cEJ5OiBuZXdHcm91cHMgfTtcblxuICAgICAgICBpZiAoIWVxdWFsKHByZXZHcm91cHMsIHN0YXRlLmdyb3VwQnkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3VwUnVsZXNNYXAoKTtcblxuICAgICAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5ncm91cEJ5LCBwcmV2aW91czogcHJldkdyb3VwcyB9O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdncm91cCcsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvKGNvbHVtbk5hbWU6IHN0cmluZyB8IG51bGwsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZSh7IC4uLnByZXZTdGF0ZSwgZnJlZXplVG9Db2x1bW46IGNvbHVtbk5hbWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoeyAuLi5wcmV2U3RhdGUsIGZyZWV6ZVRvRW5kQ29sdW1uOiBjb2x1bW5OYW1lIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZ0ID0ge1xuICAgICAgICAgICAgY3VycmVudDogY29sdW1uTmFtZSxcbiAgICAgICAgICAgIHByZXZpb3VzOiBlbmQgPyBwcmV2U3RhdGUuZnJlZXplVG9FbmRDb2x1bW4gOiBwcmV2U3RhdGUuZnJlZXplVG9Db2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2ZyZWV6ZScsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgIHRoaXMuZnJlZXplQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0YWJsZSBjb2x1bW5zICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSwga2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXZDb2x1bW5zID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuY29sdW1ucykgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFsuLi5jb2x1bW5zXTtcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uS2V5cyA9IFsuLi5rZXlzXTtcbiAgICAgICAgY29uc3Qgc3RhdGU6IFRhYmxlU3RhdGUgPSB7IC4uLnByZXZTdGF0ZSwgY29sdW1uczogbmV3Q29sdW1ucywgY29sdW1uS2V5czogbmV3Q29sdW1uS2V5cyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldkNvbHVtbnMsIHN0YXRlLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLmNvbHVtbnMsIHByZXZpb3VzOiBwcmV2Q29sdW1ucyB9O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdjb2x1bW5zJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZSQubmV4dChldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldCBwYWdlICovXG4gICAgc2V0Q3VycmVudFBhZ2UoY3VycmVudFBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldlBhZ2VTdGF0ZSA9IHByZXZTdGF0ZS5wYWdlO1xuXG4gICAgICAgIGlmIChwcmV2UGFnZVN0YXRlLmN1cnJlbnRQYWdlID09PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGU6IFRhYmxlU3RhdGUgPSBzZXRDdXJyZW50UGFnZVRvU3RhdGUocHJldlN0YXRlLCBjdXJyZW50UGFnZSk7XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHN0YXRlKTtcbiAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5wYWdlLCBwcmV2aW91czogcHJldlBhZ2VTdGF0ZSB9O1xuXG4gICAgICAgIHRoaXMubmVlZEZldGNoJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoeyB0eXBlOiAncGFnZScsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGRlZmF1bHQgdGFibGUgc3RhdGUuICovXG4gICAgZ2V0RGVmYXVsdFN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgICAgICBjb25zdCB0YWJsZVN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5LZXlzOiB0YWJsZVN0YXRlLmNvbHVtbktleXMsXG4gICAgICAgICAgICBzb3J0Qnk6IFtdLFxuICAgICAgICAgICAgZmlsdGVyQnk6IFtdLFxuICAgICAgICAgICAgZ3JvdXBCeTogW10sXG4gICAgICAgICAgICBjb2x1bW5zOiB0YWJsZVN0YXRlLmNvbHVtbnMsXG4gICAgICAgICAgICBzZWFyY2hJbnB1dDoge1xuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgICAgICAgICAgIHRleHQ6ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJlZXplVG9Db2x1bW46IG51bGwsXG4gICAgICAgICAgICBmcmVlemVUb0VuZENvbHVtbjogbnVsbCxcbiAgICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMCxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNjcm9sbFRvcFBvc2l0aW9uOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hhcmVzIHZpc2libGUgY29sdW1ucyBhcnJheSBhY3Jvc3MgbGlzdGVuZXJzLlxuICAgICAqIEBwYXJhbSBjb2x1bW5zIFZpc2libGUgY29sdW1ucyB0byBzaGFyZS5cbiAgICAgKi9cbiAgICBzZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMkLm5leHQoY29sdW1ucyk7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnNMZW5ndGggPSBjb2x1bW5zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGFyZXMgcG9wcGluZyBjb2x1bW5zIGFycmF5IGFjcm9zcyBsaXN0ZW5lcnMuXG4gICAgICogQHBhcmFtIGNvbHVtbnMgUG9wcGluZyBjb2x1bW5zIHRvIHNoYXJlLlxuICAgICAqL1xuICAgIHNldFBvcHBpbmdDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BwaW5nQ29sdW1ucyQubmV4dChjb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fcG9wcGluZ0NvbHVtbnNMZW5ndGggPSBjb2x1bW5zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGdyb3VwaW5nIHJ1bGVzIGJhc2VkIG9uIHRoZSB0YWJsZSBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gc3RhdGUgVGFibGUgc3RhdGUuXG4gICAgICovXG4gICAgYnVpbGRHcm91cFJ1bGVzTWFwKHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXBNYXAgPSBuZXcgTWFwKHN0YXRlLmdyb3VwQnkubWFwKChydWxlKSA9PiBbcnVsZS5maWVsZCwgcnVsZV0pKTtcbiAgICAgICAgdGhpcy5ncm91cFJ1bGVzJC5uZXh0KGdyb3VwTWFwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIHNvcnRpbmcgcnVsZXMgYmFzZWQgb24gdGhlIHRhYmxlIHN0YXRlLlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUYWJsZSBzdGF0ZVxuICAgICAqL1xuICAgIGJ1aWxkU29ydFJ1bGVzTWFwKHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zb3J0UnVsZXMkLm5leHQobmV3IE1hcChzdGF0ZS5zb3J0QnkuZmlsdGVyKChydWxlKSA9PiBydWxlLmZpZWxkKS5tYXAoKHJ1bGUpID0+IFtydWxlLmZpZWxkISwgcnVsZV0pKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBmaWx0ZXIgcnVsZXMgYmFzZWQgb24gdGhlIHRhYmxlIHN0YXRlLlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUYWJsZSBzdGF0ZS5cbiAgICAgKi9cbiAgICBidWlsZEZpbHRlclJ1bGVzTWFwKHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJSdWxlcyQubmV4dChcbiAgICAgICAgICAgIHN0YXRlLmZpbHRlckJ5LnJlZHVjZSgoaGFzaCwgcnVsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHJ1bGUuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNoLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc2guc2V0KGtleSwgW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYXNoLmdldChrZXkpPy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICAgICAgfSwgbmV3IE1hcDxzdHJpbmcsIENvbGxlY3Rpb25GaWx0ZXJbXT4oKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGJhc2UgdGFibGUgY29uZmlnLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdFRhYmxlTWV0YWRhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRHcm91cFJ1bGVzTWFwKCk7XG4gICAgICAgIHRoaXMuYnVpbGRTb3J0UnVsZXNNYXAoKTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlclJ1bGVzTWFwKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50UGFnZVRvU3RhdGUoc3RhdGU6IFRhYmxlU3RhdGUsIGN1cnJlbnRQYWdlOiBudW1iZXIpOiBUYWJsZVN0YXRlIHtcbiAgICBjb25zdCBuZXdQYWdlU3RhdGU6IENvbGxlY3Rpb25QYWdlID0geyAuLi5zdGF0ZS5wYWdlLCBjdXJyZW50UGFnZSB9O1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCBwYWdlOiBuZXdQYWdlU3RhdGUgfTtcbn1cbiJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGFibGUtaGVscGVycy9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUErQnRELE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRUksMEJBQTBCO1FBQ2pCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxjQUFjO1FBQ0wsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLGNBQWM7UUFDTCxvQ0FBK0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsY0FBYztRQUNMLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxjQUFjO1FBQ0wsc0NBQWlDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELDhCQUE4QjtRQUNyQixvQkFBZSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDckQsOEJBQThCO1FBQzlCLHlCQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckUsOEJB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SSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBOEIsQ0FBQyxDQUM1QyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7OEdBbFlRLFlBQVk7a0hBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7QUFzWVgsU0FBUyxxQkFBcUIsQ0FBQyxLQUFpQixFQUFFLFdBQW1CO0lBQ2pFLE1BQU0sWUFBWSxHQUFtQixFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNwRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgREVGQVVMVF9UQUJMRV9TVEFURSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkZpbHRlciwgQ29sbGVjdGlvbkdyb3VwLCBDb2xsZWN0aW9uUGFnZSwgQ29sbGVjdGlvblNvcnQsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uc0NoYW5nZSxcbiAgICBGaWx0ZXJDaGFuZ2UsXG4gICAgRnJlZXplQ2hhbmdlLFxuICAgIEdyb3VwQ2hhbmdlLFxuICAgIFBhZ2VDaGFuZ2UsXG4gICAgU2VhcmNoQ2hhbmdlLFxuICAgIFNvcnRDaGFuZ2Vcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uJztcblxuZXhwb3J0IHR5cGUgVGFibGVTdGF0ZUNoYW5nZSA9XG4gICAgfCBUYWJsZVN0YXRlUHJvcGVydHk8J3NvcnQnLCBTb3J0Q2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdwYWdlJywgUGFnZUNoYW5nZT5cbiAgICB8IFRhYmxlU3RhdGVQcm9wZXJ0eTwnZmlsdGVyJywgRmlsdGVyQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdncm91cCcsIEdyb3VwQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdmcmVlemUnLCBGcmVlemVDaGFuZ2U+XG4gICAgfCBUYWJsZVN0YXRlUHJvcGVydHk8J2NvbHVtbnMnLCBDb2x1bW5zQ2hhbmdlPlxuICAgIHwgVGFibGVTdGF0ZVByb3BlcnR5PCdzZWFyY2gnLCBTZWFyY2hDaGFuZ2U+O1xuXG5leHBvcnQgdHlwZSBUYWJsZVN0YXRlUHJvcGVydHk8XG4gICAgVCA9ICdzb3J0JyB8ICdwYWdlJyB8ICdmaWx0ZXInIHwgJ2dyb3VwJyB8ICdmcmVlemUnIHwgJ2NvbHVtbnMnIHwgJ3NlYXJjaCcsXG4gICAgUCA9IFNvcnRDaGFuZ2UgfCBQYWdlQ2hhbmdlIHwgRmlsdGVyQ2hhbmdlIHwgR3JvdXBDaGFuZ2UgfCBGcmVlemVDaGFuZ2UgfCBDb2x1bW5zQ2hhbmdlXG4+ID0ge1xuICAgIHR5cGU6IFQ7XG4gICAgc3RhdGU6IFA7XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlIHtcbiAgICAvKiogVGFibGUgc3RhdGUgc3RyZWFtLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChERUZBVUxUX1RBQkxFX1NUQVRFKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9zZW1hbnRpY0hpZ2hsaWdodGluZyQgPSBzaWduYWwoJycpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzRmlsdGVyaW5nRnJvbUhlYWRlckRpc2FibGVkJCA9IHNpZ25hbChmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfaXNTaG93bk5hdmlnYXRpb25Db2x1bW4kID0gc2lnbmFsKGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJCA9IHNpZ25hbCgwKTtcbiAgICAvKiogVmlzaWJsZSBjb2x1bW5zIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSB2aXNpYmxlQ29sdW1ucyQgPSBzaWduYWw8VGFibGVDb2x1bW5bXT4oW10pO1xuICAgIC8qKiBWaXNpYmxlIGNvbHVtbnMgbGVuZ3RoLiAqL1xuICAgIHZpc2libGVDb2x1bW5zTGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aXNpYmxlQ29sdW1ucyQoKS5sZW5ndGgpO1xuICAgIC8qKiBQb3BwaW5nIGNvbHVtbnMgc3RyZWFtLiAqL1xuICAgIHJlYWRvbmx5IHBvcHBpbmdDb2x1bW5zJCA9IHNpZ25hbDxUYWJsZUNvbHVtbltdPihbXSk7XG4gICAgLyoqIFBvcHBpbmcgY29sdW1ucyBsZW5ndGguICovXG4gICAgX3BvcHBpbmdDb2x1bW5zTGVuZ3RoID0gMDtcbiAgICAvKiogVGFibGUgY29sdW1ucyBzdHJlYW0uICovXG4gICAgcmVhZG9ubHkgdGFibGVDb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVDb2x1bW5bXT4oW10pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgdGFibGVTdGF0ZUNoYW5nZXMkID0gdGhpcy50YWJsZVN0YXRlJC5waXBlKHNraXAoMSkpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHNlYXJjaCBzdGF0ZSBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaENoYW5nZSQgPSBuZXcgU3ViamVjdDxTZWFyY2hDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gc29ydCBzdGF0ZSBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2UkID0gbmV3IFN1YmplY3Q8U29ydENoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBmaWx0ZXIgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICByZWFkb25seSBmaWx0ZXJDaGFuZ2UkID0gbmV3IFN1YmplY3Q8RmlsdGVyQ2hhbmdlPigpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIGdyb3VwIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgZ3JvdXBDaGFuZ2UkID0gbmV3IFN1YmplY3Q8R3JvdXBDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gZnJlZXplIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgZnJlZXplQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEZyZWV6ZUNoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBjb2x1bW5zIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uc0NoYW5nZSQgPSBuZXcgU3ViamVjdDxDb2x1bW5zQ2hhbmdlPigpO1xuICAgIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHBhZ2Ugc3RhdGUgY2hhbmdlcy4gKi9cbiAgICByZWFkb25seSBwYWdlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFBhZ2VDaGFuZ2U+KCk7XG4gICAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gbmV3IGZldGNoIG9mIGRhdGEgaXMgbmVlZGVkLiAqL1xuICAgIHJlYWRvbmx5IG5lZWRGZXRjaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8VGFibGVTdGF0ZUNoYW5nZT4oKTtcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBsb2FkaW5nIHN0YXRlIGNoYW5nZXMuICovXG4gICAgcmVhZG9ubHkgdGFibGVMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBMaXN0ZW4gZm9yIHNvZnQgY2hhbmdlcyBpbiB0YWJsZSBzdWJjb21wb25lbnRzIChtb3N0bHkgdGFibGUgY29sdW1uKSAqL1xuICAgIHJlYWRvbmx5IG1hcmtGb3JDaGVjayQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBMaXN0ZW4gZm9yIGltbWVkaWF0ZSBjaGFuZ2VzIGluIHRhYmxlIHN1YmNvbXBvbmVudHMgKG1vc3RseSB0YWJsZSBjb2x1bW4pICovXG4gICAgcmVhZG9ubHkgZGV0ZWN0Q2hhbmdlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIC8qKiBTb3J0IHJ1bGVzIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSBzb3J0UnVsZXMkID0gc2lnbmFsPE1hcDxzdHJpbmcsIENvbGxlY3Rpb25Tb3J0Pj4obmV3IE1hcCgpKTtcbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgUnVsZXMgTWFwIHN0cmVhbS4gV2hlcmUga2V5IGlzIGNvbHVtbiBrZXksIGFuZCB2YWx1ZSBpcyB0aGUgYXNzb2NpYXRlZCBmaWx0ZXIgcnVsZXMuXG4gICAgICogTWFueSBmaWx0ZXJzIGNhbiBiZSBhcHBsaWVkIHRvIG9uZSBjb2x1bW4uXG4gICAgICovXG4gICAgcmVhZG9ubHkgZmlsdGVyUnVsZXMkID0gc2lnbmFsPE1hcDxzdHJpbmcsIENvbGxlY3Rpb25GaWx0ZXJbXT4+KG5ldyBNYXAoKSk7XG5cbiAgICAvKipcbiAgICAgKiBHcm91cCBSdWxlcyBNYXAgc3RyZWFtLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgYXNzb2NpYXRlZCBncm91cCBydWxlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ3JvdXBSdWxlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIENvbGxlY3Rpb25Hcm91cD4+KG5ldyBNYXAoKSk7XG5cbiAgICAvKiogR3JvdXAgUnVsZXMgTWFwIHNpZ25hbC4gKi9cbiAgICByZWFkb25seSBncm91cFJ1bGVzJCA9IHRvU2lnbmFsKHRoaXMuZ3JvdXBSdWxlc1N1YmplY3QpO1xuXG4gICAgLyoqIEdldCBjdXJyZW50IHN0YXRlL3NldHRpbmdzIG9mIHRoZSBUYWJsZS4gKi9cbiAgICBnZXRUYWJsZVN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVN0YXRlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlU3RhdGUkLm5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBsb2FkaW5nIHN0YXRlIG9mIHRoZSBUYWJsZS4gKi9cbiAgICBzZXRUYWJsZUxvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVMb2FkaW5nJC5uZXh0KGlzTG9hZGluZyk7XG4gICAgfVxuXG4gICAgLyoqIE5vdGlmeSBhYm91dCBjaGFuZ2VzIGluIHRhYmxlIHN1YmNvbXBvbmVudHMgKG1vc3RseSB0YWJsZSBjb2x1bW4pIGFuZCBkZXRlY3QgdGhlbSBvbiBuZXh0IGRldGVjdG9yIGNoZWNrLiAqL1xuICAgIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2skLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogTm90aWZ5IGFib3V0IGNoYW5nZXMgaW4gdGFibGUgc3ViY29tcG9uZW50cyAobW9zdGx5IHRhYmxlIGNvbHVtbikgYW5kIGRldGVjdCB0aGVtIGltbWVkaWF0ZWx5LiAqL1xuICAgIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcyQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggKi9cbiAgICBzZWFyY2goc2VhcmNoSW5wdXQ6IFNlYXJjaElucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIHNlYXJjaElucHV0IH07XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHNldEN1cnJlbnRQYWdlVG9TdGF0ZShzdGF0ZSwgMSkpO1xuXG4gICAgICAgIGNvbnN0IGV2dCA9IHsgY3VycmVudDogc2VhcmNoSW5wdXQsIHByZXZpb3VzOiBwcmV2U3RhdGUuc2VhcmNoSW5wdXQgfTtcblxuICAgICAgICB0aGlzLm5lZWRGZXRjaCQubmV4dCgpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ3NlYXJjaCcsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBuZXcgc29ydCBydWxlcyAqL1xuICAgIHNldFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2U29ydFJ1bGVzID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuc29ydEJ5KSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdTb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10gPSBzb3J0UnVsZXMgPyBbLi4uc29ydFJ1bGVzXSA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIHNvcnRCeTogbmV3U29ydFJ1bGVzIH07XG5cbiAgICAgICAgaWYgKCFlcXVhbChwcmV2U29ydFJ1bGVzLCBzdGF0ZS5zb3J0QnkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc2V0Q3VycmVudFBhZ2VUb1N0YXRlKHN0YXRlLCAxKSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkU29ydFJ1bGVzTWFwKCk7XG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLnNvcnRCeSwgcHJldmlvdXM6IHByZXZTb3J0UnVsZXMgfTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRTb3J0UnVsZXNNYXAoKTtcblxuICAgICAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoeyB0eXBlOiAnc29ydCcsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBBZGQgc29ydCBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2U29ydFJ1bGVzID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuc29ydEJ5KSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdTb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10gPSBbXG4gICAgICAgICAgICAuLi5wcmV2U29ydFJ1bGVzLmZpbHRlcigoZXhpc3RpbmcpID0+ICFzb3J0UnVsZXMuZmluZCgoeyBmaWVsZCB9KSA9PiBmaWVsZCA9PT0gZXhpc3RpbmcuZmllbGQpKSxcbiAgICAgICAgICAgIC4uLnNvcnRSdWxlc1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIHNvcnRCeTogbmV3U29ydFJ1bGVzIH07XG5cbiAgICAgICAgaWYgKCFlcXVhbChwcmV2U29ydFJ1bGVzLCBzdGF0ZS5zb3J0QnkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc2V0Q3VycmVudFBhZ2VUb1N0YXRlKHN0YXRlLCAxKSk7XG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLnNvcnRCeSwgcHJldmlvdXM6IHByZXZTb3J0UnVsZXMgfTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRTb3J0UnVsZXNNYXAoKTtcblxuICAgICAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoeyB0eXBlOiAnc29ydCcsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZXQgbmV3IHNvcnQgcnVsZXMgKi9cbiAgICBzZXRGaWx0ZXJzKGZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXZGaWx0ZXJSdWxlcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLmZpbHRlckJ5KSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdGaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdID0gZmlsdGVyUnVsZXMgPyBbLi4uZmlsdGVyUnVsZXNdIDogW107XG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIGZpbHRlckJ5OiBuZXdGaWx0ZXJSdWxlcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldkZpbHRlclJ1bGVzLCBzdGF0ZS5maWx0ZXJCeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzZXRDdXJyZW50UGFnZVRvU3RhdGUoc3RhdGUsIDEpKTtcbiAgICAgICAgICAgIGNvbnN0IGV2dCA9IHsgY3VycmVudDogc3RhdGUuZmlsdGVyQnksIHByZXZpb3VzOiBwcmV2RmlsdGVyUnVsZXMgfTtcblxuICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlclJ1bGVzTWFwKCk7XG4gICAgICAgICAgICB0aGlzLm5lZWRGZXRjaCQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdmaWx0ZXInLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBBZGQgZmlsdGVyIHJ1bGVzIHRvIHRoZSBleGlzdGluZyBvbmVzICovXG4gICAgYWRkRmlsdGVycyhydWxlc1RvQWRkOiBDb2xsZWN0aW9uRmlsdGVyW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHByZXZGaWx0ZXJSdWxlcyA9IChwcmV2U3RhdGUgJiYgcHJldlN0YXRlLmZpbHRlckJ5KSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdGaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdID0gW1xuICAgICAgICAgICAgLi4ucHJldkZpbHRlclJ1bGVzLmZpbHRlcigoZXhpc3RpbmcpID0+ICFydWxlc1RvQWRkLmZpbmQoKHsgZmllbGQgfSkgPT4gZmllbGQgPT09IGV4aXN0aW5nLmZpZWxkKSksXG4gICAgICAgICAgICAuLi5ydWxlc1RvQWRkXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3Qgc3RhdGU6IFRhYmxlU3RhdGUgPSB7IC4uLnByZXZTdGF0ZSwgZmlsdGVyQnk6IG5ld0ZpbHRlclJ1bGVzIH07XG5cbiAgICAgICAgaWYgKCFlcXVhbChwcmV2RmlsdGVyUnVsZXMsIHN0YXRlLmZpbHRlckJ5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHNldEN1cnJlbnRQYWdlVG9TdGF0ZShzdGF0ZSwgMSkpO1xuICAgICAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5maWx0ZXJCeSwgcHJldmlvdXM6IHByZXZGaWx0ZXJSdWxlcyB9O1xuICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlclJ1bGVzTWFwKCk7XG5cbiAgICAgICAgICAgIHRoaXMubmVlZEZldGNoJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2ZpbHRlcicsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZSQubmV4dChldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgZmlsdGVycyBmb3IgdGhlIHByb3ZpZGVkIGZpZWxkcyAqL1xuICAgIHJlbW92ZUZpbHRlcnMoZmllbGRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldkZpbHRlclJ1bGVzID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuZmlsdGVyQnkpIHx8IFtdO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10gPSBwcmV2RmlsdGVyUnVsZXMuZmlsdGVyKFxuICAgICAgICAgICAgKGV4aXN0aW5nKSA9PiAhZmllbGRzLmluY2x1ZGVzKGV4aXN0aW5nLmZpZWxkKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIGZpbHRlckJ5OiBuZXdGaWx0ZXJSdWxlcyB9O1xuXG4gICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzZXRDdXJyZW50UGFnZVRvU3RhdGUoc3RhdGUsIDEpKTtcbiAgICAgICAgY29uc3QgZXZ0ID0geyBjdXJyZW50OiBzdGF0ZS5maWx0ZXJCeSwgcHJldmlvdXM6IHByZXZGaWx0ZXJSdWxlcyB9O1xuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyUnVsZXNNYXAoKTtcblxuICAgICAgICB0aGlzLm5lZWRGZXRjaCQubmV4dCgpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2ZpbHRlcicsIHN0YXRlOiBldnQgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBncm91cCBydWxlcyAqL1xuICAgIHNldEdyb3Vwcyhncm91cHM6IENvbGxlY3Rpb25Hcm91cFtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2R3JvdXBzID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuZ3JvdXBCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3R3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSA9IGdyb3VwcyA/IFsuLi5ncm91cHNdIDogW107XG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIGdyb3VwQnk6IG5ld0dyb3VwcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldkdyb3Vwcywgc3RhdGUuZ3JvdXBCeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLmdyb3VwQnksIHByZXZpb3VzOiBwcmV2R3JvdXBzIH07XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBSdWxlc01hcCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2dyb3VwJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBBZGQgZ3JvdXAgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhZGRHcm91cHMoZ3JvdXBzVG9BZGQ6IENvbGxlY3Rpb25Hcm91cFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2R3JvdXBzID0gKHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUuZ3JvdXBCeSkgfHwgW107XG5cbiAgICAgICAgY29uc3QgbmV3R3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSA9IFtcbiAgICAgICAgICAgIC4uLnByZXZHcm91cHMuZmlsdGVyKChleGlzdGluZykgPT4gIWdyb3Vwc1RvQWRkLmZpbmQoKHsgZmllbGQgfSkgPT4gZmllbGQgPT09IGV4aXN0aW5nLmZpZWxkKSksXG4gICAgICAgICAgICAuLi5ncm91cHNUb0FkZFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlOiBUYWJsZVN0YXRlID0geyAuLi5wcmV2U3RhdGUsIGdyb3VwQnk6IG5ld0dyb3VwcyB9O1xuXG4gICAgICAgIGlmICghZXF1YWwocHJldkdyb3Vwcywgc3RhdGUuZ3JvdXBCeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBSdWxlc01hcCgpO1xuXG4gICAgICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLmdyb3VwQnksIHByZXZpb3VzOiBwcmV2R3JvdXBzIH07XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2dyb3VwJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGcmVlemUgdGFibGUgdG8gY29sdW1uICovXG4gICAgZnJlZXplVG8oY29sdW1uTmFtZTogc3RyaW5nIHwgbnVsbCwgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBpZiAoIWVuZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVN0YXRlKHsgLi4ucHJldlN0YXRlLCBmcmVlemVUb0NvbHVtbjogY29sdW1uTmFtZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZSh7IC4uLnByZXZTdGF0ZSwgZnJlZXplVG9FbmRDb2x1bW46IGNvbHVtbk5hbWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldnQgPSB7XG4gICAgICAgICAgICBjdXJyZW50OiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgcHJldmlvdXM6IGVuZCA/IHByZXZTdGF0ZS5mcmVlemVUb0VuZENvbHVtbiA6IHByZXZTdGF0ZS5mcmVlemVUb0NvbHVtblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoeyB0eXBlOiAnZnJlZXplJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgdGhpcy5mcmVlemVDaGFuZ2UkLm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKiogU2V0IHRhYmxlIGNvbHVtbnMgKi9cbiAgICBzZXRDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdLCBrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgcHJldkNvbHVtbnMgPSAocHJldlN0YXRlICYmIHByZXZTdGF0ZS5jb2x1bW5zKSB8fCBbXTtcblxuICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xuICAgICAgICBjb25zdCBuZXdDb2x1bW5LZXlzID0gWy4uLmtleXNdO1xuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHsgLi4ucHJldlN0YXRlLCBjb2x1bW5zOiBuZXdDb2x1bW5zLCBjb2x1bW5LZXlzOiBuZXdDb2x1bW5LZXlzIH07XG5cbiAgICAgICAgaWYgKCFlcXVhbChwcmV2Q29sdW1ucywgc3RhdGUuY29sdW1ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2dCA9IHsgY3VycmVudDogc3RhdGUuY29sdW1ucywgcHJldmlvdXM6IHByZXZDb2x1bW5zIH07XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHsgdHlwZTogJ2NvbHVtbnMnLCBzdGF0ZTogZXZ0IH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2V0IHBhZ2UgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBwcmV2UGFnZVN0YXRlID0gcHJldlN0YXRlLnBhZ2U7XG5cbiAgICAgICAgaWYgKHByZXZQYWdlU3RhdGUuY3VycmVudFBhZ2UgPT09IGN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZTogVGFibGVTdGF0ZSA9IHNldEN1cnJlbnRQYWdlVG9TdGF0ZShwcmV2U3RhdGUsIGN1cnJlbnRQYWdlKTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuICAgICAgICBjb25zdCBldnQgPSB7IGN1cnJlbnQ6IHN0YXRlLnBhZ2UsIHByZXZpb3VzOiBwcmV2UGFnZVN0YXRlIH07XG5cbiAgICAgICAgdGhpcy5uZWVkRmV0Y2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZSQubmV4dCh7IHR5cGU6ICdwYWdlJywgc3RhdGU6IGV2dCB9KTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlJC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgZGVmYXVsdCB0YWJsZSBzdGF0ZS4gKi9cbiAgICBnZXREZWZhdWx0U3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbktleXM6IHRhYmxlU3RhdGUuY29sdW1uS2V5cyxcbiAgICAgICAgICAgIHNvcnRCeTogW10sXG4gICAgICAgICAgICBmaWx0ZXJCeTogW10sXG4gICAgICAgICAgICBncm91cEJ5OiBbXSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRhYmxlU3RhdGUuY29sdW1ucyxcbiAgICAgICAgICAgIHNlYXJjaElucHV0OiB7XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICAgICAgdGV4dDogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcmVlemVUb0NvbHVtbjogbnVsbCxcbiAgICAgICAgICAgIGZyZWV6ZVRvRW5kQ29sdW1uOiBudWxsLFxuICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAwLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2Nyb2xsVG9wUG9zaXRpb246IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGFyZXMgdmlzaWJsZSBjb2x1bW5zIGFycmF5IGFjcm9zcyBsaXN0ZW5lcnMuXG4gICAgICogQHBhcmFtIGNvbHVtbnMgVmlzaWJsZSBjb2x1bW5zIHRvIHNoYXJlLlxuICAgICAqL1xuICAgIHNldFZpc2libGVDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyQuc2V0KGNvbHVtbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNoYXJlcyBwb3BwaW5nIGNvbHVtbnMgYXJyYXkgYWNyb3NzIGxpc3RlbmVycy5cbiAgICAgKiBAcGFyYW0gY29sdW1ucyBQb3BwaW5nIGNvbHVtbnMgdG8gc2hhcmUuXG4gICAgICovXG4gICAgc2V0UG9wcGluZ0NvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvcHBpbmdDb2x1bW5zJC5zZXQoY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3BvcHBpbmdDb2x1bW5zTGVuZ3RoID0gY29sdW1ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBncm91cGluZyBydWxlcyBiYXNlZCBvbiB0aGUgdGFibGUgc3RhdGUuXG4gICAgICogQHBhcmFtIHN0YXRlIFRhYmxlIHN0YXRlLlxuICAgICAqL1xuICAgIGJ1aWxkR3JvdXBSdWxlc01hcChzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwTWFwID0gbmV3IE1hcChzdGF0ZS5ncm91cEJ5Lm1hcCgocnVsZSkgPT4gW3J1bGUuZmllbGQsIHJ1bGVdKSk7XG4gICAgICAgIHRoaXMuZ3JvdXBSdWxlc1N1YmplY3QubmV4dChncm91cE1hcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBzb3J0aW5nIHJ1bGVzIGJhc2VkIG9uIHRoZSB0YWJsZSBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gc3RhdGUgVGFibGUgc3RhdGVcbiAgICAgKi9cbiAgICBidWlsZFNvcnRSdWxlc01hcChzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc29ydFJ1bGVzJC5zZXQobmV3IE1hcChzdGF0ZS5zb3J0QnkuZmlsdGVyKChydWxlKSA9PiBydWxlLmZpZWxkKS5tYXAoKHJ1bGUpID0+IFtydWxlLmZpZWxkISwgcnVsZV0pKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBmaWx0ZXIgcnVsZXMgYmFzZWQgb24gdGhlIHRhYmxlIHN0YXRlLlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUYWJsZSBzdGF0ZS5cbiAgICAgKi9cbiAgICBidWlsZEZpbHRlclJ1bGVzTWFwKHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJSdWxlcyQuc2V0KFxuICAgICAgICAgICAgc3RhdGUuZmlsdGVyQnkucmVkdWNlKChoYXNoLCBydWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcnVsZS5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc2guaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaC5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhc2guZ2V0KGtleSk/LnB1c2gocnVsZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICAgICAgICB9LCBuZXcgTWFwPHN0cmluZywgQ29sbGVjdGlvbkZpbHRlcltdPigpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYmFzZSB0YWJsZSBjb25maWcuXG4gICAgICovXG4gICAgY29uc3RydWN0VGFibGVNZXRhZGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZEdyb3VwUnVsZXNNYXAoKTtcbiAgICAgICAgdGhpcy5idWlsZFNvcnRSdWxlc01hcCgpO1xuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyUnVsZXNNYXAoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRQYWdlVG9TdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSwgY3VycmVudFBhZ2U6IG51bWJlcik6IFRhYmxlU3RhdGUge1xuICAgIGNvbnN0IG5ld1BhZ2VTdGF0ZTogQ29sbGVjdGlvblBhZ2UgPSB7IC4uLnN0YXRlLnBhZ2UsIGN1cnJlbnRQYWdlIH07XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIHBhZ2U6IG5ld1BhZ2VTdGF0ZSB9O1xufVxuIl19
|