ngx-histaff-alpha 4.1.1 → 4.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs +14 -4
- package/esm2022/lib/app/root/menu/menu/menu.component.mjs +2 -2
- package/esm2022/lib/app/services/ssrs-express.service.mjs +41 -7
- package/fesm2022/ngx-histaff-alpha.mjs +55 -11
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.d.ts +3 -1
- package/lib/app/services/ssrs-express.service.d.ts +7 -1
- package/package.json +1 -1
package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs
CHANGED
|
@@ -59,6 +59,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
59
59
|
this.checkError$ = new BehaviorSubject(false);
|
|
60
60
|
this.expandLevel = 0;
|
|
61
61
|
this.statusChangeCount = 0;
|
|
62
|
+
this.orderByChangeCount = 0;
|
|
62
63
|
this.toolItems = [
|
|
63
64
|
EnumCoreButtonVNSCode.HEADER_CREATE,
|
|
64
65
|
EnumCoreButtonVNSCode.HEADER_EDIT,
|
|
@@ -87,6 +88,12 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
87
88
|
this.buildTreeData();
|
|
88
89
|
}
|
|
89
90
|
}
|
|
91
|
+
if (!!changes['orderBy']) {
|
|
92
|
+
this.orderByChangeCount += 1;
|
|
93
|
+
if (this.orderByChangeCount > 1) {
|
|
94
|
+
this.buildTreeData();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
90
97
|
}
|
|
91
98
|
ngOnInit() {
|
|
92
99
|
if (this.editMode === EnumCoreTreeGridEditMode.TREE_MODE) {
|
|
@@ -180,13 +187,14 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
180
187
|
keyField: this.keyField,
|
|
181
188
|
titleField: this.titleField,
|
|
182
189
|
parentField: this.parentField,
|
|
183
|
-
status: includeStatus ? this.status : undefined
|
|
190
|
+
status: includeStatus ? this.status : undefined,
|
|
191
|
+
orderBy: this.orderBy
|
|
184
192
|
});
|
|
185
193
|
}
|
|
186
194
|
else {
|
|
187
195
|
// Web workers are not supported in this environment.
|
|
188
196
|
// You should add a fallback so that your program still executes correctly.
|
|
189
|
-
this.subscriptions.push(this.recursiveService.linerArrayToNestedArray(cloneCopy, this.keyField, this.titleField, this.parentField, undefined, undefined, "tree$Expanded", includeStatus ? this.status : undefined)
|
|
197
|
+
this.subscriptions.push(this.recursiveService.linerArrayToNestedArray(cloneCopy, this.keyField, this.titleField, this.parentField, undefined, undefined, "tree$Expanded", includeStatus ? this.status : undefined, this.orderBy)
|
|
190
198
|
.subscribe(obj => {
|
|
191
199
|
this.data = obj.list;
|
|
192
200
|
this.maxTier = obj.maxTier;
|
|
@@ -524,7 +532,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
524
532
|
this.subscriptions.map(x => x?.unsubscribe());
|
|
525
533
|
}
|
|
526
534
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTreeGridComponent, deps: [{ token: i1.AppService }, { token: i2.RecursiveService }, { token: i3.MultiLanguageService }, { token: i4.DialogService }, { token: i5.CoreControlService }, { token: i6.CoreTableService }, { token: i7.AppConfigService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
527
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTreeGridComponent, isStandalone: true, selector: "core-tree-grid", inputs: { linearItems$: "linearItems$", editMode: "editMode", height: "height", columns: "columns", keyField: "keyField", titleField: "titleField", parentField: "parentField", headerHeight: "headerHeight", arrowSize: "arrowSize", rowHeight: "rowHeight", toggleOnArrowOnly: "toggleOnArrowOnly", leafOnlyTemplateRef: "leafOnlyTemplateRef", status: "status", treeCaption: "treeCaption", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeBlockPaddingLeft: "treeBlockPaddingLeft", treeNodeLevelPadding: "treeNodeLevelPadding", contentCellVerticalPadding: "contentCellVerticalPadding", contentCellHorizontalPadding: "contentCellHorizontalPadding", hideExpandCollapseToggler: "hideExpandCollapseToggler", disableHoverEffect: "disableHoverEffect", getFullListApi: "getFullListApi", crud: "crud", disableTreeCreateUpdate: "disableTreeCreateUpdate", disableDoubleClick: "disableDoubleClick" }, outputs: { onRowDoubleClick: "onRowDoubleClick", onSubmitSuccess: "onSubmitSuccess" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n <core-loading-surface [height]=\"height\" [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div w-100\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n\r\n <div class=\"d-flex d-flex-between w-100 pl15 pr15\">\r\n <span>\r\n {{ (editMode === 'TREE_MODE' ? 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' : treeCaption) | translate:\r\n lang }}\r\n </span>\r\n @if (!hideExpandCollapseToggler) {\r\n <div class=\"togglers\">\r\n <div class=\"d-flex d-flex-end\">\r\n <i class=\"feather-chevrons-up\" [class.lighter]=\"expandLevel===0\"\r\n (click)=\"collapseAll()\"></i>\r\n <i class=\"feather-arrow-up\" [class.lighter]=\"expandLevel===0\"\r\n (click)=\"collapseUp()\"></i>\r\n <i class=\"feather-arrow-down\" [class.lighter]=\"expandLevel===maxTier-1\"\r\n (click)=\"expandDown()\"></i>\r\n <i class=\"feather-chevrons-down\" [class.lighter]=\"expandLevel===maxTier-1\"\r\n (click)=\"expandAll()\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if (editMode === 'TREE_MODE' && !disableTreeCreateUpdate) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n @if (!!headerGroupExist) {\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: headerHeight/2 + 'px',\r\n }\">\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: headerHeight/2 + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white'\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\"\r\n (click)=\"onLiClick(context, $event)\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id && !disableTreeCreateUpdate)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n paddingTop: contentCellVerticalPadding + 'px',\r\n paddingBottom: contentCellVerticalPadding + 'px',\r\n paddingLeft: contentCellHorizontalPadding + 'px',\r\n paddingRight: contentCellHorizontalPadding + 'px',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n justifyContent: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!!column.templateRef && (!leafOnlyTemplateRef || (!!leafOnlyTemplateRef &&\r\n !hasChildren))) {\r\n <ng-container\r\n *ngTemplateOutlet=\"column.templateRef!; context: { context: context }\"></ng-container>\r\n } @else {\r\n <span [class.opacity0]=\"context[column.field] === undefined\">\r\n {{ !!column.translate ? ((context[column.field] || '-') | translate: lang |\r\n tableCell:\r\n column.pipe : lang) :\r\n (context[column.field] || '-') | tableCell: column.pipe : lang}}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n </span>\r\n \r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n [attr.data-tier]=\"tier\" (click)=\"onLiClick(context, $event)\">\r\n <span class=\"front-span\" [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - treeBlockPaddingLeft - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (editMode === 'TREE_MODE' && !disableTreeCreateUpdate) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n <object>\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n </span>\r\n <div class=\"line-divider\"></div>\r\n\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 36px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;--tree-block-padding-left: 100px;--line-hover-display-mode: block;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24}.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .opacity0{opacity:0}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2;padding-left:var(--tree-block-padding-left)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .tree-block-header .togglers i{font-size:36px;color:#a9a9a9;cursor:pointer}.core-tree-grid-container .tree-grid-header .tree-block-header .togglers i.lighter{color:#fff;cursor:none}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;vertical-align:top;table-layout:fixed;margin-bottom:0;animation:fade-in .2s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap;cursor:pointer}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.2s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:var(--line-hover-display-mode);height:var(--row-height);position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:calc(var(--tree-container-width) * -1)}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>.line-divider{position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));height:1px;background-color:#e6ebed;z-index:5;top:var(--row-height);left:calc((var(--tree-block-padding-left) + var(--tree-node-level-padding) * var(--tier)) * -1)}.core-tree-grid-container li>span.front-span:hover:after{width:calc(var(--tree-container-width) + var(--grid-total-width));left:calc(var(--tree-block-padding-left) * -1 + var(--tree-node-level-padding) * var(--tier) * -1)}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.2s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "fixedShow", "shownItems", "showCaption", "lastChildEffectOff"], outputs: ["buttonClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }] }); }
|
|
535
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTreeGridComponent, isStandalone: true, selector: "core-tree-grid", inputs: { linearItems$: "linearItems$", editMode: "editMode", height: "height", columns: "columns", keyField: "keyField", titleField: "titleField", parentField: "parentField", headerHeight: "headerHeight", arrowSize: "arrowSize", rowHeight: "rowHeight", toggleOnArrowOnly: "toggleOnArrowOnly", leafOnlyTemplateRef: "leafOnlyTemplateRef", status: "status", treeCaption: "treeCaption", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeBlockPaddingLeft: "treeBlockPaddingLeft", treeNodeLevelPadding: "treeNodeLevelPadding", contentCellVerticalPadding: "contentCellVerticalPadding", contentCellHorizontalPadding: "contentCellHorizontalPadding", hideExpandCollapseToggler: "hideExpandCollapseToggler", disableHoverEffect: "disableHoverEffect", orderBy: "orderBy", getFullListApi: "getFullListApi", crud: "crud", disableTreeCreateUpdate: "disableTreeCreateUpdate", disableDoubleClick: "disableDoubleClick" }, outputs: { onRowDoubleClick: "onRowDoubleClick", onSubmitSuccess: "onSubmitSuccess" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n <core-loading-surface [height]=\"height\" [loading]=\"loading\"></core-loading-surface>\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div w-100\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n\r\n <div class=\"d-flex d-flex-between w-100 pl15 pr15\">\r\n <span>\r\n {{ (editMode === 'TREE_MODE' ? 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' : treeCaption) | translate:\r\n lang }}\r\n </span>\r\n @if (!hideExpandCollapseToggler) {\r\n <div class=\"togglers\">\r\n <div class=\"d-flex d-flex-end\">\r\n <i class=\"feather-chevrons-up\" [class.lighter]=\"expandLevel===0\"\r\n (click)=\"collapseAll()\"></i>\r\n <i class=\"feather-arrow-up\" [class.lighter]=\"expandLevel===0\"\r\n (click)=\"collapseUp()\"></i>\r\n <i class=\"feather-arrow-down\" [class.lighter]=\"expandLevel===maxTier-1\"\r\n (click)=\"expandDown()\"></i>\r\n <i class=\"feather-chevrons-down\" [class.lighter]=\"expandLevel===maxTier-1\"\r\n (click)=\"expandAll()\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n @if (editMode === 'TREE_MODE' && !disableTreeCreateUpdate) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n @if (!!headerGroupExist) {\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: headerHeight/2 + 'px',\r\n }\">\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: headerHeight/2 + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white'\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroupExist ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\"\r\n (click)=\"onLiClick(context, $event)\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id && !disableTreeCreateUpdate)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n paddingTop: contentCellVerticalPadding + 'px',\r\n paddingBottom: contentCellVerticalPadding + 'px',\r\n paddingLeft: contentCellHorizontalPadding + 'px',\r\n paddingRight: contentCellHorizontalPadding + 'px',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n justifyContent: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!!column.templateRef && (!leafOnlyTemplateRef || (!!leafOnlyTemplateRef &&\r\n !hasChildren))) {\r\n <ng-container\r\n *ngTemplateOutlet=\"column.templateRef!; context: { context: context }\"></ng-container>\r\n } @else {\r\n <span [class.opacity0]=\"context[column.field] === undefined\">\r\n {{ !!column.translate ? ((context[column.field] || '-') | translate: lang |\r\n tableCell:\r\n column.pipe : lang) :\r\n (context[column.field] || '-') | tableCell: column.pipe : lang}}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n </span>\r\n \r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n [attr.data-tier]=\"tier\" (click)=\"onLiClick(context, $event)\">\r\n <span class=\"front-span\" [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - treeBlockPaddingLeft - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (editMode === 'TREE_MODE' && !disableTreeCreateUpdate) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n <object>\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n </span>\r\n <div class=\"line-divider\"></div>\r\n\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 36px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;--tree-block-padding-left: 100px;--line-hover-display-mode: block;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24}.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .opacity0{opacity:0}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2;padding-left:var(--tree-block-padding-left)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .tree-block-header .togglers i{font-size:36px;color:#a9a9a9;cursor:pointer}.core-tree-grid-container .tree-grid-header .tree-block-header .togglers i.lighter{color:#fff;cursor:none}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;vertical-align:top;table-layout:fixed;margin-bottom:0;animation:fade-in .2s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap;cursor:pointer}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.2s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:var(--line-hover-display-mode);height:var(--row-height);position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:calc(var(--tree-container-width) * -1)}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>.line-divider{position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));height:1px;background-color:#e6ebed;z-index:5;top:var(--row-height);left:calc((var(--tree-block-padding-left) + var(--tree-node-level-padding) * var(--tier)) * -1)}.core-tree-grid-container li>span.front-span:hover:after{width:calc(var(--tree-container-width) + var(--grid-total-width));left:calc(var(--tree-block-padding-left) * -1 + var(--tree-node-level-padding) * var(--tier) * -1)}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.2s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "fixedShow", "shownItems", "showCaption", "lastChildEffectOff"], outputs: ["buttonClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }] }); }
|
|
528
536
|
}
|
|
529
537
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTreeGridComponent, decorators: [{
|
|
530
538
|
type: Component,
|
|
@@ -591,6 +599,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
591
599
|
type: Input
|
|
592
600
|
}], disableHoverEffect: [{
|
|
593
601
|
type: Input
|
|
602
|
+
}], orderBy: [{
|
|
603
|
+
type: Input
|
|
594
604
|
}], getFullListApi: [{
|
|
595
605
|
type: Input
|
|
596
606
|
}], crud: [{
|
|
@@ -607,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
607
617
|
type: ViewChild,
|
|
608
618
|
args: ['container']
|
|
609
619
|
}] } });
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUF3QyxNQUFNLEVBQWlCLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU3SyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVE3RyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFFaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUEyQixNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1D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QUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IElFdmVyeVRyZWVTdGF0dXMsIFJlY3Vyc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWN1cnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS9jb3JlLWNvbnRyb2wuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcblxyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93ayc7XHJcbmltcG9ydCB7IGV4cGFuZF90aHJlc2hvbGRfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL2V4cGFuZFRocmVzaG9sZCc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZSwgSUNvcmVUcmVlR3JpZENvbHVtbkl0ZW0gfSBmcm9tICcuLi9jb3JlLXRyZWUtZ3JpZC1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJQ29yZVBhZ2VFZGl0Q1JVRCB9IGZyb20gJy4uLy4uL2NvcmUtcGFnZS1lZGl0L0lDb3JlUGFnZUVkaXRDUlVEJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cm9sL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGhyZWVkb3RzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGhyZWVkb3RzL3RocmVlZG90cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUNlbGxQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdGFibGUtY2VsbC5waXBlJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlU2VydmljZSwgSUNvcmVDb2x1bW5zSGVhZGVyR3JvdXBUcmFuc2Zvcm1lZCwgSUhlYWRlckdyb3VwSXRlbSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvcmUtdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRyZWUtZ3JpZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVGFibGVDZWxsUGlwZSxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlVHJlZUdyaWRDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbGluZWFySXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGVkaXRNb2RlITogRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zOiBJQ29yZVRyZWVHcmlkQ29sdW1uSXRlbVtdID0gW107XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkga2V5RmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdGl0bGVGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwYXJlbnRGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBoZWFkZXJIZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXJyb3dTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB0b2dnbGVPbkFycm93T25seSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbGVhZk9ubHlUZW1wbGF0ZVJlZjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc3RhdHVzOiBJRXZlcnlUcmVlU3RhdHVzID0ge1xyXG4gICAgc2VsZWN0ZWRLZXk6IHVuZGVmaW5lZCxcclxuICAgIGFjdGl2ZUtleXM6IFtdLFxyXG4gICAgZXhwYW5kZWRLZXlzOiBbXSxcclxuICB9O1xyXG4gIEBJbnB1dCgpIHRyZWVDYXB0aW9uITogRW51bVRyYW5zbGF0ZUtleSB8IHN0cmluZztcclxuICBASW5wdXQoKSBoZWFkZXJDZWxsUGFkZGluZzogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBoZWFkZXJCb3JkZXJTaXplOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpIHRyZWVDb2x1bW5XaWR0aDogbnVtYmVyID0gMjAwO1xyXG4gIEBJbnB1dCgpIHRyZWVCbG9ja1BhZGRpbmdMZWZ0OiBudW1iZXIgPSA1MDtcclxuICBASW5wdXQoKSB0cmVlTm9kZUxldmVsUGFkZGluZzogbnVtYmVyID0gMTU7XHJcbiAgQElucHV0KCkgY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmc6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCkgY29udGVudENlbGxIb3Jpem9udGFsUGFkZGluZzogbnVtYmVyID0gMjA7XHJcbiAgQElucHV0KCkgaGlkZUV4cGFuZENvbGxhcHNlVG9nZ2xlciE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZUhvdmVyRWZmZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFdlIGhhdmUgMiBjYXNlcyBvZiBkYXRhIGJpbmRpbmc6XHJcblxyXG4gIC8vIDE6IGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlID0gdW5kZWZpbmVkICYmIGdldEZ1bGxMaXN0QXBpICE9PSB1bmRlZmluZWQgJiYgY3J1ZCAhPT0gdW5kZWZpbmVkXHJcbiAgLy8gVGhpcyBjYXNlIGlzIGZvciBjcmVhdGUvdXBkYXRlIHRyZWUgaXRzZWxmXHJcbiAgQElucHV0KCkgZ2V0RnVsbExpc3RBcGkhOiBhcGk7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUVkaXRDUlVEO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlITogYm9vbGVhbjtcclxuXHJcbiAgLy8gMTogZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUgPSB0cnVlICYmIGdldEZ1bGxMaXN0QXBpID09PSB1bmRlZmluZWQgJiYgY3J1ZCA9PT0gdW5kZWZpbmVkXHJcbiAgLy8gVGhpcyBjYXNlIGlzIGZvciB2aWV3IG9ubHksIGFuZCB1c2luZyBleHRlcm5hbnQgZGF0YSwgYW5kIHRoaXMuZGF0YSBtdXN0IGJlY29tZSBASW5wdXQoKVxyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlRG91YmxlQ2xpY2shOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdFN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgbGluZWFySXRlbXM6IGFueVtdID0gW107XHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBoZWFkZXJHcm91cHMhOiBJSGVhZGVyR3JvdXBJdGVtW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHRvdGFsV2lkdGg6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgbWF4VGllciE6IG51bWJlcjtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHBlbmRpbmdQYXJlbnRDb250ZXh0OiBhbnk7XHJcbiAgcGVuZGluZ0NvbnRleHQ6IGFueTtcclxuICBwZW5kaW5nQWN0aW9uITogRW51bUNvcmVCdXR0b25WTlNDb2RlO1xyXG5cclxuICBlZGl0TW9kZUFjdGl2YXRlZCE6IGJvb2xlYW47XHJcbiAgY2hlY2tFcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICB0cmFuc2Zvcm1lZCE6IElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQ7XHJcblxyXG4gIGFjdGl2ZUlkOiBhbnk7XHJcbiAgZXhwYW5kTGV2ZWw6IG51bWJlciA9IDA7XHJcblxyXG4gIHN0YXR1c0NoYW5nZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICB0b29sSXRlbXM6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gIF1cclxuXHJcbiAgaGVhZGVyVG9vbEl0ZW1zOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gIF1cclxuXHJcbiAgaGVhZGVyR3JvdXBFeGlzdCE6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWN1cnNpdmVTZXJ2aWNlOiBSZWN1cnNpdmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJvbFNlcnZpY2U6IENvcmVDb250cm9sU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVRhYmxlU2VydmljZTogQ29yZVRhYmxlU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVdpZHRocygpOiB2b2lkIHtcclxuICAgIGxldCBuZXdUb3RhbFdpZHRoID0gdGhpcy50cmVlQ29sdW1uV2lkdGg7XHJcbiAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gIXguaGlkZGVuKS5tYXAoeCA9PiBuZXdUb3RhbFdpZHRoICs9IHgud2lkdGghKTtcclxuICAgIHRoaXMudG90YWxXaWR0aCA9IG5ld1RvdGFsV2lkdGg7XHJcblxyXG4gICAgdGhpcy50cmFuc2Zvcm1lZCA9IHRoaXMuY29yZVRhYmxlU2VydmljZS50cmFuc2Zvcm1XaXRoSGVhZGVyR3JvdXAodGhpcy5jb2x1bW5zKTtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMudHJhbnNmb3JtZWQuY29sdW1ucztcclxuICAgIHRoaXMuaGVhZGVyR3JvdXBzID0gdGhpcy50cmFuc2Zvcm1lZC5oZWFkZXJHcm91cHM7XHJcbiAgICB0aGlzLmhlYWRlckdyb3VwRXhpc3QgPSAhIXRoaXMuaGVhZGVyR3JvdXBzPy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoISFjaGFuZ2VzWydjb2x1bW5zJ10pIHtcclxuICAgICAgdGhpcy5jYWxjdWxhdGVXaWR0aHMoKTtcclxuICAgIH1cclxuICAgIGlmICghIWNoYW5nZXNbJ3N0YXR1cyddKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlQ291bnQgKz0gMTtcclxuICAgICAgaWYgKHRoaXMuc3RhdHVzQ2hhbmdlQ291bnQgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGUuVFJFRV9NT0RFKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY29yZUNvbnRyb2xTZXJ2aWNlLnRvQ29yZVRyZWVHcmlkSW5Sb3dGb3JtR3JvdXAodGhpcy5jb2x1bW5zKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FsY3VsYXRlV2lkdGhzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlLlRSRUVfTU9ERSkge1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmdldEZ1bGxMaXN0QXBpICsgXCI/YXBwVHlwZT1cIiArIHRoaXMuYXBwQ29uZmlnU2VydmljZS5BUFBfVFlQRSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCEhdGhpcy5kaXNhYmxlSG92ZXJFZmZlY3QpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpbmUtaG92ZXItZGlzcGxheS1tb2RlJywgJ25vbmUnKSAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIXRoaXMuYXJyb3dTaXplKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zcXVhcmUtc2l6ZScsIHRoaXMuYXJyb3dTaXplICsgJ3B4JykgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnJvd0hlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcm93LWhlaWdodCcsIHRoaXMucm93SGVpZ2h0ICsgJ3B4JykgIFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtY29udGFpbmVyLXdpZHRoJywgdGhpcy50cmVlQ29sdW1uV2lkdGggKyAncHgnKVxyXG4gICAgICBsZXQgZ3JpZFRvdGFsV2lkdGggPSAwO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISEheC5oaWRkZW4pLm1hcChtID0+IGdyaWRUb3RhbFdpZHRoICs9IG0ud2lkdGghKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmlkLXRvdGFsLXdpZHRoJywgZ3JpZFRvdGFsV2lkdGggKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLWJsb2NrLXBhZGRpbmctbGVmdCcsIHRoaXMudHJlZUJsb2NrUGFkZGluZ0xlZnQgKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLW5vZGUtbGV2ZWwtcGFkZGluZycsIHRoaXMudHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGluZWFySXRlbXMkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZWFySXRlbXMgPSB4O1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWQoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGlvbiA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLmQhLCB7IGlkOiB0aGlzLnBlbmRpbmdDb250ZXh0LmlkIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBpbm5lci1wdXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkgKyBcIj9hcHBUeXBlPVwiICsgdGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFySXRlbXMgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TdWJtaXRTdWNjZXNzLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRUcmVlRGF0YShpbmNsdWRlU3RhdHVzID0gdHJ1ZSk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckl0ZW1zKSlcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQpXHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIHRoaXMubGluZWFySXRlbXMgPSBkYXRhLnJhd0xpc3Q7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YS5yYXdMaXN0XCIsIGRhdGEucmF3TGlzdClcclxuXHJcbiAgICAgICAgdGhpcy5tYXhUaWVyID0gZGF0YS5tYXhUaWVyXHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAga2V5RmllbGQ6IHRoaXMua2V5RmllbGQsXHJcbiAgICAgICAgdGl0bGVGaWVsZDogdGhpcy50aXRsZUZpZWxkLFxyXG4gICAgICAgIHBhcmVudEZpZWxkOiB0aGlzLnBhcmVudEZpZWxkLFxyXG4gICAgICAgIHN0YXR1czogaW5jbHVkZVN0YXR1cyA/IHRoaXMuc3RhdHVzIDogdW5kZWZpbmVkXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoY2xvbmVDb3B5LCB0aGlzLmtleUZpZWxkLCB0aGlzLnRpdGxlRmllbGQsIHRoaXMucGFyZW50RmllbGQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcInRyZWUkRXhwYW5kZWRcIiwgaW5jbHVkZVN0YXR1cyA/IHRoaXMuc3RhdHVzIDogdW5kZWZpbmVkKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShvYmogPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgdGhpcy5tYXhUaWVyID0gb2JqLm1heFRpZXJcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQ6IGFueSwgZTogYW55KTogdm9pZCB7XHJcblxyXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb250ZXh0LnRyZWUkRXhwYW5kZWQgPSAhISFjb250ZXh0LnRyZWUkRXhwYW5kZWRcclxuXHJcbiAgICAvLyB1cGRhdGUgc3RhdHVzXHJcbiAgICBpZiAoISFjb250ZXh0LnRyZWUkRXhwYW5kZWQpIHtcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLmZpbHRlcih4ID0+IHggPT09IGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLnB1c2goY29udGV4dC50cmVlJEtleS50b1N0cmluZygpKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMuZmlsdGVyKHggPT4geCAhPT0gY29udGV4dC50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzID0gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uT2JqZWN0Q2xpY2soY29udGV4dDogYW55LCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uTGlDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZS5UUkVFX01PREUpIHtcclxuICAgICAgaWYgKGV2ZW50Py5kZXRhaWwgPT09IDIgJiYgIXRoaXMuZGlzYWJsZURvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrLmVtaXQoY29udGV4dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRvZ2dsZU9uQXJyb3dPbmx5KSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy50b2dnbGVPbkFycm93T25seSkge1xyXG4gICAgICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkhlYWRlclRvb2xDbGljayhldmVudDogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdChudWxsKTtcclxuXHJcbiAgICBjb25zb2xlLndhcm4oXCJJbmxpbmUtZWRpdGluZyBpcyBvYnNvbGV0ZWQgZHVlIGl0cyBwdXJlIFVYXCIpO1xyXG5cclxuICAgIHJldHVybjtcclxuXHJcbiAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICAvKlxyXG4gICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgYmxhbmtSb3dbeC5maWVsZF0gPSBudWxsO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmNvbnRyb2wpLm1hcCh4ID0+IHtcclxuICAgICAgYmxhbmtSb3dbeC5jb250cm9sPy5maWVsZCFdID0gbnVsbDtcclxuICAgIH0pXHJcbiAgICBibGFua1Jvd1snaWQnXSA9IDA7XHJcbiAgICBibGFua1Jvd1sndHJlZSRLZXknXSA9IDA7XHJcbiAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICBibGFua1Jvd1sndHJlZSRUaXRsZSddID0gJyc7XHJcbiAgICBibGFua1Jvd1t0aGlzLmtleUZpZWxkXSA9IDA7XHJcbiAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IG51bGw7XHJcbiAgICBibGFua1Jvd1sndHJlZSRQYXJlbnQnXSA9IG51bGw7XHJcbiAgICBibGFua1Jvd1sndHJlZSRUaWVyJ10gPSAxO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkQ2hpbGRyZW4nXSA9IFtdO1xyXG5cclxuICAgIC8vIHB1c2ggdGhlIGJsYW5rUm93IHRvIHRoZSBjdXJyZW50IGRhdGFcclxuICAgIHRoaXMuZGF0YS51bnNoaWZ0KGJsYW5rUm93KTtcclxuXHJcbiAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gYmxhbmtSb3c7XHJcblxyXG4gICAgLy8gYWN0aXZhdGUgZWRpdE1vZGUgKGNyZWF0ZSlcclxuICAgIHRoaXMuZWRpdE1vZGVBY3RpdmF0ZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ0FOQ0VMXHJcbiAgICBdXHJcbiAgICAqL1xyXG4gIH1cclxuXHJcbiAgb25Ub29sQ2xpY2soZXZlbnQ6IElDb3JlQnV0dG9uVk5TLCBjb250ZXh0OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkU6XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGlmICghISF0aGlzLmZvcm0udmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwaTogYXBpO1xyXG5cclxuICAgICAgICBpZiAoISFOdW1iZXIodGhpcy5mb3JtLmdldCgnaWQnKT8udmFsdWUpKSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQudSFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXBpID0gdGhpcy5jcnVkLmMhXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLCB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAgICAgICBhcHBUeXBlOiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQVBQX1RZUEVcclxuICAgICAgICAgIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIGlubmVyLXB1c2hcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmdldEZ1bGxMaXN0QXBpICsgXCI/YXBwVHlwZT1cIiArIHRoaXMuYXBwQ29uZmlnU2VydmljZS5BUFBfVFlQRSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFySXRlbXMgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdE1vZGVBY3RpdmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTDpcclxuICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRleHQuaWQgPT09IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZXh0LnRyZWUkUGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKHggPT4geC5pZCAhPT0gMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ld0RhdGE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0LnRyZWUkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZDogYW55KSA9PiBjaGlsZC5pZCAhPT0gdGhpcy5wZW5kaW5nQ29udGV4dC5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1BhcmVudENvbnRleHQudHJlZSRDaGlsZHJlbiA9IGZpbHRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFOlxyXG5cclxuICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdCh7XHJcbiAgICAgICAgICBwYXJlbnRJZDogY29udGV4dC5pZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXCJJbmxpbmUtZWRpdGluZyBpcyBvYnNvbGV0ZWQgZHVlIGl0cyBwdXJlIFVYXCIpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICAgIGNvbnN0IGJsYW5rUm93OiBhbnkgPSB7fTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmNvbnRyb2wpLm1hcCh4ID0+IHtcclxuICAgICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICBibGFua1Jvd1snaWQnXSA9IDA7XHJcbiAgICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgICAgYmxhbmtSb3dbdGhpcy50aXRsZUZpZWxkXSA9ICcnO1xyXG4gICAgICBibGFua1Jvd1sndHJlZSRUaXRsZSddID0gJyc7XHJcbiAgICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgICAgYmxhbmtSb3dbdGhpcy5wYXJlbnRGaWVsZF0gPSBjb250ZXh0LmlkO1xyXG4gICAgICBibGFua1Jvd1sndHJlZSRQYXJlbnQnXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IGNvbnRleHQudHJlZSRUaWVyICsgMTtcclxuICAgICAgYmxhbmtSb3dbJ3RyZWUkQ2hpbGRyZW4nXSA9IFtdO1xyXG5cclxuICAgICAgLy8gcHVzaCB0aGUgYmxhbmtSb3cgdG8gdGhlIGN1cnJlbnQgZGF0YSBhdCB0aGUgYmVnaW5pbmdcclxuICAgICAgY29udGV4dC50cmVlJENoaWxkcmVuLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgICAgLy8gbWFrZSBzdXJlIHRvIGV4cGFuZFxyXG4gICAgICBjb250ZXh0LnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICAgICAgLy8gc2F2ZSBleHBhbmQgbW9kZSB0byBzdGF0ZVxyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMuZmlsdGVyKHggPT4geCA9PT0gY29udGV4dC50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNhdmUgcGFyZW50IGNvbnRleHRcclxuICAgICAgdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dCA9IGNvbnRleHRcclxuXHJcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBibGFua1JvdztcclxuXHJcbiAgICAgIGNvbnN0IG5ld0Zvcm1EYXRhOiBhbnkgPSB7fVxyXG4gICAgICBuZXdGb3JtRGF0YVt0aGlzLnBhcmVudEZpZWxkXSA9IGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdXHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKG5ld0Zvcm1EYXRhKVxyXG5cclxuICAgICAgLy8gYWN0aXZhdGUgZWRpdE1vZGUgKGNyZWF0ZSlcclxuICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgICAgXVxyXG4gICAgICBicmVhaztcclxuICAgICAgKi9cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcblxyXG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KGNvbnRleHQpO1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIklubGluZS1lZGl0aW5nIGlzIG9ic29sZXRlZCBkdWUgaXRzIHB1cmUgVVhcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgLypcclxuICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmNydWQuciEgKyBcIj9pZD1cIiArIGNvbnRleHQuaWQpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGJvZHkuaW5uZXJCb2R5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgICAgXVxyXG5cclxuICAgICAgYnJlYWs7XHJcbiAgICAgICovXHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKGNvbnRleHQudHJlZSRIYXNDaGlsZHJlbikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9JTkZPKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX1RSRUVfR1JJRF9DQU5OT1RfREVMRVRFX05PREVfSEFOVklOR19DSElMRFJFTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0RFTEVURSlcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtjb250ZXh0LnRyZWUkVGl0bGVdKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuWUVTKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5DQU5DRUwpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kTGV2ZWwgPT09IDApIHJldHVybjtcclxuICAgIHRoaXMuZXhwYW5kTGV2ZWwgPSAwO1xyXG4gICAgdGhpcy5saW5lYXJJdGVtcy5tYXAoaSA9PiB7XHJcbiAgICAgIGkuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmJ1aWxkVHJlZURhdGEoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VVcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZExldmVsID09PSAwKSByZXR1cm47XHJcbiAgICB0aGlzLmV4cGFuZExldmVsIC09IDE7XHJcblxyXG4gICAgdGhpcy5saW5lYXJJdGVtcy5tYXAoaSA9PiB7XHJcbiAgICAgIGkuZXhwYW5kZWQgPSBpLnRyZWUkVGllciA8PSB0aGlzLmV4cGFuZExldmVsO1xyXG4gICAgfSlcclxuICAgIFxyXG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiV29ya2VyIHdvcmtzIPCfn6Lwn5+iXCIpXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoZXhwYW5kX3RocmVzaG9sZF9zY3JpcHQpO1xyXG4gICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBkYXRhOiB0aGlzLmRhdGEsIGxldmVsOiB0aGlzLmV4cGFuZExldmVsIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJXb3JrZXIgaXMgdW5hdmFpbGFibGVcIilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBleHBhbmREb3duKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kTGV2ZWwgPT09IHRoaXMubWF4VGllciAtIDEpIHJldHVybjtcclxuICAgIHRoaXMuZXhwYW5kTGV2ZWwgKz0gMTtcclxuXHJcbiAgICB0aGlzLmxpbmVhckl0ZW1zLm1hcChpID0+IHtcclxuICAgICAgaS5leHBhbmRlZCA9IGkudHJlZSRUaWVyIDw9IHRoaXMuZXhwYW5kTGV2ZWw7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIldvcmtlciB3b3JrcyDwn5+i8J+folwiKVxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGV4cGFuZF90aHJlc2hvbGRfc2NyaXB0KTtcclxuICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7IGRhdGEgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsgZGF0YTogdGhpcy5kYXRhLCBsZXZlbDogdGhpcy5leHBhbmRMZXZlbCB9KTtcclxuICAgICAgfSlcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiV29ya2VyIGlzIHVuYXZhaWxhYmxlXCIpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZXhwYW5kQWxsKCk6IHZvaWQge1xyXG5cclxuICAgIGlmICh0aGlzLmV4cGFuZExldmVsID09PSB0aGlzLm1heFRpZXIgLSAxKSByZXR1cm47XHJcbiAgICB0aGlzLmV4cGFuZExldmVsID0gdGhpcy5tYXhUaWVyIC0gMTtcclxuXHJcbiAgICB0aGlzLmxpbmVhckl0ZW1zLm1hcChpID0+IHtcclxuICAgICAgaS5leHBhbmRlZCA9IGkudHJlZSRUaWVyIDw9IHRoaXMuZXhwYW5kTGV2ZWw7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykgeyAgXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiV29ya2VyIHdvcmtzIPCfn6Lwn5+iXCIpXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoZXhwYW5kX3RocmVzaG9sZF9zY3JpcHQpO1xyXG4gICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBkYXRhOiB0aGlzLmRhdGEsIGxldmVsOiB0aGlzLmV4cGFuZExldmVsIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJXb3JrZXIgaXMgdW5hdmFpbGFibGVcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXRyZWUtZ3JpZC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnLFxyXG4gICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbn1cIj5cclxuXHJcbiAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2hlaWdodF09XCJoZWlnaHRcIiBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWhlYWRlclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICB3aWR0aDogdG90YWxXaWR0aCArICdweCcsXHJcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXHJcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5J1xyXG4gICAgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWJsb2NrLWhlYWRlclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgd2lkdGg6IHRyZWVDb2x1bW5XaWR0aCArICdweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2VsbC1kaXYgdy0xMDBcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgIH1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtZmxleC1iZXR3ZWVuIHctMTAwIHBsMTUgcHIxNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoZWRpdE1vZGUgPT09ICdUUkVFX01PREUnID8gJ1VJLkNPUkVfVFJFRV9HUklELlRSRUVfQkxPQ0tfSEVBREVSJyA6IHRyZWVDYXB0aW9uKSB8IHRyYW5zbGF0ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFoaWRlRXhwYW5kQ29sbGFwc2VUb2dnbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBkLWZsZXgtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNoZXZyb25zLXVwXCIgW2NsYXNzLmxpZ2h0ZXJdPVwiZXhwYW5kTGV2ZWw9PT0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbGxhcHNlQWxsKClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWFycm93LXVwXCIgW2NsYXNzLmxpZ2h0ZXJdPVwiZXhwYW5kTGV2ZWw9PT0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbGxhcHNlVXAoKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItYXJyb3ctZG93blwiIFtjbGFzcy5saWdodGVyXT1cImV4cGFuZExldmVsPT09bWF4VGllci0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZERvd24oKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItY2hldnJvbnMtZG93blwiIFtjbGFzcy5saWdodGVyXT1cImV4cGFuZExldmVsPT09bWF4VGllci0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEFsbCgpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgQGlmIChlZGl0TW9kZSA9PT0gJ1RSRUVfTU9ERScgJiYgIWRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1idXR0b24tZ3JvdXAtdm5zIFtzaG93bkl0ZW1zXT1cImhlYWRlclRvb2xJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uSGVhZGVyVG9vbENsaWNrKCRldmVudClcIj48L2NvcmUtYnV0dG9uLWdyb3VwLXZucz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcclxuICAgICAgICB9XCI+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCEhaGVhZGVyR3JvdXBFeGlzdCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvdy1vbmVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQvMiArICdweCcsXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGhlYWRlckdyb3VwIG9mIGhlYWRlckdyb3VwczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWdyb3VwLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodC8yICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGhlYWRlckdyb3VwLndpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyR3JvdXAua2V5IHwgdHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93LXR3b1wiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwRXhpc3QgPyBoZWFkZXJIZWlnaHQvMiA6IGhlYWRlckhlaWdodCkgKyAncHgnLFxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwRXhpc3QgPyBoZWFkZXJIZWlnaHQvMiA6IGhlYWRlckhlaWdodCkgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmNhcHRpb24gfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICNmcm9udFRyZWVDb250YWluZXIgY2xhc3M9XCJ0cmVlLWdyaWQtY29udGVudCBmcm9udC1jb250YWluZXJcIiBbY2xhc3MuZWRpdC1tb2RlLWFjdGl2YXRlZF09XCJlZGl0TW9kZUFjdGl2YXRlZFwiPlxyXG4gICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHVsIGNsYXNzPVwicm9vdFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISEhcm9vdC50cmVlJEV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4J1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICN0cmVlQ29udGFpbmVyIGNsYXNzPVwidHJlZS1ncmlkLWNvbnRlbnRcIiBbY2xhc3MuZWRpdC1tb2RlLWFjdGl2YXRlZF09XCJlZGl0TW9kZUFjdGl2YXRlZFwiPlxyXG4gICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHVsIGNsYXNzPVwicm9vdFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISEhcm9vdC50cmVlJEV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogJzBweCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IHJvb3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgbGV0LWNoaWxkcmVuPVwiY29udGV4dC50cmVlJENoaWxkcmVuXCIgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtdGllcj1cImNvbnRleHQudHJlZSRUaWVyXCI+XHJcblxyXG5cclxuICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5zcGFuLWVkaXQtbW9kZS1hY3RpdmF0ZWRdPVwiISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dC5pZD09PWlkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkxpQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLWRpdlwiIFthdHRyLmRhdGEtdGllcl09XCJ0aWVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEoISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dD8uaWQ9PT1pZCAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1jZWxsXCIgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IGNvbnRlbnRDZWxsVmVydGljYWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogY29udGVudENlbGxIb3Jpem9udGFsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogY29udGVudENlbGxIb3Jpem9udGFsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAhIWNvbHVtbi53aWR0aCA/IGNvbHVtbi53aWR0aCArICdweCcgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAhIWNvbHVtbi5hbGlnbiA/IGNvbHVtbi5hbGlnbi50b0xvd2VyQ2FzZSgpIDogJ3Vuc2V0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFjb2x1bW4udGVtcGxhdGVSZWYgJiYgKCFsZWFmT25seVRlbXBsYXRlUmVmIHx8ICghIWxlYWZPbmx5VGVtcGxhdGVSZWYgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaGFzQ2hpbGRyZW4pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4udGVtcGxhdGVSZWYhOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNvbnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5vcGFjaXR5MF09XCJjb250ZXh0W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoKGNvbnRleHRbY29sdW1uLmZpZWxkXSB8fCAnLScpIHwgdHJhbnNsYXRlOiBsYW5nIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucGlwZSA6IGxhbmcpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRbY29sdW1uLmZpZWxkXSB8fCAnLScpIHwgdGFibGVDZWxsOiBjb2x1bW4ucGlwZSA6IGxhbmd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWNlbGxcIiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sdW1uLndpZHRoID8gY29sdW1uLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAndmlzaWJsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghY29sdW1uLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgISFjb2x1bW4udHJhbnNsYXRlID8gKGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRyYW5zbGF0ZTogbGFuZyB8IHRhYmxlQ2VsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnBpcGUgOiBsYW5nKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sdW1uLnBpcGUgOiBsYW5nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jb250cm9sIFtmb3JtXT1cImZvcm1cIiBbY29udHJvbF09XCJjb2x1bW4uY29udHJvbCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0Vycm9yJF09XCJjaGVja0Vycm9yJFwiPjwvY29yZS1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiIWV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzBweCdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvbGk+XHJcblxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2Zyb250SXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcclxuICAgICAgICBsZXQtaGlnaGxpZ2h0ZWQ9XCJjb250ZXh0LnRyZWUkSGlnaGxpZ2h0ZWRcIiBsZXQtaGFzQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQ2hpbGRyZW5cIlxyXG4gICAgICAgIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiIGxldC1leHBhbmRlZD1cImNvbnRleHQudHJlZSRFeHBhbmRlZFwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcclxuICAgICAgICBsZXQtY2hlY2tlZD1cImNvbnRleHQudHJlZSRDaGVja2VkXCIgbGV0LXRpZXI9XCJjb250ZXh0LnRyZWUkVGllclwiPlxyXG5cclxuICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCJcclxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiAoY2xpY2spPVwib25MaUNsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcm9udC1zcGFuXCIgW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLWRpdlwiIFthdHRyLmRhdGEtdGllcl09XCJ0aWVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0cmVlQ29sdW1uV2lkdGggLSB0cmVlQmxvY2tQYWRkaW5nTGVmdCAtIHRpZXIgKiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVkaXRNb2RlID09PSAnVFJFRV9NT0RFJyAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS10b29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2wtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwidG9vbEl0ZW1zXCIgW3Nob3dDYXB0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudCwgY29udGV4dClcIj48L2NvcmUtYnV0dG9uLWdyb3VwLXZucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyIGZlYXRoZXItY2hldnJvbi1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsICRldmVudClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmUtZGl2aWRlclwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgQGlmICghIWV4cGFuZGVkICYmICEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiFleHBhbmRlZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCdcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZyb250SXRlbTsgY29udGV4dDogeyBjb250ZXh0OiBjaGlsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2xpPlxyXG5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L2Rpdj4iXX0=
|
|
620
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUF3QyxNQUFNLEVBQWlCLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU3SyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVE3RyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFFaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUEyQixNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1D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Szt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUtHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUV2ZXJ5VHJlZVN0YXR1cywgUmVjdXJzaXZlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY3Vyc2l2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtL2NvcmUtY29udHJvbC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuXHJcbmltcG9ydCB7IGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQgfSBmcm9tICcuLi8uLi8uLi8uLi9hc3NldHMvanMvcmVzY3VzaXZlX3drJztcclxuaW1wb3J0IHsgZXhwYW5kX3RocmVzaG9sZF9zY3JpcHQgfSBmcm9tICcuLi8uLi8uLi8uLi9hc3NldHMvanMvZXhwYW5kVGhyZXNob2xkJztcclxuaW1wb3J0IHsgRW51bUNvcmVCdXR0b25WTlNDb2RlIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9FbnVtQ29yZUJ1dHRvblZOU0NvZGUnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlLCBJQ29yZVRyZWVHcmlkQ29sdW1uSXRlbSB9IGZyb20gJy4uL2NvcmUtdHJlZS1ncmlkLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElDb3JlUGFnZUVkaXRDUlVEIH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWVkaXQvSUNvcmVQYWdlRWRpdENSVUQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgQ29yZUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWNvbnRyb2wvY29yZS1jb250cm9sL2NvcmUtY29udHJvbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlQnV0dG9uR3JvdXBWbnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaHJlZWRvdHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi90aHJlZWRvdHMvdGhyZWVkb3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQ2VsbFBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy90YWJsZS1jZWxsLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVTZXJ2aWNlLCBJQ29yZUNvbHVtbnNIZWFkZXJHcm91cFRyYW5zZm9ybWVkLCBJSGVhZGVyR3JvdXBJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29yZS10YWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtdHJlZS1ncmlkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBDb3JlQ29udHJvbENvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUYWJsZUNlbGxQaXBlLFxyXG4gICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50LFxyXG4gICAgVGhyZWVkb3RzQ29tcG9uZW50LFxyXG4gICAgQ29yZUxvYWRpbmdTdXJmYWNlQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS10cmVlLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVUcmVlR3JpZENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBsaW5lYXJJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZWRpdE1vZGUhOiBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGU7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHVtbnM6IElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtW10gPSBbXTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBrZXlGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0aXRsZUZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHBhcmVudEZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGhlYWRlckhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhcnJvd1NpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcm93SGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHRvZ2dsZU9uQXJyb3dPbmx5ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsZWFmT25seVRlbXBsYXRlUmVmOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzdGF0dXM6IElFdmVyeVRyZWVTdGF0dXMgPSB7XHJcbiAgICBzZWxlY3RlZEtleTogdW5kZWZpbmVkLFxyXG4gICAgYWN0aXZlS2V5czogW10sXHJcbiAgICBleHBhbmRlZEtleXM6IFtdLFxyXG4gIH07XHJcbiAgQElucHV0KCkgdHJlZUNhcHRpb24hOiBFbnVtVHJhbnNsYXRlS2V5IHwgc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhlYWRlckNlbGxQYWRkaW5nOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGhlYWRlckJvcmRlclNpemU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgdHJlZUNvbHVtbldpZHRoOiBudW1iZXIgPSAyMDA7XHJcbiAgQElucHV0KCkgdHJlZUJsb2NrUGFkZGluZ0xlZnQ6IG51bWJlciA9IDUwO1xyXG4gIEBJbnB1dCgpIHRyZWVOb2RlTGV2ZWxQYWRkaW5nOiBudW1iZXIgPSAxNTtcclxuICBASW5wdXQoKSBjb250ZW50Q2VsbFZlcnRpY2FsUGFkZGluZzogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBjb250ZW50Q2VsbEhvcml6b250YWxQYWRkaW5nOiBudW1iZXIgPSAyMDtcclxuICBASW5wdXQoKSBoaWRlRXhwYW5kQ29sbGFwc2VUb2dnbGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkaXNhYmxlSG92ZXJFZmZlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBvcmRlckJ5ITogc3RyaW5nO1xyXG5cclxuICAvLyBXZSBoYXZlIDIgY2FzZXMgb2YgZGF0YSBiaW5kaW5nOlxyXG5cclxuICAvLyAxOiBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSA9IHVuZGVmaW5lZCAmJiBnZXRGdWxsTGlzdEFwaSAhPT0gdW5kZWZpbmVkICYmIGNydWQgIT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgY3JlYXRlL3VwZGF0ZSB0cmVlIGl0c2VsZlxyXG4gIEBJbnB1dCgpIGdldEZ1bGxMaXN0QXBpITogYXBpO1xyXG4gIEBJbnB1dCgpIGNydWQhOiBJQ29yZVBhZ2VFZGl0Q1JVRDtcclxuICBASW5wdXQoKSBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSE6IGJvb2xlYW47XHJcblxyXG4gIC8vIDE6IGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlID0gdHJ1ZSAmJiBnZXRGdWxsTGlzdEFwaSA9PT0gdW5kZWZpbmVkICYmIGNydWQgPT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgdmlldyBvbmx5LCBhbmQgdXNpbmcgZXh0ZXJuYW50IGRhdGEsIGFuZCB0aGlzLmRhdGEgbXVzdCBiZWNvbWUgQElucHV0KClcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uUm93RG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuICBAT3V0cHV0KCkgb25TdWJtaXRTdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGxpbmVhckl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGE6IGFueVtdID0gW107XHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgaGVhZGVyR3JvdXBzITogSUhlYWRlckdyb3VwSXRlbVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBkaWFsb2dJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICB0b3RhbFdpZHRoOiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIG1heFRpZXIhOiBudW1iZXI7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwZW5kaW5nUGFyZW50Q29udGV4dDogYW55O1xyXG4gIHBlbmRpbmdDb250ZXh0OiBhbnk7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZTtcclxuXHJcbiAgZWRpdE1vZGVBY3RpdmF0ZWQhOiBib29sZWFuO1xyXG4gIGNoZWNrRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgdHJhbnNmb3JtZWQhOiBJQ29yZUNvbHVtbnNIZWFkZXJHcm91cFRyYW5zZm9ybWVkO1xyXG5cclxuICBhY3RpdmVJZDogYW55O1xyXG4gIGV4cGFuZExldmVsOiBudW1iZXIgPSAwO1xyXG5cclxuICBzdGF0dXNDaGFuZ2VDb3VudDogbnVtYmVyID0gMDtcclxuICBvcmRlckJ5Q2hhbmdlQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHRvb2xJdGVtczogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgXVxyXG5cclxuICBoZWFkZXJUb29sSXRlbXM6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgXVxyXG5cclxuICBoZWFkZXJHcm91cEV4aXN0ITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVDb250cm9sU2VydmljZTogQ29yZUNvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlVGFibGVTZXJ2aWNlOiBDb3JlVGFibGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlV2lkdGhzKCk6IHZvaWQge1xyXG4gICAgbGV0IG5ld1RvdGFsV2lkdGggPSB0aGlzLnRyZWVDb2x1bW5XaWR0aDtcclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcCh4ID0+IG5ld1RvdGFsV2lkdGggKz0geC53aWR0aCEpO1xyXG4gICAgdGhpcy50b3RhbFdpZHRoID0gbmV3VG90YWxXaWR0aDtcclxuXHJcbiAgICB0aGlzLnRyYW5zZm9ybWVkID0gdGhpcy5jb3JlVGFibGVTZXJ2aWNlLnRyYW5zZm9ybVdpdGhIZWFkZXJHcm91cCh0aGlzLmNvbHVtbnMpO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy50cmFuc2Zvcm1lZC5jb2x1bW5zO1xyXG4gICAgdGhpcy5oZWFkZXJHcm91cHMgPSB0aGlzLnRyYW5zZm9ybWVkLmhlYWRlckdyb3VwcztcclxuICAgIHRoaXMuaGVhZGVyR3JvdXBFeGlzdCA9ICEhdGhpcy5oZWFkZXJHcm91cHM/Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghIWNoYW5nZXNbJ2NvbHVtbnMnXSkge1xyXG4gICAgICB0aGlzLmNhbGN1bGF0ZVdpZHRocygpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snc3RhdHVzJ10pIHtcclxuICAgICAgdGhpcy5zdGF0dXNDaGFuZ2VDb3VudCArPSAxO1xyXG4gICAgICBpZiAodGhpcy5zdGF0dXNDaGFuZ2VDb3VudCA+IDEpIHtcclxuICAgICAgICB0aGlzLmJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snb3JkZXJCeSddKSB7XHJcbiAgICAgIHRoaXMub3JkZXJCeUNoYW5nZUNvdW50ICs9IDE7XHJcbiAgICAgIGlmICh0aGlzLm9yZGVyQnlDaGFuZ2VDb3VudCA+IDEpIHtcclxuICAgICAgICB0aGlzLmJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZS5UUkVFX01PREUpIHtcclxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Db3JlVHJlZUdyaWRJblJvd0Zvcm1Hcm91cCh0aGlzLmNvbHVtbnMpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYWxjdWxhdGVXaWR0aHMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGUuVFJFRV9NT0RFKSB7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkgKyBcIj9hcHBUeXBlPVwiICsgdGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmRpc2FibGVIb3ZlckVmZmVjdCkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGluZS1ob3Zlci1kaXNwbGF5LW1vZGUnLCAnbm9uZScpICBcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5hcnJvd1NpemUpIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNxdWFyZS1zaXplJywgdGhpcy5hcnJvd1NpemUgKyAncHgnKSAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIXRoaXMucm93SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1yb3ctaGVpZ2h0JywgdGhpcy5yb3dIZWlnaHQgKyAncHgnKSAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHJlZS1jb250YWluZXItd2lkdGgnLCB0aGlzLnRyZWVDb2x1bW5XaWR0aCArICdweCcpXHJcbiAgICAgIGxldCBncmlkVG90YWxXaWR0aCA9IDA7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhISF4LmhpZGRlbikubWFwKG0gPT4gZ3JpZFRvdGFsV2lkdGggKz0gbS53aWR0aCEpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWdyaWQtdG90YWwtd2lkdGgnLCBncmlkVG90YWxXaWR0aCArICdweCcpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtYmxvY2stcGFkZGluZy1sZWZ0JywgdGhpcy50cmVlQmxvY2tQYWRkaW5nTGVmdCArICdweCcpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtbm9kZS1sZXZlbC1wYWRkaW5nJywgdGhpcy50cmVlTm9kZUxldmVsUGFkZGluZyArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5saW5lYXJJdGVtcyQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IHg7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG91dGVyLXB1c2hcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29uZmlybWVkJC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKGkgPT4gISEhdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgJiYgISFpPy5jb25maXJtZWQgJiYgaS5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5kaWFsb2dJbnN0YW5jZU51bWJlcilcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQWN0aW9uID09PSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQuZCEsIHsgaWQ6IHRoaXMucGVuZGluZ0NvbnRleHQuaWQgfSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIGlubmVyLXB1c2hcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5nZXRGdWxsTGlzdEFwaSArIFwiP2FwcFR5cGU9XCIgKyB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuQVBQX1RZUEUpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdFN1Y2Nlc3MuZW1pdCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKGluY2x1ZGVTdGF0dXMgPSB0cnVlKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGluZWFySXRlbXMpKVxyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAvLyBDcmVhdGUgYSBuZXdcclxuXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdClcclxuICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7IGRhdGEgfSkgPT4ge1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhLmxpc3Q7XHJcbiAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGRhdGEucmF3TGlzdDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhLnJhd0xpc3RcIiwgZGF0YS5yYXdMaXN0KVxyXG5cclxuICAgICAgICB0aGlzLm1heFRpZXIgPSBkYXRhLm1heFRpZXJcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLW1heC10aWVyJywgdGhpcy5tYXhUaWVyKSlcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgIGxpc3Q6IGNsb25lQ29weSxcclxuICAgICAgICBrZXlGaWVsZDogdGhpcy5rZXlGaWVsZCxcclxuICAgICAgICB0aXRsZUZpZWxkOiB0aGlzLnRpdGxlRmllbGQsXHJcbiAgICAgICAgcGFyZW50RmllbGQ6IHRoaXMucGFyZW50RmllbGQsXHJcbiAgICAgICAgc3RhdHVzOiBpbmNsdWRlU3RhdHVzID8gdGhpcy5zdGF0dXMgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoY2xvbmVDb3B5LCB0aGlzLmtleUZpZWxkLCB0aGlzLnRpdGxlRmllbGQsIHRoaXMucGFyZW50RmllbGQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcInRyZWUkRXhwYW5kZWRcIiwgaW5jbHVkZVN0YXR1cyA/IHRoaXMuc3RhdHVzIDogdW5kZWZpbmVkLCB0aGlzLm9yZGVyQnkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKG9iaiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG9iai5saXN0O1xyXG4gICAgICAgICAgICB0aGlzLm1heFRpZXIgPSBvYmoubWF4VGllclxyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLW1heC10aWVyJywgdGhpcy5tYXhUaWVyKSlcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dDogYW55LCBlOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnRleHQudHJlZSRFeHBhbmRlZCA9ICEhIWNvbnRleHQudHJlZSRFeHBhbmRlZFxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0dXNcclxuICAgIGlmICghIWNvbnRleHQudHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMuZmlsdGVyKHggPT4geCA9PT0gY29udGV4dC50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ICE9PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMgPSBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25PYmplY3RDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25MaUNsaWNrKGNvbnRleHQ6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlLlRSRUVfTU9ERSkge1xyXG4gICAgICBpZiAoZXZlbnQ/LmRldGFpbCA9PT0gMiAmJiAhdGhpcy5kaXNhYmxlRG91YmxlQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdChjb250ZXh0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMudG9nZ2xlT25BcnJvd09ubHkpIHtcclxuICAgICAgICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnRvZ2dsZU9uQXJyb3dPbmx5KSB7XHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0LCBldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSGVhZGVyVG9vbENsaWNrKGV2ZW50OiBJQ29yZUJ1dHRvblZOUyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KG51bGwpO1xyXG5cclxuICAgIGNvbnNvbGUud2FybihcIklubGluZS1lZGl0aW5nIGlzIG9ic29sZXRlZCBkdWUgaXRzIHB1cmUgVVhcIik7XHJcblxyXG4gICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIHByZXBhcmUgYSBibGFuayByb3dcclxuICAgIC8qXHJcbiAgICBjb25zdCBibGFua1JvdzogYW55ID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguY29udHJvbCkubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgfSlcclxuICAgIGJsYW5rUm93WydpZCddID0gMDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMudGl0bGVGaWVsZF0gPSAnJztcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpdGxlJ10gPSAnJztcclxuICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFBhcmVudCddID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IDE7XHJcbiAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgLy8gcHVzaCB0aGUgYmxhbmtSb3cgdG8gdGhlIGN1cnJlbnQgZGF0YVxyXG4gICAgdGhpcy5kYXRhLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBibGFua1JvdztcclxuXHJcbiAgICAvLyBhY3RpdmF0ZSBlZGl0TW9kZSAoY3JlYXRlKVxyXG4gICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgIF1cclxuICAgICovXHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhldmVudDogSUNvcmVCdXR0b25WTlMsIGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRTpcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLmNoZWNrRXJyb3IkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuZm9ybS52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgYXBpOiBhcGk7XHJcblxyXG4gICAgICAgIGlmICghIU51bWJlcih0aGlzLmZvcm0uZ2V0KCdpZCcpPy52YWx1ZSkpIHtcclxuICAgICAgICAgIGFwaSA9IHRoaXMuY3J1ZC51IVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQuYyFcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdChhcGksIHtcclxuICAgICAgICAgICAgLi4udGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgICAgIGFwcFR5cGU6IHRoaXMuYXBwQ29uZmlnU2VydmljZS5BUFBfVFlQRVxyXG4gICAgICAgICAgfSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gaW5uZXItcHVzaFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkgKyBcIj9hcHBUeXBlPVwiICsgdGhpcy5hcHBDb25maWdTZXJ2aWNlLkFQUF9UWVBFKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ0FOQ0VMOlxyXG4gICAgICAgIHRoaXMuZWRpdE1vZGVBY3RpdmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGV4dC5pZCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRleHQudHJlZSRQYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoeCA9PiB4LmlkICE9PSAwKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3RGF0YTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVuZGluZ1BhcmVudENvbnRleHQudHJlZSRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlkICE9PSB0aGlzLnBlbmRpbmdDb250ZXh0LmlkKTtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dC50cmVlJENoaWxkcmVuID0gZmlsdGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEU6XHJcblxyXG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KHtcclxuICAgICAgICAgIHBhcmVudElkOiBjb250ZXh0LmlkXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUud2FybihcIklubGluZS1lZGl0aW5nIGlzIG9ic29sZXRlZCBkdWUgaXRzIHB1cmUgVVhcIik7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIC8vIHByZXBhcmUgYSBibGFuayByb3dcclxuICAgICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICAgIGJsYW5rUm93W3guZmllbGRdID0gbnVsbDtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguY29udHJvbCkubWFwKHggPT4ge1xyXG4gICAgICAgIGJsYW5rUm93W3guY29udHJvbD8uZmllbGQhXSA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIGJsYW5rUm93WydpZCddID0gMDtcclxuICAgICAgYmxhbmtSb3dbJ3RyZWUkS2V5J10gPSAwO1xyXG4gICAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICAgIGJsYW5rUm93Wyd0cmVlJFRpdGxlJ10gPSAnJztcclxuICAgICAgYmxhbmtSb3dbdGhpcy5rZXlGaWVsZF0gPSAwO1xyXG4gICAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgIGJsYW5rUm93Wyd0cmVlJFBhcmVudCddID0gY29udGV4dC5pZDtcclxuICAgICAgYmxhbmtSb3dbJ3RyZWUkVGllciddID0gY29udGV4dC50cmVlJFRpZXIgKyAxO1xyXG4gICAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgICAvLyBwdXNoIHRoZSBibGFua1JvdyB0byB0aGUgY3VycmVudCBkYXRhIGF0IHRoZSBiZWdpbmluZ1xyXG4gICAgICBjb250ZXh0LnRyZWUkQ2hpbGRyZW4udW5zaGlmdChibGFua1Jvdyk7XHJcblxyXG4gICAgICAvLyBtYWtlIHN1cmUgdG8gZXhwYW5kXHJcbiAgICAgIGNvbnRleHQudHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcblxyXG4gICAgICAvLyBzYXZlIGV4cGFuZCBtb2RlIHRvIHN0YXRlXHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5wdXNoKGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2F2ZSBwYXJlbnQgY29udGV4dFxyXG4gICAgICB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0ID0gY29udGV4dFxyXG5cclxuICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGJsYW5rUm93O1xyXG5cclxuICAgICAgY29uc3QgbmV3Rm9ybURhdGE6IGFueSA9IHt9XHJcbiAgICAgIG5ld0Zvcm1EYXRhW3RoaXMucGFyZW50RmllbGRdID0gYmxhbmtSb3dbdGhpcy5wYXJlbnRGaWVsZF1cclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobmV3Rm9ybURhdGEpXHJcblxyXG4gICAgICAvLyBhY3RpdmF0ZSBlZGl0TW9kZSAoY3JlYXRlKVxyXG4gICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICBdXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICAqL1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuXHJcbiAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrLmVtaXQoY29udGV4dCk7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiSW5saW5lLWVkaXRpbmcgaXMgb2Jzb2xldGVkIGR1ZSBpdHMgcHVyZSBVWFwiKTtcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAvKlxyXG4gICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuY3J1ZC5yISArIFwiP2lkPVwiICsgY29udGV4dC5pZCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoYm9keS5pbm5lckJvZHkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICBdXHJcblxyXG4gICAgICBicmVhaztcclxuICAgICAgKi9cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuICAgICAgICBpZiAoY29udGV4dC50cmVlJEhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0lORk8pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfVFJFRV9HUklEX0NBTk5PVF9ERUxFVEVfTk9ERV9IQU5WSU5HX0NISUxEUkVOKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LllFUylcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuQ0FOQ0VMKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm9ybWF0aW9uTGluZXMkLm5leHQoW2NvbnRleHQudHJlZSRUaXRsZV0pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VBbGwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRMZXZlbCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgdGhpcy5leHBhbmRMZXZlbCA9IDA7XHJcbiAgICB0aGlzLmxpbmVhckl0ZW1zLm1hcChpID0+IHtcclxuICAgICAgaS5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgfSlcclxuICAgIHRoaXMuYnVpbGRUcmVlRGF0YShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjb2xsYXBzZVVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kTGV2ZWwgPT09IDApIHJldHVybjtcclxuICAgIHRoaXMuZXhwYW5kTGV2ZWwgLT0gMTtcclxuXHJcbiAgICB0aGlzLmxpbmVhckl0ZW1zLm1hcChpID0+IHtcclxuICAgICAgaS5leHBhbmRlZCA9IGkudHJlZSRUaWVyIDw9IHRoaXMuZXhwYW5kTGV2ZWw7XHJcbiAgICB9KVxyXG4gICAgXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJXb3JrZXIgd29ya3Mg8J+fovCfn6JcIilcclxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihleHBhbmRfdGhyZXNob2xkX3NjcmlwdCk7XHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IGRhdGE6IHRoaXMuZGF0YSwgbGV2ZWw6IHRoaXMuZXhwYW5kTGV2ZWwgfSk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIldvcmtlciBpcyB1bmF2YWlsYWJsZVwiKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGV4cGFuZERvd24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRMZXZlbCA9PT0gdGhpcy5tYXhUaWVyIC0gMSkgcmV0dXJuO1xyXG4gICAgdGhpcy5leHBhbmRMZXZlbCArPSAxO1xyXG5cclxuICAgIHRoaXMubGluZWFySXRlbXMubWFwKGkgPT4ge1xyXG4gICAgICBpLmV4cGFuZGVkID0gaS50cmVlJFRpZXIgPD0gdGhpcy5leHBhbmRMZXZlbDtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiV29ya2VyIHdvcmtzIPCfn6Lwn5+iXCIpXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoZXhwYW5kX3RocmVzaG9sZF9zY3JpcHQpO1xyXG4gICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBkYXRhOiB0aGlzLmRhdGEsIGxldmVsOiB0aGlzLmV4cGFuZExldmVsIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJXb3JrZXIgaXMgdW5hdmFpbGFibGVcIilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBleHBhbmRBbGwoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuZXhwYW5kTGV2ZWwgPT09IHRoaXMubWF4VGllciAtIDEpIHJldHVybjtcclxuICAgIHRoaXMuZXhwYW5kTGV2ZWwgPSB0aGlzLm1heFRpZXIgLSAxO1xyXG5cclxuICAgIHRoaXMubGluZWFySXRlbXMubWFwKGkgPT4ge1xyXG4gICAgICBpLmV4cGFuZGVkID0gaS50cmVlJFRpZXIgPD0gdGhpcy5leHBhbmRMZXZlbDtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnKSB7ICBcclxuICAgICAgY29uc29sZS5sb2coXCJXb3JrZXIgd29ya3Mg8J+fovCfn6JcIilcclxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihleHBhbmRfdGhyZXNob2xkX3NjcmlwdCk7XHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IGRhdGE6IHRoaXMuZGF0YSwgbGV2ZWw6IHRoaXMuZXhwYW5kTGV2ZWwgfSk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIldvcmtlciBpcyB1bmF2YWlsYWJsZVwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtdHJlZS1ncmlkLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICBoZWlnaHQ6IGhlaWdodCArICdweCcsXHJcbiAgICBvdmVyZmxvdzogJ3Njcm9sbCdcclxufVwiPlxyXG5cclxuICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbaGVpZ2h0XT1cImhlaWdodFwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtaGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiB0b3RhbFdpZHRoICsgJ3B4JyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtYmxvY2staGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB3aWR0aDogdHJlZUNvbHVtbldpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnLFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jZWxsLWRpdiB3LTEwMFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1mbGV4LWJldHdlZW4gdy0xMDAgcGwxNSBwcjE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChlZGl0TW9kZSA9PT0gJ1RSRUVfTU9ERScgPyAnVUkuQ09SRV9UUkVFX0dSSUQuVFJFRV9CTE9DS19IRUFERVInIDogdHJlZUNhcHRpb24pIHwgdHJhbnNsYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWhpZGVFeHBhbmRDb2xsYXBzZVRvZ2dsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtZmxleC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItY2hldnJvbnMtdXBcIiBbY2xhc3MubGlnaHRlcl09XCJleHBhbmRMZXZlbD09PTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sbGFwc2VBbGwoKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItYXJyb3ctdXBcIiBbY2xhc3MubGlnaHRlcl09XCJleHBhbmRMZXZlbD09PTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sbGFwc2VVcCgpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1hcnJvdy1kb3duXCIgW2NsYXNzLmxpZ2h0ZXJdPVwiZXhwYW5kTGV2ZWw9PT1tYXhUaWVyLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kRG93bigpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1jaGV2cm9ucy1kb3duXCIgW2NsYXNzLmxpZ2h0ZXJdPVwiZXhwYW5kTGV2ZWw9PT1tYXhUaWVyLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQWxsKClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGVkaXRNb2RlID09PSAnVFJFRV9NT0RFJyAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwiaGVhZGVyVG9vbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25IZWFkZXJUb29sQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xyXG4gICAgICAgIH1cIj5cclxuXHJcbiAgICAgICAgICAgIEBpZiAoISFoZWFkZXJHcm91cEV4aXN0KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93LW9uZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodC8yICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgaGVhZGVyR3JvdXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZ3JvdXAtY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0LzIgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaGVhZGVyR3JvdXAud2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXJHcm91cC5rZXkgfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctdHdvXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoISFoZWFkZXJHcm91cEV4aXN0ID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAhIWNvbHVtbi53aWR0aCA/IGNvbHVtbi53aWR0aCArICdweCcgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI2Zyb250VHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50IGZyb250LWNvbnRhaW5lclwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogdHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZyb250SXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI3RyZWVDb250YWluZXIgY2xhc3M9XCJ0cmVlLWdyaWQtY29udGVudFwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMHB4J1xyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcblxyXG4gICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTGlDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tZGl2XCIgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1yb3ctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISghIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0Py5pZD09PWlkICYmICFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWNlbGxcIiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tOiBjb250ZW50Q2VsbFZlcnRpY2FsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBjb250ZW50Q2VsbEhvcml6b250YWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBjb250ZW50Q2VsbEhvcml6b250YWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sdW1uLndpZHRoID8gY29sdW1uLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWNvbHVtbi50ZW1wbGF0ZVJlZiAmJiAoIWxlYWZPbmx5VGVtcGxhdGVSZWYgfHwgKCEhbGVhZk9ubHlUZW1wbGF0ZVJlZiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoYXNDaGlsZHJlbikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi50ZW1wbGF0ZVJlZiE7IGNvbnRleHQ6IHsgY29udGV4dDogY29udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLm9wYWNpdHkwXT1cImNvbnRleHRbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICEhY29sdW1uLnRyYW5zbGF0ZSA/ICgoY29udGV4dFtjb2x1bW4uZmllbGRdIHx8ICctJykgfCB0cmFuc2xhdGU6IGxhbmcgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNlbGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5waXBlIDogbGFuZykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGV4dFtjb2x1bW4uZmllbGRdIHx8ICctJykgfCB0YWJsZUNlbGw6IGNvbHVtbi5waXBlIDogbGFuZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtY2VsbFwiIFtjbGFzcy5oaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICd0YWJsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2x1bW4uY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucGlwZSA6IGxhbmcpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdGFibGVDZWxsOiBjb2x1bW4ucGlwZSA6IGxhbmd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNvbnRyb2wgW2Zvcm1dPVwiZm9ybVwiIFtjb250cm9sXT1cImNvbHVtbi5jb250cm9sIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCAmJiAhIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIhZXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMHB4J1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9saT5cclxuXHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZnJvbnRJdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgbGV0LWNoaWxkcmVuPVwiY29udGV4dC50cmVlJENoaWxkcmVuXCIgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtdGllcj1cImNvbnRleHQudHJlZSRUaWVyXCI+XHJcblxyXG4gICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIChjbGljayk9XCJvbkxpQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZyb250LXNwYW5cIiBbY2xhc3Muc3Bhbi1lZGl0LW1vZGUtYWN0aXZhdGVkXT1cIiEhZWRpdE1vZGVBY3RpdmF0ZWQgJiYgcGVuZGluZ0NvbnRleHQuaWQ9PT1pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tZGl2XCIgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRyZWVDb2x1bW5XaWR0aCAtIHRyZWVCbG9ja1BhZGRpbmdMZWZ0IC0gdGllciAqIHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWRpdE1vZGUgPT09ICdUUkVFX01PREUnICYmICFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tdG9vbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd25JdGVtc109XCJ0b29sSXRlbXNcIiBbc2hvd0NhcHRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50LCBjb250ZXh0KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZXIgZmVhdGhlci1jaGV2cm9uLWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsICRldmVudClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1kaXZpZGVyXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiIWV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4J1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2hpbGRyZW47IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZnJvbnRJdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvbGk+XHJcblxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvZGl2PiJdfQ==
|