@eui/components 18.0.0-rc.25 → 18.0.0-rc.27
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/docs/components/ChartComponent.html +10 -124
- package/docs/components/EuiEditorCountersComponent.html +15 -202
- package/docs/components/EuiNotificationItemComponent.html +5 -62
- package/docs/components/EuiNotificationItemV2Component.html +5 -62
- package/docs/components/EuiNotificationsComponent.html +40 -512
- package/docs/components/EuiNotificationsV2Component.html +40 -507
- package/docs/components/EuiPageColumnComponent.html +2 -2
- package/docs/components/EuiPaginatorComponent.html +15 -209
- package/docs/components/EuiSelectComponent.html +0 -62
- package/docs/components/EuiTreeComponent.html +45 -558
- package/docs/components/EuiWizardComponent.html +15 -202
- package/docs/components/EuiWizardStepComponent.html +30 -388
- package/docs/components/QuillEditorComponent.html +20 -326
- package/docs/dependencies.html +1 -3
- package/docs/directives/AutoResizeDirective.html +5 -62
- package/docs/directives/EuiNgSelectOptionDirective.html +0 -62
- package/docs/js/menu-wc.js +3 -3
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/eui-card/eui-card.component.mjs +2 -2
- package/esm2022/eui-fieldset/eui-fieldset.component.mjs +2 -2
- package/esm2022/eui-overlay/eui-overlay.component.mjs +2 -2
- package/esm2022/eui-page/components/eui-page-column/eui-page-column.component.mjs +9 -6
- package/esm2022/eui-page/eui-page.component.mjs +2 -2
- package/esm2022/eui-paginator/eui-paginator.component.mjs +12 -28
- package/esm2022/eui-select/eui-select-option.directive.mjs +6 -12
- package/esm2022/eui-select/eui-select.component.mjs +6 -11
- package/esm2022/eui-table/eui-table.component.mjs +2 -2
- package/esm2022/eui-table-v2/eui-table-v2.component.mjs +2 -2
- package/esm2022/eui-tabs/eui-tab/eui-tab.component.mjs +2 -2
- package/esm2022/eui-tabs/eui-tabs.component.mjs +2 -2
- package/esm2022/eui-textarea/auto-resize.directive.mjs +7 -12
- package/esm2022/eui-textarea/eui-textarea.component.mjs +2 -2
- package/esm2022/eui-tree/eui-tree.component.mjs +32 -79
- package/esm2022/eui-wizard/eui-wizard-step.component.mjs +21 -52
- package/esm2022/eui-wizard/eui-wizard.component.mjs +12 -28
- package/esm2022/externals/charts/chart/chart.component.mjs +9 -12
- package/esm2022/externals/eui-editor/counters/eui-editor-counters.component.mjs +12 -28
- package/esm2022/externals/quill/quill-editor.component.mjs +17 -43
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar.component.mjs +2 -2
- package/esm2022/layout/eui-notifications/eui-notification-item.component.mjs +6 -12
- package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +27 -68
- package/esm2022/layout/eui-notifications-v2/eui-notification-item.component.mjs +6 -12
- package/esm2022/layout/eui-notifications-v2/eui-notifications.component.mjs +30 -77
- package/eui-page/components/eui-page-column/eui-page-column.component.d.ts +1 -1
- package/eui-page/components/eui-page-column/eui-page-column.component.d.ts.map +1 -1
- package/eui-paginator/eui-paginator.component.d.ts +6 -10
- package/eui-paginator/eui-paginator.component.d.ts.map +1 -1
- package/eui-select/eui-select-option.directive.d.ts +2 -4
- package/eui-select/eui-select-option.directive.d.ts.map +1 -1
- package/eui-select/eui-select.component.d.ts +2 -3
- package/eui-select/eui-select.component.d.ts.map +1 -1
- package/eui-textarea/auto-resize.directive.d.ts +3 -5
- package/eui-textarea/auto-resize.directive.d.ts.map +1 -1
- package/eui-tree/eui-tree.component.d.ts +18 -28
- package/eui-tree/eui-tree.component.d.ts.map +1 -1
- package/eui-wizard/eui-wizard-step.component.d.ts +12 -19
- package/eui-wizard/eui-wizard-step.component.d.ts.map +1 -1
- package/eui-wizard/eui-wizard.component.d.ts +6 -10
- package/eui-wizard/eui-wizard.component.d.ts.map +1 -1
- package/externals/charts/chart/chart.component.d.ts +4 -7
- package/externals/charts/chart/chart.component.d.ts.map +1 -1
- package/externals/eui-editor/counters/eui-editor-counters.component.d.ts +6 -10
- package/externals/eui-editor/counters/eui-editor-counters.component.d.ts.map +1 -1
- package/externals/quill/quill-editor.component.d.ts +10 -16
- package/externals/quill/quill-editor.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-card.mjs +2 -2
- package/fesm2022/eui-components-eui-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +2 -2
- package/fesm2022/eui-components-eui-fieldset.mjs.map +1 -1
- package/fesm2022/eui-components-eui-overlay.mjs +2 -2
- package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
- package/fesm2022/eui-components-eui-page.mjs +9 -7
- package/fesm2022/eui-components-eui-page.mjs.map +1 -1
- package/fesm2022/eui-components-eui-paginator.mjs +11 -27
- package/fesm2022/eui-components-eui-paginator.mjs.map +1 -1
- package/fesm2022/eui-components-eui-select.mjs +9 -19
- package/fesm2022/eui-components-eui-select.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table-v2.mjs +2 -2
- package/fesm2022/eui-components-eui-table-v2.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table.mjs +2 -2
- package/fesm2022/eui-components-eui-table.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tabs.mjs +4 -4
- package/fesm2022/eui-components-eui-tabs.mjs.map +1 -1
- package/fesm2022/eui-components-eui-textarea.mjs +6 -11
- package/fesm2022/eui-components-eui-textarea.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +31 -78
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +30 -76
- package/fesm2022/eui-components-eui-wizard.mjs.map +1 -1
- package/fesm2022/eui-components-externals-charts.mjs +8 -11
- package/fesm2022/eui-components-externals-charts.mjs.map +1 -1
- package/fesm2022/eui-components-externals-eui-editor.mjs +11 -26
- package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
- package/fesm2022/eui-components-externals-quill.mjs +16 -42
- package/fesm2022/eui-components-externals-quill.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +63 -159
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/layout/eui-notifications/eui-notification-item.component.d.ts +2 -4
- package/layout/eui-notifications/eui-notification-item.component.d.ts.map +1 -1
- package/layout/eui-notifications/eui-notifications.component.d.ts +16 -25
- package/layout/eui-notifications/eui-notifications.component.d.ts.map +1 -1
- package/layout/eui-notifications-v2/eui-notification-item.component.d.ts +2 -4
- package/layout/eui-notifications-v2/eui-notification-item.component.d.ts.map +1 -1
- package/layout/eui-notifications-v2/eui-notifications.component.d.ts +16 -25
- package/layout/eui-notifications-v2/eui-notifications.component.d.ts.map +1 -1
- package/package.json +3 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Component, Input, NgModule, ChangeDetectionStrategy, EventEmitter, Output, ViewEncapsulation, HostBinding, ViewChild, } from '@angular/core';
|
1
|
+
import { Component, Input, NgModule, ChangeDetectionStrategy, EventEmitter, Output, ViewEncapsulation, HostBinding, booleanAttribute, ViewChild, } from '@angular/core';
|
2
2
|
import { CommonModule } from '@angular/common';
|
3
3
|
import { RouterModule } from '@angular/router';
|
4
4
|
import { EuiTreePagination, } from './eui-tree.model';
|
@@ -12,7 +12,6 @@ import { EuiChipModule } from '@eui/components/eui-chip';
|
|
12
12
|
import { EuiDropdownModule } from '@eui/components/eui-dropdown';
|
13
13
|
import { NestedTreeControl, CdkTreeModule } from '@angular/cdk/tree';
|
14
14
|
import { ArrayDataSource, SelectionModel } from '@angular/cdk/collections';
|
15
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
16
15
|
import { TranslateModule } from '@ngx-translate/core';
|
17
16
|
import { ScrollingModule, CdkScrollable } from '@angular/cdk/scrolling';
|
18
17
|
import { debounceTime } from 'rxjs';
|
@@ -33,80 +32,25 @@ export class EuiTreeComponent {
|
|
33
32
|
get cssClasses() {
|
34
33
|
return this.getCssClasses();
|
35
34
|
}
|
36
|
-
// @ViewChild('treeComponentInstance') public treeComponentInstance: any;
|
37
|
-
get isClickTogglingNode() {
|
38
|
-
return this._isClickTogglingNode;
|
39
|
-
}
|
40
|
-
set isClickTogglingNode(value) {
|
41
|
-
this._isClickTogglingNode = coerceBooleanProperty(value);
|
42
|
-
}
|
43
|
-
get isMultiselect() {
|
44
|
-
return this._isMultiselect;
|
45
|
-
}
|
46
|
-
set isMultiselect(value) {
|
47
|
-
this._isMultiselect = coerceBooleanProperty(value);
|
48
|
-
}
|
49
|
-
get isSingleSelect() {
|
50
|
-
return this._isSingleSelect;
|
51
|
-
}
|
52
|
-
set isSingleSelect(value) {
|
53
|
-
this._isSingleSelect = coerceBooleanProperty(value);
|
54
|
-
}
|
55
|
-
get isRecursiveSelection() {
|
56
|
-
return this._isRecursiveSelection;
|
57
|
-
}
|
58
|
-
set isRecursiveSelection(value) {
|
59
|
-
this._isRecursiveSelection = coerceBooleanProperty(value);
|
60
|
-
}
|
61
|
-
get isRecursiveParentSelection() {
|
62
|
-
return this._isRecursiveParentSelection;
|
63
|
-
}
|
64
|
-
set isRecursiveParentSelection(value) {
|
65
|
-
this._isRecursiveParentSelection = coerceBooleanProperty(value);
|
66
|
-
}
|
67
|
-
get showUnderlinedLinks() {
|
68
|
-
return this._showUnderlinedLinks;
|
69
|
-
}
|
70
|
-
set showUnderlinedLinks(value) {
|
71
|
-
this._showUnderlinedLinks = coerceBooleanProperty(value);
|
72
|
-
}
|
73
|
-
get showLines() {
|
74
|
-
return this._showLines;
|
75
|
-
}
|
76
|
-
set showLines(value) {
|
77
|
-
this._showLines = coerceBooleanProperty(value);
|
78
|
-
}
|
79
|
-
get autoTranslate() {
|
80
|
-
return this._autoTranslate;
|
81
|
-
}
|
82
|
-
set autoTranslate(value) {
|
83
|
-
this._autoTranslate = coerceBooleanProperty(value);
|
84
|
-
}
|
85
|
-
get highlightPath() {
|
86
|
-
return this._highlightPath;
|
87
|
-
}
|
88
|
-
set highlightPath(value) {
|
89
|
-
this._highlightPath = coerceBooleanProperty(value);
|
90
|
-
}
|
91
35
|
constructor(changeDetectorRef, scrollDispatcher) {
|
92
36
|
this.changeDetectorRef = changeDetectorRef;
|
93
37
|
this.scrollDispatcher = scrollDispatcher;
|
94
38
|
this.e2eAttr = 'eui-tree';
|
95
39
|
this.expandedSvgIconClass = 'chevron-forward:sharp';
|
96
40
|
this.collapsedSvgIconClass = 'chevron-down:sharp';
|
41
|
+
this.isClickTogglingNode = false;
|
42
|
+
this.isMultiselect = false;
|
43
|
+
this.isSingleSelect = false;
|
44
|
+
this.isRecursiveSelection = false;
|
45
|
+
this.isRecursiveParentSelection = true;
|
46
|
+
this.showUnderlinedLinks = false;
|
47
|
+
this.showLines = true;
|
48
|
+
this.autoTranslate = true;
|
49
|
+
this.highlightPath = false;
|
97
50
|
this.selectionChange = new EventEmitter();
|
98
51
|
this.nodeClick = new EventEmitter();
|
99
52
|
this.nodeToggle = new EventEmitter();
|
100
53
|
this.uid = Math.floor(Math.random() * 1000000000).toString();
|
101
|
-
this._isClickTogglingNode = false;
|
102
|
-
this._isMultiselect = false;
|
103
|
-
this._isSingleSelect = false;
|
104
|
-
this._isRecursiveSelection = false;
|
105
|
-
this._isRecursiveParentSelection = true;
|
106
|
-
this._showUnderlinedLinks = false;
|
107
|
-
this._showLines = true;
|
108
|
-
this._autoTranslate = true;
|
109
|
-
this._highlightPath = false;
|
110
54
|
this.hasChild = (_, item) => !!item?.children && item?.children?.length >= 0;
|
111
55
|
}
|
112
56
|
ngOnInit() {
|
@@ -865,7 +809,7 @@ export class EuiTreeComponent {
|
|
865
809
|
'eui-tree',
|
866
810
|
this.isMultiselect ? 'eui-tree--multiselect' : '',
|
867
811
|
this._isMultiLevel ? 'eui-tree--with-children' : '',
|
868
|
-
this.
|
812
|
+
this.showLines ? 'eui-tree--show-lines' : '',
|
869
813
|
]
|
870
814
|
.join(' ')
|
871
815
|
.trim();
|
@@ -883,11 +827,11 @@ export class EuiTreeComponent {
|
|
883
827
|
return scrolled.getElementRef().nativeElement === this.cdkScrollableRef.getElementRef().nativeElement;
|
884
828
|
}
|
885
829
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiTreeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
|
886
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isSingleSelect: "isSingleSelect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", showUnderlinedLinks: "showUnderlinedLinks", showLines: "showLines", autoTranslate: "autoTranslate", highlightPath: "highlightPath" }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:10px;width:10px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "checked"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["ariaLabel", "e2eAttr", "euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
830
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.0", type: EuiTreeComponent, selector: "eui-tree", inputs: { e2eAttr: "e2eAttr", nodes: "nodes", nodeTemplateRef: "nodeTemplateRef", nodeContentMetadataTemplateRef: "nodeContentMetadataTemplateRef", rightContextMenuTemplateRef: "rightContextMenuTemplateRef", expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", expandedSvgIconClass: "expandedSvgIconClass", collapsedSvgIconClass: "collapsedSvgIconClass", isClickTogglingNode: ["isClickTogglingNode", "isClickTogglingNode", booleanAttribute], isMultiselect: ["isMultiselect", "isMultiselect", booleanAttribute], isSingleSelect: ["isSingleSelect", "isSingleSelect", booleanAttribute], isRecursiveSelection: ["isRecursiveSelection", "isRecursiveSelection", booleanAttribute], isRecursiveParentSelection: ["isRecursiveParentSelection", "isRecursiveParentSelection", booleanAttribute], showUnderlinedLinks: ["showUnderlinedLinks", "showUnderlinedLinks", booleanAttribute], showLines: ["showLines", "showLines", booleanAttribute], autoTranslate: ["autoTranslate", "autoTranslate", booleanAttribute], highlightPath: ["highlightPath", "highlightPath", booleanAttribute] }, outputs: { selectionChange: "selectionChange", nodeClick: "nodeClick", nodeToggle: "nodeToggle" }, host: { properties: { "class": "this.cssClasses", "attr.data-e2e": "this.e2eAttr" } }, viewQueries: [{ propertyName: "cdkScrollableRef", first: true, predicate: ["cdkScrollableRef"], descendants: true, read: CdkScrollable }, { propertyName: "treeComponentInstance", first: true, predicate: ["treeComponentInstance"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.EuiInputCheckboxComponent, selector: "input[euiInputCheckBox]", inputs: ["indeterminate", "isInvalid", "checked"], outputs: ["indeterminateChange"] }, { kind: "directive", type: i5.CdkNestedTreeNode, selector: "cdk-nested-tree-node", exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i5.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i5.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i5.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i5.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "component", type: i7.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i8.EuiLabelComponent, selector: "label[euiLabel], span[euiLabel], div[euiLabel], a[euiLabel], eui-label, label[euiSublabel], span[euiSublabel], div[euiSublabel], a[euiSublabel], eui-sublabel", inputs: ["euiRequired", "euiReadonly", "euiSublabel"] }, { kind: "component", type: i9.EuiBadgeComponent, selector: "div[euiBadge], span[euiBadge], eui-badge", inputs: ["e2eAttr", "aria-label", "maxCharCount", "charReplacement", "euiIconBadge", "euiDottedBadge"] }, { kind: "component", type: i10.EuiChipComponent, selector: "eui-chip, span[euiChip], li[euiChip]", inputs: ["ariaLabel", "e2eAttr", "euiInternalId", "tooltipMessage", "id", "data", "isChipRemovable", "isSquared"], outputs: ["remove"] }, { kind: "component", type: i11.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "directive", type: i11.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
887
831
|
}
|
888
832
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiTreeComponent, decorators: [{
|
889
833
|
type: Component,
|
890
|
-
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:10px;width:10px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"] }]
|
834
|
+
args: [{ selector: 'eui-tree', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"eui-ul-rep eui-tree__wrapper\" cdkScrollable #cdkScrollableRef>\n <cdk-tree\n #treeComponentInstance\n [dataSource]=\"cdkArrayDataSource\"\n [treeControl]=\"cdkTreeControl\"\n [trackBy]=\"trackBy\"\n *ngIf=\"renderTree\"\n class=\"eui-cdk-tree\">\n <!-- There are two states of generic cdk-nested-tree-node declarations.\n First one is without child. No sub rendering.\n -->\n <cdk-nested-tree-node *cdkTreeNodeDef=\"let treeRunTimeItemModel\" class=\"eui-cdk-nested-tree-node\">\n <div *ngIf=\"treeRunTimeItemModel\"\n class=\"eui-li-rep eui-tree-node\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div class=\"eui-tree-node-wrapper\"\n (click)=\"onNodeClick(treeRunTimeItemModel)\">\n <div class=\"eui-tree-node-wrapper__container\">\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel?.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n *cdkTreeNodeDef=\"let treeRunTimeItemModel; when: hasChild\"\n class=\"eui-cdk-nested-tree-node eui-cdk-nested-tree-node--with-child\">\n <div\n class=\"eui-li-rep eui-tree-node eui-tree-node--with-child\"\n [class.eui-tree-node--first]=\"treeRunTimeItemModel?.path === '0'\"\n [class.eui-tree-node--last]=\"treeRunTimeItemModel.last\"\n *ngIf=\"treeRunTimeItemModel\"\n title=\"{{\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.tooltipLabel ||\n getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\n }}\">\n <div\n class=\"eui-tree-node-wrapper\">\n <!--Here wraps the node, and listen for node clicks.-->\n <div (click)=\"onNodeClick(treeRunTimeItemModel)\" class=\"eui-tree-node-wrapper__container\">\n <!-- Expand/collapse action button -->\n <button\n euiButton\n euiIconButton\n euiBasicButton\n euiRounded\n euiSizeS\n type=\"button\"\n [attr.aria-label]=\"'Toggle ' + getTreeItem(treeRunTimeItemModel?.path)?.node?.treeContentBlock?.label\"\n (click)=\"onNodeToggle(treeRunTimeItemModel)\"\n cdkTreeNodeToggle\n class=\"eui-tree-node__button\">\n <eui-icon-svg\n *ngIf=\"!cdkTreeControl.isExpanded(treeRunTimeItemModel) && !collapsedIconClass\"\n [icon]=\"expandedSvgIconClass\"></eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel) && !expandedIconClass\"\n [icon]=\"collapsedSvgIconClass\"></eui-icon-svg>\n </button>\n <!--\n Renders node in default or provided template's context.\n Generates onSelect with onSelectFn for developers to send the events from their custom check events.\n Provides id to be used on generic template\n -->\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplateRef || nodeTemplateDefault\"\n [ngTemplateOutletContext]=\"{\n $implicit: getTreeItem(treeRunTimeItemModel.path)?.node,\n onSelect: onSelectFn(treeRunTimeItemModel.path),\n id: uid + treeRunTimeItemModel.path,\n path: treeRunTimeItemModel.path,\n children: getTreeItem(treeRunTimeItemModel?.path)?.children\n }\">\n </ng-container>\n </div>\n </div>\n <!--uses cdkTreeNodeOutlet to render children nodes, CdkTreeControl is used to control isExpanded state.-->\n <div class=\"eui-ul-rep eui-tree-node\" role=\"group\" *ngIf=\"cdkTreeControl.isExpanded(treeRunTimeItemModel)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </div>\n </cdk-nested-tree-node>\n </cdk-tree>\n</div>\n\n<ng-template #nodeTemplateDefault let-node let-onSelect=\"onSelect\" let-id=\"id\" let-path=\"path\">\n <ng-container *ngIf=\"node\">\n <div class=\"eui-tree-node-wrapper__container-left\" [class.eui-tree-node-wrapper__container-left--selected]=\"node?.isSelected\">\n <!--input checkbox area-->\n <input\n euiInputCheckBox\n *ngIf=\"node && node.selectable\"\n type=\"checkbox\"\n id=\"{{ id }}\"\n [checked]=\"!!node?.isSelected\"\n [indeterminate]=\"!!node?.isIndeterminate\"\n (change)=\"onSelect($event)\"\n class=\"eui-u-mr-m\" />\n\n <!--icon area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.iconSvgName\">\n <eui-icon-svg\n icon=\"{{ node?.treeContentBlock?.iconSvgName }}\"\n fillColor=\"{{ node?.treeContentBlock?.iconTypeClass || 'neutral' }}\"\n size=\"s\"\n class=\"eui-u-mr-xs\">\n </eui-icon-svg>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.chips\">\n <eui-chip\n *ngFor=\"let chip of node.treeContentBlock.chips\"\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-mr-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--badge (typeLabel & typeClass) area-->\n <ng-container *ngIf=\"node?.treeContentBlock?.typeLabel\" [ngSwitch]=\"node?.treeContentBlock?.typeClass\">\n <eui-badge euiSizeM [euiVariant]=\"node?.treeContentBlock?.typeClass || 'primary'\" class=\"eui-u-flex-no-shrink eui-u-mr-xs\">\n {{ node?.treeContentBlock?.typeLabel }}\n </eui-badge>\n </ng-container>\n </div>\n\n <!--label area-->\n <div class=\"eui-tree-node-wrapper__container-middle\">\n <label\n *ngIf=\"!node?.treeContentBlock?.url && !node?.treeContentBlock?.urlExternal\"\n euiLabel\n for=\"{{ id }}\"\n class=\"eui-u-text-truncate eui-u-p-2xs\"\n [class.eui-label--selected]=\"\n highlightPath\n ? getRunTimeSelectionRecursiveState(path)?.selectionRecursiveState === 'indeterminate' || node?.isSelected\n : node?.isSelected\n \"\n [class.eui-u-cursor-pointer]=\"node?.selectable\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </label>\n <label *ngIf=\"node?.treeContentBlock?.url\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link\"\n [class.eui-u-text-link-standalone]=\"!showUnderlinedLinks\"\n [routerLink]=\"node?.treeContentBlock?.url\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n <label *ngIf=\"node?.treeContentBlock?.urlExternal\" euiLabel for=\"{{ id }}\" class=\"eui-u-text-truncate eui-u-p-2xs\">\n <a\n class=\"eui-u-text-link-external\"\n [class.eui-u-text-link-external-standalone]=\"!showUnderlinedLinks\"\n href=\"{{ node?.treeContentBlock?.urlExternal }}\"\n target=\"{{ node?.treeContentBlock?.urlExternalTarget || 'blank' }}\">\n {{ autoTranslate ? (node?.treeContentBlock?.label | translate) : node?.treeContentBlock?.label }}\n </a>\n </label>\n </div>\n\n <div *ngIf=\"node?.treeContentBlock?.rightContent\" class=\"eui-tree-node-wrapper__container-right\">\n <!--badges area-->\n <ng-container *ngFor=\"let badge of node.treeContentBlock.rightContent?.badges\">\n <eui-badge euiOutline [euiVariant]=\"badge.typeClass || 'secondary'\" class=\"eui-u-ml-xs\">\n <span euiLabel>{{ badge.label }}</span>\n </eui-badge>\n </ng-container>\n\n <!--chips area-->\n <ng-container *ngFor=\"let chip of node.treeContentBlock.rightContent?.chips\">\n <eui-chip\n euiSizeS\n [euiVariant]=\"chip.typeClass || 'secondary'\"\n [euiOutline]=\"chip.isOutline\"\n class=\"eui-chip--rounded eui-u-mb-none eui-u-ml-xs\">\n <span euiLabel>{{ chip.label }}</span>\n </eui-chip>\n </ng-container>\n\n <!--Context menu-->\n <ng-container *ngIf=\"node.treeContentBlock.rightContent?.contextMenuMetaData && rightContextMenuTemplateRef\">\n <eui-dropdown class=\"eui-u-ml-xs\">\n <button euiButton euiSizeS euiRounded euiIconButton euiBasicButton euiSecondary [attr.aria-label]=\"'Options menu'\">\n <eui-icon-svg icon=\"ellipsis-vertical:sharp\"></eui-icon-svg>\n </button>\n <eui-dropdown-content>\n <ng-template\n [ngTemplateOutlet]=\"rightContextMenuTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.rightContent?.contextMenuMetaData,\n metadata: node?.treeContentBlock?.rightContent?.contextMenuMetaData\n }\">\n </ng-template>\n </eui-dropdown-content>\n </eui-dropdown>\n </ng-container>\n </div>\n\n <!--metadata, uses the help of ng template to generate dynamic expand variable without handling state -->\n <ng-container\n *ngIf=\"node.treeContentBlock?.metadata && nodeContentMetadataTemplateRef\"\n [ngTemplateOutlet]=\"nodeContentMetadataContainer\"\n [ngTemplateOutletContext]=\"{\n $implicit: { expanded: false }\n }\">\n </ng-container>\n <ng-template #nodeContentMetadataContainer let-metaDataContainer>\n <button\n euiButton\n euiBasicButton\n euiIconButton\n euiRounded\n euiSizeS\n type=\"button\"\n aria-label=\"expand collapse tree item\"\n (click)=\"metaDataContainer.expanded = !metaDataContainer.expanded\">\n <eui-icon-svg [icon]=\"metaDataContainer.expanded ? 'chevron-down:sharp' : 'chevron-forward:sharp'\"></eui-icon-svg>\n </button>\n <div *ngIf=\"metaDataContainer.expanded\" class=\"eui-tree-node__metacontent\">\n <!--passing metadata of the node content to provided template-ref:nodeContentMetadataTemplateRef-->\n <ng-template\n [ngTemplateOutlet]=\"nodeContentMetadataTemplateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: node?.treeContentBlock?.metadata,\n metadata: node?.treeContentBlock?.metadata\n }\">\n </ng-template>\n </div>\n </ng-template>\n </ng-container>\n</ng-template>\n", styles: [".eui-tree{display:flex;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.eui-tree .eui-tree__wrapper{display:flex;list-style:none;margin:0;overflow-y:auto;padding:var(--eui-s-2xs);position:relative;width:100%}.eui-tree .eui-tree__wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-tree .eui-tree__wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}.eui-tree .eui-tree__wrapper .eui-cdk-tree{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{display:flex;width:auto}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node:not(.eui-cdk-nested-tree-node--with-child){padding-inline-start:var(--eui-s-xl)}.eui-tree .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node--with-child{display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node{display:flex;flex-direction:column;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node__metacontent{display:flex}.eui-tree .eui-tree__wrapper .eui-tree-node__button{margin-left:calc(-3 * var(--eui-s-2xs));margin-right:var(--eui-s-2xs)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper{align-items:center;display:flex;min-height:var(--eui-s-xl);width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container{align-items:center;display:flex;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-left{align-items:center;display:flex;justify-content:flex-start}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-middle{align-items:center;display:flex;justify-content:flex-start;overflow:hidden;width:100%}.eui-tree .eui-tree__wrapper .eui-tree-node-wrapper__container-right{align-items:center;display:flex;justify-content:flex-end;margin-left:auto}.eui-tree:not(.eui-tree--with-children) .eui-tree__wrapper .eui-cdk-tree .eui-cdk-nested-tree-node{padding-inline-start:2px}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep{padding-inline-start:var(--eui-s-s)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:before{border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";height:calc(100% - var(--eui-s-m) - var(--eui-s-xl));position:absolute;top:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-ul-rep:first-child:before{height:calc(100% - var(--eui-s-m) - var(--eui-s-2xs));top:0}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep{padding-inline-start:var(--eui-s-s);position:relative}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep:before:not(.eui-tree-node--first){border-top:1px solid var(--eui-c-neutral-lightest);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-s-m);width:var(--eui-s-xl)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node:not(.eui-tree-node--with-child):before{position:relative;left:0;display:inline-flex;width:var(--eui-s-2xl);border-bottom:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node.eui-tree-node--with-child:before{position:absolute;left:calc(1 * var(--eui-s-2xl) + var(--eui-s-2xs));display:inline-flex;width:var(--eui-s-s);border-bottom:1px solid var(--eui-c-neutral-lightest);border-left:1px solid var(--eui-c-neutral-lightest);content:\"\";margin-left:calc(-2 * var(--eui-s-l) + var(--eui-s-2xs));top:var(--eui-s-m)}.eui-tree.eui-tree--show-lines.eui-tree--with-children div.eui-li-rep.eui-tree-node--last:before{height:auto;top:var(--eui-s-m)}\n"] }]
|
891
835
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ScrollDispatcher }], propDecorators: { cssClasses: [{
|
892
836
|
type: HostBinding,
|
893
837
|
args: ['class']
|
@@ -919,23 +863,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
919
863
|
type: ViewChild,
|
920
864
|
args: ['treeComponentInstance']
|
921
865
|
}], isClickTogglingNode: [{
|
922
|
-
type: Input
|
866
|
+
type: Input,
|
867
|
+
args: [{ transform: booleanAttribute }]
|
923
868
|
}], isMultiselect: [{
|
924
|
-
type: Input
|
869
|
+
type: Input,
|
870
|
+
args: [{ transform: booleanAttribute }]
|
925
871
|
}], isSingleSelect: [{
|
926
|
-
type: Input
|
872
|
+
type: Input,
|
873
|
+
args: [{ transform: booleanAttribute }]
|
927
874
|
}], isRecursiveSelection: [{
|
928
|
-
type: Input
|
875
|
+
type: Input,
|
876
|
+
args: [{ transform: booleanAttribute }]
|
929
877
|
}], isRecursiveParentSelection: [{
|
930
|
-
type: Input
|
878
|
+
type: Input,
|
879
|
+
args: [{ transform: booleanAttribute }]
|
931
880
|
}], showUnderlinedLinks: [{
|
932
|
-
type: Input
|
881
|
+
type: Input,
|
882
|
+
args: [{ transform: booleanAttribute }]
|
933
883
|
}], showLines: [{
|
934
|
-
type: Input
|
884
|
+
type: Input,
|
885
|
+
args: [{ transform: booleanAttribute }]
|
935
886
|
}], autoTranslate: [{
|
936
|
-
type: Input
|
887
|
+
type: Input,
|
888
|
+
args: [{ transform: booleanAttribute }]
|
937
889
|
}], highlightPath: [{
|
938
|
-
type: Input
|
890
|
+
type: Input,
|
891
|
+
args: [{ transform: booleanAttribute }]
|
939
892
|
}], selectionChange: [{
|
940
893
|
type: Output
|
941
894
|
}], nodeClick: [{
|
@@ -994,4 +947,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
|
|
994
947
|
exports: [EuiTreeComponent],
|
995
948
|
}]
|
996
949
|
}] });
|
997
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQVFILGlCQUFpQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNF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QkFDdEIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixlQUFlO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgVHJlZURhdGFNb2RlbCxcbiAgICBUcmVlSXRlbU1vZGVsLFxuICAgIFRyZWVEYXRhUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwsXG4gICAgRXVpVHJlZVNlbGVjdGlvbkNoYW5nZXMsXG4gICAgRXVpVHJlZVBhZ2luYXRpb24sXG59IGZyb20gJy4vZXVpLXRyZWUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdWlJbnB1dENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pbnB1dC1jaGVja2JveCc7XG5pbXBvcnQgeyBFdWlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJ1dHRvbic7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aUxhYmVsTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1sYWJlbCc7XG5pbXBvcnQgeyBFdWlCYWRnZU1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYmFkZ2UnO1xuaW1wb3J0IHsgRXVpQ2hpcE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcCc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktZHJvcGRvd24nO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wsIENka1RyZWVNb2R1bGUsIENka1RyZWUgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBBcnJheURhdGFTb3VyY2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlLCBTY3JvbGxEaXNwYXRjaGVyLCBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWZvcndhcmQ6c2hhcnAnO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWRvd246c2hhcnAnO1xuXG4gICAgQFZpZXdDaGlsZCgnY2RrU2Nyb2xsYWJsZVJlZicsIHsgcmVhZDogQ2RrU2Nyb2xsYWJsZSB9KSBjZGtTY3JvbGxhYmxlUmVmOiBDZGtTY3JvbGxhYmxlO1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IENka1RyZWU8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuXG4gICAgLy8gQFZpZXdDaGlsZCgndHJlZUNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIHRyZWVDb21wb25lbnRJbnN0YW5jZTogYW55O1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuXG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDtcbiAgICB9XG5cbiAgICBzZXQgaXNNdWx0aXNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlzZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzU2luZ2xlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaW5nbGVTZWxlY3Q7XG4gICAgfVxuXG4gICAgc2V0IGlzU2luZ2xlU2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgc2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNob3dVbmRlcmxpbmVkTGlua3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93VW5kZXJsaW5lZExpbmtzO1xuICAgIH1cblxuICAgIHNldCBzaG93VW5kZXJsaW5lZExpbmtzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc2hvd1VuZGVybGluZWRMaW5rcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgc2hvd0xpbmVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0xpbmVzO1xuICAgIH1cblxuICAgIHNldCBzaG93TGluZXModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9zaG93TGluZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaGlnaGxpZ2h0UGF0aCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodFBhdGg7XG4gICAgfVxuXG4gICAgc2V0IGhpZ2hsaWdodFBhdGgodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRQYXRoID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlUcmVlU2VsZWN0aW9uQ2hhbmdlcz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlSXRlbU1vZGVsPigpO1xuICAgIGNka0FycmF5RGF0YVNvdXJjZTogQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICBjZGtUcmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHJlbmRlclRyZWU6IGJvb2xlYW47XG4gICAgcHVibGljIHVpZDogc3RyaW5nID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMCkudG9TdHJpbmcoKTtcbiAgICBwcm90ZWN0ZWQgX2lzTXVsdGlMZXZlbDtcbiAgICBwcml2YXRlIHByb2Nlc3NlZE5vZGVzOiBUcmVlRGF0YU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHRyZWVEYXRhUnVuVGltZUJhY2t1cDogVHJlZURhdGFSdW5UaW1lTW9kZWw7XG4gICAgcHJpdmF0ZSBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcbiAgICBwcml2YXRlIF9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzU2luZ2xlU2VsZWN0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1VuZGVybGluZWRMaW5rcyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Nob3dMaW5lcyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgICAgICBpZih0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQcm9jZXNzZWROb2RlcygpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnBhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeUNvbnRyb2woaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGV4cGFuZEF0KHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpLnJldmVyc2UoKS5mb3JFYWNoKChwYXJlbnRQYXRoKT0+e1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGFyZW50UGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGZpbHRlclRlcm0oZmlsdGVySW5wdXQ6IHN0cmluZywgZmlsdGVyS2V5Pzogc3RyaW5nLCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgZmlsdGVyS2V5IHx8ICdsYWJlbCcsIGZpbHRlcklucHV0LCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHRoaXMudHJlZURhdGFSdW5UaW1lLCBpc0NoZWNrZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKGdpdmVuVHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHN0cnVjdHVyZWRDbG9uZShnaXZlblRyZWVJdGVtKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtICYmIHBhdGgpIHtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YShwYXRoLCB0aGlzLnByb2Nlc3NJbnB1dHMoW3RyZWVJdGVtXSlbMF0pO1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhdGhBcnIucG9wKCksIDEwKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1SdW50aW1lID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW0sIGluZGV4LCBwYXRoQXJyLmpvaW4oJy4nKSk7XG4gICAgICAgIGlmICh0cmVlSXRlbVJ1bnRpbWU/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4gPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lQmFja3VwKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIC8vIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZVxuICAgICAgICBjb25zdCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbSk7XG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoLCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgIC8vIFJlbmRlcmluZ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIGlmICh0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiB0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpPy5jaGlsZHJlbik7XG4gICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKT8uY2hpbGRyZW4pPy5mb3JFYWNoKChydW5UaW1lSXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVUb2dnbGUodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgPSB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpdGVtLm5vZGU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBhdGgsaXRlbSxydW5UaW1lVHJlZUl0ZW0sIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicyA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcm9sbGFibGUgJiYgdGhpcy5jaGVja0lmQ3VycmVudFNjcm9sbGFibGUoc2Nyb2xsYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VG9wID0gc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID09PSAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbGVtZW50OicsIHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0Qm90dG9tICYmICF0aGlzLnRyZWVQYWdpbmF0aW9uLmlzQXRNYXgoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVOZXh0KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBdFRvcCAmJiB0aGlzLnRyZWVQYWdpbmF0aW9uLmdldEN1cnJlbnRTdGFydFBhZ2UoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLnBhZ2luYXRlUHJldigpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykgKyBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uVG9TY3JvbGwgPSB0b3RhbEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUbyh7IHRvcDogcG9zaXRpb25Ub1Njcm9sbCAvIDIgKyB2aWV3cG9ydEhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZmluZEluZGV4KChpKSA9PiBpPy5wYXRoID09PSBydW5UaW1lVHJlZUl0ZW0/LnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNwbGljZShpbmRleE9mSXRlbSwgMSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi5uZXdTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmVlRGF0YVJ1bnRpbWUobm9kZXM6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUobm9kZXMpPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoaXRlbSwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBpdGVtcz8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKGl0ZW0uY2hpbGRyZW4pIDogaXRlbT8uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtKSA9PiB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLml0ZW0gfSkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIHJ1biB0aW1lIHN0YXRlIHdoaWNoIGluY2x1ZGVzIGNoaWxkcmVuIHNlbGVjdGlvbiBzdGF0ZSBmb3Igc2VsZWN0aW9uIHRyZWUuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+ID0gW107XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZVtpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICBjaGlsZFN0YXRlczogQXJyYXk8U2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU+ID0gW10sXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICk6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIHtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhaXNTZWxlY3RlZCAmJiAhbm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCk7XG4gICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgaWYgKCF0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRyZWVJdGVtLCB0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsICdpc1NlbGVjdGVkOicgKyB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsICdpc0luZGV0ZXJtaW5hdGU6JyArIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBpZihvbGRJdGVtKXtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0pPy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgb2xkSXRlbVtrZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4sIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2RlQXJyLmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdHJlZUl0ZW0ubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1blN0YXRlQ2hhbmdlc0ZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFycj8uZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICAvLyBJdCBpcyBoZXJlIGZvciB0aGUgZmlsdGVyIGVkZ2UgY2FzZS5cbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgLy8gU2V0cyBpc1NlbGVjdGVkIGNoYW5nZSBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50UGF0aHMocGF0aDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVBhdGhzU2VxLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYXRoPzogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsID0ge1xuICAgICAgICAgICAgcGF0aDogcGFyZW50UGF0aCA/IHBhcmVudFBhdGggKyAnLicgKyBpbmRleCA6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuW3RyZWVJdGVtSW5kZXhdID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoY2hpbGQsIHRyZWVJdGVtSW5kZXgsIHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJUcmVlRGF0YShydW5UaW1lVHJlZURhdGE6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBrZXkgPSAnbGFiZWwnLCBmaWx0ZXJTdHI6IHN0cmluZywgc2hvd0NoaWxkcmVuOiBib29sZWFuLCBzaG93Pzpib29sZWFuKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVEYXRhLmZpbHRlcigocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpLm5vZGUudHJlZUNvbnRlbnRCbG9ja1trZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldERhdGEgJiYgdGhpcy5ub3JtYWxpemVkU3RyKHRhcmdldERhdGEpPy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZWRTdHIoZmlsdGVyU3RyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJUcmVlRGF0YShydW5UaW1lSXRlbS5jaGlsZHJlbiwga2V5LCBmaWx0ZXJTdHIsIHNob3dDaGlsZHJlbiwgc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihydW5UaW1lSXRlbSx7IG1hdGNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAvLyBydW5UaW1lSXRlbS5tYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBrZXksIGZpbHRlclN0ciwgc2hvd0NoaWxkcmVuLCBzaG93KTtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHJ1blRpbWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBydW5UaW1lSXRlbS5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwIHx8IHNob3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZWRTdHIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+ID0gW107XG4gICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihub2Rlcywgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjYW5TZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlPy5zZWxlY3RhYmxlICYmIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckluaXRpYWxFeHBhbmQobm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAmJiAhdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChpdGVtLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICYmICB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRNYXRjaGVkKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmdldFBhcmVudFBhdGhzKGl0ZW0ucGF0aClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudFRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHJlZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyAgbm9kZS5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJoZXJlXCIsIHBhcmVudFRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgcGFyZW50UGF0aCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0odGhpcy50cmVlRGF0YVJ1blRpbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJ1blRpbWVUcmVlSXRlbSh0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBwYXRoKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1blRpbWVJdGVtIG9mIHRyZWVEYXRhUnVuVGltZSkge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktdHJlZScsXG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPyAnZXVpLXRyZWUtLW11bHRpc2VsZWN0JyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNNdWx0aUxldmVsID8gJ2V1aS10cmVlLS13aXRoLWNoaWxkcmVuJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5fc2hvd0xpbmVzID8gJ2V1aS10cmVlLS1zaG93LWxpbmVzJyA6ICcnLFxuICAgICAgICBdXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZNdWx0aUxldmVsKHRyZWU6IFRyZWVEYXRhTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGlzTXVsdGlMZXZlbCA9IGZhbHNlO1xuICAgICAgICB0cmVlLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpc011bHRpTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzTXVsdGlMZXZlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSWZDdXJyZW50U2Nyb2xsYWJsZShzY3JvbGxlZDogQ2RrU2Nyb2xsYWJsZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2Nyb2xsZWQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRXVpSW5wdXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrVHJlZU1vZHVsZSxcbiAgICAgICAgRXVpQnV0dG9uTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgICAgICBFdWlMYWJlbE1vZHVsZSxcbiAgICAgICAgRXVpQmFkZ2VNb2R1bGUsXG4gICAgICAgIEV1aUNoaXBNb2R1bGUsXG4gICAgICAgIEV1aURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbRXVpVHJlZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRyZWVNb2R1bGUge31cbiIsIjxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlX193cmFwcGVyXCIgY2RrU2Nyb2xsYWJsZSAjY2RrU2Nyb2xsYWJsZVJlZj5cbiAgICA8Y2RrLXRyZWVcbiAgICAgICAgI3RyZWVDb21wb25lbnRJbnN0YW5jZVxuICAgICAgICBbZGF0YVNvdXJjZV09XCJjZGtBcnJheURhdGFTb3VyY2VcIlxuICAgICAgICBbdHJlZUNvbnRyb2xdPVwiY2RrVHJlZUNvbnRyb2xcIlxuICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgKm5nSWY9XCJyZW5kZXJUcmVlXCJcbiAgICAgICAgY2xhc3M9XCJldWktY2RrLXRyZWVcIj5cbiAgICAgICAgPCEtLSBUaGVyZSBhcmUgdHdvIHN0YXRlcyBvZiBnZW5lcmljIGNkay1uZXN0ZWQtdHJlZS1ub2RlIGRlY2xhcmF0aW9ucy5cbiAgICAgICAgRmlyc3Qgb25lIGlzIHdpdGhvdXQgY2hpbGQuIE5vIHN1YiByZW5kZXJpbmcuXG4gICAgICAgIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsXCIgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGVcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1maXJzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCA9PT0gJzAnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tbGFzdF09XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbC5sYXN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7XG4gICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udG9vbHRpcExhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXG4gICAgICAgICAgICAgICAgfX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZiB8fCBub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgICAgICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICAgICAgICAgICpjZGtUcmVlTm9kZURlZj1cImxldCB0cmVlUnVuVGltZUl0ZW1Nb2RlbDsgd2hlbjogaGFzQ2hpbGRcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktY2RrLW5lc3RlZC10cmVlLW5vZGUgZXVpLWNkay1uZXN0ZWQtdHJlZS1ub2RlLS13aXRoLWNoaWxkXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbGktcmVwIGV1aS10cmVlLW5vZGUgZXVpLXRyZWUtbm9kZS0td2l0aC1jaGlsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidHJlZVJ1blRpbWVJdGVtTW9kZWxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLUhlcmUgd3JhcHMgdGhlIG5vZGUsIGFuZCBsaXN0ZW4gZm9yIG5vZGUgY2xpY2tzLi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbk5vZGVDbGljayh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZC9jb2xsYXBzZSBhY3Rpb24gYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdHJlZS1ub2RlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmICFjb2xsYXBzZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJleHBhbmRlZFN2Z0ljb25DbGFzc1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKHRyZWVSdW5UaW1lSXRlbU1vZGVsKSAmJiAhZXhwYW5kZWRJY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2xsYXBzZWRTdmdJY29uQ2xhc3NcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVycyBub2RlIGluIGRlZmF1bHQgb3IgcHJvdmlkZWQgdGVtcGxhdGUncyBjb250ZXh0LlxuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIG9uU2VsZWN0IHdpdGggb25TZWxlY3RGbiBmb3IgZGV2ZWxvcGVycyB0byBzZW5kIHRoZSBldmVudHMgZnJvbSB0aGVpciBjdXN0b20gY2hlY2sgZXZlbnRzLlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgaWQgdG8gYmUgdXNlZCBvbiBnZW5lcmljIHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVSZWYgfHwgbm9kZVRlbXBsYXRlRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKT8ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IG9uU2VsZWN0Rm4odHJlZVJ1blRpbWVJdGVtTW9kZWwucGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1aWQgKyB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tdXNlcyBjZGtUcmVlTm9kZU91dGxldCB0byByZW5kZXIgY2hpbGRyZW4gbm9kZXMsIENka1RyZWVDb250cm9sIGlzIHVzZWQgdG8gY29udHJvbCBpc0V4cGFuZGVkIHN0YXRlLi0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdWwtcmVwIGV1aS10cmVlLW5vZGVcIiByb2xlPVwiZ3JvdXBcIiAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICA8L2Nkay10cmVlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbm9kZVRlbXBsYXRlRGVmYXVsdCBsZXQtbm9kZSBsZXQtb25TZWxlY3Q9XCJvblNlbGVjdFwiIGxldC1pZD1cImlkXCIgbGV0LXBhdGg9XCJwYXRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLWxlZnRcIiBbY2xhc3MuZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdC0tc2VsZWN0ZWRdPVwibm9kZT8uaXNTZWxlY3RlZFwiPlxuICAgICAgICAgICAgPCEtLWlucHV0IGNoZWNrYm94IGFyZWEtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0Q2hlY2tCb3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUgJiYgbm9kZS5zZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIiEhbm9kZT8uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiISFub2RlPy5pc0luZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci1tXCIgLz5cblxuICAgICAgICAgICAgPCEtLWljb24gYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25TdmdOYW1lXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uVHlwZUNsYXNzIHx8ICduZXV0cmFsJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uY2hpcHNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygbm9kZS50cmVlQ29udGVudEJsb2NrLmNoaXBzXCJcbiAgICAgICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwiY2hpcC50eXBlQ2xhc3MgfHwgJ3NlY29uZGFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbZXVpT3V0bGluZV09XCJjaGlwLmlzT3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLWNoaXAtLXJvdW5kZWQgZXVpLXUtbWItbm9uZSBldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlMYWJlbD57eyBjaGlwLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZXVpLWNoaXA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWJhZGdlICh0eXBlTGFiZWwgJiB0eXBlQ2xhc3MpIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWxcIiBbbmdTd2l0Y2hdPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udHlwZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1iYWRnZSBldWlTaXplTSBbZXVpVmFyaWFudF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3MgfHwgJ3ByaW1hcnknXCIgY2xhc3M9XCJldWktdS1mbGV4LW5vLXNocmluayBldWktdS1tci14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tbGFiZWwgYXJlYS0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbWlkZGxlXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmwgJiYgIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICBldWlMYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cInt7IGlkIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbGFiZWwtLXNlbGVjdGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoKT8uc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPT09ICdpbmRldGVybWluYXRlJyB8fCBub2RlPy5pc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGU/LmlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS1jdXJzb3ItcG9pbnRlcl09XCJub2RlPy5zZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLXN0YW5kYWxvbmVdPVwiIXNob3dVbmRlcmxpbmVkTGlua3NcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFwiIGV1aUxhYmVsIGZvcj1cInt7IGlkIH19XCIgY2xhc3M9XCJldWktdS10ZXh0LXRydW5jYXRlIGV1aS11LXAtMnhzXCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsLXN0YW5kYWxvbmVdPVwiIXNob3dVbmRlcmxpbmVkTGlua3NcIlxuICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWwgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbFRhcmdldCB8fCAnYmxhbmsnIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGF1dG9UcmFuc2xhdGUgPyAobm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfCB0cmFuc2xhdGUpIDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50XCIgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1yaWdodFwiPlxuICAgICAgICAgICAgPCEtLWJhZGdlcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYWRnZSBvZiBub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5iYWRnZXNcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aU91dGxpbmUgW2V1aVZhcmlhbnRdPVwiYmFkZ2UudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCIgY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlMYWJlbD57eyBiYWRnZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tY2hpcHMgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpcCBvZiBub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jaGlwc1wiPlxuICAgICAgICAgICAgICAgIDxldWktY2hpcFxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tQ29udGV4dCBtZW51LS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrLnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSAmJiByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWRyb3Bkb3duIGNsYXNzPVwiZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBldWlCdXR0b24gZXVpU2l6ZVMgZXVpUm91bmRlZCBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGV1aVNlY29uZGFyeSBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHRpb25zIG1lbnUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJlbGxpcHNpcy12ZXJ0aWNhbDpzaGFycFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicmlnaHRDb250ZXh0TWVudVRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnJpZ2h0Q29udGVudD8uY29udGV4dE1lbnVNZXRhRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLW1ldGFkYXRhLCB1c2VzIHRoZSBoZWxwIG9mIG5nIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGR5bmFtaWMgZXhwYW5kIHZhcmlhYmxlIHdpdGhvdXQgaGFuZGxpbmcgc3RhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwibm9kZS50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSAmJiBub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRNZXRhZGF0YUNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBleHBhbmRlZDogZmFsc2UgfVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyIGxldC1tZXRhRGF0YUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBldWlCdXR0b25cbiAgICAgICAgICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICAgICAgICAgIGV1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgICAgICAgICAgZXVpU2l6ZVNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIGNvbGxhcHNlIHRyZWUgaXRlbVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID0gIW1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBbaWNvbl09XCJtZXRhRGF0YUNvbnRhaW5lci5leHBhbmRlZCA/ICdjaGV2cm9uLWRvd246c2hhcnAnIDogJ2NoZXZyb24tZm9yd2FyZDpzaGFycCdcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkXCIgY2xhc3M9XCJldWktdHJlZS1ub2RlX19tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwhLS1wYXNzaW5nIG1ldGFkYXRhIG9mIHRoZSBub2RlIGNvbnRlbnQgdG8gcHJvdmlkZWQgdGVtcGxhdGUtcmVmOm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZi0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5tZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
950
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRyZWUvZXVpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osTUFBTSxFQUNOLGlCQUFpQixFQU1qQixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFRSCxpQkFBaUIsR0FDcEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFB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Qjt3QkFDakIsZUFBZTtxQkFDbEI7b0JBQ0QsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUsXG4gICAgVHJlZURhdGFNb2RlbCxcbiAgICBUcmVlSXRlbU1vZGVsLFxuICAgIFRyZWVEYXRhUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtUnVuVGltZU1vZGVsLFxuICAgIFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWwsXG4gICAgRXVpVHJlZVNlbGVjdGlvbkNoYW5nZXMsXG4gICAgRXVpVHJlZVBhZ2luYXRpb24sXG59IGZyb20gJy4vZXVpLXRyZWUubW9kZWwnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdWlJbnB1dENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pbnB1dC1jaGVja2JveCc7XG5pbXBvcnQgeyBFdWlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWJ1dHRvbic7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcbmltcG9ydCB7IEV1aUxhYmVsTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1sYWJlbCc7XG5pbXBvcnQgeyBFdWlCYWRnZU1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktYmFkZ2UnO1xuaW1wb3J0IHsgRXVpQ2hpcE1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcCc7XG5pbXBvcnQgeyBFdWlEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktZHJvcGRvd24nO1xuaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wsIENka1RyZWVNb2R1bGUsIENka1RyZWUgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBBcnJheURhdGFTb3VyY2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlLCBTY3JvbGxEaXNwYXRjaGVyLCBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENzc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZTJlJykgQElucHV0KCkgZTJlQXR0ciA9ICdldWktdHJlZSc7XG4gICAgQElucHV0KCkgbm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgQElucHV0KCkgbm9kZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBASW5wdXQoKSByaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWZvcndhcmQ6c2hhcnAnO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZFN2Z0ljb25DbGFzcyA9ICdjaGV2cm9uLWRvd246c2hhcnAnO1xuXG4gICAgQFZpZXdDaGlsZCgnY2RrU2Nyb2xsYWJsZVJlZicsIHsgcmVhZDogQ2RrU2Nyb2xsYWJsZSB9KSBjZGtTY3JvbGxhYmxlUmVmOiBDZGtTY3JvbGxhYmxlO1xuICAgIEBWaWV3Q2hpbGQoJ3RyZWVDb21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyB0cmVlQ29tcG9uZW50SW5zdGFuY2U6IENka1RyZWU8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1NpbmdsZVNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dVbmRlcmxpbmVkTGlua3MgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0xpbmVzID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhpZ2hsaWdodFBhdGggPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aVRyZWVTZWxlY3Rpb25DaGFuZ2VzPigpO1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVJdGVtTW9kZWw+KCk7XG4gICAgY2RrQXJyYXlEYXRhU291cmNlOiBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIGNka1RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD47XG4gICAgcmVuZGVyVHJlZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgdWlkOiBzdHJpbmcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwKS50b1N0cmluZygpO1xuICAgIHByb3RlY3RlZCBfaXNNdWx0aUxldmVsO1xuICAgIHByaXZhdGUgcHJvY2Vzc2VkTm9kZXM6IFRyZWVEYXRhTW9kZWw7XG4gICAgcHJpdmF0ZSB0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsO1xuICAgIHByaXZhdGUgdHJlZURhdGFSdW5UaW1lQmFja3VwOiBUcmVlRGF0YVJ1blRpbWVNb2RlbDtcbiAgICBwcml2YXRlIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD47XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnM7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uO1xuICAgIHByaXZhdGUgdHJlZVBhZ2luYXRpb246IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ25vZGVzJ10/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snbm9kZXMnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmVlKCk7XG4gICAgICAgICAgICBpZih0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyhbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2U/LnJlbmRlck5vZGVDaGFuZ2VzKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWxTdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQcm9jZXNzZWROb2RlcygpOiBUcmVlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnBhdGg7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdHJhY2tCeUNvbnRyb2woaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBnZXRUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucHJvY2Vzc2VkTm9kZXM7XG4gICAgICAgIGxldCBub2RlO1xuICAgICAgICBpZiAobm9kZUFyciAmJiBBcnJheS5pc0FycmF5KG5vZGVBcnIpKSB7XG4gICAgICAgICAgICBpbmRleEFycj8uZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQXJyID0gbm9kZUFyciAmJiBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlQXJyW3BhdGhJbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmV4cGFuZEFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGV4cGFuZEF0KHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFBhcmVudFBhdGhzKHBhdGgpLnJldmVyc2UoKS5mb3JFYWNoKChwYXJlbnRQYXRoKT0+e1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGFyZW50UGF0aCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5leHBhbmQodGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCkpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGZpbHRlclRlcm0oZmlsdGVySW5wdXQ6IHN0cmluZywgZmlsdGVyS2V5Pzogc3RyaW5nLCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlcklucHV0ICE9PSAnJyAmJiBmaWx0ZXJJbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgZmlsdGVySW5wdXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuZmlsdGVyVHJlZURhdGEoc3RydWN0dXJlZENsb25lKHRoaXMudHJlZURhdGFSdW5UaW1lQmFja3VwKSwgZmlsdGVyS2V5IHx8ICdsYWJlbCcsIGZpbHRlcklucHV0LCBzaG93Q2hpbGRyZW5PZk1hdGNoZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHsgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIC8vIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCk7XG4gICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgdGhpcy5jZGtUcmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxUcmVlSXRlbVJ1blRpbWVNb2RlbD4oKG5vZGUpID0+IG5vZGU/LmNoaWxkcmVuLCB7IHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wgfSk7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBbGxTZWxlY3Rpb24oaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKHRoaXMudHJlZURhdGFSdW5UaW1lLCBpc0NoZWNrZWQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyZWVJdGVtKGdpdmVuVHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHN0cnVjdHVyZWRDbG9uZShnaXZlblRyZWVJdGVtKTtcbiAgICAgICAgaWYgKHRyZWVJdGVtICYmIHBhdGgpIHtcbiAgICAgICAgdGhpcy5zZXRUcmVlRGF0YShwYXRoLCB0aGlzLnByb2Nlc3NJbnB1dHMoW3RyZWVJdGVtXSlbMF0pO1xuICAgICAgICBjb25zdCBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhdGhBcnIucG9wKCksIDEwKTtcbiAgICAgICAgY29uc3QgdHJlZUl0ZW1SdW50aW1lID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUodHJlZUl0ZW0sIGluZGV4LCBwYXRoQXJyLmpvaW4oJy4nKSk7XG4gICAgICAgIGlmICh0cmVlSXRlbVJ1bnRpbWU/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4gPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0cmVlSXRlbVJ1bnRpbWUuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lQmFja3VwKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIHRoaXMuc2V0VHJlZURhdGFSdW5UaW1lKHBhdGgsIHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIC8vIGl0ZW1SZWN1cnNpdmVTZWxlY3Rpb25TdGF0ZVxuICAgICAgICBjb25zdCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh0cmVlSXRlbSk7XG4gICAgICAgIHRoaXMuc2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlVHJlZShwYXRoLCBpdGVtUmVjdXJzaXZlU2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgIC8vIFJlbmRlcmluZ1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50cmVlQ29tcG9uZW50SW5zdGFuY2UucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZS5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgIGlmICh0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiAhdHJlZUl0ZW0ubm9kZS5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlSXRlbVJ1bnRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZUl0ZW1SdW50aW1lKSAmJiB0cmVlSXRlbS5ub2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZXhwYW5kKHRyZWVJdGVtUnVudGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpPy5jaGlsZHJlbik7XG4gICAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbih0aGlzLmdldFJ1blRpbWVUcmVlSXRlbShwYXRoKT8uY2hpbGRyZW4pPy5mb3JFYWNoKChydW5UaW1lSXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lSXRlbS5wYXRoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh0aGlzLmdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbT8ucGF0aCkpO1xuICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLnRvZ2dsZSh0cmVlUnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVUb2dnbGUodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZVRvZ2dsZSh0cmVlUnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtPy5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgPSB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtKTtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodGhpcy5nZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW0/LnBhdGgpKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBub2RlU2VsZWN0ZWQoZXZ0OiBhbnksIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lVHJlZUl0ZW0ocGF0aCk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBpdGVtLm5vZGU7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBhdGgsaXRlbSxydW5UaW1lVHJlZUl0ZW0sIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgaWYgKCFub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCkge1xuICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gZXZ0LnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgbm9kZS5pc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIHJlY3Vyc2l2ZSBpdCBzZXRzIGV2ZXJ5IGNoaWxkcmVuIHdpdGggdGhlIGNoYW5nZS5cbiAgICAgICAgICAgIGlmIChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4gJiYgcmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGVUcmVlKFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUoc3RydWN0dXJlZENsb25lKHRoaXMuZ2V0VHJlZUl0ZW0ocGF0aCkpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuICYmIHJlbmRlcmVkUnVuVGltZVRyZWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZXRJc0NoZWNrZWRGb3JBbGwocmVuZGVyZWRSdW5UaW1lVHJlZUl0ZW0/LmNoaWxkcmVuLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1blN0YXRlQ2hhbmdlc0ZvckFsbChyZW5kZXJlZFJ1blRpbWVUcmVlSXRlbT8uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb21wb25lbnRJbnN0YW5jZT8ucmVuZGVyTm9kZUNoYW5nZXMoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbXBvbmVudEluc3RhbmNlPy5yZW5kZXJOb2RlQ2hhbmdlcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwYXRoKTtcbiAgICAgICAgICAgIGlmIChub2RlUGF0aHNTZXEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVQYXRoc1NlcS5mb3JFYWNoKChub2RlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3RhdGVzID0gdGhpcy5nZXRSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgpLmNoaWxkcmVuLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3RhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5yZWN1cnNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNTdGF0ZUNoYW5nZXNBdFBhdGgobm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXTtcbiAgICAgICAgICAgIGlmIChldnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUcmVlSXRlbShwcmV2SXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChwcmV2SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5vZGUuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5jaGVja2VkICYmIHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtTm9kZVBhdGhzU2VxID0gdGhpcy5nZXRQYXJlbnRQYXRocyhwcmV2SXRlbS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtTm9kZVBhdGhzU2VxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtTm9kZVBhdGhzU2VxLmZvckVhY2goKG5vZGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCwgJ2FsbE5vdFNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IHRoaXMuZ2V0UGFyZW50UGF0aHMocGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoc1NlcT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXEuZm9yRWFjaCgobm9kZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSdW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUobm9kZVBhdGgsIGV2dC50YXJnZXQuY2hlY2tlZCA/ICdpbmRldGVybWluYXRlJyA6ICdhbGxOb3RTZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiBib29sZWFuID0+ICEhaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+PSAwO1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWxlY3RGbihwYXRoOiBzdHJpbmcpOiAoZXZ0OiBhbnkpID0+IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRUcmVlSXRlbShwYXRoKT8ubm9kZT8uc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy5ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICByZXR1cm4gKGV2dDogYW55KSA9PiBub2RlU2VsZWN0ZWQoZXZ0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybigndHJlZUl0ZW1Nb2RlbC5ub2RlLnNlbGVjdGFibGUgaXMgZmFsc2UsIHlvdSBjYW4gbm90IGltcGxlbWVudCBvblNlbGVjdCcpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnI6IEFycmF5PG51bWJlcj4gPSB0aGlzLnJlc29sdmVQYXRoKHBhdGgpO1xuICAgICAgICBsZXQgbm9kZUFyciA9IHRoaXMucnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlO1xuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZUFycltwYXRoSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VHJlZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzTXVsdGlMZXZlbCA9IHRoaXMuY2hlY2tJZk11bHRpTGV2ZWwodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZE5vZGVzID0gdGhpcy5wcm9jZXNzSW5wdXRzKHN0cnVjdHVyZWRDbG9uZSh0aGlzLm5vZGVzKSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuY3JlYXRlVHJlZURhdGFSdW50aW1lKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLmFwcGx5UnVuVGltZUxhc3RJdGVtcyh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9IHRoaXMuY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHRoaXMucHJvY2Vzc2VkTm9kZXMpO1xuICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWVCYWNrdXAgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgLy8gdG9kbyBJdCBzaG91bGQgYmUgY29uZmlndXJhYmxlLCA4MDAsIDIgYW5kIDQwMCBhcmUgaGFyZCBjb2RlZCByaWdodCBub3dcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cC5sZW5ndGggPiA4MDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVQYWdpbmF0aW9uID0gbmV3IEV1aVRyZWVQYWdpbmF0aW9uPFRyZWVJdGVtUnVuVGltZU1vZGVsPih0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cCwgMSwgMiwgNDAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0ZWREYXRhID0gdGhpcy50cmVlUGFnaW5hdGlvbi5nZXRWaWV3RGF0YSgpLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlPFRyZWVJdGVtUnVuVGltZU1vZGVsPihwYWdpbmF0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHBhZ2luYXRlZERhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNka0FycmF5RGF0YVNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2U8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5Q29udHJvbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJJbml0aWFsRXhwYW5kKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMudHJlZURhdGFSdW5UaW1lKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhPy5wYXRoID09PSBiPy5wYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXT8ubWFwKChpdGVtKSA9PiB0aGlzLmdldFRyZWVJdGVtKGl0ZW0/LnBhdGgpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsU3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnMgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMSkpLnN1YnNjcmliZSgoc2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBzYy5hZGRlZC5tYXAoKF8pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oXy5wYXRoKSksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHNjLnJlbW92ZWQubWFwKChfKSA9PiB0aGlzLmdldFRyZWVJdGVtKF8ucGF0aCkpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb25DaGFuZ2Uuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0cyh0cmVlRGF0YTogVHJlZURhdGFNb2RlbCk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICB0cmVlRGF0YSA9IHRoaXMub3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKHRyZWVEYXRhLCB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uLCAhdGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgIHRyZWVEYXRhID0gdGhpcy5vdmVycmlkZVRyZWVEYXRhTW9kZWxGb3JTZWxlY3Rpb24odHJlZURhdGEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWVEYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVUcmVlRGF0YU1vZGVsRm9yU2VsZWN0aW9uKFxuICAgICAgICBub2RlQXJyOiBUcmVlRGF0YU1vZGVsLFxuICAgICAgICBpc1JlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICAgICBzaW5nbGVTZWxlY3Q/OiBib29sZWFuLFxuICAgICk6IFRyZWVEYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gbm9kZUFycj8ubWFwKChpdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IGl0ZW0/Lm5vZGU/LnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm5vZGUuc2VsZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhIWlzUmVjdXJzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ucmVjdXJzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQXV0b1NlbGVjdFBhcmVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGl0ZW0/Lm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub0F1dG9TZWxlY3RQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5ub0F1dG9TZWxlY3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLm92ZXJyaWRlVHJlZURhdGFNb2RlbEZvclNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBpc1JlY3Vyc2l2ZSwgbm9BdXRvU2VsZWN0UGFyZW50LCBzaW5nbGVTZWxlY3QpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHR5cGVvZiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBpdGVtPy5ub2RlPy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5ub2RlPy5zZWxlY3RDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaXRlbT8ubm9kZT8uc2VsZWN0Q29uZmlnPy5zaW5nbGVTZWxlY3QgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtPy5ub2RlPy5zZWxlY3RDb25maWc/LnNpbmdsZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5TY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3VicyA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcm9sbGFibGUgJiYgdGhpcy5jaGVja0lmQ3VycmVudFNjcm9sbGFibGUoc2Nyb2xsYWJsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID1cbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID49XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F0VG9wID0gc2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID09PSAwO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbGVtZW50OicsIHRoaXMuY2RrU2Nyb2xsYWJsZVJlZi5nZXRFbGVtZW50UmVmKCkpO1xuICAgICAgICAgICAgICAgIGlmIChpc0F0Qm90dG9tICYmICF0aGlzLnRyZWVQYWdpbmF0aW9uLmlzQXRNYXgoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMudHJlZVBhZ2luYXRpb24ucGFnaW5hdGVOZXh0KCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGFSdW5UaW1lID0gdGhpcy5hcHBseVJ1blRpbWVMYXN0SXRlbXModGhpcy50cmVlRGF0YVJ1blRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtBcnJheURhdGFTb3VyY2UgPSBuZXcgQXJyYXlEYXRhU291cmNlKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+KChub2RlKSA9PiBub2RlPy5jaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy50cmVlRGF0YVJ1blRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSArIHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25Ub1Njcm9sbCA9IHRvdGFsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvKHsgdG9wOiBwb3NpdGlvblRvU2Nyb2xsIC8gMiB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBdFRvcCAmJiB0aGlzLnRyZWVQYWdpbmF0aW9uLmdldEN1cnJlbnRTdGFydFBhZ2UoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YVJ1blRpbWUgPSB0aGlzLnRyZWVQYWdpbmF0aW9uLnBhZ2luYXRlUHJldigpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhUnVuVGltZSA9IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKHRoaXMudHJlZURhdGFSdW5UaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQXJyYXlEYXRhU291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLnRyZWVEYXRhUnVuVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPFRyZWVJdGVtUnVuVGltZU1vZGVsPigobm9kZSkgPT4gbm9kZT8uY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0aGlzLnRyYWNrQnlDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMudHJlZURhdGFSdW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykgKyBzY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoJ3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uVG9TY3JvbGwgPSB0b3RhbEhlaWdodCAtIHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUbyh7IHRvcDogcG9zaXRpb25Ub1Njcm9sbCAvIDIgKyB2aWV3cG9ydEhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZmluZEluZGV4KChpKSA9PiBpPy5wYXRoID09PSBydW5UaW1lVHJlZUl0ZW0/LnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0VHJlZUl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mSXRlbSA9IHRoaXMuZ2V0U2VsZWN0aW9uSW5kZXhPZkl0ZW0ocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4T2ZJdGVtID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QocnVuVGltZUJhY2t1cFRyZWVJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZWxlY3RUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZJdGVtID0gdGhpcy5nZXRTZWxlY3Rpb25JbmRleE9mSXRlbShydW5UaW1lVHJlZUl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXhPZkl0ZW0gPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNwbGljZShpbmRleE9mSXRlbSwgMSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGlvbiguLi5uZXdTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmVlRGF0YVJ1bnRpbWUobm9kZXM6IFRyZWVEYXRhTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUobm9kZXMpPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoaXRlbSwgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5UnVuVGltZUxhc3RJdGVtcyhpdGVtczogVHJlZURhdGFSdW5UaW1lTW9kZWwpOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiBpdGVtcz8ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMCA/IHRoaXMuYXBwbHlSdW5UaW1lTGFzdEl0ZW1zKGl0ZW0uY2hpbGRyZW4pIDogaXRlbT8uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogaXRlbXMubGVuZ3RoID09PSBpbmRleCArIDEgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKG5vZGVzOiBUcmVlRGF0YU1vZGVsKTogQXJyYXk8VHJlZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKG5vZGVzKT8ubWFwKChpdGVtKSA9PiB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSh7IC4uLml0ZW0gfSkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIHJ1biB0aW1lIHN0YXRlIHdoaWNoIGluY2x1ZGVzIGNoaWxkcmVuIHNlbGVjdGlvbiBzdGF0ZSBmb3Igc2VsZWN0aW9uIHRyZWUuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUodHJlZUl0ZW06IFRyZWVJdGVtTW9kZWwpOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5TZWxlY3Rpb25SZWN1cnNpdmU6IEFycmF5PFRyZWVJdGVtU2VsZWN0aW9uUmVjdXJzaXZlTW9kZWw+ID0gW107XG4gICAgICAgIGlmICh0cmVlSXRlbS5jaGlsZHJlbiAmJiB0cmVlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cmVlSXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZVtpbmRleF0gPSB0aGlzLmNhbGN1bGF0ZUl0ZW1TZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZFN0YXRlcyA9IGNoaWxkcmVuU2VsZWN0aW9uUmVjdXJzaXZlLm1hcCgoXykgPT4gXy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSB0aGlzLmRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICAgICAgY2hpbGRTdGF0ZXMsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSxcbiAgICAgICAgICAgIHRyZWVJdGVtLm5vZGU/LnNlbGVjdENvbmZpZz8ubm9BdXRvU2VsZWN0UGFyZW50LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IGl0ZW1TdGF0ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblNlbGVjdGlvblJlY3Vyc2l2ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlY2lkZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKFxuICAgICAgICBjaGlsZFN0YXRlczogQXJyYXk8U2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU+ID0gW10sXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgICAgIHJlY3Vyc2l2ZTogYm9vbGVhbixcbiAgICAgICAgbm9BdXRvU2VsZWN0UGFyZW50OiBib29sZWFuLFxuICAgICk6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlIHtcbiAgICAgICAgbGV0IGl0ZW1TdGF0ZTogU2VsZWN0aW9uUmVjdXJzaXZlU3RhdGUgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGVkICYmIGNoaWxkU3RhdGVzLmV2ZXJ5KChzdGF0ZSkgPT4gc3RhdGUgPT09ICdhbGxOb3RTZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsU2VsZWN0ZWQnKSAmJiAhaXNTZWxlY3RlZCAmJiAhbm9BdXRvU2VsZWN0UGFyZW50KSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsU2VsZWN0ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHJlY3Vyc2l2ZSAmJiBjaGlsZFN0YXRlcy5ldmVyeSgoc3RhdGUpID0+IHN0YXRlID09PSAnYWxsTm90U2VsZWN0ZWQnKSAmJiBpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtU3RhdGUgPSAnYWxsTm90U2VsZWN0ZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKG5vZGVQYXRoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShub2RlUGF0aCk7XG4gICAgICAgIGNvbnN0IHJ1blRpbWVCYWNrdXBUcmVlSXRlbSA9IHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKG5vZGVQYXRoKTtcbiAgICAgICAgY29uc3QgcnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZUl0ZW0gPSB0aGlzLmdldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZShub2RlUGF0aCk7XG4gICAgICAgIGlmICh0cmVlSXRlbT8ubm9kZT8uc2VsZWN0YWJsZSAmJiB0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgaWYgKCF0cmVlSXRlbS5ub2RlPy5zZWxlY3RDb25maWc/Lm5vQXV0b1NlbGVjdFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRyZWVJdGVtLm5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRyZWVJdGVtLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnaW5kZXRlcm1pbmF0ZScsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUl0ZW0ubm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udHJlZUl0ZW0ubm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogdHJlZUl0ZW0ubm9kZS5pc1NlbGVjdGVkICYmIHJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVJdGVtLnNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlID09PSAnYWxsU2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc0luZGV0ZXJtaW5hdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIXRyZWVJdGVtLm5vZGUuaXNTZWxlY3RlZCAmJiBydW5UaW1lU2VsZWN0aW9uUmVjdXJzaXZlSXRlbS5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2FsbFNlbGVjdGVkJyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRyZWVJdGVtLCB0cmVlSXRlbS5ub2RlLnRyZWVDb250ZW50QmxvY2subGFiZWwsICdpc1NlbGVjdGVkOicgKyB0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQsICdpc0luZGV0ZXJtaW5hdGU6JyArIHRyZWVJdGVtLm5vZGUuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbShydW5UaW1lQmFja3VwVHJlZUl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlSXRlbS5ub2RlLmlzU2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChydW5UaW1lQmFja3VwVHJlZUl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1blRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleEFycjogQXJyYXk8bnVtYmVyPiA9IHRoaXMucmVzb2x2ZVBhdGgocGF0aCk7XG4gICAgICAgIGxldCBpdGVtQXJyID0gdGhpcy5wcm9jZXNzZWROb2RlcztcbiAgICAgICAgaW5kZXhBcnI/LmZvckVhY2goKHBhdGhJbmRleDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhBcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnIgPSBpdGVtQXJyW3BhdGhJbmRleF0/LmNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtQXJyW3BhdGhJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRyZWVEYXRhUnVuVGltZUJhY2t1cChwYXRoOiBzdHJpbmcsIGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VHJlZURhdGFSdW5UaW1lKHBhdGg6IHN0cmluZywgaXRlbTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkSXRlbSA9IHRoaXMuZ2V0UnVuVGltZVRyZWVJdGVtKHBhdGgpO1xuICAgICAgICBpZihvbGRJdGVtKXtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0pPy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgb2xkSXRlbVtrZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZVRyZWUocGF0aDogc3RyaW5nLCBpdGVtOiBUcmVlSXRlbVNlbGVjdGlvblJlY3Vyc2l2ZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGg6IHN0cmluZywgc2VsZWN0aW9uUmVjdXJzaXZlU3RhdGU6IFNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IGl0ZW1BcnIgPSB0aGlzLnJ1blRpbWVTZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZTtcbiAgICAgICAgaW5kZXhBcnIuZm9yRWFjaCgocGF0aEluZGV4OiBudW1iZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgaXRlbUFyciA9IGl0ZW1BcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1BcnJbcGF0aEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbUFycltwYXRoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldElzQ2hlY2tlZEZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4sIGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2RlQXJyLmZvckVhY2goKHJ1blRpbWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVudGltZUJhY2t1cFRyZWVJdGVtID0gdGhpcy5nZXRSdW5UaW1lQmFja3VwVHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbSA9IHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZUl0ZW0ucGF0aCk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdHJlZUl0ZW0ubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlPy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pc1NlbGVjdGVkID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHJ1bnRpbWVCYWNrdXBUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNDaGVja2VkRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJ1blN0YXRlQ2hhbmdlc0ZvckFsbChub2RlQXJyOiBBcnJheTxUcmVlSXRlbVJ1blRpbWVNb2RlbD4pOiB2b2lkIHtcbiAgICAgICAgbm9kZUFycj8uZm9yRWFjaCgocnVuVGltZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RhdGVDaGFuZ2VzRm9yQWxsKG5vZGVBcnJbaW5kZXhdLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25BdFBhdGgocnVuVGltZVRyZWVJdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICAvLyBJdCBpcyBoZXJlIGZvciB0aGUgZmlsdGVyIGVkZ2UgY2FzZS5cbiAgICAgICAgdGhpcy5zeW5jU3RhdGVDaGFuZ2VzQXRQYXRoKHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgLy8gU2V0cyBpc1NlbGVjdGVkIGNoYW5nZSBvbiB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0ocnVuVGltZVRyZWVJdGVtLnBhdGgpLm5vZGUuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlSXRlbSh0aGlzLmdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShydW5UaW1lVHJlZUl0ZW0ucGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFRyZWVJdGVtKHRoaXMuZ2V0UnVuVGltZUJhY2t1cFRyZWVJdGVtKHJ1blRpbWVUcmVlSXRlbS5wYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5tYXAoKGluZGV4OiBzdHJpbmcpID0+IHBhcnNlSW50KGluZGV4LCAxMCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50UGF0aHMocGF0aDogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHBhdGhBcnIubGVuZ3RoID4gMTtcbiAgICAgICAgLy8gU2V0cyB0aGUgaGFzUGFyZW50IElmIHRoZXJlIGlzIGEgcGFyZW50LCBhbmQgcmVtb3ZlcyB0aGUgbGFzdCBlbGVtZW50IGZvcm0gcGF0aEFyci5cbiAgICAgICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgICAgICAgcGF0aEFyci5wb3AoKTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZXMgcGFyZW50IHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoQXJyLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIC8vIENyZWF0aW5nIG5vZGUgaW5kZXggc2VxdWVuY2UgZi5lIElmIHBhdGggaXMgJzEuMicgaXQgd2lsbCBiZSBbMSwyXVxuICAgICAgICAgICAgY29uc3Qgbm9kZUluZGV4U2VxID0gcGFyZW50UGF0aC5zcGxpdCgnLicpLm1hcCgoaW5kZXhTdHIpID0+IHBhcnNlSW50KGluZGV4U3RyLCAxMCkpO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIG5vZGUgcGF0aHMgYXJyYXkgdG8gYmUgcmUtY2FsY3VsYXRlZCBmcm9tIGJvdHRvbSB0byB0b3BcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQYXRoc1NlcSA9IFtdO1xuICAgICAgICAgICAgbm9kZUluZGV4U2VxLmZvckVhY2goKG5vZGVJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aHNTZXFbaW5kZXhdID0gbm9kZUluZGV4U2VxLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZVBhdGhzU2VxLnJldmVyc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUnVuVGltZVN0YXRlKHRyZWVJdGVtOiBUcmVlSXRlbU1vZGVsLCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYXRoPzogc3RyaW5nKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBjb25zdCBydW5UaW1lVHJlZUl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsID0ge1xuICAgICAgICAgICAgcGF0aDogcGFyZW50UGF0aCA/IHBhcmVudFBhdGggKyAnLicgKyBpbmRleCA6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRyZWVJdGVtLmNoaWxkcmVuICYmIHRyZWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBydW5UaW1lVHJlZUl0ZW0uY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRyZWVJdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCB0cmVlSXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcnVuVGltZVRyZWVJdGVtLmNoaWxkcmVuW3RyZWVJdGVtSW5kZXhdID0gdGhpcy5jYWxjdWxhdGVSdW5UaW1lU3RhdGUoY2hpbGQsIHRyZWVJdGVtSW5kZXgsIHJ1blRpbWVUcmVlSXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydW5UaW1lVHJlZUl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJUcmVlRGF0YShydW5UaW1lVHJlZURhdGE6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBrZXkgPSAnbGFiZWwnLCBmaWx0ZXJTdHI6IHN0cmluZywgc2hvd0NoaWxkcmVuOiBib29sZWFuLCBzaG93Pzpib29sZWFuKTogVHJlZURhdGFSdW5UaW1lTW9kZWwge1xuICAgICAgICByZXR1cm4gcnVuVGltZVRyZWVEYXRhLmZpbHRlcigocnVuVGltZUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldERhdGEgPSB0aGlzLmdldFRyZWVJdGVtKHJ1blRpbWVJdGVtLnBhdGgpLm5vZGUudHJlZUNvbnRlbnRCbG9ja1trZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldERhdGEgJiYgdGhpcy5ub3JtYWxpemVkU3RyKHRhcmdldERhdGEpPy5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZWRTdHIoZmlsdGVyU3RyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHJ1blRpbWVJdGVtLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJUcmVlRGF0YShydW5UaW1lSXRlbS5jaGlsZHJlbiwga2V5LCBmaWx0ZXJTdHIsIHNob3dDaGlsZHJlbiwgc2hvd0NoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihydW5UaW1lSXRlbSx7IG1hdGNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAvLyBydW5UaW1lSXRlbS5tYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcnVuVGltZUl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlclRyZWVEYXRhKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBrZXksIGZpbHRlclN0ciwgc2hvd0NoaWxkcmVuLCBzaG93KTtcbiAgICAgICAgICAgICAgICBydW5UaW1lSXRlbS5jaGlsZHJlbiA9IHJ1blRpbWVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBydW5UaW1lSXRlbS5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwIHx8IHNob3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZWRTdHIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsU2VsZWN0aW9uKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogQXJyYXk8VHJlZUl0ZW1SdW5UaW1lTW9kZWw+ID0gW107XG4gICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihub2Rlcywgc2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjYW5TZWxlY3Rpb24obm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBzZWxlY3Rpb246IEFycmF5PFRyZWVJdGVtUnVuVGltZU1vZGVsPik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlPy5zZWxlY3RhYmxlICYmIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NhblNlbGVjdGlvbihpdGVtLmNoaWxkcmVuLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckluaXRpYWxFeHBhbmQobm9kZXM6IFRyZWVEYXRhUnVuVGltZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW06IFRyZWVJdGVtUnVuVGltZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckluaXRpYWxFeHBhbmQoaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ2V0VHJlZUl0ZW0oaXRlbS5wYXRoKS5ub2RlLmlzRXhwYW5kZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5nZXRUcmVlSXRlbShpdGVtLnBhdGgpLm5vZGUuaXNFeHBhbmRlZCAmJiAhdGhpcy5jZGtUcmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRBdChpdGVtLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmdldFRyZWVJdGVtKGl0ZW0ucGF0aCkubm9kZS5pc0V4cGFuZGVkICYmICB0aGlzLmNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1RyZWVDb250cm9sLmNvbGxhcHNlKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRNYXRjaGVkKG5vZGVzOiBUcmVlRGF0YVJ1blRpbWVNb2RlbCk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChpdGVtOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmdldFBhcmVudFBhdGhzKGl0ZW0ucGF0aClbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudFRyZWVJdGVtID0gdGhpcy5nZXRUcmVlSXRlbShwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHJlZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRUcmVlSXRlbS5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyAgbm9kZS5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJoZXJlXCIsIHBhcmVudFRyZWVJdGVtLm5vZGUudHJlZUNvbnRlbnRCbG9jay5sYWJlbCwgcGFyZW50UGF0aCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQXQocGFyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRNYXRjaGVkKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRSdW5UaW1lVHJlZUl0ZW0odGhpcy50cmVlRGF0YVJ1blRpbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJ1blRpbWVUcmVlSXRlbSh0cmVlRGF0YVJ1blRpbWU6IFRyZWVEYXRhUnVuVGltZU1vZGVsLCBwYXRoKTogVHJlZUl0ZW1SdW5UaW1lTW9kZWwge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1blRpbWVJdGVtIG9mIHRyZWVEYXRhUnVuVGltZSkge1xuICAgICAgICAgICAgaWYgKHJ1blRpbWVJdGVtLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuVGltZUl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1blRpbWVJdGVtPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUnVuVGltZVRyZWVJdGVtKHJ1blRpbWVJdGVtLmNoaWxkcmVuLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1blRpbWVCYWNrdXBUcmVlSXRlbShwYXRoOiBzdHJpbmcpOiBUcmVlSXRlbVJ1blRpbWVNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyOiBBcnJheTxudW1iZXI+ID0gdGhpcy5yZXNvbHZlUGF0aChwYXRoKTtcbiAgICAgICAgbGV0IG5vZGVBcnIgPSB0aGlzLnRyZWVEYXRhUnVuVGltZUJhY2t1cDtcbiAgICAgICAgbGV0IG5vZGU7XG4gICAgICAgIGlmIChub2RlQXJyICYmIEFycmF5LmlzQXJyYXkobm9kZUFycikpIHtcbiAgICAgICAgICAgIGluZGV4QXJyPy5mb3JFYWNoKChwYXRoSW5kZXg6IG51bWJlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBpbmRleEFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVBcnIgPSBub2RlQXJyICYmIG5vZGVBcnJbcGF0aEluZGV4XT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVBcnJbcGF0aEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktdHJlZScsXG4gICAgICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPyAnZXVpLXRyZWUtLW11bHRpc2VsZWN0JyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNNdWx0aUxldmVsID8gJ2V1aS10cmVlLS13aXRoLWNoaWxkcmVuJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5zaG93TGluZXMgPyAnZXVpLXRyZWUtLXNob3ctbGluZXMnIDogJycsXG4gICAgICAgIF1cbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZk11bHRpTGV2ZWwodHJlZTogVHJlZURhdGFNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNNdWx0aUxldmVsID0gZmFsc2U7XG4gICAgICAgIHRyZWUuZm9yRWFjaCgoaXRlbTogVHJlZUl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlzTXVsdGlMZXZlbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNNdWx0aUxldmVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJZkN1cnJlbnRTY3JvbGxhYmxlKHNjcm9sbGVkOiBDZGtTY3JvbGxhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzY3JvbGxlZC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGhpcy5jZGtTY3JvbGxhYmxlUmVmLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBFdWlJbnB1dENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtUcmVlTW9kdWxlLFxuICAgICAgICBFdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgICAgIEV1aUxhYmVsTW9kdWxlLFxuICAgICAgICBFdWlCYWRnZU1vZHVsZSxcbiAgICAgICAgRXVpQ2hpcE1vZHVsZSxcbiAgICAgICAgRXVpRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW0V1aVRyZWVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtFdWlUcmVlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpVHJlZU1vZHVsZSB7fVxuIiwiPGRpdiBjbGFzcz1cImV1aS11bC1yZXAgZXVpLXRyZWVfX3dyYXBwZXJcIiBjZGtTY3JvbGxhYmxlICNjZGtTY3JvbGxhYmxlUmVmPlxuICAgIDxjZGstdHJlZVxuICAgICAgICAjdHJlZUNvbXBvbmVudEluc3RhbmNlXG4gICAgICAgIFtkYXRhU291cmNlXT1cImNka0FycmF5RGF0YVNvdXJjZVwiXG4gICAgICAgIFt0cmVlQ29udHJvbF09XCJjZGtUcmVlQ29udHJvbFwiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAqbmdJZj1cInJlbmRlclRyZWVcIlxuICAgICAgICBjbGFzcz1cImV1aS1jZGstdHJlZVwiPlxuICAgICAgICA8IS0tIFRoZXJlIGFyZSB0d28gc3RhdGVzIG9mIGdlbmVyaWMgY2RrLW5lc3RlZC10cmVlLW5vZGUgZGVjbGFyYXRpb25zLlxuICAgICAgICBGaXJzdCBvbmUgaXMgd2l0aG91dCBjaGlsZC4gTm8gc3ViIHJlbmRlcmluZy5cbiAgICAgICAgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZSAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgdHJlZVJ1blRpbWVJdGVtTW9kZWxcIiBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRyZWVSdW5UaW1lSXRlbU1vZGVsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWZpcnN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoID09PSAnMCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdHJlZS1ub2RlLS1sYXN0XT1cInRyZWVSdW5UaW1lSXRlbU1vZGVsLmxhc3RcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy50b29sdGlwTGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsPy5wYXRoKT8ubm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlcnMgbm9kZSBpbiBkZWZhdWx0IG9yIHByb3ZpZGVkIHRlbXBsYXRlJ3MgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlcyBvblNlbGVjdCB3aXRoIG9uU2VsZWN0Rm4gZm9yIGRldmVsb3BlcnMgdG8gc2VuZCB0aGUgZXZlbnRzIGZyb20gdGhlaXIgY3VzdG9tIGNoZWNrIGV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGlkIHRvIGJlIHVzZWQgb24gZ2VuZXJpYyB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlUmVmIHx8IG5vZGVUZW1wbGF0ZURlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstbmVzdGVkLXRyZWUtbm9kZT5cbiAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGV4cGFuZGFibGUgbm9kZXMgLS0+XG4gICAgICAgIDxjZGstbmVzdGVkLXRyZWUtbm9kZVxuICAgICAgICAgICAgKmNka1RyZWVOb2RlRGVmPVwibGV0IHRyZWVSdW5UaW1lSXRlbU1vZGVsOyB3aGVuOiBoYXNDaGlsZFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1jZGstbmVzdGVkLXRyZWUtbm9kZSBldWktY2RrLW5lc3RlZC10cmVlLW5vZGUtLXdpdGgtY2hpbGRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1saS1yZXAgZXVpLXRyZWUtbm9kZSBldWktdHJlZS1ub2RlLS13aXRoLWNoaWxkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLXRyZWUtbm9kZS0tZmlyc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGggPT09ICcwJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS10cmVlLW5vZGUtLWxhc3RdPVwidHJlZVJ1blRpbWVJdGVtTW9kZWwubGFzdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlUnVuVGltZUl0ZW1Nb2RlbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e1xuICAgICAgICAgICAgICAgICAgICBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnRvb2x0aXBMYWJlbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJlZUl0ZW0odHJlZVJ1blRpbWVJdGVtTW9kZWw/LnBhdGgpPy5ub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbFxuICAgICAgICAgICAgICAgIH19XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tSGVyZSB3cmFwcyB0aGUgbm9kZSwgYW5kIGxpc3RlbiBmb3Igbm9kZSBjbGlja3MuLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiIGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXhwYW5kL2NvbGxhcHNlIGFjdGlvbiBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/Lm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKHRyZWVSdW5UaW1lSXRlbU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10cmVlLW5vZGVfX2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbCkgJiYgIWNvbGxhcHNlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV4cGFuZGVkU3ZnSWNvbkNsYXNzXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNka1RyZWVDb250cm9sLmlzRXhwYW5kZWQodHJlZVJ1blRpbWVJdGVtTW9kZWwpICYmICFleHBhbmRlZEljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbGxhcHNlZFN2Z0ljb25DbGFzc1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJzIG5vZGUgaW4gZGVmYXVsdCBvciBwcm92aWRlZCB0ZW1wbGF0ZSdzIGNvbnRleHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgb25TZWxlY3Qgd2l0aCBvblNlbGVjdEZuIGZvciBkZXZlbG9wZXJzIHRvIHNlbmQgdGhlIGV2ZW50cyBmcm9tIHRoZWlyIGN1c3RvbSBjaGVjayBldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBpZCB0byBiZSB1c2VkIG9uIGdlbmVyaWMgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVJlZiB8fCBub2RlVGVtcGxhdGVEZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGdldFRyZWVJdGVtKHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgpPy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdDogb25TZWxlY3RGbih0cmVlUnVuVGltZUl0ZW1Nb2RlbC5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCArIHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRyZWVSdW5UaW1lSXRlbU1vZGVsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBnZXRUcmVlSXRlbSh0cmVlUnVuVGltZUl0ZW1Nb2RlbD8ucGF0aCk/LmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS11c2VzIGNka1RyZWVOb2RlT3V0bGV0IHRvIHJlbmRlciBjaGlsZHJlbiBub2RlcywgQ2RrVHJlZUNvbnRyb2wgaXMgdXNlZCB0byBjb250cm9sIGlzRXhwYW5kZWQgc3RhdGUuLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11bC1yZXAgZXVpLXRyZWUtbm9kZVwiIHJvbGU9XCJncm91cFwiICpuZ0lmPVwiY2RrVHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0cmVlUnVuVGltZUl0ZW1Nb2RlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjZGtUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay1uZXN0ZWQtdHJlZS1ub2RlPlxuICAgIDwvY2RrLXRyZWU+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGVEZWZhdWx0IGxldC1ub2RlIGxldC1vblNlbGVjdD1cIm9uU2VsZWN0XCIgbGV0LWlkPVwiaWRcIiBsZXQtcGF0aD1cInBhdGhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRyZWUtbm9kZS13cmFwcGVyX19jb250YWluZXItbGVmdFwiIFtjbGFzcy5ldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1sZWZ0LS1zZWxlY3RlZF09XCJub2RlPy5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8IS0taW5wdXQgY2hlY2tib3ggYXJlYS0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgZXVpSW5wdXRDaGVja0JveFxuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZSAmJiBub2RlLnNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eyBpZCB9fVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiISFub2RlPy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCIhIW5vZGU/LmlzSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLW1cIiAvPlxuXG4gICAgICAgICAgICA8IS0taWNvbiBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8uaWNvblN2Z05hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lmljb25UeXBlQ2xhc3MgfHwgJ25ldXRyYWwnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLWNoaXBzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5jaGlwc1wiPlxuICAgICAgICAgICAgICAgIDxldWktY2hpcFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBub2RlLnRyZWVDb250ZW50QmxvY2suY2hpcHNcIlxuICAgICAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJjaGlwLnR5cGVDbGFzcyB8fCAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtldWlPdXRsaW5lXT1cImNoaXAuaXNPdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktY2hpcC0tcm91bmRlZCBldWktdS1tYi1ub25lIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGNoaXAubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9ldWktY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tYmFkZ2UgKHR5cGVMYWJlbCAmIHR5cGVDbGFzcykgYXJlYS0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbFwiIFtuZ1N3aXRjaF09XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy50eXBlQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWJhZGdlIGV1aVNpemVNIFtldWlWYXJpYW50XT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVDbGFzcyB8fCAncHJpbWFyeSdcIiBjbGFzcz1cImV1aS11LWZsZXgtbm8tc2hyaW5rIGV1aS11LW1yLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS1sYWJlbCBhcmVhLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdHJlZS1ub2RlLXdyYXBwZXJfX2NvbnRhaW5lci1taWRkbGVcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybCAmJiAhbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsRXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIGV1aUxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwie3sgaWQgfX1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXUtdGV4dC10cnVuY2F0ZSBldWktdS1wLTJ4c1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1sYWJlbC0tc2VsZWN0ZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodFBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0UnVuVGltZVNlbGVjdGlvblJlY3Vyc2l2ZVN0YXRlKHBhdGgpPy5zZWxlY3Rpb25SZWN1cnNpdmVTdGF0ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnIHx8IG5vZGU/LmlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbm9kZT8uaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS11LWN1cnNvci1wb2ludGVyXT1cIm5vZGU/LnNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibm9kZT8udHJlZUNvbnRlbnRCbG9jaz8udXJsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdXRvVHJhbnNsYXRlID8gKG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsXCIgZXVpTGFiZWwgZm9yPVwie3sgaWQgfX1cIiBjbGFzcz1cImV1aS11LXRleHQtdHJ1bmNhdGUgZXVpLXUtcC0yeHNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS11LXRleHQtbGluay1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWwtc3RhbmRhbG9uZV09XCIhc2hvd1VuZGVybGluZWRMaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBub2RlPy50cmVlQ29udGVudEJsb2NrPy51cmxFeHRlcm5hbCB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cInt7IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/LnVybEV4dGVybmFsVGFyZ2V0IHx8ICdibGFuaycgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXV0b1RyYW5zbGF0ZSA/IChub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBub2RlPy50cmVlQ29udGVudEJsb2NrPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub2RlPy50cmVlQ29udGVudEJsb2NrPy5yaWdodENvbnRlbnRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGUtd3JhcHBlcl9fY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgICAgICA8IS0tYmFkZ2VzIGFyZWEtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJhZGdlIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmJhZGdlc1wiPlxuICAgICAgICAgICAgICAgIDxldWktYmFkZ2UgZXVpT3V0bGluZSBbZXVpVmFyaWFudF09XCJiYWRnZS50eXBlQ2xhc3MgfHwgJ3NlY29uZGFyeSdcIiBjbGFzcz1cImV1aS11LW1sLXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsPnt7IGJhZGdlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZXVpLWJhZGdlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1jaGlwcyBhcmVhLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlwIG9mIG5vZGUudHJlZUNvbnRlbnRCbG9jay5yaWdodENvbnRlbnQ/LmNoaXBzXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1jaGlwXG4gICAgICAgICAgICAgICAgICAgIGV1aVNpemVTXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImNoaXAudHlwZUNsYXNzIHx8ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aU91dGxpbmVdPVwiY2hpcC5pc091dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1jaGlwLS1yb3VuZGVkIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZXVpTGFiZWw+e3sgY2hpcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2V1aS1jaGlwPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1Db250ZXh0IG1lbnUtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2sucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhICYmIHJpZ2h0Q29udGV4dE1lbnVUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDxldWktZHJvcGRvd24gY2xhc3M9XCJldWktdS1tbC14c1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGV1aUJ1dHRvbiBldWlTaXplUyBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gZXVpU2Vjb25kYXJ5IFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wdGlvbnMgbWVudSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImVsbGlwc2lzLXZlcnRpY2FsOnNoYXJwXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyaWdodENvbnRleHRNZW51VGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogbm9kZT8udHJlZUNvbnRlbnRCbG9jaz8ucmlnaHRDb250ZW50Py5jb250ZXh0TWVudU1ldGFEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2V1aS1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tbWV0YWRhdGEsIHVzZXMgdGhlIGhlbHAgb2YgbmcgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgZHluYW1pYyBleHBhbmQgdmFyaWFibGUgd2l0aG91dCBoYW5kbGluZyBzdGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJub2RlLnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhICYmIG5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudE1ldGFkYXRhQ29udGFpbmVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IGV4cGFuZGVkOiBmYWxzZSB9XG4gICAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vZGVDb250ZW50TWV0YWRhdGFDb250YWluZXIgbGV0LW1ldGFEYXRhQ29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aUJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgICAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgICAgICAgICBldWlTaXplU1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgY29sbGFwc2UgdHJlZSBpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWQgPSAhbWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIm1ldGFEYXRhQ29udGFpbmVyLmV4cGFuZGVkID8gJ2NoZXZyb24tZG93bjpzaGFycCcgOiAnY2hldnJvbi1mb3J3YXJkOnNoYXJwJ1wiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWV0YURhdGFDb250YWluZXIuZXhwYW5kZWRcIiBjbGFzcz1cImV1aS10cmVlLW5vZGVfX21ldGFjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPCEtLXBhc3NpbmcgbWV0YWRhdGEgb2YgdGhlIG5vZGUgY29udGVudCB0byBwcm92aWRlZCB0ZW1wbGF0ZS1yZWY6bm9kZUNvbnRlbnRNZXRhZGF0YVRlbXBsYXRlUmVmLS0+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVDb250ZW50TWV0YWRhdGFUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IG5vZGU/LnRyZWVDb250ZW50QmxvY2s/Lm1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|