cps-ui-kit 17.16.0 → 17.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +2 -1
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +3 -1
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +2 -1
- package/esm2022/lib/components/cps-switch/cps-switch.component.mjs +2 -1
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +2 -1
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +47 -47
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +19 -4
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +2 -1
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +2 -1
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +3 -3
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +3 -3
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +19 -4
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +29 -23
- package/fesm2022/cps-ui-kit.mjs +122 -78
- package/fesm2022/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +1 -0
- package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +1 -0
- package/lib/components/cps-input/cps-input.component.d.ts +1 -0
- package/lib/components/cps-switch/cps-switch.component.d.ts +1 -0
- package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -0
- package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +6 -5
- package/lib/components/cps-table/cps-table.component.d.ts +12 -1
- package/lib/components/cps-tag/cps-tag.component.d.ts +1 -0
- package/lib/components/cps-textarea/cps-textarea.component.d.ts +1 -0
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +12 -1
- package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +7 -5
- package/package.json +1 -1
package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs
CHANGED
|
@@ -8,20 +8,6 @@ import * as i1 from "@angular/forms";
|
|
|
8
8
|
* @group Components
|
|
9
9
|
*/
|
|
10
10
|
export class CpsBaseTreeDropdownComponent {
|
|
11
|
-
/**
|
|
12
|
-
* An array of objects to display as the available options.
|
|
13
|
-
* @group Props
|
|
14
|
-
*/
|
|
15
|
-
set options(options) {
|
|
16
|
-
if (options?.some((o) => o.inner)) {
|
|
17
|
-
this._options = options;
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
this._options = this._toInnerOptions(options);
|
|
21
|
-
}
|
|
22
|
-
get options() {
|
|
23
|
-
return this._options;
|
|
24
|
-
}
|
|
25
11
|
set value(value) {
|
|
26
12
|
this._value = value;
|
|
27
13
|
this.onChange(value);
|
|
@@ -162,6 +148,11 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
162
148
|
* @group Props
|
|
163
149
|
*/
|
|
164
150
|
this.showChevron = true;
|
|
151
|
+
/**
|
|
152
|
+
* An array of objects to display as the available options.
|
|
153
|
+
* @group Props
|
|
154
|
+
*/
|
|
155
|
+
this.options = [];
|
|
165
156
|
/**
|
|
166
157
|
* Value of the component.
|
|
167
158
|
* @group Props
|
|
@@ -173,7 +164,7 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
173
164
|
* @group Emits
|
|
174
165
|
*/
|
|
175
166
|
this.valueChanged = new EventEmitter();
|
|
176
|
-
this.
|
|
167
|
+
this.innerOptions = [];
|
|
177
168
|
this.optionsMap = new Map();
|
|
178
169
|
this.originalOptionsMap = new Map();
|
|
179
170
|
this.virtualListHeight = 240;
|
|
@@ -213,6 +204,11 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
213
204
|
this._checkErrors();
|
|
214
205
|
});
|
|
215
206
|
}
|
|
207
|
+
ngOnChanges(changes) {
|
|
208
|
+
if (changes.options) {
|
|
209
|
+
this.innerOptions = this._toInnerOptions(this.options);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
216
212
|
ngAfterViewInit() {
|
|
217
213
|
this._initContainerClickListener();
|
|
218
214
|
this.recalcVirtualListHeight();
|
|
@@ -224,6 +220,18 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
224
220
|
this.treeContainerElement?.removeEventListener('click', this._handleOnContainerClick.bind(this));
|
|
225
221
|
this.resizeObserver?.disconnect();
|
|
226
222
|
}
|
|
223
|
+
expandAll() {
|
|
224
|
+
this.optionsMap?.forEach((value) => {
|
|
225
|
+
if (value.children)
|
|
226
|
+
value.expanded = true;
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
collapseAll() {
|
|
230
|
+
this.optionsMap?.forEach((value) => {
|
|
231
|
+
if (value.children)
|
|
232
|
+
value.expanded = false;
|
|
233
|
+
});
|
|
234
|
+
}
|
|
227
235
|
registerOnChange(fn) {
|
|
228
236
|
this.onChange = fn;
|
|
229
237
|
}
|
|
@@ -274,7 +282,7 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
274
282
|
const key = this._getHTMLElementKey(parent);
|
|
275
283
|
if (!key)
|
|
276
284
|
return;
|
|
277
|
-
const treeNode = this.
|
|
285
|
+
const treeNode = this.innerOptions.find((o) => o.key === key);
|
|
278
286
|
if (!treeNode)
|
|
279
287
|
return;
|
|
280
288
|
treeNode.expanded = !treeNode.expanded;
|
|
@@ -482,18 +490,16 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
482
490
|
key,
|
|
483
491
|
styleClass: 'key-' + key
|
|
484
492
|
};
|
|
485
|
-
if (this.initialExpandAll) {
|
|
486
|
-
inner.expanded = true;
|
|
487
|
-
}
|
|
488
493
|
if (o.isDirectory) {
|
|
489
494
|
inner.type = 'directory';
|
|
490
495
|
inner.selectable = false;
|
|
491
496
|
inner.styleClass += ' cps-tree-node-fully-expandable';
|
|
492
|
-
if (this.initialExpandDirectories)
|
|
497
|
+
if (this.initialExpandDirectories)
|
|
493
498
|
inner.expanded = true;
|
|
494
|
-
}
|
|
495
499
|
}
|
|
496
500
|
if (o.children) {
|
|
501
|
+
if (this.initialExpandAll)
|
|
502
|
+
inner.expanded = true;
|
|
497
503
|
inner.children = o.children.map((c, index) => {
|
|
498
504
|
return mapOption(c, optionLabel, optionInfo, key + '-' + index, originalOptionsMap);
|
|
499
505
|
});
|
|
@@ -544,7 +550,7 @@ export class CpsBaseTreeDropdownComponent {
|
|
|
544
550
|
}
|
|
545
551
|
}
|
|
546
552
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CpsBaseTreeDropdownComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
547
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: CpsBaseTreeDropdownComponent, selector: "ng-component", inputs: { label: "label", hint: "hint", multiple: "multiple", disabled: "disabled", width: "width", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", optionLabel: "optionLabel", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", initialExpandDirectories: "initialExpandDirectories", initialExpandAll: "initialExpandAll", showChevron: "showChevron", options: "options", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "componentContainer", first: true, predicate: ["componentContainer"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "treeList", first: true, predicate: ["treeList"], descendants: true }, { propertyName: "boxEl", first: true, predicate: ["boxEl"], descendants: true }], ngImport: i0, template: '', isInline: true }); }
|
|
553
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: CpsBaseTreeDropdownComponent, selector: "ng-component", inputs: { label: "label", hint: "hint", multiple: "multiple", disabled: "disabled", width: "width", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", optionLabel: "optionLabel", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", initialExpandDirectories: "initialExpandDirectories", initialExpandAll: "initialExpandAll", showChevron: "showChevron", options: "options", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "componentContainer", first: true, predicate: ["componentContainer"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "treeList", first: true, predicate: ["treeList"], descendants: true }, { propertyName: "boxEl", first: true, predicate: ["boxEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '', isInline: true }); }
|
|
548
554
|
}
|
|
549
555
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CpsBaseTreeDropdownComponent, decorators: [{
|
|
550
556
|
type: Component,
|
|
@@ -627,4 +633,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
627
633
|
type: ViewChild,
|
|
628
634
|
args: ['boxEl']
|
|
629
635
|
}] } });
|
|
630
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWJhc2UtdHJlZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9pbnRlcm5hbC9jcHMtYmFzZS10cmVlLWRyb3Bkb3duL2Nwcy1iYXNlLXRyZWUtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUlqRTs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBK0p2Qzs7O09BR0c7SUFDSCxJQUFhLE9BQU8sQ0FBQyxPQUFjO1FBQ2pDLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBUUQsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQXlDRCxZQUM2QixPQUFrQixFQUN0QyxLQUF3QjtRQURKLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDdEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFyT2pDOzs7V0FHRztRQUNNLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFcEI7OztXQUdHO1FBQ00sU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVuQjs7O1dBR0c7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sVUFBSyxHQUFvQixNQUFNLENBQUM7UUFFekM7OztXQUdHO1FBQ00sVUFBSyxHQUFHLElBQUksQ0FBQztRQUV0Qjs7O1dBR0c7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUU5Qjs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOzs7V0FHRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRTVCOzs7V0FHRztRQUNNLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBRS9COzs7V0FHRztRQUNNLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFFN0I7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7OztXQUdHO1FBQ00sb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFakM7OztXQUdHO1FBQ00sZUFBVSxHQUFhLEVBQUUsQ0FBQztRQUVuQzs7O1dBR0c7UUFDTSxtQkFBYyxHQUFpQixNQUFNLENBQUM7UUFFL0M7OztXQUdHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBQztRQUV6Qjs7O1dBR0c7UUFDTSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQjs7O1dBR0c7UUFDTSxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFaEM7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUI7OztXQUdHO1FBQ00scUJBQWdCLEdBQUcscUJBQXFCLENBQUM7UUFFbEQ7OztXQUdHO1FBQ00sd0JBQW1CLEdBQW9CLE1BQU0sQ0FBQztRQUV2RDs7O1dBR0c7UUFDTSwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFdkM7OztXQUdHO1FBQ00sd0JBQW1CLEdBQXVCLEtBQUssQ0FBQztRQUV6RDs7O1dBR0c7UUFDTSw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFFMUM7OztXQUdHO1FBQ00scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRWxDOzs7V0FHRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBbUI1Qjs7O1dBR0c7UUFDYSxXQUFNLEdBQVEsU0FBUyxDQUFDO1FBV3hDOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFlakQsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDekMsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUU1QyxzQkFBaUIsR0FBRyxHQUFHLENBQUM7UUFDeEIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRTNCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUt2QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBcURiLGdFQUFnRTtRQUNoRSxhQUFRLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUU5QixnRUFBZ0U7UUFDaEUsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQWxEbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLEtBQUssRUFBRSxNQUFNO29CQUFFLElBQUksQ0FBQyxRQUFRLEdBQUksS0FBSyxDQUFDLE1BQWMsQ0FBQyxXQUFXLENBQUM7WUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQ3RFLEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRS9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FDNUMsT0FBTyxFQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFRRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxnQkFBZ0IsQ0FBQyxRQUFpQixJQUFHLENBQUM7SUFFdEMsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVc7UUFDZixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFFekIsSUFDRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3RDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDakQsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQWlCO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUVqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFdEIsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQWM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsRUFDdkMsR0FBRyxDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBYztRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUVwRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDMUQsQ0FBQztZQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FDdEQsY0FBYyxDQUNSLENBQUM7Z0JBQ1QsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixRQUFRLENBQUMsY0FBYyxDQUFDO3dCQUN0QixRQUFRLEVBQUUsU0FBUzt3QkFDbkIsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxRQUFRO3FCQUNqQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNwRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2xCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQzs0QkFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ3JFLENBQUM7O3dCQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztvQkFDcEMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDUixNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTO3dCQUN2QywyRkFBMkY7d0JBQzNGLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQy9CLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1YsSUFBSSxHQUFHLElBQUksQ0FBQzs0QkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4RCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxDQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FDckMsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFMUUsSUFBSSxTQUFTO2dCQUFHLFNBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsdUJBQXVCLENBQzFCLEtBQUssRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQzFCLEtBQUssRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFjO1FBQ2pDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0I7WUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUN4QyxPQUFPLEVBQ1AsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDeEMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBVTtRQUN4QyxTQUFTLGtCQUFrQixDQUN6QixPQUEyQixFQUMzQixTQUFpQjtZQUVqQixJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUM7WUFDN0IsT0FBTyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNqRCxPQUFPLGNBQWMsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2hFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNkLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFM0QsSUFDRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsZ0NBQWdDLENBQUMsRUFDMUUsQ0FBQztZQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVM7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO1lBQy9DLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUs7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDakQsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFpQjtRQUNwQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxFQUFFLGFBQWE7WUFBRSxDQUFDLElBQUksRUFBRSxhQUE2QixDQUFBLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVPLHVCQUF1QixDQUFDLElBQWlCO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDO1lBQ2pDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxlQUFlLENBQUM7SUFDMUMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFZO1FBQ2pDLFNBQVMsWUFBWSxDQUFDLEdBQVc7WUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksa0JBQWtCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUM7WUFFOUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFlO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLENBQU0sRUFDTixXQUFtQixFQUNuQixVQUFrQixFQUNsQixHQUFXLEVBQ1gsa0JBQXVCLEVBQ3ZCLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRztnQkFDWixLQUFLLEVBQUUsSUFBSTtnQkFDWCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDckIsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ25CLEdBQUc7Z0JBQ0gsVUFBVSxFQUFFLE1BQU0sR0FBRyxHQUFHO2FBQ2IsQ0FBQztZQUVkLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7WUFFRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixLQUFLLENBQUMsVUFBVSxJQUFJLGlDQUFpQyxDQUFDO2dCQUN0RCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO29CQUNsQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEtBQWEsRUFBRSxFQUFFO29CQUN4RCxPQUFPLFNBQVMsQ0FDZCxDQUFDLEVBQ0QsV0FBVyxFQUNYLFVBQVUsRUFDVixHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFDakIsa0JBQWtCLENBQ25CLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0Qsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekMsT0FBTyxTQUFTLENBQ2QsTUFBTSxFQUNOLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQ2YsRUFBRSxHQUFHLEtBQUssRUFDVixJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQWM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8scUJBQXFCLENBQUMsS0FBVTtRQUN0QyxTQUFTLE1BQU0sQ0FBQyxDQUFNLEVBQUUsR0FBcUI7WUFDM0MsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLEdBQWUsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxHQUFHO29CQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFhLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDOzhHQXZxQlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIseXlDQUY3QixFQUFFOzsyRkFFRCw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7OzBCQXdPSSxJQUFJOzswQkFBSSxRQUFRO3lFQWhPVixLQUFLO3NCQUFiLEtBQUs7Z0JBTUcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFNRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTU8sT0FBTztzQkFBbkIsS0FBSztnQkFpQlUsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQWdCSixZQUFZO3NCQUFyQixNQUFNO2dCQUdQLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBSS9CLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUdELFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFHckIsS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmVlIH0gZnJvbSAncHJpbWVuZy90cmVlJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSWNvblR5cGUsIGljb25TaXplVHlwZSB9IGZyb20gJy4uLy4uL2Nwcy1pY29uL2Nwcy1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb252ZXJ0U2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ludGVybmFsL3NpemUtdXRpbHMnO1xuaW1wb3J0IHsgQ3BzVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9jcHMtdG9vbHRpcC9jcHMtdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5cbi8qKlxuICogQmFzZVRyZWVEcm9wZG93bkNvbXBvbmVudCBpcyBhbiBpbnRlcm5hbCBiYXNlIGNvbXBvbmVudCB0byBzdXBwb3J0IGhpZXJhcmNoaWNhbCBkYXRhIGRyb3Bkb3duLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBDcHNCYXNlVHJlZURyb3Bkb3duQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBMYWJlbCBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG5cbiAgLyoqXG4gICAqIEJvdHRvbSBoaW50IHRleHQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGludCA9ICcnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgbXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgY29tcG9uZW50LCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2VsZWN0aW5nIGFuIGVsZW1lbnQsIGl0IHdpbGwgYXBwZWFyIGluIGEgZm9ybSBvZiBhIGNoaXAuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNoaXBzIGNhbiBiZSBkaXJlY3RseSByZW1vdmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBvcGVuIG9uIGNsZWFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5PbkNsZWFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbGFiZWwgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaW5mbyBmaWVsZCBvZiBhbiBvcHRpb24sIHNob3dzIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRleHQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uSW5mbyA9ICdpbmZvJztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaGlkaW5nIGRldGFpbHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZURldGFpbHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGhhdmUgcGVyc2lzdGVudCBjbGVhciBpY29uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBlcnNpc3RlbnRDbGVhciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJY29uIGJlZm9yZSBpbnB1dCB2YWx1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBwcmVmaXhJY29uOiBJY29uVHlwZSA9ICcnO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIGljb24gYmVmb3JlIGlucHV0IHZhbHVlLCBvZiB0eXBlIG51bWJlciwgc3RyaW5nLCAnZmlsbCcsICd4c21hbGwnLCAnc21hbGwnLCAnbm9ybWFsJyBvciAnbGFyZ2UnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHByZWZpeEljb25TaXplOiBpY29uU2l6ZVR5cGUgPSAnMThweCc7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBsb2FkaW5nIGJhciBpcyBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25seSB0aGUgZWxlbWVudHMgd2l0aGluIHNjcm9sbGFibGUgYXJlYSBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgRE9NIG91dHNpZGUgb2YgdGhlIHZpZXcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcblxuICAvKipcbiAgICogV2hlbiBpdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbiBpbmZvIGljb24gaXMgZGlzcGxheWVkIHRvIHNob3cgdGV4dCBmb3IgbW9yZSBpbmZvLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZm8gdG9vbHRpcCBjbGFzcyBmb3Igc3R5bGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcENsYXNzID0gJ2Nwcy10b29sdGlwLWNvbnRlbnQnO1xuXG4gIC8qKlxuICAgKiBNYXggd2lkdGggb2YgaW5mb1Rvb2x0aXAgb2YgdHlwZSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIHN0cmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcE1heFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgaW5mb1Rvb2x0aXAgaXMgcGVyc2lzdGVudC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBlcnNpc3RlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgaW5mb1Rvb2x0aXAsIGl0IGNhbiBiZSAndG9wJywgJ2JvdHRvbScsICdsZWZ0JyBvciAncmlnaHQnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUG9zaXRpb246IENwc1Rvb2x0aXBQb3NpdGlvbiA9ICd0b3AnO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgaXQgZXhwYW5kcyBhbGwgZGlyZWN0aW9yaWVzIGluaXRpYWxseS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsRXhwYW5kRGlyZWN0b3JpZXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiBzZXQsIGl0IGV4cGFuZHMgYWxsIG9wdGlvbnMgaW5pdGlhbGx5LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxFeHBhbmRBbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjaGV2cm9uIGljb24gc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Q2hldnJvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheSBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uczogYW55W10pIHtcbiAgICBpZiAob3B0aW9ucz8uc29tZSgobykgPT4gby5pbm5lcikpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl90b0lubmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IFRyZWVOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCd2YWx1ZScpIF92YWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gdmFsdWUgY2hhbmdlLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gdmFsdWUgY2hhbmdlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50Q29udGFpbmVyJylcbiAgY29tcG9uZW50Q29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdvcHRpb25zTWVudScpXG4gIG9wdGlvbnNNZW51ITogQ3BzTWVudUNvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCd0cmVlTGlzdCcpIHRyZWVMaXN0ITogVHJlZTtcblxuICBAVmlld0NoaWxkKCdib3hFbCcpXG4gIGJveEVsITogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIF9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIF9vcHRpb25zOiBUcmVlTm9kZVtdID0gW107XG4gIG9wdGlvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU+KCk7XG4gIG9yaWdpbmFsT3B0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgdmlydHVhbExpc3RIZWlnaHQgPSAyNDA7XG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDQwO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIG9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgaXNBdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICB0cmVlQ29udGFpbmVyRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICB0cmVlU2VsZWN0aW9uOiBhbnk7XG5cbiAgYm94V2lkdGggPSAwO1xuICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29udHJvbDogTmdDb250cm9sLFxuICAgIHB1YmxpYyBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeT8udGFyZ2V0KSB0aGlzLmJveFdpZHRoID0gKGVudHJ5LnRhcmdldCBhcyBhbnkpLm9mZnNldFdpZHRoO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN2dFdpZHRoID0gY29udmVydFNpemUodGhpcy53aWR0aCk7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy50cmVlU2VsZWN0aW9uID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMuX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2luaXRDb250YWluZXJDbGlja0xpc3RlbmVyKCk7XG4gICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmJveEVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5faGFuZGxlT25Db250YWluZXJDbGljay5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSwgaW50ZXJuYWwgPSBmYWxzZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAoIWludGVybmFsICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZVRvVHJlZVNlbGVjdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHt9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuY29udHJvbD8uY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLmNvbXBvbmVudENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcbiAgICB0aGlzLnRvZ2dsZU9wdGlvbnModHJ1ZSk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlLCB0cnVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKFxuICAgICAgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbikgfHxcbiAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbj8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMubXVsdGlwbGUgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHZhbDtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsKTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25Gb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBvblNlbGVjdE5vZGUoKSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnRvZ2dsZU9wdGlvbnMoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tGdWxseUV4cGFuZGFibGUoZWxlbTogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZ2V0SFRNTEVsZW1lbnRLZXkocGFyZW50KTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuXG4gICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLm9wdGlvbnMuZmluZCgobykgPT4gby5rZXkgPT09IGtleSk7XG4gICAgaWYgKCF0cmVlTm9kZSkgcmV0dXJuO1xuXG4gICAgdHJlZU5vZGUuZXhwYW5kZWQgPSAhdHJlZU5vZGUuZXhwYW5kZWQ7XG4gICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9ub2RlVG9nZ2xlZChlbGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRyZWVTZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbjogYW55KSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnRyZWVTZWxlY3Rpb25Ub1ZhbHVlKHNlbGVjdGlvbikpO1xuICB9XG5cbiAgcmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50TGVuID0gdGhpcy50cmVlTGlzdD8uc2VyaWFsaXplZFZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICB0aGlzLnZpcnR1YWxMaXN0SGVpZ2h0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSAqIGN1cnJlbnRMZW4sXG4gICAgICAyNDBcbiAgICApO1xuICAgIHRoaXMuX3NldFRyZWVMaXN0SGVpZ2h0KHRoaXMudmlydHVhbExpc3RIZWlnaHQgKyAncHgnKTtcbiAgfVxuXG4gIHRvZ2dsZU9wdGlvbnMoc2hvdz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzT3BlbmVkID09PSBzaG93KSByZXR1cm47XG5cbiAgICBpZiAodHlwZW9mIHNob3cgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zTWVudS5zaG93KHtcbiAgICAgICAgICB0YXJnZXQ6IHRoaXMuYm94RWwubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9uc01lbnUuaGlkZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNNZW51LnRvZ2dsZSh7XG4gICAgICAgIHRhcmdldDogdGhpcy5ib3hFbC5uYXRpdmVFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmlzT3BlbmVkID0gdGhpcy5vcHRpb25zTWVudS5pc1Zpc2libGUoKTtcblxuICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzT3BlbmVkICYmIHRoaXMudHJlZVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5fZXhwYW5kVG9Ob2RlcyhcbiAgICAgICAgdGhpcy5tdWx0aXBsZSA/IHRoaXMudHJlZVNlbGVjdGlvbiA6IFt0aGlzLnRyZWVTZWxlY3Rpb25dXG4gICAgICApO1xuICAgICAgdGhpcy5fc2V0VHJlZUxpc3RIZWlnaHQoJycpO1xuICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtaGlnaGxpZ2h0J1xuICAgICAgICApIGFzIGFueTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMudHJlZVNlbGVjdGlvbikge1xuICAgICAgICAgIGxldCBrZXkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlbGVjdGlvbi5sZW5ndGggPiAwKSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb25bMF0ua2V5O1xuICAgICAgICAgIH0gZWxzZSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb24ua2V5O1xuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9XG4gICAgICAgICAgICAgIHRoaXMudHJlZUxpc3Q/LnNlcmlhbGl6ZWRWYWx1ZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmltZWZhY2VzL3ByaW1lbmcvYmxvYi92MTYuNC4zL3NyYy9hcHAvY29tcG9uZW50cy90cmVlL3RyZWUudHMjTDExMjVcbiAgICAgICAgICAgICAgICAodjogYW55KSA9PiB2Lm5vZGUua2V5ID09PSBrZXlcbiAgICAgICAgICAgICAgKSB8fCAtMTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy50cmVlTGlzdC5zY3JvbGxUb1ZpcnR1YWxJbmRleChpZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKG9wdGlvbjogVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHJldHVybjtcblxuICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMudHJlZVNlbGVjdGlvbi5maWx0ZXIoXG4gICAgICAodjogVHJlZU5vZGUpID0+ICFpc0VxdWFsKHYsIG9wdGlvbilcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uVG9WYWx1ZSh0aGlzLnRyZWVTZWxlY3Rpb24pKTtcbiAgfVxuXG4gIGluaXRBcnJvd3NOYXZpZ2F0b24oKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMub3B0aW9uRm9jdXNlZCkge1xuICAgICAgY29uc3QgZmlyc3RFbGVtID0gdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZW5vZGUnKTtcblxuICAgICAgaWYgKGZpcnN0RWxlbSkgKGZpcnN0RWxlbSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Ob2RlRXhwYW5kKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9ub2RlVG9nZ2xlZFdpdGhDaGV2cm9uKFxuICAgICAgZXZlbnQ/Lm9yaWdpbmFsRXZlbnQ/LmN1cnJlbnRUYXJnZXQ/LnBhcmVudEVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgb25Ob2RlQ29sbGFwc2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuX25vZGVUb2dnbGVkV2l0aENoZXZyb24oXG4gICAgICBldmVudD8ub3JpZ2luYWxFdmVudD8uY3VycmVudFRhcmdldD8ucGFyZW50RWxlbWVudFxuICAgICk7XG4gIH1cblxuICB0cmVlU2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb246IGFueSkge1xuICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gc2VsZWN0aW9uLm1hcCgoczogYW55KSA9PiB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcC5nZXQocy5rZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxPcHRpb25zTWFwLmdldChzZWxlY3Rpb24ua2V5KTtcbiAgICB9XG4gIH1cblxuICAvLyB0aGlzIGlzIGEgZml4IG9mIHByaW1lbmcgY2hhbmdlIGRldGVjdGlvbiBidWcgd2hlbiB2aXJ0dWFsIHNjcm9sbGVyIGlzIGVuYWJsZWRcbiAgdXBkYXRlT3B0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuICAgIHRoaXMudHJlZUxpc3Q/LnVwZGF0ZVNlcmlhbGl6ZWRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKSB7XG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCA9XG4gICAgICB0aGlzLnRyZWVMaXN0Py5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZS1jb250YWluZXInKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50V2l0aENsYXNzKFxuICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IHRydWU7XG5cbiAgICBjb25zdCBlbGVtID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncC10cmVlbm9kZS1jb250ZW50JylcbiAgICAgID8gZXZlbnQudGFyZ2V0XG4gICAgICA6IGdldFBhcmVudFdpdGhDbGFzcyhldmVudC50YXJnZXQsICdwLXRyZWVub2RlLWNvbnRlbnQnKTtcblxuICAgIGlmIChcbiAgICAgIGVsZW0/LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnMoJ2Nwcy10cmVlLW5vZGUtZnVsbHktZXhwYW5kYWJsZScpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tGdWxseUV4cGFuZGFibGUoZWxlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SFRNTEVsZW1lbnRLZXkoZWxlbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWVsZW0/LmNsYXNzTGlzdCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGNsYXNzTGlzdCA9IFsuLi5lbGVtLmNsYXNzTGlzdF07XG4gICAgY29uc3Qga2V5ID0gY2xhc3NMaXN0LmZpbmQoKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2tleS0nKTtcbiAgICB9KTtcbiAgICBpZiAoIWtleSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBrZXkucmVwbGFjZSgna2V5LScsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFRyZWVMaXN0SGVpZ2h0KGhlaWdodDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudHJlZUxpc3Q/LnNjcm9sbGVyPy5zdHlsZSlcbiAgICAgIHRoaXMudHJlZUxpc3Quc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBfbm9kZVRvZ2dsZWQoZWxlbTogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNNZW51LmFsaWduKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZWxlbT8ucGFyZW50RWxlbWVudCkgKGVsZW0/LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9ub2RlVG9nZ2xlZFdpdGhDaGV2cm9uKGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5fbm9kZVRvZ2dsZWQoZWxlbSk7XG4gICAgLy8gZml4IHByaW1lbmcgdHJlZSBldmVudCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgdGhpcy5vcHRpb25zTWVudS5zZWxmQ2xpY2sgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8uZXJyb3JzO1xuXG4gICAgaWYgKCF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWQgfHwgIWVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgncmVxdWlyZWQnIGluIGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICdGaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyQXJyID0gT2JqZWN0LnZhbHVlcyhlcnJvcnMpO1xuICAgIGlmIChlcnJBcnIubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyQXJyLmZpbmQoKG1zZykgPT4gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpO1xuXG4gICAgdGhpcy5lcnJvciA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXhwYW5kVG9Ob2Rlcyhub2RlczogYW55W10pIHtcbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgY29uc3QgbGFzdFNlcGFyYXRvckluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCctJyk7XG4gICAgICBpZiAobGFzdFNlcGFyYXRvckluZGV4ICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ga2V5LnN1YnN0cmluZygwLCBsYXN0U2VwYXJhdG9ySW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGVLZXkgPSBnZXRQYXJlbnRLZXkobm9kZS5rZXkpO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMub3B0aW9uc01hcC5nZXQocGFyZW50Tm9kZUtleSkgfHwgbnVsbDtcblxuICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgcGFyZW50Tm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2V4cGFuZFRvTm9kZXMoW3BhcmVudE5vZGVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvSW5uZXJPcHRpb25zKF9vcHRpb25zOiBhbnlbXSk6IFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG1hcE9wdGlvbiA9IChcbiAgICAgIG86IGFueSxcbiAgICAgIG9wdGlvbkxhYmVsOiBzdHJpbmcsXG4gICAgICBvcHRpb25JbmZvOiBzdHJpbmcsXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIG9yaWdpbmFsT3B0aW9uc01hcDogYW55XG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBpbm5lciA9IHtcbiAgICAgICAgaW5uZXI6IHRydWUsXG4gICAgICAgIGxhYmVsOiBvW29wdGlvbkxhYmVsXSxcbiAgICAgICAgaW5mbzogb1tvcHRpb25JbmZvXSxcbiAgICAgICAga2V5LFxuICAgICAgICBzdHlsZUNsYXNzOiAna2V5LScgKyBrZXlcbiAgICAgIH0gYXMgVHJlZU5vZGU7XG5cbiAgICAgIGlmICh0aGlzLmluaXRpYWxFeHBhbmRBbGwpIHtcbiAgICAgICAgaW5uZXIuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoby5pc0RpcmVjdG9yeSkge1xuICAgICAgICBpbm5lci50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgICAgIGlubmVyLnNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgaW5uZXIuc3R5bGVDbGFzcyArPSAnIGNwcy10cmVlLW5vZGUtZnVsbHktZXhwYW5kYWJsZSc7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxFeHBhbmREaXJlY3Rvcmllcykge1xuICAgICAgICAgIGlubmVyLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG8uY2hpbGRyZW4pIHtcbiAgICAgICAgaW5uZXIuY2hpbGRyZW4gPSBvLmNoaWxkcmVuLm1hcCgoYzogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG1hcE9wdGlvbihcbiAgICAgICAgICAgIGMsXG4gICAgICAgICAgICBvcHRpb25MYWJlbCxcbiAgICAgICAgICAgIG9wdGlvbkluZm8sXG4gICAgICAgICAgICBrZXkgKyAnLScgKyBpbmRleCxcbiAgICAgICAgICAgIG9yaWdpbmFsT3B0aW9uc01hcFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxPcHRpb25zTWFwLnNldChrZXksIG8pO1xuICAgICAgcmV0dXJuIGlubmVyO1xuICAgIH07XG5cbiAgICBjb25zdCByZXMgPSBfb3B0aW9ucy5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgIG9wdGlvbixcbiAgICAgICAgdGhpcy5vcHRpb25MYWJlbCxcbiAgICAgICAgdGhpcy5vcHRpb25JbmZvLFxuICAgICAgICAnJyArIGluZGV4LFxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9uc01hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChyZXMpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkT3B0aW9uc01hcChvcHRpb25zOiBhbnlbXSk6IE1hcDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIG5vZGVNYXAuc2V0KG9wdGlvbi5rZXksIG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZE5vZGVNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gbm9kZU1hcC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZU1hcDtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBmdW5jdGlvbiBnZXRLZXkodjogYW55LCBtYXA6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIG1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGlzRXF1YWwodiwgdmFsKSkge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHJlczogVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgdmFsdWUuZm9yRWFjaCgodjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldEtleSh2LCB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcCk7XG4gICAgICAgIGlmIChrZXkpIHJlcy5wdXNoKHRoaXMub3B0aW9uc01hcC5nZXQoa2V5KSBhcyBUcmVlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IGdldEtleSh2YWx1ZSwgdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXApO1xuICAgICAgcmV0dXJuIGtleSA/IHRoaXMub3B0aW9uc01hcC5nZXQoa2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
636
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWJhc2UtdHJlZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9pbnRlcm5hbC9jcHMtYmFzZS10cmVlLWRyb3Bkb3duL2Nwcy1iYXNlLXRyZWUtZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFFSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUlqRTs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBMkt2QyxJQUFJLEtBQUssQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBeUNELFlBQzZCLE9BQWtCLEVBQ3RDLEtBQXdCO1FBREosWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUN0QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTFOakM7OztXQUdHO1FBQ00sVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQjs7O1dBR0c7UUFDTSxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBRW5COzs7V0FHRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7O1dBR0c7UUFDTSxVQUFLLEdBQW9CLE1BQU0s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LEtBQUs7Z0JBTUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFNVSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBZ0JKLFlBQVk7c0JBQXJCLE1BQU07Z0JBR1Asa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQjtnQkFJL0IsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBR0QsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUdyQixLQUFLO3NCQURKLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEljb25UeXBlLCBpY29uU2l6ZVR5cGUgfSBmcm9tICcuLi8uLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9pbnRlcm5hbC9zaXplLXV0aWxzJztcbmltcG9ydCB7IENwc1Rvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvY3BzLXRvb2x0aXAvY3BzLXRvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IENwc01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jcHMtbWVudS9jcHMtbWVudS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEJhc2VUcmVlRHJvcGRvd25Db21wb25lbnQgaXMgYW4gaW50ZXJuYWwgYmFzZSBjb21wb25lbnQgdG8gc3VwcG9ydCBoaWVyYXJjaGljYWwgZGF0YSBkcm9wZG93bi5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgY2xhc3MgQ3BzQmFzZVRyZWVEcm9wZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBMYWJlbCBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG5cbiAgLyoqXG4gICAqIEJvdHRvbSBoaW50IHRleHQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGludCA9ICcnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaWYgbXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaWR0aCBvZiB0aGUgY29tcG9uZW50LCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2VsZWN0aW5nIGFuIGVsZW1lbnQsIGl0IHdpbGwgYXBwZWFyIGluIGEgZm9ybSBvZiBhIGNoaXAuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNoaXBzIGNhbiBiZSBkaXJlY3RseSByZW1vdmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBvcGVuIG9uIGNsZWFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5PbkNsZWFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgbGFiZWwgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaW5mbyBmaWVsZCBvZiBhbiBvcHRpb24sIHNob3dzIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRleHQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uSW5mbyA9ICdpbmZvJztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaGlkaW5nIGRldGFpbHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZURldGFpbHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGhhdmUgcGVyc2lzdGVudCBjbGVhciBpY29uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBlcnNpc3RlbnRDbGVhciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJY29uIGJlZm9yZSBpbnB1dCB2YWx1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBwcmVmaXhJY29uOiBJY29uVHlwZSA9ICcnO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIGljb24gYmVmb3JlIGlucHV0IHZhbHVlLCBvZiB0eXBlIG51bWJlciwgc3RyaW5nLCAnZmlsbCcsICd4c21hbGwnLCAnc21hbGwnLCAnbm9ybWFsJyBvciAnbGFyZ2UnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHByZWZpeEljb25TaXplOiBpY29uU2l6ZVR5cGUgPSAnMThweCc7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBsb2FkaW5nIGJhciBpcyBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25seSB0aGUgZWxlbWVudHMgd2l0aGluIHNjcm9sbGFibGUgYXJlYSBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgRE9NIG91dHNpZGUgb2YgdGhlIHZpZXcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcblxuICAvKipcbiAgICogV2hlbiBpdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbiBpbmZvIGljb24gaXMgZGlzcGxheWVkIHRvIHNob3cgdGV4dCBmb3IgbW9yZSBpbmZvLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZm8gdG9vbHRpcCBjbGFzcyBmb3Igc3R5bGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcENsYXNzID0gJ2Nwcy10b29sdGlwLWNvbnRlbnQnO1xuXG4gIC8qKlxuICAgKiBNYXggd2lkdGggb2YgaW5mb1Rvb2x0aXAgb2YgdHlwZSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIHN0cmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcE1heFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgaW5mb1Rvb2x0aXAgaXMgcGVyc2lzdGVudC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBlcnNpc3RlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgaW5mb1Rvb2x0aXAsIGl0IGNhbiBiZSAndG9wJywgJ2JvdHRvbScsICdsZWZ0JyBvciAncmlnaHQnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUG9zaXRpb246IENwc1Rvb2x0aXBQb3NpdGlvbiA9ICd0b3AnO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgaXQgZXhwYW5kcyBhbGwgZGlyZWN0aW9yaWVzIGluaXRpYWxseS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsRXhwYW5kRGlyZWN0b3JpZXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiBzZXQsIGl0IGV4cGFuZHMgYWxsIG9wdGlvbnMgaW5pdGlhbGx5LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxFeHBhbmRBbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjaGV2cm9uIGljb24gc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Q2hldnJvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheSBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSB2YWx1ZSBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCdjb21wb25lbnRDb250YWluZXInKVxuICBjb21wb25lbnRDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNNZW51JylcbiAgb3B0aW9uc01lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RyZWVMaXN0JykgdHJlZUxpc3QhOiBUcmVlO1xuXG4gIEBWaWV3Q2hpbGQoJ2JveEVsJylcbiAgYm94RWwhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgaW5uZXJPcHRpb25zOiBUcmVlTm9kZVtdID0gW107XG4gIG9wdGlvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU+KCk7XG4gIG9yaWdpbmFsT3B0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgdmlydHVhbExpc3RIZWlnaHQgPSAyNDA7XG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDQwO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIG9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgaXNBdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICB0cmVlQ29udGFpbmVyRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICB0cmVlU2VsZWN0aW9uOiBhbnk7XG5cbiAgYm94V2lkdGggPSAwO1xuICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29udHJvbDogTmdDb250cm9sLFxuICAgIHB1YmxpYyBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeT8udGFyZ2V0KSB0aGlzLmJveFdpZHRoID0gKGVudHJ5LnRhcmdldCBhcyBhbnkpLm9mZnNldFdpZHRoO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN2dFdpZHRoID0gY29udmVydFNpemUodGhpcy53aWR0aCk7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy50cmVlU2VsZWN0aW9uID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMuX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuaW5uZXJPcHRpb25zID0gdGhpcy5fdG9Jbm5lck9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5faW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKTtcbiAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuYm94RWwubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjbGljaycsXG4gICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgZXhwYW5kQWxsKCkge1xuICAgIHRoaXMub3B0aW9uc01hcD8uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZS5jaGlsZHJlbikgdmFsdWUuZXhwYW5kZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgY29sbGFwc2VBbGwoKSB7XG4gICAgdGhpcy5vcHRpb25zTWFwPy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuKSB2YWx1ZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBpbnRlcm5hbCA9IGZhbHNlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICghaW50ZXJuYWwgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMuX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge31cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuY29tcG9uZW50Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMudG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUsIHRydWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgY2xlYXIoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoXG4gICAgICAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy50cmVlU2VsZWN0aW9uKSB8fFxuICAgICAgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy50cmVlU2VsZWN0aW9uPy5sZW5ndGggPiAwKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3Blbk9uQ2xlYXIpIHtcbiAgICAgICAgdGhpcy50b2dnbGVPcHRpb25zKHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy50cmVlU2VsZWN0aW9uID0gdmFsO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uU2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlT3B0aW9ucyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja0Z1bGx5RXhwYW5kYWJsZShlbGVtOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW0ucGFyZW50RWxlbWVudDtcbiAgICBjb25zdCBrZXkgPSB0aGlzLl9nZXRIVE1MRWxlbWVudEtleShwYXJlbnQpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG5cbiAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMuaW5uZXJPcHRpb25zLmZpbmQoKG8pID0+IG8ua2V5ID09PSBrZXkpO1xuICAgIGlmICghdHJlZU5vZGUpIHJldHVybjtcblxuICAgIHRyZWVOb2RlLmV4cGFuZGVkID0gIXRyZWVOb2RlLmV4cGFuZGVkO1xuICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fbm9kZVRvZ2dsZWQoZWxlbSk7XG4gICAgfSk7XG4gIH1cblxuICB0cmVlU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueSkge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb24pKTtcbiAgfVxuXG4gIHJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudExlbiA9IHRoaXMudHJlZUxpc3Q/LnNlcmlhbGl6ZWRWYWx1ZT8ubGVuZ3RoIHx8IDA7XG4gICAgdGhpcy52aXJ0dWFsTGlzdEhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBjdXJyZW50TGVuLFxuICAgICAgMjQwXG4gICAgKTtcbiAgICB0aGlzLl9zZXRUcmVlTGlzdEhlaWdodCh0aGlzLnZpcnR1YWxMaXN0SGVpZ2h0ICsgJ3B4Jyk7XG4gIH1cblxuICB0b2dnbGVPcHRpb25zKHNob3c/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc09wZW5lZCA9PT0gc2hvdykgcmV0dXJuO1xuXG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMub3B0aW9uc01lbnUuc2hvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmJveEVsLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNNZW51LmhpZGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zTWVudS50b2dnbGUoe1xuICAgICAgICB0YXJnZXQ6IHRoaXMuYm94RWwubmF0aXZlRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc09wZW5lZCA9IHRoaXMub3B0aW9uc01lbnUuaXNWaXNpYmxlKCk7XG5cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc09wZW5lZCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuX2V4cGFuZFRvTm9kZXMoXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPyB0aGlzLnRyZWVTZWxlY3Rpb24gOiBbdGhpcy50cmVlU2VsZWN0aW9uXVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3NldFRyZWVMaXN0SGVpZ2h0KCcnKTtcbiAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnRyZWVDb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJy5wLWhpZ2hsaWdodCdcbiAgICAgICAgKSBhcyBhbnk7XG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgIHNlbGVjdGVkLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBsZXQga2V5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVTZWxlY3Rpb24ubGVuZ3RoID4gMCkga2V5ID0gdGhpcy50cmVlU2VsZWN0aW9uWzBdLmtleTtcbiAgICAgICAgICB9IGVsc2Uga2V5ID0gdGhpcy50cmVlU2VsZWN0aW9uLmtleTtcbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPVxuICAgICAgICAgICAgICB0aGlzLnRyZWVMaXN0Py5zZXJpYWxpemVkVmFsdWU/LmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcHJpbWVmYWNlcy9wcmltZW5nL2Jsb2IvdjE2LjQuMy9zcmMvYXBwL2NvbXBvbmVudHMvdHJlZS90cmVlLnRzI0wxMTI1XG4gICAgICAgICAgICAgICAgKHY6IGFueSkgPT4gdi5ub2RlLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICkgfHwgLTE7XG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHRoaXMudHJlZUxpc3Quc2Nyb2xsVG9WaXJ0dWFsSW5kZXgoaWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShvcHRpb246IFRyZWVOb2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSByZXR1cm47XG5cbiAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLnRyZWVTZWxlY3Rpb24uZmlsdGVyKFxuICAgICAgKHY6IFRyZWVOb2RlKSA9PiAhaXNFcXVhbCh2LCBvcHRpb24pXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMudHJlZVNlbGVjdGlvblRvVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uKSk7XG4gIH1cblxuICBpbml0QXJyb3dzTmF2aWdhdG9uKCkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbkZvY3VzZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0RWxlbSA9IHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWVub2RlJyk7XG5cbiAgICAgIGlmIChmaXJzdEVsZW0pIChmaXJzdEVsZW0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uTm9kZUV4cGFuZChldmVudDogYW55KSB7XG4gICAgdGhpcy5fbm9kZVRvZ2dsZWRXaXRoQ2hldnJvbihcbiAgICAgIGV2ZW50Py5vcmlnaW5hbEV2ZW50Py5jdXJyZW50VGFyZ2V0Py5wYXJlbnRFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIG9uTm9kZUNvbGxhcHNlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9ub2RlVG9nZ2xlZFdpdGhDaGV2cm9uKFxuICAgICAgZXZlbnQ/Lm9yaWdpbmFsRXZlbnQ/LmN1cnJlbnRUYXJnZXQ/LnBhcmVudEVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgdHJlZVNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIHNlbGVjdGlvbi5tYXAoKHM6IGFueSkgPT4gdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXAuZ2V0KHMua2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcC5nZXQoc2VsZWN0aW9uLmtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdGhpcyBpcyBhIGZpeCBvZiBwcmltZW5nIGNoYW5nZSBkZXRlY3Rpb24gYnVnIHdoZW4gdmlydHVhbCBzY3JvbGxlciBpcyBlbmFibGVkXG4gIHVwZGF0ZU9wdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICB0aGlzLnRyZWVMaXN0Py51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRDb250YWluZXJDbGlja0xpc3RlbmVyKCkge1xuICAgIHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQgPVxuICAgICAgdGhpcy50cmVlTGlzdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWUtY29udGFpbmVyJyk7XG4gICAgaWYgKHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgIHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgdGhpcy5faGFuZGxlT25Db250YWluZXJDbGljay5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGZ1bmN0aW9uIGdldFBhcmVudFdpdGhDbGFzcyhcbiAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCxcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSB0cnVlO1xuXG4gICAgY29uc3QgZWxlbSA9IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3AtdHJlZW5vZGUtY29udGVudCcpXG4gICAgICA/IGV2ZW50LnRhcmdldFxuICAgICAgOiBnZXRQYXJlbnRXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0LCAncC10cmVlbm9kZS1jb250ZW50Jyk7XG5cbiAgICBpZiAoXG4gICAgICBlbGVtPy5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdjcHMtdHJlZS1ub2RlLWZ1bGx5LWV4cGFuZGFibGUnKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrRnVsbHlFeHBhbmRhYmxlKGVsZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEhUTUxFbGVtZW50S2V5KGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFlbGVtPy5jbGFzc0xpc3QpIHJldHVybiAnJztcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBbLi4uZWxlbS5jbGFzc0xpc3RdO1xuICAgIGNvbnN0IGtleSA9IGNsYXNzTGlzdC5maW5kKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zdGFydHNXaXRoKCdrZXktJyk7XG4gICAgfSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiAnJztcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoJ2tleS0nLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRUcmVlTGlzdEhlaWdodChoZWlnaHQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRyZWVMaXN0Py5zY3JvbGxlcj8uc3R5bGUpXG4gICAgICB0aGlzLnRyZWVMaXN0LnNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgX25vZGVUb2dnbGVkKGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zTWVudS5hbGlnbigpO1xuICAgIH0pO1xuXG4gICAgaWYgKGVsZW0/LnBhcmVudEVsZW1lbnQpIChlbGVtPy5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbm9kZVRvZ2dsZWRXaXRoQ2hldnJvbihlbGVtOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX25vZGVUb2dnbGVkKGVsZW0pO1xuICAgIC8vIGZpeCBwcmltZW5nIHRyZWUgZXZlbnQgc3RvcCBwcm9wYWdhdGlvblxuICAgIHRoaXMub3B0aW9uc01lbnUuc2VsZkNsaWNrID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0Vycm9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmNvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5jb250cm9sPy5jb250cm9sPy50b3VjaGVkIHx8ICFlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoJ3JlcXVpcmVkJyBpbiBlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnRmllbGQgaXMgcmVxdWlyZWQnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVyckFyciA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKTtcbiAgICBpZiAoZXJyQXJyLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyckFyci5maW5kKChtc2cpID0+IHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKTtcblxuICAgIHRoaXMuZXJyb3IgPSBtZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJztcbiAgfVxuXG4gIHByaXZhdGUgX2V4cGFuZFRvTm9kZXMobm9kZXM6IGFueVtdKSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IGxhc3RTZXBhcmF0b3JJbmRleCA9IGtleS5sYXN0SW5kZXhPZignLScpO1xuICAgICAgaWYgKGxhc3RTZXBhcmF0b3JJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgbGFzdFNlcGFyYXRvckluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlS2V5ID0gZ2V0UGFyZW50S2V5KG5vZGUua2V5KTtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLm9wdGlvbnNNYXAuZ2V0KHBhcmVudE5vZGVLZXkpIHx8IG51bGw7XG5cbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIHBhcmVudE5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9leHBhbmRUb05vZGVzKFtwYXJlbnROb2RlXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b0lubmVyT3B0aW9ucyhfb3B0aW9uczogYW55W10pOiBUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBtYXBPcHRpb24gPSAoXG4gICAgICBvOiBhbnksXG4gICAgICBvcHRpb25MYWJlbDogc3RyaW5nLFxuICAgICAgb3B0aW9uSW5mbzogc3RyaW5nLFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICBvcmlnaW5hbE9wdGlvbnNNYXA6IGFueVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW5uZXIgPSB7XG4gICAgICAgIGlubmVyOiB0cnVlLFxuICAgICAgICBsYWJlbDogb1tvcHRpb25MYWJlbF0sXG4gICAgICAgIGluZm86IG9bb3B0aW9uSW5mb10sXG4gICAgICAgIGtleSxcbiAgICAgICAgc3R5bGVDbGFzczogJ2tleS0nICsga2V5XG4gICAgICB9IGFzIFRyZWVOb2RlO1xuXG4gICAgICBpZiAoby5pc0RpcmVjdG9yeSkge1xuICAgICAgICBpbm5lci50eXBlID0gJ2RpcmVjdG9yeSc7XG4gICAgICAgIGlubmVyLnNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgaW5uZXIuc3R5bGVDbGFzcyArPSAnIGNwcy10cmVlLW5vZGUtZnVsbHktZXhwYW5kYWJsZSc7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxFeHBhbmREaXJlY3RvcmllcykgaW5uZXIuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG8uY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEV4cGFuZEFsbCkgaW5uZXIuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgIGlubmVyLmNoaWxkcmVuID0gby5jaGlsZHJlbi5tYXAoKGM6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgb3B0aW9uTGFiZWwsXG4gICAgICAgICAgICBvcHRpb25JbmZvLFxuICAgICAgICAgICAga2V5ICsgJy0nICsgaW5kZXgsXG4gICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsT3B0aW9uc01hcC5zZXQoa2V5LCBvKTtcbiAgICAgIHJldHVybiBpbm5lcjtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzID0gX29wdGlvbnMubWFwKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gbWFwT3B0aW9uKFxuICAgICAgICBvcHRpb24sXG4gICAgICAgIHRoaXMub3B0aW9uTGFiZWwsXG4gICAgICAgIHRoaXMub3B0aW9uSW5mbyxcbiAgICAgICAgJycgKyBpbmRleCxcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnNNYXAgPSB0aGlzLl9idWlsZE9wdGlvbnNNYXAocmVzKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZE9wdGlvbnNNYXAob3B0aW9uczogYW55W10pOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBub2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBub2RlTWFwLnNldChvcHRpb24ua2V5LCBvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXAgPSB0aGlzLl9idWlsZE9wdGlvbnNNYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGROb2RlTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IG5vZGVNYXAuc2V0KGtleSwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVNYXA7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZVRvVHJlZVNlbGVjdGlvbih2YWx1ZTogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0S2V5KHY6IGFueSwgbWFwOiBNYXA8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBtYXAuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChpc0VxdWFsKHYsIHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCByZXM6IFRyZWVOb2RlW10gPSBbXTtcbiAgICAgIHZhbHVlLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkodiwgdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXApO1xuICAgICAgICBpZiAoa2V5KSByZXMucHVzaCh0aGlzLm9wdGlvbnNNYXAuZ2V0KGtleSkgYXMgVHJlZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXkgPSBnZXRLZXkodmFsdWUsIHRoaXMub3JpZ2luYWxPcHRpb25zTWFwKTtcbiAgICAgIHJldHVybiBrZXkgPyB0aGlzLm9wdGlvbnNNYXAuZ2V0KGtleSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|