ngx-histaff-alpha 2.4.2 → 2.4.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 +15 -7
- package/fesm2022/ngx-histaff-alpha.mjs +14 -6
- 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 +4 -2
- package/package.json +1 -1
package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs
CHANGED
|
@@ -59,18 +59,26 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
59
59
|
EnumCoreButtonVNSCode.HEADER_CREATE,
|
|
60
60
|
];
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
if (this.editMode === EnumCoreTreeGridEditMode.TREE_MODE) {
|
|
64
|
-
this.form = this.coreControlService.toCoreTreeGridInRowFormGroup(this.columns);
|
|
65
|
-
}
|
|
62
|
+
calculateWidths() {
|
|
66
63
|
let newTotalWidth = this.treeColumnWidth;
|
|
67
|
-
this.columns.map(x => newTotalWidth += x.width);
|
|
64
|
+
this.columns.filter(x => !x.hidden).map(x => newTotalWidth += x.width);
|
|
68
65
|
this.totalWidth = newTotalWidth;
|
|
69
66
|
this.transformed = this.coreTableService.transformWithHeaderGroup(this.columns);
|
|
70
67
|
this.columns = this.transformed.columns;
|
|
71
68
|
this.headerGroups = this.transformed.headerGroups;
|
|
72
69
|
this.headerGroupExist = !!this.headerGroups?.length;
|
|
73
70
|
}
|
|
71
|
+
ngOnChanges(changes) {
|
|
72
|
+
if (!!changes['columns']) {
|
|
73
|
+
this.calculateWidths();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
ngOnInit() {
|
|
77
|
+
if (this.editMode === EnumCoreTreeGridEditMode.TREE_MODE) {
|
|
78
|
+
this.form = this.coreControlService.toCoreTreeGridInRowFormGroup(this.columns);
|
|
79
|
+
}
|
|
80
|
+
this.calculateWidths();
|
|
81
|
+
}
|
|
74
82
|
reload() {
|
|
75
83
|
if (this.editMode === EnumCoreTreeGridEditMode.TREE_MODE) {
|
|
76
84
|
this.subscriptions.push(this.appService.get(this.getFullListApi).subscribe(x => {
|
|
@@ -370,7 +378,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
370
378
|
this.subscriptions.map(x => x?.unsubscribe());
|
|
371
379
|
}
|
|
372
380
|
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 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
373
|
-
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", treeCaption: "treeCaption", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeBlockPaddingLeft: "treeBlockPaddingLeft", treeNodeLevelPadding: "treeNodeLevelPadding", contentCellVerticalPadding: "contentCellVerticalPadding", contentCellHorizontalPadding: "contentCellHorizontalPadding", getFullListApi: "getFullListApi", crud: "crud", disableTreeCreateUpdate: "disableTreeCreateUpdate", disableDoubleClick: "disableDoubleClick" }, outputs: { onRowDoubleClick: "onRowDoubleClick", onSubmitSuccess: "onSubmitSuccess" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: 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 @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\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\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ (editMode === 'TREE_MODE' ? 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' : treeCaption) | translate: lang }}\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 </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 <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\" (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 && activeId===id) { -->\r\n @if (!!column.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"column.templateRef!; context: { context: context }\"></ng-container>\r\n } @else {\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 }\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 <ng-container>\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 </ng-container>\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 @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 </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\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"></i>\r\n }\r\n <object>\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\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 </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;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 .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 .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 1s 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:.5s 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:block;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>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:.5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.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", "shownItems", "showCaption"], outputs: ["buttonClick"] }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }] }); }
|
|
381
|
+
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", treeCaption: "treeCaption", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeBlockPaddingLeft: "treeBlockPaddingLeft", treeNodeLevelPadding: "treeNodeLevelPadding", contentCellVerticalPadding: "contentCellVerticalPadding", contentCellHorizontalPadding: "contentCellHorizontalPadding", 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 @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\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\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ (editMode === 'TREE_MODE' ? 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' : treeCaption) | translate: lang }}\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 </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 <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\" (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 && activeId===id) { -->\r\n @if (!!column.templateRef) {\r\n <ng-container\r\n *ngTemplateOutlet=\"column.templateRef!; context: { context: context }\"></ng-container>\r\n } @else {\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 }\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 <ng-container>\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 </ng-container>\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 @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 </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\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"></i>\r\n }\r\n <object>\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\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 </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;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 .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 .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 1s 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:.5s 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:block;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>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:.5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.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", "shownItems", "showCaption"], outputs: ["buttonClick"] }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }] }); }
|
|
374
382
|
}
|
|
375
383
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTreeGridComponent, decorators: [{
|
|
376
384
|
type: Component,
|
|
@@ -438,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
438
446
|
type: ViewChild,
|
|
439
447
|
args: ['container']
|
|
440
448
|
}] } });
|
|
441
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBUTdHLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0Qs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QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsV0FBVztzQkFBckMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhcGkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRXZlcnlUcmVlU3RhdHVzLCBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0vY29yZS1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJRm9ybWF0ZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgbGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCB9IGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qcy9yZXNjdXNpdmVfd2snO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGUsIElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10cmVlLWdyaWQtaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVQYWdlRWRpdENSVUQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wvY29yZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRocmVlZG90c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RocmVlZG90cy90aHJlZWRvdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IENvcmVUYWJsZVNlcnZpY2UsIElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQsIElIZWFkZXJHcm91cEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb3JlLXRhYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRyZWUtZ3JpZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVGFibGVDZWxsUGlwZSxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS10cmVlLWdyaWQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVRyZWVHcmlkQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBsaW5lYXJJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZWRpdE1vZGUhOiBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGU7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHVtbnM6IElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtW10gPSBbXTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBrZXlGaWVsZCE6IHN0cmluZztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0aXRsZUZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHBhcmVudEZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGhlYWRlckhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB0cmVlQ2FwdGlvbiE6IEVudW1UcmFuc2xhdGVLZXkgfCBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGVhZGVyQ2VsbFBhZGRpbmc6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCkgaGVhZGVyQm9yZGVyU2l6ZTogbnVtYmVyID0gMTtcclxuICBASW5wdXQoKSB0cmVlQ29sdW1uV2lkdGg6IG51bWJlciA9IDIwMDtcclxuICBASW5wdXQoKSB0cmVlQmxvY2tQYWRkaW5nTGVmdDogbnVtYmVyID0gNTA7XHJcbiAgQElucHV0KCkgdHJlZU5vZGVMZXZlbFBhZGRpbmc6IG51bWJlciA9IDE1O1xyXG4gIEBJbnB1dCgpIGNvbnRlbnRDZWxsVmVydGljYWxQYWRkaW5nOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGNvbnRlbnRDZWxsSG9yaXpvbnRhbFBhZGRpbmc6IG51bWJlciA9IDIwO1xyXG5cclxuICAvLyBXZSBoYXZlIDIgY2FzZXMgb2YgZGF0YSBiaW5kaW5nOlxyXG5cclxuICAvLyAxOiBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSA9IHVuZGVmaW5lZCAmJiBnZXRGdWxsTGlzdEFwaSAhPT0gdW5kZWZpbmVkICYmIGNydWQgIT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgY3JlYXRlL3VwZGF0ZSB0cmVlIGl0c2VsZlxyXG4gIEBJbnB1dCgpIGdldEZ1bGxMaXN0QXBpITogYXBpO1xyXG4gIEBJbnB1dCgpIGNydWQhOiBJQ29yZVBhZ2VFZGl0Q1JVRDtcclxuICBASW5wdXQoKSBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSE6IGJvb2xlYW47XHJcblxyXG4gIC8vIDE6IGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlID0gdHJ1ZSAmJiBnZXRGdWxsTGlzdEFwaSA9PT0gdW5kZWZpbmVkICYmIGNydWQgPT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgdmlldyBvbmx5LCBhbmQgdXNpbmcgZXh0ZXJuYW50IGRhdGEsIGFuZCB0aGlzLmRhdGEgbXVzdCBiZWNvbWUgQElucHV0KClcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uUm93RG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuICBAT3V0cHV0KCkgb25TdWJtaXRTdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGxpbmVhckl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGE6IGFueVtdID0gW107XHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgaGVhZGVyR3JvdXBzITogSUhlYWRlckdyb3VwSXRlbVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBkaWFsb2dJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICB0b3RhbFdpZHRoOiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIG1heFRpZXIhOiBudW1iZXI7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwZW5kaW5nUGFyZW50Q29udGV4dDogYW55O1xyXG4gIHBlbmRpbmdDb250ZXh0OiBhbnk7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZTtcclxuXHJcbiAgZWRpdE1vZGVBY3RpdmF0ZWQhOiBib29sZWFuO1xyXG4gIGNoZWNrRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgdHJhbnNmb3JtZWQhOiBJQ29yZUNvbHVtbnNIZWFkZXJHcm91cFRyYW5zZm9ybWVkO1xyXG5cclxuICBhY3RpdmVJZDogYW55O1xyXG5cclxuICBzdGF0dXM6IElFdmVyeVRyZWVTdGF0dXMgPSB7XHJcbiAgICBzZWxlY3RlZEtleTogdW5kZWZpbmVkLFxyXG4gICAgYWN0aXZlS2V5czogW10sXHJcbiAgICBleHBhbmRlZEtleXM6IFtdLFxyXG4gIH07XHJcblxyXG4gIHRvb2xJdGVtczogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgXVxyXG5cclxuICBoZWFkZXJUb29sSXRlbXM6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgXVxyXG5cclxuICBoZWFkZXJHcm91cEV4aXN0ITogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVDb250cm9sU2VydmljZTogQ29yZUNvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlVGFibGVTZXJ2aWNlOiBDb3JlVGFibGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZS5UUkVFX01PREUpIHtcclxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Db3JlVHJlZUdyaWRJblJvd0Zvcm1Hcm91cCh0aGlzLmNvbHVtbnMpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5ld1RvdGFsV2lkdGggPSB0aGlzLnRyZWVDb2x1bW5XaWR0aDtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoeCA9PiBuZXdUb3RhbFdpZHRoICs9IHgud2lkdGghKTtcclxuICAgIHRoaXMudG90YWxXaWR0aCA9IG5ld1RvdGFsV2lkdGg7XHJcblxyXG4gICAgdGhpcy50cmFuc2Zvcm1lZCA9IHRoaXMuY29yZVRhYmxlU2VydmljZS50cmFuc2Zvcm1XaXRoSGVhZGVyR3JvdXAodGhpcy5jb2x1bW5zKTtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMudHJhbnNmb3JtZWQuY29sdW1ucztcclxuICAgIHRoaXMuaGVhZGVyR3JvdXBzID0gdGhpcy50cmFuc2Zvcm1lZC5oZWFkZXJHcm91cHM7XHJcbiAgICB0aGlzLmhlYWRlckdyb3VwRXhpc3QgPSAhIXRoaXMuaGVhZGVyR3JvdXBzPy5sZW5ndGg7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlLlRSRUVfTU9ERSkge1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmdldEZ1bGxMaXN0QXBpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHJlZS1jb250YWluZXItd2lkdGgnLCB0aGlzLnRyZWVDb2x1bW5XaWR0aCArICdweCcpXHJcbiAgICAgIGxldCBncmlkVG90YWxXaWR0aCA9IDA7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhISF4LmhpZGRlbikubWFwKG0gPT4gZ3JpZFRvdGFsV2lkdGggKz0gbS53aWR0aCEpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWdyaWQtdG90YWwtd2lkdGgnLCBncmlkVG90YWxXaWR0aCArICdweCcpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtYmxvY2stcGFkZGluZy1sZWZ0JywgdGhpcy50cmVlQmxvY2tQYWRkaW5nTGVmdCArICdweCcpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtbm9kZS1sZXZlbC1wYWRkaW5nJywgdGhpcy50cmVlTm9kZUxldmVsUGFkZGluZyArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5saW5lYXJJdGVtcyQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IHg7XHJcbiAgICAgICAgICB0aGlzLnJlbG9hZCgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG91dGVyLXB1c2hcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29uZmlybWVkJC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKGkgPT4gISEhdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgJiYgISFpPy5jb25maXJtZWQgJiYgaS5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5kaWFsb2dJbnN0YW5jZU51bWJlcilcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQWN0aW9uID09PSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQuZCEsIHsgaWQ6IHRoaXMucGVuZGluZ0NvbnRleHQuaWQgfSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIGlubmVyLXB1c2hcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5nZXRGdWxsTGlzdEFwaSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU3VibWl0U3VjY2Vzcy5lbWl0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZURhdGEoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGluZWFySXRlbXMpKVxyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAvLyBDcmVhdGUgYSBuZXdcclxuXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdClcclxuICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7IGRhdGEgfSkgPT4ge1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhLmxpc3Q7XHJcbiAgICAgICAgdGhpcy5tYXhUaWVyID0gZGF0YS5tYXhUaWVyXHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAga2V5RmllbGQ6IHRoaXMua2V5RmllbGQsXHJcbiAgICAgICAgdGl0bGVGaWVsZDogdGhpcy50aXRsZUZpZWxkLFxyXG4gICAgICAgIHBhcmVudEZpZWxkOiB0aGlzLnBhcmVudEZpZWxkLFxyXG4gICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2ViIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5cclxuICAgICAgLy8gWW91IHNob3VsZCBhZGQgYSBmYWxsYmFjayBzbyB0aGF0IHlvdXIgcHJvZ3JhbSBzdGlsbCBleGVjdXRlcyBjb3JyZWN0bHkuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS5saW5lckFycmF5VG9OZXN0ZWRBcnJheShjbG9uZUNvcHksIHRoaXMua2V5RmllbGQsIHRoaXMudGl0bGVGaWVsZCwgdGhpcy5wYXJlbnRGaWVsZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5zdGF0dXMpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKG9iaiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG9iai5saXN0O1xyXG4gICAgICAgICAgICB0aGlzLm1heFRpZXIgPSBvYmoubWF4VGllclxyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLW1heC10aWVyJywgdGhpcy5tYXhUaWVyKSlcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gISEhY29udGV4dC50cmVlJEV4cGFuZGVkXHJcblxyXG4gICAgLy8gdXBkYXRlIHN0YXR1c1xyXG4gICAgaWYgKCEhY29udGV4dC50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5wdXNoKGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLmZpbHRlcih4ID0+IHggIT09IGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cyA9IGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbk9iamVjdENsaWNrKGNvbnRleHQ6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIG9uTGlDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZS5UUkVFX01PREUpIHtcclxuICAgICAgaWYgKGV2ZW50Py5kZXRhaWwgPT09IDIgJiYgIXRoaXMuZGlzYWJsZURvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrLmVtaXQoY29udGV4dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0KTsgIFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZUlkID0gY29udGV4dC5pZDtcclxuICAgICAgdGhpcy5vbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSGVhZGVyVG9vbENsaWNrKGV2ZW50OiBJQ29yZUJ1dHRvblZOUyk6IHZvaWQge1xyXG4gICAgLy8gcHJlcGFyZSBhIGJsYW5rIHJvd1xyXG4gICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgYmxhbmtSb3dbeC5maWVsZF0gPSBudWxsO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmNvbnRyb2wpLm1hcCh4ID0+IHtcclxuICAgICAgYmxhbmtSb3dbeC5jb250cm9sPy5maWVsZCFdID0gbnVsbDtcclxuICAgIH0pXHJcbiAgICBibGFua1Jvd1snaWQnXSA9IDA7XHJcbiAgICBibGFua1Jvd1sndHJlZSRLZXknXSA9IDA7XHJcbiAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICBibGFua1Jvd1sndHJlZSRUaXRsZSddID0gJyc7XHJcbiAgICBibGFua1Jvd1t0aGlzLmtleUZpZWxkXSA9IDA7XHJcbiAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IG51bGw7XHJcbiAgICBibGFua1Jvd1sndHJlZSRQYXJlbnQnXSA9IG51bGw7XHJcbiAgICBibGFua1Jvd1sndHJlZSRUaWVyJ10gPSAxO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkQ2hpbGRyZW4nXSA9IFtdO1xyXG5cclxuICAgIC8vIHB1c2ggdGhlIGJsYW5rUm93IHRvIHRoZSBjdXJyZW50IGRhdGFcclxuICAgIHRoaXMuZGF0YS51bnNoaWZ0KGJsYW5rUm93KTtcclxuXHJcbiAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gYmxhbmtSb3c7XHJcblxyXG4gICAgLy8gYWN0aXZhdGUgZWRpdE1vZGUgKGNyZWF0ZSlcclxuICAgIHRoaXMuZWRpdE1vZGVBY3RpdmF0ZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ0FOQ0VMXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhldmVudDogSUNvcmVCdXR0b25WTlMsIGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRTpcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLmNoZWNrRXJyb3IkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuZm9ybS52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgYXBpOiBhcGk7XHJcblxyXG4gICAgICAgIGlmICghIU51bWJlcih0aGlzLmZvcm0uZ2V0KCdpZCcpPy52YWx1ZSkpIHtcclxuICAgICAgICAgIGFwaSA9IHRoaXMuY3J1ZC51IVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQuYyFcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdChhcGksIHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBpbm5lci1wdXNoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5nZXRGdWxsTGlzdEFwaSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFySXRlbXMgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdE1vZGVBY3RpdmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTDpcclxuICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRleHQuaWQgPT09IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZXh0LnRyZWUkUGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKHggPT4geC5pZCAhPT0gMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ld0RhdGE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0LnRyZWUkQ2hpbGRyZW4uZmlsdGVyKChjaGlsZDogYW55KSA9PiBjaGlsZC5pZCAhPT0gdGhpcy5wZW5kaW5nQ29udGV4dC5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1BhcmVudENvbnRleHQudHJlZSRDaGlsZHJlbiA9IGZpbHRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFOlxyXG4gICAgICAgIC8vIHByZXBhcmUgYSBibGFuayByb3dcclxuICAgICAgICBjb25zdCBibGFua1JvdzogYW55ID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICAgIGJsYW5rUm93W3guZmllbGRdID0gbnVsbDtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmNvbnRyb2wpLm1hcCh4ID0+IHtcclxuICAgICAgICAgIGJsYW5rUm93W3guY29udHJvbD8uZmllbGQhXSA9IG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBibGFua1Jvd1snaWQnXSA9IDA7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkS2V5J10gPSAwO1xyXG4gICAgICAgIGJsYW5rUm93W3RoaXMudGl0bGVGaWVsZF0gPSAnJztcclxuICAgICAgICBibGFua1Jvd1sndHJlZSRUaXRsZSddID0gJyc7XHJcbiAgICAgICAgYmxhbmtSb3dbdGhpcy5rZXlGaWVsZF0gPSAwO1xyXG4gICAgICAgIGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdID0gY29udGV4dC5pZDtcclxuICAgICAgICBibGFua1Jvd1sndHJlZSRQYXJlbnQnXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkVGllciddID0gY29udGV4dC50cmVlJFRpZXIgKyAxO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJENoaWxkcmVuJ10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gcHVzaCB0aGUgYmxhbmtSb3cgdG8gdGhlIGN1cnJlbnQgZGF0YSBhdCB0aGUgYmVnaW5pbmdcclxuICAgICAgICBjb250ZXh0LnRyZWUkQ2hpbGRyZW4udW5zaGlmdChibGFua1Jvdyk7XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBleHBhbmRcclxuICAgICAgICBjb250ZXh0LnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBzYXZlIGV4cGFuZCBtb2RlIHRvIHN0YXRlXHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLmZpbHRlcih4ID0+IHggPT09IGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5wdXNoKGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNhdmUgcGFyZW50IGNvbnRleHRcclxuICAgICAgICB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0ID0gY29udGV4dFxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gYmxhbmtSb3c7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0Zvcm1EYXRhOiBhbnkgPSB7fVxyXG4gICAgICAgIG5ld0Zvcm1EYXRhW3RoaXMucGFyZW50RmllbGRdID0gYmxhbmtSb3dbdGhpcy5wYXJlbnRGaWVsZF1cclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShuZXdGb3JtRGF0YSlcclxuXHJcbiAgICAgICAgLy8gYWN0aXZhdGUgZWRpdE1vZGUgKGNyZWF0ZSlcclxuICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICAgIF1cclxuXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5jcnVkLnIhICsgXCI/aWQ9XCIgKyBjb250ZXh0LmlkKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGJvZHkuaW5uZXJCb2R5KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ0FOQ0VMXHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuICAgICAgICBpZiAoY29udGV4dC50cmVlJEhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0lORk8pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfVFJFRV9HUklEX0NBTk5PVF9ERUxFVEVfTk9ERV9IQU5WSU5HX0NISUxEUkVOKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LllFUylcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuQ0FOQ0VMKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm9ybWF0aW9uTGluZXMkLm5leHQoW2NvbnRleHQudHJlZSRUaXRsZV0pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtdHJlZS1ncmlkLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICBoZWlnaHQ6IGhlaWdodCArICdweCcsXHJcbiAgICBvdmVyZmxvdzogJ3Njcm9sbCdcclxufVwiPlxyXG5cclxuICAgIEBpZiAobG9hZGluZykge1xyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3VyZmFjZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGFwcC10aHJlZWRvdHM+PC9hcHAtdGhyZWVkb3RzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1oZWFkZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgd2lkdGg6IHRvdGFsV2lkdGggKyAncHgnLFxyXG4gICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxyXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICBwb3NpdGlvbjogJ3N0aWNreSdcclxuICAgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ibG9jay1oZWFkZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHdpZHRoOiB0cmVlQ29sdW1uV2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgIGJvcmRlcjogaGVhZGVyQm9yZGVyU2l6ZSArICdweCBzb2xpZCB3aGl0ZScsXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICB7eyAoZWRpdE1vZGUgPT09ICdUUkVFX01PREUnID8gJ1VJLkNPUkVfVFJFRV9HUklELlRSRUVfQkxPQ0tfSEVBREVSJyA6IHRyZWVDYXB0aW9uKSB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgQGlmIChlZGl0TW9kZSA9PT0gJ1RSRUVfTU9ERScgJiYgIWRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1idXR0b24tZ3JvdXAtdm5zIFtzaG93bkl0ZW1zXT1cImhlYWRlclRvb2xJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uSGVhZGVyVG9vbENsaWNrKCRldmVudClcIj48L2NvcmUtYnV0dG9uLWdyb3VwLXZucz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xyXG4gICAgICAgIH1cIj5cclxuXHJcbiAgICAgICAgICAgIEBpZiAoISFoZWFkZXJHcm91cEV4aXN0KSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93LW9uZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodC8yICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgaGVhZGVyR3JvdXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZ3JvdXAtY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0LzIgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaGVhZGVyR3JvdXAud2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXJHcm91cC5rZXkgfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctdHdvXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoISFoZWFkZXJHcm91cEV4aXN0ID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAhIWNvbHVtbi53aWR0aCA/IGNvbHVtbi53aWR0aCArICdweCcgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI2Zyb250VHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50IGZyb250LWNvbnRhaW5lclwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogdHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZyb250SXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI3RyZWVDb250YWluZXIgY2xhc3M9XCJ0cmVlLWdyaWQtY29udGVudFwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMHB4J1xyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcbiAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbY2xhc3Muc3Bhbi1lZGl0LW1vZGUtYWN0aXZhdGVkXT1cIiEhZWRpdE1vZGVBY3RpdmF0ZWQgJiYgcGVuZGluZ0NvbnRleHQuaWQ9PT1pZFwiIChjbGljayk9XCJvbkxpQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLWRpdlwiIFthdHRyLmRhdGEtdGllcl09XCJ0aWVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1yb3ctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISghIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0Py5pZD09PWlkICYmICFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWNlbGxcIiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiBjb250ZW50Q2VsbFZlcnRpY2FsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tOiBjb250ZW50Q2VsbFZlcnRpY2FsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogY29udGVudENlbGxIb3Jpem9udGFsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGNvbnRlbnRDZWxsSG9yaXpvbnRhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sdW1uLndpZHRoID8gY29sdW1uLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQGlmICghIWNvbHVtbi50ZW1wbGF0ZVJlZiAmJiBhY3RpdmVJZD09PWlkKSB7IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFjb2x1bW4udGVtcGxhdGVSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLnRlbXBsYXRlUmVmITsgY29udGV4dDogeyBjb250ZXh0OiBjb250ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5waXBlIDogbGFuZykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sdW1uLnBpcGUgOiBsYW5nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWNlbGxcIiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ3Zpc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNvbHVtbi5jb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnBpcGUgOiBsYW5nKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W2NvbHVtbi5maWVsZF0gfCB0YWJsZUNlbGw6IGNvbHVtbi5waXBlIDogbGFuZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNvbnRyb2wgW2Zvcm1dPVwiZm9ybVwiIFtjb250cm9sXT1cImNvbHVtbi5jb250cm9sIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgQGlmICghIWV4cGFuZGVkICYmICEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiFleHBhbmRlZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMHB4J1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZnJvbnRJdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgbGV0LWNoaWxkcmVuPVwiY29udGV4dC50cmVlJENoaWxkcmVuXCIgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtdGllcj1cImNvbnRleHQudHJlZSRUaWVyXCI+XHJcblxyXG4gICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIChjbGljayk9XCJvbkxpQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZyb250LXNwYW5cIiBbY2xhc3Muc3Bhbi1lZGl0LW1vZGUtYWN0aXZhdGVkXT1cIiEhZWRpdE1vZGVBY3RpdmF0ZWQgJiYgcGVuZGluZ0NvbnRleHQuaWQ9PT1pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tZGl2XCIgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRyZWVDb2x1bW5XaWR0aCAtIHRyZWVCbG9ja1BhZGRpbmdMZWZ0IC0gdGllciAqIHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWRpdE1vZGUgPT09ICdUUkVFX01PREUnICYmICFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tdG9vbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd25JdGVtc109XCJ0b29sSXRlbXNcIiBbc2hvd0NhcHRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50LCBjb250ZXh0KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZXIgZmVhdGhlci1jaGV2cm9uLWRvd25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgQGlmICghIWV4cGFuZGVkICYmICEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiFleHBhbmRlZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCdcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZyb250SXRlbTsgY29udGV4dDogeyBjb250ZXh0OiBjaGlsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvZGl2PiJdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQVE3RyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFFaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUEyQixNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdE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QWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLE1BQU07c0JBQWhDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLE9BQU87c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFlBQVk7c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUtHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhcGkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRXZlcnlUcmVlU3RhdHVzLCBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0vY29yZS1jb250cm9sLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJRm9ybWF0ZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgbGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCB9IGZyb20gJy4uLy4uLy4uLy4uL2Fzc2V0cy9qcy9yZXNjdXNpdmVfd2snO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGUsIElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10cmVlLWdyaWQtaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVQYWdlRWRpdENSVUQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wvY29yZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRocmVlZG90c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RocmVlZG90cy90aHJlZWRvdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IENvcmVUYWJsZVNlcnZpY2UsIElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQsIElIZWFkZXJHcm91cEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb3JlLXRhYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRyZWUtZ3JpZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVGFibGVDZWxsUGlwZSxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS10cmVlLWdyaWQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVRyZWVHcmlkQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGxpbmVhckl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBlZGl0TW9kZSE6IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBoZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29sdW1uczogSUNvcmVUcmVlR3JpZENvbHVtbkl0ZW1bXSA9IFtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGtleUZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRpdGxlRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFyZW50RmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVhZGVySGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHRyZWVDYXB0aW9uITogRW51bVRyYW5zbGF0ZUtleSB8IHN0cmluZztcclxuICBASW5wdXQoKSBoZWFkZXJDZWxsUGFkZGluZzogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBoZWFkZXJCb3JkZXJTaXplOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpIHRyZWVDb2x1bW5XaWR0aDogbnVtYmVyID0gMjAwO1xyXG4gIEBJbnB1dCgpIHRyZWVCbG9ja1BhZGRpbmdMZWZ0OiBudW1iZXIgPSA1MDtcclxuICBASW5wdXQoKSB0cmVlTm9kZUxldmVsUGFkZGluZzogbnVtYmVyID0gMTU7XHJcbiAgQElucHV0KCkgY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmc6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCkgY29udGVudENlbGxIb3Jpem9udGFsUGFkZGluZzogbnVtYmVyID0gMjA7XHJcblxyXG4gIC8vIFdlIGhhdmUgMiBjYXNlcyBvZiBkYXRhIGJpbmRpbmc6XHJcblxyXG4gIC8vIDE6IGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlID0gdW5kZWZpbmVkICYmIGdldEZ1bGxMaXN0QXBpICE9PSB1bmRlZmluZWQgJiYgY3J1ZCAhPT0gdW5kZWZpbmVkXHJcbiAgLy8gVGhpcyBjYXNlIGlzIGZvciBjcmVhdGUvdXBkYXRlIHRyZWUgaXRzZWxmXHJcbiAgQElucHV0KCkgZ2V0RnVsbExpc3RBcGkhOiBhcGk7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUVkaXRDUlVEO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlITogYm9vbGVhbjtcclxuXHJcbiAgLy8gMTogZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUgPSB0cnVlICYmIGdldEZ1bGxMaXN0QXBpID09PSB1bmRlZmluZWQgJiYgY3J1ZCA9PT0gdW5kZWZpbmVkXHJcbiAgLy8gVGhpcyBjYXNlIGlzIGZvciB2aWV3IG9ubHksIGFuZCB1c2luZyBleHRlcm5hbnQgZGF0YSwgYW5kIHRoaXMuZGF0YSBtdXN0IGJlY29tZSBASW5wdXQoKVxyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlRG91YmxlQ2xpY2shOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdFN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgbGluZWFySXRlbXM6IGFueVtdID0gW107XHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBoZWFkZXJHcm91cHMhOiBJSGVhZGVyR3JvdXBJdGVtW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHRvdGFsV2lkdGg6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgbWF4VGllciE6IG51bWJlcjtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHBlbmRpbmdQYXJlbnRDb250ZXh0OiBhbnk7XHJcbiAgcGVuZGluZ0NvbnRleHQ6IGFueTtcclxuICBwZW5kaW5nQWN0aW9uITogRW51bUNvcmVCdXR0b25WTlNDb2RlO1xyXG5cclxuICBlZGl0TW9kZUFjdGl2YXRlZCE6IGJvb2xlYW47XHJcbiAgY2hlY2tFcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICB0cmFuc2Zvcm1lZCE6IElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQ7XHJcblxyXG4gIGFjdGl2ZUlkOiBhbnk7XHJcblxyXG4gIHN0YXR1czogSUV2ZXJ5VHJlZVN0YXR1cyA9IHtcclxuICAgIHNlbGVjdGVkS2V5OiB1bmRlZmluZWQsXHJcbiAgICBhY3RpdmVLZXlzOiBbXSxcclxuICAgIGV4cGFuZGVkS2V5czogW10sXHJcbiAgfTtcclxuXHJcbiAgdG9vbEl0ZW1zOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICBdXHJcblxyXG4gIGhlYWRlclRvb2xJdGVtczogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICBdXHJcblxyXG4gIGhlYWRlckdyb3VwRXhpc3QhOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVjdXJzaXZlU2VydmljZTogUmVjdXJzaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbnRyb2xTZXJ2aWNlOiBDb3JlQ29udHJvbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVUYWJsZVNlcnZpY2U6IENvcmVUYWJsZVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVXaWR0aHMoKTogdm9pZCB7XHJcbiAgICBsZXQgbmV3VG90YWxXaWR0aCA9IHRoaXMudHJlZUNvbHVtbldpZHRoO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICF4LmhpZGRlbikubWFwKHggPT4gbmV3VG90YWxXaWR0aCArPSB4LndpZHRoISk7XHJcbiAgICB0aGlzLnRvdGFsV2lkdGggPSBuZXdUb3RhbFdpZHRoO1xyXG5cclxuICAgIHRoaXMudHJhbnNmb3JtZWQgPSB0aGlzLmNvcmVUYWJsZVNlcnZpY2UudHJhbnNmb3JtV2l0aEhlYWRlckdyb3VwKHRoaXMuY29sdW1ucyk7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnRyYW5zZm9ybWVkLmNvbHVtbnM7XHJcbiAgICB0aGlzLmhlYWRlckdyb3VwcyA9IHRoaXMudHJhbnNmb3JtZWQuaGVhZGVyR3JvdXBzO1xyXG4gICAgdGhpcy5oZWFkZXJHcm91cEV4aXN0ID0gISF0aGlzLmhlYWRlckdyb3Vwcz8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCEhY2hhbmdlc1snY29sdW1ucyddKSB7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlV2lkdGhzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gRW51bUNvcmVUcmVlR3JpZEVkaXRNb2RlLlRSRUVfTU9ERSkge1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmNvcmVDb250cm9sU2VydmljZS50b0NvcmVUcmVlR3JpZEluUm93Rm9ybUdyb3VwKHRoaXMuY29sdW1ucylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGN1bGF0ZVdpZHRocygpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IEVudW1Db3JlVHJlZUdyaWRFZGl0TW9kZS5UUkVFX01PREUpIHtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5nZXRGdWxsTGlzdEFwaSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtY29udGFpbmVyLXdpZHRoJywgdGhpcy50cmVlQ29sdW1uV2lkdGggKyAncHgnKVxyXG4gICAgICBsZXQgZ3JpZFRvdGFsV2lkdGggPSAwO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISEheC5oaWRkZW4pLm1hcChtID0+IGdyaWRUb3RhbFdpZHRoICs9IG0ud2lkdGghKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmlkLXRvdGFsLXdpZHRoJywgZ3JpZFRvdGFsV2lkdGggKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLWJsb2NrLXBhZGRpbmctbGVmdCcsIHRoaXMudHJlZUJsb2NrUGFkZGluZ0xlZnQgKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLW5vZGUtbGV2ZWwtcGFkZGluZycsIHRoaXMudHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGluZWFySXRlbXMkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMubGluZWFySXRlbXMgPSB4O1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWQoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGlvbiA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLmQhLCB7IGlkOiB0aGlzLnBlbmRpbmdDb250ZXh0LmlkIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBpbm5lci1wdXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdFN1Y2Nlc3MuZW1pdCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckl0ZW1zKSlcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQpXHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIHRoaXMubWF4VGllciA9IGRhdGEubWF4VGllclxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LXRpZXInLCB0aGlzLm1heFRpZXIpKVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxyXG4gICAgICAgIGtleUZpZWxkOiB0aGlzLmtleUZpZWxkLFxyXG4gICAgICAgIHRpdGxlRmllbGQ6IHRoaXMudGl0bGVGaWVsZCxcclxuICAgICAgICBwYXJlbnRGaWVsZDogdGhpcy5wYXJlbnRGaWVsZCxcclxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoY2xvbmVDb3B5LCB0aGlzLmtleUZpZWxkLCB0aGlzLnRpdGxlRmllbGQsIHRoaXMucGFyZW50RmllbGQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuc3RhdHVzKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShvYmogPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgdGhpcy5tYXhUaWVyID0gb2JqLm1heFRpZXJcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIGNvbnRleHQudHJlZSRFeHBhbmRlZCA9ICEhIWNvbnRleHQudHJlZSRFeHBhbmRlZFxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0dXNcclxuICAgIGlmICghIWNvbnRleHQudHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMuZmlsdGVyKHggPT4geCA9PT0gY29udGV4dC50cmVlJEtleS50b1N0cmluZygpKTtcclxuICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ICE9PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMgPSBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25PYmplY3RDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCk7XHJcbiAgfVxyXG5cclxuICBvbkxpQ2xpY2soY29udGV4dDogYW55LCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSBFbnVtQ29yZVRyZWVHcmlkRWRpdE1vZGUuVFJFRV9NT0RFKSB7XHJcbiAgICAgIGlmIChldmVudD8uZGV0YWlsID09PSAyICYmICF0aGlzLmRpc2FibGVEb3VibGVDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KGNvbnRleHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCk7ICBcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVJZCA9IGNvbnRleHQuaWQ7XHJcbiAgICAgIHRoaXMub25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkhlYWRlclRvb2xDbGljayhldmVudDogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuICAgIC8vIHByZXBhcmUgYSBibGFuayByb3dcclxuICAgIGNvbnN0IGJsYW5rUm93OiBhbnkgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoeCA9PiB7XHJcbiAgICAgIGJsYW5rUm93W3guZmllbGRdID0gbnVsbDtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5jb250cm9sKS5tYXAoeCA9PiB7XHJcbiAgICAgIGJsYW5rUm93W3guY29udHJvbD8uZmllbGQhXSA9IG51bGw7XHJcbiAgICB9KVxyXG4gICAgYmxhbmtSb3dbJ2lkJ10gPSAwO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkS2V5J10gPSAwO1xyXG4gICAgYmxhbmtSb3dbdGhpcy50aXRsZUZpZWxkXSA9ICcnO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkVGl0bGUnXSA9ICcnO1xyXG4gICAgYmxhbmtSb3dbdGhpcy5rZXlGaWVsZF0gPSAwO1xyXG4gICAgYmxhbmtSb3dbdGhpcy5wYXJlbnRGaWVsZF0gPSBudWxsO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkUGFyZW50J10gPSBudWxsO1xyXG4gICAgYmxhbmtSb3dbJ3RyZWUkVGllciddID0gMTtcclxuICAgIGJsYW5rUm93Wyd0cmVlJENoaWxkcmVuJ10gPSBbXTtcclxuXHJcbiAgICAvLyBwdXNoIHRoZSBibGFua1JvdyB0byB0aGUgY3VycmVudCBkYXRhXHJcbiAgICB0aGlzLmRhdGEudW5zaGlmdChibGFua1Jvdyk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGJsYW5rUm93O1xyXG5cclxuICAgIC8vIGFjdGl2YXRlIGVkaXRNb2RlIChjcmVhdGUpXHJcbiAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnRvb2xJdGVtcyA9IFtcclxuICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFLFxyXG4gICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgb25Ub29sQ2xpY2soZXZlbnQ6IElDb3JlQnV0dG9uVk5TLCBjb250ZXh0OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkU6XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGlmICghISF0aGlzLmZvcm0udmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwaTogYXBpO1xyXG5cclxuICAgICAgICBpZiAoISFOdW1iZXIodGhpcy5mb3JtLmdldCgnaWQnKT8udmFsdWUpKSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQudSFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXBpID0gdGhpcy5jcnVkLmMhXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gaW5uZXItcHVzaFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUw6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZXh0LmlkID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGV4dC50cmVlJFBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5kYXRhLmZpbHRlcih4ID0+IHguaWQgIT09IDApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dC50cmVlJENoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaWQgIT09IHRoaXMucGVuZGluZ0NvbnRleHQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0LnRyZWUkQ2hpbGRyZW4gPSBmaWx0ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuICAgICAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICAgICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5jb250cm9sKS5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmxhbmtSb3dbJ2lkJ10gPSAwO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkVGl0bGUnXSA9ICcnO1xyXG4gICAgICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkUGFyZW50J10gPSBjb250ZXh0LmlkO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IGNvbnRleHQudHJlZSRUaWVyICsgMTtcclxuICAgICAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgICAgIC8vIHB1c2ggdGhlIGJsYW5rUm93IHRvIHRoZSBjdXJyZW50IGRhdGEgYXQgdGhlIGJlZ2luaW5nXHJcbiAgICAgICAgY29udGV4dC50cmVlJENoaWxkcmVuLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gZXhwYW5kXHJcbiAgICAgICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSBleHBhbmQgbW9kZSB0byBzdGF0ZVxyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzYXZlIHBhcmVudCBjb250ZXh0XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dCA9IGNvbnRleHRcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGJsYW5rUm93O1xyXG5cclxuICAgICAgICBjb25zdCBuZXdGb3JtRGF0YTogYW55ID0ge31cclxuICAgICAgICBuZXdGb3JtRGF0YVt0aGlzLnBhcmVudEZpZWxkXSA9IGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdXHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobmV3Rm9ybURhdGEpXHJcblxyXG4gICAgICAgIC8vIGFjdGl2YXRlIGVkaXRNb2RlIChjcmVhdGUpXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFLFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgICAgICBdXHJcblxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuY3J1ZC5yISArIFwiP2lkPVwiICsgY29udGV4dC5pZCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShib2R5LmlubmVyQm9keSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKGNvbnRleHQudHJlZSRIYXNDaGlsZHJlbikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9JTkZPKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX1RSRUVfR1JJRF9DQU5OT1RfREVMRVRFX05PREVfSEFOVklOR19DSElMRFJFTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0RFTEVURSlcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtjb250ZXh0LnRyZWUkVGl0bGVdKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuWUVTKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5DQU5DRUwpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXRyZWUtZ3JpZC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnLFxyXG4gICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbn1cIj5cclxuXHJcbiAgICBAaWYgKGxvYWRpbmcpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXN1cmZhY2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGhyZWVkb3RzPjwvYXBwLXRocmVlZG90cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtaGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiB0b3RhbFdpZHRoICsgJ3B4JyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtYmxvY2staGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB3aWR0aDogdHJlZUNvbHVtbldpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnLFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgKGVkaXRNb2RlID09PSAnVFJFRV9NT0RFJyA/ICdVSS5DT1JFX1RSRUVfR1JJRC5UUkVFX0JMT0NLX0hFQURFUicgOiB0cmVlQ2FwdGlvbikgfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgIEBpZiAoZWRpdE1vZGUgPT09ICdUUkVFX01PREUnICYmICFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd25JdGVtc109XCJoZWFkZXJUb29sSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChidXR0b25DbGljayk9XCJvbkhlYWRlclRvb2xDbGljaygkZXZlbnQpXCI+PC9jb3JlLWJ1dHRvbi1ncm91cC12bnM+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcclxuICAgICAgICB9XCI+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCEhaGVhZGVyR3JvdXBFeGlzdCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvdy1vbmVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQvMiArICdweCcsXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGhlYWRlckdyb3VwIG9mIGhlYWRlckdyb3VwczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWdyb3VwLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodC8yICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGhlYWRlckdyb3VwLndpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyR3JvdXAua2V5IHwgdHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93LXR3b1wiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwRXhpc3QgPyBoZWFkZXJIZWlnaHQvMiA6IGhlYWRlckhlaWdodCkgKyAncHgnLFxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBFeGlzdCA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwRXhpc3QgPyBoZWFkZXJIZWlnaHQvMiA6IGhlYWRlckhlaWdodCkgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmNhcHRpb24gfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICNmcm9udFRyZWVDb250YWluZXIgY2xhc3M9XCJ0cmVlLWdyaWQtY29udGVudCBmcm9udC1jb250YWluZXJcIiBbY2xhc3MuZWRpdC1tb2RlLWFjdGl2YXRlZF09XCJlZGl0TW9kZUFjdGl2YXRlZFwiPlxyXG4gICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHVsIGNsYXNzPVwicm9vdFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISEhcm9vdC50cmVlJEV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4J1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICN0cmVlQ29udGFpbmVyIGNsYXNzPVwidHJlZS1ncmlkLWNvbnRlbnRcIiBbY2xhc3MuZWRpdC1tb2RlLWFjdGl2YXRlZF09XCJlZGl0TW9kZUFjdGl2YXRlZFwiPlxyXG4gICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHVsIGNsYXNzPVwicm9vdFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISEhcm9vdC50cmVlJEV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogJzBweCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IHJvb3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgbGV0LWNoaWxkcmVuPVwiY29udGV4dC50cmVlJENoaWxkcmVuXCIgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtdGllcj1cImNvbnRleHQudHJlZSRUaWVyXCI+XHJcblxyXG4gICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIiAoY2xpY2spPVwib25MaUNsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1kaXZcIiBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEoISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dD8uaWQ9PT1pZCAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1jZWxsXCIgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogY29udGVudENlbGxWZXJ0aWNhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGNvbnRlbnRDZWxsSG9yaXpvbnRhbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBjb250ZW50Q2VsbEhvcml6b250YWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAhIWNvbHVtbi53aWR0aCA/IGNvbHVtbi53aWR0aCArICdweCcgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEBpZiAoISFjb2x1bW4udGVtcGxhdGVSZWYgJiYgYWN0aXZlSWQ9PT1pZCkgeyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY29sdW1uLnRlbXBsYXRlUmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi50ZW1wbGF0ZVJlZiE7IGNvbnRleHQ6IHsgY29udGV4dDogY29udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgISFjb2x1bW4udHJhbnNsYXRlID8gKGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRyYW5zbGF0ZTogbGFuZyB8IHRhYmxlQ2VsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucGlwZSA6IGxhbmcpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W2NvbHVtbi5maWVsZF0gfCB0YWJsZUNlbGw6IGNvbHVtbi5waXBlIDogbGFuZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1jZWxsXCIgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtZGl2XCIgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sdW1uLndpZHRoID8gY29sdW1uLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ3RhYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1k6ICd2aXNpYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2x1bW4uY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgISFjb2x1bW4udHJhbnNsYXRlID8gKGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRyYW5zbGF0ZTogbGFuZyB8IHRhYmxlQ2VsbDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5waXBlIDogbGFuZykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdGFibGVDZWxsOiBjb2x1bW4ucGlwZSA6IGxhbmd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jb250cm9sIFtmb3JtXT1cImZvcm1cIiBbY29udHJvbF09XCJjb2x1bW4uY29udHJvbCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0Vycm9yJF09XCJjaGVja0Vycm9yJFwiPjwvY29yZS1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCAmJiAhIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIhZXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzBweCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2hpbGRyZW47IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiBjaGlsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2Zyb250SXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcclxuICAgICAgICBsZXQtaGlnaGxpZ2h0ZWQ9XCJjb250ZXh0LnRyZWUkSGlnaGxpZ2h0ZWRcIiBsZXQtaGFzQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQ2hpbGRyZW5cIlxyXG4gICAgICAgIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiIGxldC1leHBhbmRlZD1cImNvbnRleHQudHJlZSRFeHBhbmRlZFwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcclxuICAgICAgICBsZXQtY2hlY2tlZD1cImNvbnRleHQudHJlZSRDaGVja2VkXCIgbGV0LXRpZXI9XCJjb250ZXh0LnRyZWUkVGllclwiPlxyXG5cclxuICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCJcclxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiAoY2xpY2spPVwib25MaUNsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcm9udC1zcGFuXCIgW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLWRpdlwiIFthdHRyLmRhdGEtdGllcl09XCJ0aWVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0cmVlQ29sdW1uV2lkdGggLSB0cmVlQmxvY2tQYWRkaW5nTGVmdCAtIHRpZXIgKiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVkaXRNb2RlID09PSAnVFJFRV9NT0RFJyAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS10b29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2wtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwidG9vbEl0ZW1zXCIgW3Nob3dDYXB0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudCwgY29udGV4dClcIj48L2NvcmUtYnV0dG9uLWdyb3VwLXZucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyIGZlYXRoZXItY2hldnJvbi1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCAmJiAhIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIhZXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogdHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L2Rpdj4iXX0=
|