@ng-nest/ui 16.0.11 → 16.0.12
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/checkbox/checkbox.component.d.ts +0 -1
- package/checkbox/checkbox.property.d.ts +16 -1
- package/date-picker/date-range.component.d.ts +1 -1
- package/esm2022/checkbox/checkbox.component.mjs +3 -5
- package/esm2022/checkbox/checkbox.property.mjs +28 -2
- package/esm2022/radio/radio.component.mjs +3 -3
- package/esm2022/radio/radio.property.mjs +12 -2
- package/esm2022/table/table-body.component.mjs +3 -3
- package/esm2022/table/table-head.component.mjs +3 -3
- package/esm2022/transfer/transfer.component.mjs +3 -3
- package/esm2022/tree/tree-node.component.mjs +3 -3
- package/fesm2022/ng-nest-ui-checkbox.mjs +29 -5
- package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-radio.mjs +13 -3
- package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-table.mjs +4 -4
- package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-transfer.mjs +2 -2
- package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
- package/fesm2022/ng-nest-ui-tree.mjs +2 -2
- package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
- package/package.json +35 -35
- package/radio/radio.property.d.ts +6 -1
|
@@ -588,12 +588,12 @@ class XTransferComponent extends XTransferProperty {
|
|
|
588
588
|
}
|
|
589
589
|
}
|
|
590
590
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XTransferComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.XConfigService }, { token: i2.XI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
591
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XTransferComponent, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: ["leftTableCom"], descendants: true }, { propertyName: "rightTableCom", first: true, predicate: ["rightTableCom"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i7.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i8.XButtonComponent, selector: "x-button" }, { kind: "component", type: i9.XInputComponent, selector: "x-input" }, { kind: "component", type: i10.XTreeComponent, selector: "x-tree" }, { kind: "component", type: i11.XTableComponent, selector: "x-table" }, { kind: "directive", type: i12.XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: i13.XLinkComponent, selector: "x-link" }, { kind: "pipe", type: i2.XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
591
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: XTransferComponent, selector: "x-transfer", providers: [XValueAccessor(XTransferComponent)], viewQueries: [{ propertyName: "leftTableCom", first: true, predicate: ["leftTableCom"], descendants: true }, { propertyName: "rightTableCom", first: true, predicate: ["rightTableCom"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { kind: "component", type: i7.XCheckboxComponent, selector: "x-checkbox" }, { kind: "component", type: i8.XButtonComponent, selector: "x-button" }, { kind: "component", type: i9.XInputComponent, selector: "x-input" }, { kind: "component", type: i10.XTreeComponent, selector: "x-tree" }, { kind: "component", type: i11.XTableComponent, selector: "x-table" }, { kind: "directive", type: i12.XKeywordDirective, selector: "[x-keyword]" }, { kind: "component", type: i13.XLinkComponent, selector: "x-link" }, { kind: "pipe", type: i2.XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
592
592
|
}
|
|
593
593
|
export { XTransferComponent };
|
|
594
594
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: XTransferComponent, decorators: [{
|
|
595
595
|
type: Component,
|
|
596
|
-
args: [{ selector: `${XTransferPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
|
|
596
|
+
args: [{ selector: `${XTransferPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XTransferComponent)], template: "<div #transfer class=\"x-transfer\" cdkDropListGroup [ngClass]=\"classMap\">\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: left }\"></ng-container>\r\n <div [ngStyle]=\"left.listStyle!\" class=\"x-transfer-list\">\r\n <ng-container [ngSwitch]=\"type\">\r\n <ul\r\n *ngSwitchCase=\"'list'\"\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"left.list\"\r\n [cdkDropListDisabled]=\"!drag && type === 'list'\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of left.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: left }\"></ng-container>\r\n </li>\r\n </ul>\r\n <x-tree\r\n *ngSwitchCase=\"'tree'\"\r\n [data]=\"left.list!\"\r\n multiple\r\n allowManyActivated\r\n [(activatedId)]=\"treeActivatedId\"\r\n (nodeClick)=\"onTreeNodeClick($event)\"\r\n [labelTpl]=\"treeLabelTpl\"\r\n ></x-tree>\r\n <ng-template #treeLabelTpl let-node=\"$node\">\r\n <span class=\"x-transfer-tree-label\" x-keyword [text]=\"left.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n <x-table\r\n #leftTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"tableData\"\r\n [columns]=\"tableColumns!\"\r\n [(size)]=\"tableSize\"\r\n [(index)]=\"tableIndex\"\r\n (indexChange)=\"getTableData()\"\r\n [query]=\"tableQuery\"\r\n [total]=\"tableTotal\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, left)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, left)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"left.tableHeadSearchTpl\"\r\n ></x-table>\r\n </ng-container>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"left.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"left.footerTpl; context: { $source: left }\"></ng-container>\r\n </div>\r\n </div>\r\n <div class=\"x-transfer-buttons\">\r\n <x-button type=\"primary\" icon=\"fto-chevron-right\" [disabled]=\"left.disabledButton\" (click)=\"move(left, right)\"></x-button>\r\n <x-button type=\"primary\" icon=\"fto-chevron-left\" [disabled]=\"right.disabledButton\" (click)=\"move(right, left)\"></x-button>\r\n </div>\r\n <div class=\"x-transfer-box\" [class.x-transfer-has-footer]=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"sourceTitleTpl; context: { source: right }\"></ng-container>\r\n <div [ngSwitch]=\"type\" [ngStyle]=\"right.listStyle!\" class=\"x-transfer-list\">\r\n <x-table\r\n #rightTableCom\r\n *ngSwitchCase=\"'table'\"\r\n [data]=\"right.list!\"\r\n [columns]=\"tableColumns!\"\r\n (activatedRowChange)=\"onTableCheckedRow($event, right)\"\r\n (headCheckboxChange)=\"onTableCheckedAll($event, right)\"\r\n hiddenWrapBorder\r\n hiddenPaginationBorder\r\n showPagination=\"false\"\r\n showEllipsis=\"false\"\r\n showTotal=\"false\"\r\n paginationPosition=\"bottom-center\"\r\n allowSelectRow=\"false\"\r\n [headSearchTpl]=\"right.tableHeadSearchTpl\"\r\n ></x-table>\r\n <ul\r\n *ngSwitchDefault\r\n cdkDropList\r\n (cdkDropListDropped)=\"dropCdk($event)\"\r\n [cdkDropListData]=\"right.list\"\r\n [cdkDropListDisabled]=\"!drag || (drag && type !== 'list')\"\r\n [cdkDropListEnterPredicate]=\"predicate\"\r\n class=\"x-transfer-droplist\"\r\n >\r\n <li class=\"x-transfer-item\" *ngFor=\"let node of right.list; trackBy: trackByNode\" cdkDrag [cdkDragData]=\"node\">\r\n <ng-container *ngTemplateOutlet=\"sourceNodeTpl; context: { node: node, source: right }\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"x-transfer-footer\" *ngIf=\"right.footerTpl\">\r\n <ng-container *ngTemplateOutlet=\"right.footerTpl; context: { $source: right }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #sourceTitleTpl let-source=\"source\">\r\n <div class=\"x-transfer-title\">\r\n <div class=\"x-transfer-title-left\">\r\n <x-checkbox\r\n *ngIf=\"source.title && !source.hiddenCheckAll\"\r\n [data]=\"[titleTpl ? '' : source.title]\"\r\n [(ngModel)]=\"source.checkedAll\"\r\n (ngModelChange)=\"checkedAllChange($event, source)\"\r\n [indeterminate]=\"source.indeterminate\"\r\n single\r\n ></x-checkbox>\r\n <span *ngIf=\"source.title && source.hiddenCheckAll\">{{ source.title }}</span>\r\n <x-link *ngIf=\"inverse && type === 'list'\" class=\"x-transfer-inverse\" type=\"primary\" (click)=\"onInverse(source)\">{{\r\n 'transfer.inverse' | xI18n\r\n }}</x-link>\r\n </div>\r\n <ng-container *xOutlet=\"titleTpl; context: { $title: source.title, $checkedCount: source.checkedCount, $count: source.count }\"\r\n ><span class=\"x-transfer-total\">{{ source.checkedCount }} / {{ source.count }}</span></ng-container\r\n >\r\n </div>\r\n <div class=\"x-transfer-search\" *ngIf=\"search && type !== 'table'\">\r\n <x-input icon=\"fto-search\" [(ngModel)]=\"source.searchInput\" (ngModelChange)=\"onSearchInputChange(source)\" clearable></x-input>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #sourceNodeTpl let-node=\"node\" let-source=\"source\">\r\n <x-checkbox\r\n [data]=\"[{ id: node.id, label: nodeTpl ? nodeTpl : labelTpl, node: node }]\"\r\n [disabled]=\"node.disabled\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"checkedChange($event, source)\"\r\n single\r\n ></x-checkbox>\r\n <ng-template #labelTpl>\r\n <span x-keyword [text]=\"source.searchInput!\">{{ node.label }}</span>\r\n </ng-template>\r\n</ng-template>\r\n", styles: [".x-transfer{margin:0;padding:0;display:inline-flex;align-items:center}.x-transfer-title{padding:.25rem .5625rem;display:flex;align-items:center;justify-content:space-between;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top-left-radius:var(--x-border-radius);border-top-right-radius:var(--x-border-radius);background-color:var(--x-background);color:var(--x-text-300)}.x-transfer-title-left{display:inline-flex;align-items:center}.x-transfer-inverse{margin:0 .5rem}.x-transfer-total{margin-left:.325rem}.x-transfer-box{min-width:12rem}.x-transfer-list{display:flex;flex-direction:column;height:18rem;width:100%;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-top:none;border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius);overflow:auto}.x-transfer-item{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;transition:border-color var(--x-animation-duration-base),background-color var(--x-animation-duration-base),color var(--x-animation-duration-base)}.x-transfer-droplist{height:100%;padding:.25rem}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:hover{background-color:transparent}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item.cdk-drag-placeholder{border-color:var(--x-primary);color:var(--x-primary);background-color:var(--x-background);opacity:.8}.x-transfer-droplist.cdk-drop-list-dragging .x-transfer-item:not(.cdk-drag-placeholder){transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}.x-transfer-buttons{margin:0 1rem;display:flex;flex-direction:column}.x-transfer-buttons>x-button:not(:first-child){margin-top:.5rem}.x-transfer-search{padding:.5rem;border-left:var(--x-border-width) var(--x-border-style) var(--x-border);border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-transfer-search x-input{width:100%}.x-transfer-tree-label{flex:1}.x-transfer-footer{padding:.25rem .5625rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-bottom-left-radius:var(--x-border-radius);border-bottom-right-radius:var(--x-border-radius)}.x-transfer-has-footer .x-transfer-list{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:none}body>li.x-transfer-item.cdk-drag-preview{padding:.125rem .25rem;border-radius:var(--x-border-radius);display:flex;align-items:center;border:.0625rem dashed transparent;border-color:var(--x-border);color:var(--x-text-400);background-color:var(--x-background-a100);opacity:.9}body>li.x-transfer-item.cdk-drag-animating{transition:transform var(--x-animation-duration-base) cubic-bezier(0,0,.2,1)}\n"] }]
|
|
597
597
|
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.XConfigService }, { type: i2.XI18nService }]; }, propDecorators: { leftTableCom: [{
|
|
598
598
|
type: ViewChild,
|
|
599
599
|
args: ['leftTableCom']
|
|
@@ -601,4 +601,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
601
601
|
type: ViewChild,
|
|
602
602
|
args: ['rightTableCom']
|
|
603
603
|
}] } });
|
|
604
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBSXZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFrQyxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN4SCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBRVIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBS3ZELE1BUWEsa0JBQW1CLFNBQVEsaUJBQWlCO0lBdUJ2RCxJQUFZLFVBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1NBQzlCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1NB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LEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQUUsT0FBTztRQUNsRCxJQUFJLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7a0lBamtCVSxrQkFBa0I7c0hBQWxCLGtCQUFrQixxQ0FGbEIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxxUkMxQ2pELDJ0TUFzSUE7O1NEMUZhLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLEdBQUcsZUFBZSxFQUFFLGlCQUdmLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLG9CQUFvQixDQUFDO2lOQUdwQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRyYW5zZmVyUHJlZml4LCBYVHJhbnNmZXJOb2RlLCBYVHJhbnNmZXJTb3VyY2UsIFhUcmFuc2ZlclByb3BlcnR5LCBYVHJhbnNmZXJUeXBlIH0gZnJvbSAnLi90cmFuc2Zlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7XHJcbiAgWElzQ2hhbmdlLFxyXG4gIFhJc0VtcHR5LFxyXG4gIFhTZXREYXRhLFxyXG4gIFhDb25maWdTZXJ2aWNlLFxyXG4gIFhSZW1vdmUsXHJcbiAgWElzQXJyYXksXHJcbiAgWElzT2JqZWN0LFxyXG4gIFhJc09iamVjdEFycmF5LFxyXG4gIFhJc0Jvb2xlYW4sXHJcbiAgWElzRnVuY3Rpb24sXHJcbiAgWFJlc3VsdExpc3QsXHJcbiAgWElzVW5kZWZpbmVkXHJcbn0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRyYW5zZmVyQXJyYXlJdGVtLCBtb3ZlSXRlbUluQXJyYXksIENka0RyYWdEcm9wLCBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWEkxOG5TZXJ2aWNlLCBYSTE4blRyYW5zZmVyIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IFhUcmVlTm9kZSB9IGZyb20gJ0BuZy1uZXN0L3VpL3RyZWUnO1xyXG5pbXBvcnQgeyBYVGFibGVDb2x1bW4sIFhUYWJsZUNvbXBvbmVudCwgWFRhYmxlSGVhZENoZWNrYm94IH0gZnJvbSAnQG5nLW5lc3QvdWkvdGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUcmFuc2ZlclByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmFuc2Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJhbnNmZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhUcmFuc2ZlckNvbXBvbmVudCldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVHJhbnNmZXJDb21wb25lbnQgZXh0ZW5kcyBYVHJhbnNmZXJQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2xlZnRUYWJsZUNvbScpIGxlZnRUYWJsZUNvbT86IFhUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdyaWdodFRhYmxlQ29tJykgcmlnaHRUYWJsZUNvbT86IFhUYWJsZUNvbXBvbmVudDtcclxuICBub2RlczogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgbGVmdDogWFRyYW5zZmVyU291cmNlID0ge1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ2xlZnQnLFxyXG4gICAgZGlzYWJsZWRCdXR0b246IHRydWVcclxuICB9O1xyXG4gIHJpZ2h0OiBYVHJhbnNmZXJTb3VyY2UgPSB7XHJcbiAgICBsaXN0OiBbXSxcclxuICAgIHNlYXJjaExpc3Q6IFtdLFxyXG4gICAgY2hlY2tlZENvdW50OiAwLFxyXG4gICAgZGlyZWN0aW9uOiAncmlnaHQnLFxyXG4gICAgZGlzYWJsZWRCdXR0b246IHRydWVcclxuICB9O1xyXG4gIHNlYXJjaElucHV0OiBzdHJpbmcgPSAnJztcclxuICBzZWFyY2hJbnB1dExlZnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoSW5wdXRSaWdodENoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBzZWFyY2hEZWJvdW5jZVRpbWUgPSAyMDA7XHJcbiAgbG9jYWxlOiBYSTE4blRyYW5zZmVyID0ge307XHJcbiAgcHJpdmF0ZSBnZXQgbG9jYWxUaXRsZSgpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUudHJlZVRpdGxlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlLmxpc3RUaXRsZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICB0cmVlQWN0aXZhdGVkSWQ6IGFueVtdID0gW107XHJcbiAgdGFibGVEYXRhOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICB0YWJsZUNoZWNrYm94Q29sdW1uPzogWFRhYmxlQ29sdW1uO1xyXG4gIGlzT2JqZWN0QXJyYXkgPSBmYWxzZTtcclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKFhJc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZCA9IFsuLi52YWx1ZV07XHJcbiAgICAgIGlmIChYSXNPYmplY3RBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmlzT2JqZWN0QXJyYXkgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3QodGhpcy5ub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFRpdGxlcygpO1xyXG4gICAgdGhpcy5zZXRMaXN0U3R5bGUoKTtcclxuICAgIHRoaXMuc2V0SGlkZGVuQ2hlY2tBbGwoKTtcclxuICAgIHRoaXMuZ2V0VGFibGVDaGVja0NvbHVtbigpO1xyXG4gICAgdGhpcy5zZXRGb290ZXJUcGwoKTtcclxuICAgIHRoaXMuc2V0VGFibGVIZWFkU2VhcmNoVHBsKCk7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoeCkgPT4geC50cmFuc2ZlciBhcyBYSTE4blRyYW5zZmVyKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHg7XHJcbiAgICAgICAgWElzRW1wdHkodGhpcy50aXRsZXMpICYmIHRoaXMuc2V0VGl0bGVzKCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hJbnB1dExlZnRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoSW5wdXRDaGFuZ2UodGhpcy5sZWZ0KTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UmlnaHRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoSW5wdXRDaGFuZ2UodGhpcy5yaWdodCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBjaGFuZ2VzO1xyXG4gICAgWElzQ2hhbmdlKGRhdGEpICYmIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaElucHV0Q2hhbmdlKHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRMZWZ0Q2hhbmdlLm5leHQoc291cmNlLnNlYXJjaElucHV0ISk7XHJcbiAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgdGhpcy5zZWFyY2hJbnB1dFJpZ2h0Q2hhbmdlLm5leHQoc291cmNlLnNlYXJjaElucHV0ISk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWFyY2hJbnB1dENoYW5nZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZChzb3VyY2Uuc2VhcmNoSW5wdXQpKSByZXR1cm47XHJcbiAgICBpZiAoWElzRW1wdHkoc291cmNlLnNlYXJjaElucHV0KSkge1xyXG4gICAgICBzb3VyY2UubGlzdCA9IFsuLi5zb3VyY2Uuc2VhcmNoTGlzdCFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoTGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApITtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kUGFyZW50ID0gKGl0ZW06IFhUcmFuc2Zlck5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGlkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLnBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50cy5zb21lKCh4KSA9PiB4LmlkID09PSBwYXJlbnQhLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICBmaW5kUGFyZW50KHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNlYXJjaExpc3QpIHtcclxuICAgICAgICAgICAgICBmaW5kUGFyZW50KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gWy4uLnNlYXJjaExpc3QsIC4uLnBhcmVudHNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgc291cmNlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrZWRBbGxDaGFuZ2UoJGV2ZW50OiBib29sZWFuLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGxpc3Q6IFhUcmFuc2Zlck5vZGVbXSA9IChzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkgYXMgWFRyYW5zZmVyTm9kZVtdKS5tYXAoKHgpID0+IHtcclxuICAgICAgeC5jaGVja2VkID0gJGV2ZW50O1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZCA9ICRldmVudCA/IHNvdXJjZS5saXN0IS5tYXAoKHgpID0+IHguaWQpISA6IHNvdXJjZS5saXN0IS5maWx0ZXIoKHgpID0+IHguZGlzYWJsZWQpLm1hcCgoeCkgPT4geC5pZCk7XHJcbiAgICB9XHJcbiAgICBzb3VyY2UuY2hlY2tlZENvdW50ID0gJGV2ZW50ID8gbGlzdC5sZW5ndGggOiAwO1xyXG4gICAgc291cmNlLmluZGV0ZXJtaW5hdGUgPSAkZXZlbnQ7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmICghJGV2ZW50KSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpLS07XHJcbiAgICBlbHNlIChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikrKztcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbW92ZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChmcm9tLmRpc2FibGVkQnV0dG9uKSByZXR1cm47XHJcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICB0aGlzLm1vdmVMaXN0KGZyb20sIHRvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVHJlZShmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm1vdmVUYWJsZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVMaXN0KGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpITtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IGZyb20ubGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgIHguY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLmxpc3QhLCB0by5saXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2gpIHtcclxuICAgICAgICBpbmRleCA9IGZyb20uc2VhcmNoTGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oZnJvbS5zZWFyY2hMaXN0ISwgdG8uc2VhcmNoTGlzdCEsIGluZGV4LCBqKTtcclxuICAgICAgfVxyXG4gICAgICBqKys7XHJcbiAgICB9KTtcclxuICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgIHRvLmxpc3QgPSBbLi4udG8ubGlzdCFdO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVUcmVlKGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtczogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgICBpZiAodG8uZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiAhWElzRW1wdHkodGhpcy50cmVlQWN0aXZhdGVkSWQpICYmIHRoaXMudHJlZUFjdGl2YXRlZElkLmluY2x1ZGVzKHguaWQpKSE7XHJcbiAgICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4OiBYVHJlZU5vZGUpID0+IHtcclxuICAgICAgICB4LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB4LmNoYW5nZSAmJiB4LmNoYW5nZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdG8ubGlzdD8udW5zaGlmdChcclxuICAgICAgICAuLi5jaGVja2VkSXRlbXMubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICBsZXQgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaCkge1xyXG4gICAgICAgIFhSZW1vdmUoZnJvbS5zZWFyY2hMaXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgY2hlY2tlZEl0ZW1zKSB7XHJcbiAgICAgICAgbGV0IG5vZGU6IFhUcmVlTm9kZSA9IHRvLmxpc3Q/LmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpITtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBub2RlLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5maW5kSW5kZXgoKHgpID0+IHggPT09IG5vZGUuaWQpO1xyXG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZUFjdGl2YXRlZElkLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbm9kZS5jaGFuZ2UgJiYgbm9kZS5jaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RyZWUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRMaXN0Q291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVUYWJsZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBjaGVja2VkSXRlbXM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgaWYgKHRvLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBmcm9tLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkKSE7XHJcbiAgICAgIHRvLmxpc3QgPSBbXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICB4LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHguY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC4uLnRvLmxpc3QhXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBmcm9tKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0byk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBYUmVtb3ZlKGZyb20ubGlzdCEsICh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQhKTtcclxuICAgICAgY29uc3QgaWRzID0gY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4geC5pZCk7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdG8ubGlzdCEpIHtcclxuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZnJvbS5saXN0ID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi50by5saXN0IV07XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHRvKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCBmcm9tKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCd0YWJsZScsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wQ2RrKGV2ZW50OiBDZGtEcmFnRHJvcDxYVHJhbnNmZXJOb2RlW10gfCB1bmRlZmluZWQsIGFueT4pIHtcclxuICAgIGNvbnN0IGV2ID0gZXZlbnQgYXMgQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdPjtcclxuICAgIGlmIChldi5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXYuY29udGFpbmVyKSB7XHJcbiAgICAgIG1vdmVJdGVtSW5BcnJheShldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGV2LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsIGV2LmNvbnRhaW5lci5kYXRhLCBldi5wcmV2aW91c0luZGV4LCBldi5jdXJyZW50SW5kZXgpO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZEFsbCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJlZGljYXRlKGl0ZW06IENka0RyYWc8WFRyYW5zZmVyTm9kZT4pIHtcclxuICAgIHJldHVybiAhaXRlbS5kYXRhLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeU5vZGUoX2luZGV4OiBudW1iZXIsIGl0ZW06IFhUcmFuc2Zlck5vZGUpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc2V0TGlzdENvdW50KHR5cGU6IFhUcmFuc2ZlclR5cGUgPSAnbGlzdCcsIC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAoWydsaXN0JywgJ3RyZWUnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RhYmxlJykge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHRoaXMudGFibGVUb3RhbCAtIHRoaXMucmlnaHQubGlzdCEubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblRyZWVOb2RlQ2xpY2soX25vZGU6IFhUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RyZWUnLCB0aGlzLmxlZnQpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCk7XHJcbiAgfVxyXG5cclxuICBvblRhYmxlQ2hlY2tlZFJvdyhyb3c6IFhUcmFuc2Zlck5vZGUsIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVDaGVja2JveENvbHVtbikgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3dbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uLmlkXTtcclxuICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uVGFibGVDaGVja2VkQWxsKHJvdzogWFRhYmxlSGVhZENoZWNrYm94LCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4pIHJldHVybjtcclxuICAgIGxldCBjaGVja2VkID0gcm93LmNoZWNrYm94W3RoaXMudGFibGVDaGVja2JveENvbHVtbi5pZF07XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZS5saXN0ISkge1xyXG4gICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgb25JbnZlcnNlKHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZS5saXN0ISkge1xyXG4gICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSAhaXRlbS5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdHlwZSA9IGAke3RoaXMudHlwZX1gIGFzIFhUcmFuc2ZlclR5cGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgdHlwZSA9ICdsaXN0JztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KHR5cGUsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGFibGVDaGVja0NvbHVtbigpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgIT09ICd0YWJsZScgfHwgWElzRW1wdHkodGhpcy50YWJsZUNvbHVtbnMpKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4gPSB0aGlzLnRhYmxlQ29sdW1ucz8uZmluZCgoeCkgPT4geC5yb3dDaGVja2VkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2hlY2tlZEFsbCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikgPiAwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5jaGVja2VkQ291bnQgPT09IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKFsndGFibGUnLCAnbGlzdCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRDb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCkgJiYgdGhpcy50cmVlQWN0aXZhdGVkSWQuaW5jbHVkZXMoeC5pZClcclxuICAgICAgICApLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCdXR0b25EaXNhYmxlZCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHNvdXJjZS5kaXNhYmxlZEJ1dHRvbiA9IHNvdXJjZS5jaGVja2VkQ291bnQgPT09IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yaWdodC5saXN0ITtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJpZ2h0Lmxpc3Q/Lm1hcCgoeCkgPT4geC5pZCkhO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VhcmNoTGlzdCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoKSB7XHJcbiAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgICAgaWYgKFhJc0VtcHR5KHNvdXJjZS5zZWFyY2hJbnB1dCkpIHtcclxuICAgICAgICAgIHNvdXJjZS5zZWFyY2hMaXN0ID0gWy4uLihzb3VyY2UubGlzdCBhcyBYVHJhbnNmZXJOb2RlW10pXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0YWJsZScpIHtcclxuICAgICAgdGhpcy5nZXRUYWJsZURhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgWFNldERhdGE8WFRyYW5zZmVyTm9kZT4odGhpcy5kYXRhLCB0aGlzLl91blN1YmplY3QpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICB0aGlzLnNldExpc3QoeCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TGlzdChkYXRhOiBYVHJhbnNmZXJOb2RlW10pIHtcclxuICAgIGlmIChYSXNFbXB0eShkYXRhKSkgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcykpIHtcclxuICAgICAgICAgIHRoaXMubGVmdC5saXN0ID0gdGhpcy5ub2Rlcy5maWx0ZXIoKHgpID0+IHRoaXMudmFsdWVzLmluZGV4T2YoeC5pZCkgPCAwKTtcclxuICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IHRoaXMubm9kZXMuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpID49IDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICB0aGlzLm5vZGVzID0gZGF0YTtcclxuICAgICAgICB0aGlzLnNldFRyZWVOb2RlRGlzYWJsZWQoKTtcclxuICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSkge1xyXG4gICAgICAgICAgdGhpcy5yaWdodC5saXN0ID0gdGhpcy5ub2Rlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpID49IDApXHJcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJsZURhdGFEaXNhYmxlZCgpO1xyXG4gICAgICAgIHRoaXMubGVmdC5saXN0ID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc09iamVjdEFycmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IFtcclxuICAgICAgICAgICAgICAuLi50aGlzLnZhbHVlLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yaWdodC5saXN0ID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFNlYXJjaExpc3QodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICB0aGlzLnNldExpc3RDb3VudCh0aGlzLnR5cGUsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZURhdGEoKSB7XHJcbiAgICBpZiAoWElzRnVuY3Rpb24odGhpcy5kYXRhKSkge1xyXG4gICAgICAodGhpcy5kYXRhIGFzIEZ1bmN0aW9uKSh0aGlzLnRhYmxlSW5kZXgsIHRoaXMudGFibGVTaXplLCB0aGlzLnRhYmxlUXVlcnkpLnN1YnNjcmliZSgoeDogWFJlc3VsdExpc3Q8WFRyYW5zZmVyTm9kZT4pID0+IHtcclxuICAgICAgICB0aGlzLnRhYmxlVG90YWwgPSB4LnRvdGFsITtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHgubGlzdCE7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KHgubGlzdCEpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGl0bGVzKCkge1xyXG4gICAgbGV0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLnRpdGxlcykpIHtcclxuICAgICAgdGl0bGVzID0gW3RoaXMubG9jYWxUaXRsZSEsIHRoaXMubG9jYWxlLnNlbGVjdGVkVGl0bGUhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRpdGxlcyA9IHRoaXMudGl0bGVzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAwKSB0aGlzLmxlZnQudGl0bGUgPSB0aXRsZXNbMF07XHJcbiAgICBpZiAodGl0bGVzLmxlbmd0aCA+IDEpIHRoaXMucmlnaHQudGl0bGUgPSB0aXRsZXNbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3RTdHlsZSgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmxpc3RTdHlsZSkpIHJldHVybjtcclxuICAgIGxldCBzdHlsZXM6IG9iamVjdFtdID0gW107XHJcbiAgICBpZiAoWElzT2JqZWN0KHRoaXMubGlzdFN0eWxlKSkge1xyXG4gICAgICBzdHlsZXMgPSBbdGhpcy5saXN0U3R5bGUsIHRoaXMubGlzdFN0eWxlXTtcclxuICAgIH0gZWxzZSBpZiAoWElzT2JqZWN0QXJyYXkodGhpcy5saXN0U3R5bGUpKSB7XHJcbiAgICAgIHN0eWxlcyA9IHRoaXMubGlzdFN0eWxlIGFzIG9iamVjdFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAwKSB0aGlzLmxlZnQubGlzdFN0eWxlID0gc3R5bGVzWzBdO1xyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAxKSB0aGlzLnJpZ2h0Lmxpc3RTdHlsZSA9IHN0eWxlc1sxXTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VHJlZU5vZGVEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpICYmIHRoaXMubm9kZXMpIHtcclxuICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpICYmIHRoaXMubm9kZXMpIHtcclxuICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRIaWRkZW5DaGVja0FsbCgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmhpZGRlbkNoZWNrQWxsKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQ2hlY2tBbGwhLmxlbmd0aCA+IDAgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsIVswXSkpIHRoaXMubGVmdC5oaWRkZW5DaGVja0FsbCA9IHRoaXMuaGlkZGVuQ2hlY2tBbGwhWzBdO1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQ2hlY2tBbGwhLmxlbmd0aCA+IDEgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsIVsxXSkpIHRoaXMucmlnaHQuaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsIVsxXTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Rm9vdGVyVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLmZvb3RlclRwbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxlZnQuZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwhWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9vdGVyVHBsIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQuZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwhWzFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZUhlYWRTZWFyY2hUcGwoKSB7XHJcbiAgICBpZiAoWElzVW5kZWZpbmVkKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsIS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCFbMF07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5yaWdodC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCFbMV07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI3RyYW5zZmVyIGNsYXNzPVwieC10cmFuc2ZlclwiIGNka0Ryb3BMaXN0R3JvdXAgW25nQ2xhc3NdPVwiY2xhc3NNYXBcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cImxlZnQuZm9vdGVyVHBsXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlVGl0bGVUcGw7IGNvbnRleHQ6IHsgc291cmNlOiBsZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwibGVmdC5saXN0U3R5bGUhXCIgY2xhc3M9XCJ4LXRyYW5zZmVyLWxpc3RcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiXHJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJsZWZ0Lmxpc3RcIlxyXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcgJiYgdHlwZSA9PT0gJ2xpc3QnXCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cIngtdHJhbnNmZXItZHJvcGxpc3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIngtdHJhbnNmZXItaXRlbVwiICpuZ0Zvcj1cImxldCBub2RlIG9mIGxlZnQubGlzdDsgdHJhY2tCeTogdHJhY2tCeU5vZGVcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3VyY2VOb2RlVHBsOyBjb250ZXh0OiB7IG5vZGU6IG5vZGUsIHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHgtdHJlZVxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0cmVlJ1wiXHJcbiAgICAgICAgICBbZGF0YV09XCJsZWZ0Lmxpc3QhXCJcclxuICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICBhbGxvd01hbnlBY3RpdmF0ZWRcclxuICAgICAgICAgIFsoYWN0aXZhdGVkSWQpXT1cInRyZWVBY3RpdmF0ZWRJZFwiXHJcbiAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uVHJlZU5vZGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgIFtsYWJlbFRwbF09XCJ0cmVlTGFiZWxUcGxcIlxyXG4gICAgICAgID48L3gtdHJlZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyZWVMYWJlbFRwbCBsZXQtbm9kZT1cIiRub2RlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdHJlZS1sYWJlbFwiIHgta2V5d29yZCBbdGV4dF09XCJsZWZ0LnNlYXJjaElucHV0IVwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgI2xlZnRUYWJsZUNvbVxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cInRhYmxlQ29sdW1ucyFcIlxyXG4gICAgICAgICAgWyhzaXplKV09XCJ0YWJsZVNpemVcIlxyXG4gICAgICAgICAgWyhpbmRleCldPVwidGFibGVJbmRleFwiXHJcbiAgICAgICAgICAoaW5kZXhDaGFuZ2UpPVwiZ2V0VGFibGVEYXRhKClcIlxyXG4gICAgICAgICAgW3F1ZXJ5XT1cInRhYmxlUXVlcnlcIlxyXG4gICAgICAgICAgW3RvdGFsXT1cInRhYmxlVG90YWxcIlxyXG4gICAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQsIGxlZnQpXCJcclxuICAgICAgICAgIChoZWFkQ2hlY2tib3hDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRBbGwoJGV2ZW50LCBsZWZ0KVwiXHJcbiAgICAgICAgICBoaWRkZW5XcmFwQm9yZGVyXHJcbiAgICAgICAgICBoaWRkZW5QYWdpbmF0aW9uQm9yZGVyXHJcbiAgICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgICBwYWdpbmF0aW9uUG9zaXRpb249XCJib3R0b20tY2VudGVyXCJcclxuICAgICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwibGVmdC50YWJsZUhlYWRTZWFyY2hUcGxcIlxyXG4gICAgICAgID48L3gtdGFibGU+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIiAqbmdJZj1cImxlZnQuZm9vdGVyVHBsXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsZWZ0LmZvb3RlclRwbDsgY29udGV4dDogeyAkc291cmNlOiBsZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLWJ1dHRvbnNcIj5cclxuICAgIDx4LWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGljb249XCJmdG8tY2hldnJvbi1yaWdodFwiIFtkaXNhYmxlZF09XCJsZWZ0LmRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm1vdmUobGVmdCwgcmlnaHQpXCI+PC94LWJ1dHRvbj5cclxuICAgIDx4LWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGljb249XCJmdG8tY2hldnJvbi1sZWZ0XCIgW2Rpc2FibGVkXT1cInJpZ2h0LmRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm1vdmUocmlnaHQsIGxlZnQpXCI+PC94LWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cInJpZ2h0LmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogcmlnaHQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbbmdTd2l0Y2hdPVwidHlwZVwiIFtuZ1N0eWxlXT1cInJpZ2h0Lmxpc3RTdHlsZSFcIiBjbGFzcz1cIngtdHJhbnNmZXItbGlzdFwiPlxyXG4gICAgICA8eC10YWJsZVxyXG4gICAgICAgICNyaWdodFRhYmxlQ29tXHJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIlxyXG4gICAgICAgIFtkYXRhXT1cInJpZ2h0Lmxpc3QhXCJcclxuICAgICAgICBbY29sdW1uc109XCJ0YWJsZUNvbHVtbnMhXCJcclxuICAgICAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkUm93KCRldmVudCwgcmlnaHQpXCJcclxuICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgcmlnaHQpXCJcclxuICAgICAgICBoaWRkZW5XcmFwQm9yZGVyXHJcbiAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgIHNob3dQYWdpbmF0aW9uPVwiZmFsc2VcIlxyXG4gICAgICAgIHNob3dFbGxpcHNpcz1cImZhbHNlXCJcclxuICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgYWxsb3dTZWxlY3RSb3c9XCJmYWxzZVwiXHJcbiAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwicmlnaHQudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgPjwveC10YWJsZT5cclxuICAgICAgPHVsXHJcbiAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxyXG4gICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwicmlnaHQubGlzdFwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcgfHwgKGRyYWcgJiYgdHlwZSAhPT0gJ2xpc3QnKVwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwicHJlZGljYXRlXCJcclxuICAgICAgICBjbGFzcz1cIngtdHJhbnNmZXItZHJvcGxpc3RcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwieC10cmFuc2Zlci1pdGVtXCIgKm5nRm9yPVwibGV0IG5vZGUgb2YgcmlnaHQubGlzdDsgdHJhY2tCeTogdHJhY2tCeU5vZGVcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIiAqbmdJZj1cInJpZ2h0LmZvb3RlclRwbFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmlnaHQuZm9vdGVyVHBsOyBjb250ZXh0OiB7ICRzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc291cmNlVGl0bGVUcGwgbGV0LXNvdXJjZT1cInNvdXJjZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXRpdGxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZS1sZWZ0XCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgKm5nSWY9XCJzb3VyY2UudGl0bGUgJiYgIXNvdXJjZS5oaWRkZW5DaGVja0FsbFwiXHJcbiAgICAgICAgW2RhdGFdPVwiW3RpdGxlVHBsID8gJycgOiBzb3VyY2UudGl0bGVdXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNvdXJjZS5jaGVja2VkQWxsXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja2VkQWxsQ2hhbmdlKCRldmVudCwgc291cmNlKVwiXHJcbiAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic291cmNlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICA+PC94LWNoZWNrYm94PlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInNvdXJjZS50aXRsZSAmJiBzb3VyY2UuaGlkZGVuQ2hlY2tBbGxcIj57eyBzb3VyY2UudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgIDx4LWxpbmsgKm5nSWY9XCJpbnZlcnNlICYmIHR5cGUgPT09ICdsaXN0J1wiIGNsYXNzPVwieC10cmFuc2Zlci1pbnZlcnNlXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwib25JbnZlcnNlKHNvdXJjZSlcIj57e1xyXG4gICAgICAgICd0cmFuc2Zlci5pbnZlcnNlJyB8IHhJMThuXHJcbiAgICAgIH19PC94LWxpbms+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJ0aXRsZVRwbDsgY29udGV4dDogeyAkdGl0bGU6IHNvdXJjZS50aXRsZSwgJGNoZWNrZWRDb3VudDogc291cmNlLmNoZWNrZWRDb3VudCwgJGNvdW50OiBzb3VyY2UuY291bnQgfVwiXHJcbiAgICAgID48c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdG90YWxcIj57eyBzb3VyY2UuY2hlY2tlZENvdW50IH19IC8ge3sgc291cmNlLmNvdW50IH19PC9zcGFuPjwvbmctY29udGFpbmVyXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItc2VhcmNoXCIgKm5nSWY9XCJzZWFyY2ggJiYgdHlwZSAhPT0gJ3RhYmxlJ1wiPlxyXG4gICAgPHgtaW5wdXQgaWNvbj1cImZ0by1zZWFyY2hcIiBbKG5nTW9kZWwpXT1cInNvdXJjZS5zZWFyY2hJbnB1dFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlKVwiIGNsZWFyYWJsZT48L3gtaW5wdXQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZU5vZGVUcGwgbGV0LW5vZGU9XCJub2RlXCIgbGV0LXNvdXJjZT1cInNvdXJjZVwiPlxyXG4gIDx4LWNoZWNrYm94XHJcbiAgICBbZGF0YV09XCJbeyBpZDogbm9kZS5pZCwgbGFiZWw6IG5vZGVUcGwgPyBub2RlVHBsIDogbGFiZWxUcGwsIG5vZGU6IG5vZGUgfV1cIlxyXG4gICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJub2RlLmNoZWNrZWRcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gID48L3gtY2hlY2tib3g+XHJcbiAgPG5nLXRlbXBsYXRlICNsYWJlbFRwbD5cclxuICAgIDxzcGFuIHgta2V5d29yZCBbdGV4dF09XCJzb3VyY2Uuc2VhcmNoSW5wdXQhXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
604
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdHJhbnNmZXIvdHJhbnNmZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFJakIsdUJBQXVCLEVBSXZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFrQyxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN4SCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBRVIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBS3ZELE1BUWEsa0JBQW1CLFNBQVEsaUJBQWlCO0lBdUJ2RCxJQUFZLFVBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1NBQzlCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1NB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LEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQUUsT0FBTztRQUNsRCxJQUFJLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7a0lBamtCVSxrQkFBa0I7c0hBQWxCLGtCQUFrQixxQ0FGbEIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxxUkMxQ2pELDJ2TUF3SUE7O1NENUZhLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLEdBQUcsZUFBZSxFQUFFLGlCQUdmLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxjQUFjLG9CQUFvQixDQUFDO2lOQUdwQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFRyYW5zZmVyUHJlZml4LCBYVHJhbnNmZXJOb2RlLCBYVHJhbnNmZXJTb3VyY2UsIFhUcmFuc2ZlclByb3BlcnR5LCBYVHJhbnNmZXJUeXBlIH0gZnJvbSAnLi90cmFuc2Zlci5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7XHJcbiAgWElzQ2hhbmdlLFxyXG4gIFhJc0VtcHR5LFxyXG4gIFhTZXREYXRhLFxyXG4gIFhDb25maWdTZXJ2aWNlLFxyXG4gIFhSZW1vdmUsXHJcbiAgWElzQXJyYXksXHJcbiAgWElzT2JqZWN0LFxyXG4gIFhJc09iamVjdEFycmF5LFxyXG4gIFhJc0Jvb2xlYW4sXHJcbiAgWElzRnVuY3Rpb24sXHJcbiAgWFJlc3VsdExpc3QsXHJcbiAgWElzVW5kZWZpbmVkXHJcbn0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRyYW5zZmVyQXJyYXlJdGVtLCBtb3ZlSXRlbUluQXJyYXksIENka0RyYWdEcm9wLCBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFhWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQG5nLW5lc3QvdWkvYmFzZS1mb3JtJztcclxuaW1wb3J0IHsgWEkxOG5TZXJ2aWNlLCBYSTE4blRyYW5zZmVyIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IFhUcmVlTm9kZSB9IGZyb20gJ0BuZy1uZXN0L3VpL3RyZWUnO1xyXG5pbXBvcnQgeyBYVGFibGVDb2x1bW4sIFhUYWJsZUNvbXBvbmVudCwgWFRhYmxlSGVhZENoZWNrYm94IH0gZnJvbSAnQG5nLW5lc3QvdWkvdGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hUcmFuc2ZlclByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmFuc2Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJhbnNmZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1hWYWx1ZUFjY2Vzc29yKFhUcmFuc2ZlckNvbXBvbmVudCldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVHJhbnNmZXJDb21wb25lbnQgZXh0ZW5kcyBYVHJhbnNmZXJQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2xlZnRUYWJsZUNvbScpIGxlZnRUYWJsZUNvbT86IFhUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdyaWdodFRhYmxlQ29tJykgcmlnaHRUYWJsZUNvbT86IFhUYWJsZUNvbXBvbmVudDtcclxuICBub2RlczogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgbGVmdDogWFRyYW5zZmVyU291cmNlID0ge1xyXG4gICAgbGlzdDogW10sXHJcbiAgICBzZWFyY2hMaXN0OiBbXSxcclxuICAgIGNoZWNrZWRDb3VudDogMCxcclxuICAgIGRpcmVjdGlvbjogJ2xlZnQnLFxyXG4gICAgZGlzYWJsZWRCdXR0b246IHRydWVcclxuICB9O1xyXG4gIHJpZ2h0OiBYVHJhbnNmZXJTb3VyY2UgPSB7XHJcbiAgICBsaXN0OiBbXSxcclxuICAgIHNlYXJjaExpc3Q6IFtdLFxyXG4gICAgY2hlY2tlZENvdW50OiAwLFxyXG4gICAgZGlyZWN0aW9uOiAncmlnaHQnLFxyXG4gICAgZGlzYWJsZWRCdXR0b246IHRydWVcclxuICB9O1xyXG4gIHNlYXJjaElucHV0OiBzdHJpbmcgPSAnJztcclxuICBzZWFyY2hJbnB1dExlZnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc2VhcmNoSW5wdXRSaWdodENoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBzZWFyY2hEZWJvdW5jZVRpbWUgPSAyMDA7XHJcbiAgbG9jYWxlOiBYSTE4blRyYW5zZmVyID0ge307XHJcbiAgcHJpdmF0ZSBnZXQgbG9jYWxUaXRsZSgpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGUudHJlZVRpdGxlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlLmxpc3RUaXRsZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICB0cmVlQWN0aXZhdGVkSWQ6IGFueVtdID0gW107XHJcbiAgdGFibGVEYXRhOiBYVHJhbnNmZXJOb2RlW10gPSBbXTtcclxuICB0YWJsZUNoZWNrYm94Q29sdW1uPzogWFRhYmxlQ29sdW1uO1xyXG4gIGlzT2JqZWN0QXJyYXkgPSBmYWxzZTtcclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKFhJc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZCA9IFsuLi52YWx1ZV07XHJcbiAgICAgIGlmIChYSXNPYmplY3RBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmlzT2JqZWN0QXJyYXkgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldExpc3QodGhpcy5ub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHgpID0+IHguaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogWENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFRpdGxlcygpO1xyXG4gICAgdGhpcy5zZXRMaXN0U3R5bGUoKTtcclxuICAgIHRoaXMuc2V0SGlkZGVuQ2hlY2tBbGwoKTtcclxuICAgIHRoaXMuZ2V0VGFibGVDaGVja0NvbHVtbigpO1xyXG4gICAgdGhpcy5zZXRGb290ZXJUcGwoKTtcclxuICAgIHRoaXMuc2V0VGFibGVIZWFkU2VhcmNoVHBsKCk7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoeCkgPT4geC50cmFuc2ZlciBhcyBYSTE4blRyYW5zZmVyKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHg7XHJcbiAgICAgICAgWElzRW1wdHkodGhpcy50aXRsZXMpICYmIHRoaXMuc2V0VGl0bGVzKCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hJbnB1dExlZnRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoSW5wdXRDaGFuZ2UodGhpcy5sZWZ0KTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnNlYXJjaElucHV0UmlnaHRDaGFuZ2VcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuX3VuU3ViamVjdCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U2VhcmNoSW5wdXRDaGFuZ2UodGhpcy5yaWdodCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBjaGFuZ2VzO1xyXG4gICAgWElzQ2hhbmdlKGRhdGEpICYmIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaElucHV0Q2hhbmdlKHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoc291cmNlLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXRMZWZ0Q2hhbmdlLm5leHQoc291cmNlLnNlYXJjaElucHV0ISk7XHJcbiAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgdGhpcy5zZWFyY2hJbnB1dFJpZ2h0Q2hhbmdlLm5leHQoc291cmNlLnNlYXJjaElucHV0ISk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWFyY2hJbnB1dENoYW5nZShzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZChzb3VyY2Uuc2VhcmNoSW5wdXQpKSByZXR1cm47XHJcbiAgICBpZiAoWElzRW1wdHkoc291cmNlLnNlYXJjaElucHV0KSkge1xyXG4gICAgICBzb3VyY2UubGlzdCA9IFsuLi5zb3VyY2Uuc2VhcmNoTGlzdCFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gc291cmNlLnNlYXJjaExpc3Q/LmZpbHRlcigoeCkgPT4geC5sYWJlbC5pbmRleE9mKHNvdXJjZS5zZWFyY2hJbnB1dCkgPj0gMCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoTGlzdCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maWx0ZXIoKHgpID0+IHgubGFiZWwuaW5kZXhPZihzb3VyY2Uuc2VhcmNoSW5wdXQpID49IDApITtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kUGFyZW50ID0gKGl0ZW06IFhUcmFuc2Zlck5vZGUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGlkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IHNvdXJjZS5zZWFyY2hMaXN0Py5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLnBpZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiAhcGFyZW50cy5zb21lKCh4KSA9PiB4LmlkID09PSBwYXJlbnQhLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICBmaW5kUGFyZW50KHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNlYXJjaExpc3QpIHtcclxuICAgICAgICAgICAgICBmaW5kUGFyZW50KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5saXN0ID0gWy4uLnNlYXJjaExpc3QsIC4uLnBhcmVudHNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KHRoaXMudHlwZSwgc291cmNlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrZWRBbGxDaGFuZ2UoJGV2ZW50OiBib29sZWFuLCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGxpc3Q6IFhUcmFuc2Zlck5vZGVbXSA9IChzb3VyY2UubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCkgYXMgWFRyYW5zZmVyTm9kZVtdKS5tYXAoKHgpID0+IHtcclxuICAgICAgeC5jaGVja2VkID0gJGV2ZW50O1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyZWVBY3RpdmF0ZWRJZCA9ICRldmVudCA/IHNvdXJjZS5saXN0IS5tYXAoKHgpID0+IHguaWQpISA6IHNvdXJjZS5saXN0IS5maWx0ZXIoKHgpID0+IHguZGlzYWJsZWQpLm1hcCgoeCkgPT4geC5pZCk7XHJcbiAgICB9XHJcbiAgICBzb3VyY2UuY2hlY2tlZENvdW50ID0gJGV2ZW50ID8gbGlzdC5sZW5ndGggOiAwO1xyXG4gICAgc291cmNlLmluZGV0ZXJtaW5hdGUgPSAkZXZlbnQ7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHNvdXJjZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja2VkQ2hhbmdlKCRldmVudDogYm9vbGVhbiwgc291cmNlOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmICghJGV2ZW50KSAoc291cmNlLmNoZWNrZWRDb3VudCBhcyBudW1iZXIpLS07XHJcbiAgICBlbHNlIChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikrKztcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbW92ZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGlmIChmcm9tLmRpc2FibGVkQnV0dG9uKSByZXR1cm47XHJcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICBjYXNlICdsaXN0JzpcclxuICAgICAgICB0aGlzLm1vdmVMaXN0KGZyb20sIHRvKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndHJlZSc6XHJcbiAgICAgICAgdGhpcy5tb3ZlVHJlZShmcm9tLCB0byk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLm1vdmVUYWJsZShmcm9tLCB0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVMaXN0KGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQpITtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIGxldCBpbmRleCA9IGZyb20ubGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgIHguY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShmcm9tLmxpc3QhLCB0by5saXN0ISwgaW5kZXgsIGopO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2gpIHtcclxuICAgICAgICBpbmRleCA9IGZyb20uc2VhcmNoTGlzdD8uaW5kZXhPZih4KSBhcyBudW1iZXI7XHJcbiAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oZnJvbS5zZWFyY2hMaXN0ISwgdG8uc2VhcmNoTGlzdCEsIGluZGV4LCBqKTtcclxuICAgICAgfVxyXG4gICAgICBqKys7XHJcbiAgICB9KTtcclxuICAgIGZyb20ubGlzdCA9IFsuLi5mcm9tLmxpc3QhXTtcclxuICAgIHRvLmxpc3QgPSBbLi4udG8ubGlzdCFdO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVUcmVlKGZyb206IFhUcmFuc2ZlclNvdXJjZSwgdG86IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgbGV0IGNoZWNrZWRJdGVtczogWFRyYW5zZmVyTm9kZVtdID0gW107XHJcbiAgICBpZiAodG8uZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgIGNoZWNrZWRJdGVtcyA9IGZyb20ubGlzdD8uZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCAmJiAhWElzRW1wdHkodGhpcy50cmVlQWN0aXZhdGVkSWQpICYmIHRoaXMudHJlZUFjdGl2YXRlZElkLmluY2x1ZGVzKHguaWQpKSE7XHJcbiAgICAgIGNoZWNrZWRJdGVtcy5mb3JFYWNoKCh4OiBYVHJlZU5vZGUpID0+IHtcclxuICAgICAgICB4LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB4LmNoYW5nZSAmJiB4LmNoYW5nZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdG8ubGlzdD8udW5zaGlmdChcclxuICAgICAgICAuLi5jaGVja2VkSXRlbXMubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICBsZXQgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0cmVlJywgZnJvbSk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tlZEl0ZW1zID0gWFJlbW92ZShmcm9tLmxpc3QhLCAoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkISk7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaCkge1xyXG4gICAgICAgIFhSZW1vdmUoZnJvbS5zZWFyY2hMaXN0ISwgKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCEpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgY2hlY2tlZEl0ZW1zKSB7XHJcbiAgICAgICAgbGV0IG5vZGU6IFhUcmVlTm9kZSA9IHRvLmxpc3Q/LmZpbmQoKHgpID0+IHguaWQgPT09IGl0ZW0uaWQpITtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBub2RlLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLnRyZWVBY3RpdmF0ZWRJZC5maW5kSW5kZXgoKHgpID0+IHggPT09IG5vZGUuaWQpO1xyXG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZUFjdGl2YXRlZElkLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbm9kZS5jaGFuZ2UgJiYgbm9kZS5jaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RyZWUnLCB0byk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCdsaXN0JywgZnJvbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoZnJvbSwgdG8pO1xyXG4gICAgdGhpcy5zZXRMaXN0Q291bnQoJ2xpc3QnLCBmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vdmVUYWJsZShmcm9tOiBYVHJhbnNmZXJTb3VyY2UsIHRvOiBYVHJhbnNmZXJTb3VyY2UpIHtcclxuICAgIGxldCBjaGVja2VkSXRlbXM6IFhUcmFuc2Zlck5vZGVbXSA9IFtdO1xyXG4gICAgaWYgKHRvLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBmcm9tLmxpc3Q/LmZpbHRlcigoeCkgPT4gIXguZGlzYWJsZWQgJiYgeC5jaGVja2VkKSE7XHJcbiAgICAgIHRvLmxpc3QgPSBbXHJcbiAgICAgICAgLi4uY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICB4LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHguY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJlcy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC4uLnRvLmxpc3QhXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBmcm9tKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCB0byk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2VkSXRlbXMgPSBYUmVtb3ZlKGZyb20ubGlzdCEsICh4KSA9PiAheC5kaXNhYmxlZCAmJiB4LmNoZWNrZWQhKTtcclxuICAgICAgY29uc3QgaWRzID0gY2hlY2tlZEl0ZW1zLm1hcCgoeCkgPT4geC5pZCk7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdG8ubGlzdCEpIHtcclxuICAgICAgICBpZiAoaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZnJvbS5saXN0ID0gWy4uLmZyb20ubGlzdCFdO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi50by5saXN0IV07XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHRvKTtcclxuICAgICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ2xpc3QnLCBmcm9tKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0TGlzdENvdW50KCd0YWJsZScsIGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZEFsbChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKGZyb20sIHRvKTtcclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdChmcm9tLCB0byk7XHJcbiAgICB0aGlzLnNldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wQ2RrKGV2ZW50OiBDZGtEcmFnRHJvcDxYVHJhbnNmZXJOb2RlW10gfCB1bmRlZmluZWQsIGFueT4pIHtcclxuICAgIGNvbnN0IGV2ID0gZXZlbnQgYXMgQ2RrRHJhZ0Ryb3A8WFRyYW5zZmVyTm9kZVtdPjtcclxuICAgIGlmIChldi5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXYuY29udGFpbmVyKSB7XHJcbiAgICAgIG1vdmVJdGVtSW5BcnJheShldi5jb250YWluZXIuZGF0YSwgZXYucHJldmlvdXNJbmRleCwgZXYuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGV2LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsIGV2LmNvbnRhaW5lci5kYXRhLCBldi5wcmV2aW91c0luZGV4LCBldi5jdXJyZW50SW5kZXgpO1xyXG4gICAgICB0aGlzLnNldENoZWNrZWRDb3VudCgnbGlzdCcsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgIHRoaXMuc2V0Q2hlY2tlZEFsbCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnNldExpc3RDb3VudCgnbGlzdCcsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U2VhcmNoTGlzdCh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgdGhpcy5zZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJlZGljYXRlKGl0ZW06IENka0RyYWc8WFRyYW5zZmVyTm9kZT4pIHtcclxuICAgIHJldHVybiAhaXRlbS5kYXRhLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeU5vZGUoX2luZGV4OiBudW1iZXIsIGl0ZW06IFhUcmFuc2Zlck5vZGUpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc2V0TGlzdENvdW50KHR5cGU6IFhUcmFuc2ZlclR5cGUgPSAnbGlzdCcsIC4uLnNvdXJjZXM6IFhUcmFuc2ZlclNvdXJjZVtdKSB7XHJcbiAgICBpZiAoWydsaXN0JywgJ3RyZWUnXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RhYmxlJykge1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICAgIGlmIChzb3VyY2UuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHRoaXMudGFibGVUb3RhbCAtIHRoaXMucmlnaHQubGlzdCEubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNvdXJjZS5jb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblRyZWVOb2RlQ2xpY2soX25vZGU6IFhUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQ291bnQoJ3RyZWUnLCB0aGlzLmxlZnQpO1xyXG4gICAgdGhpcy5zZXRDaGVja2VkQWxsKHRoaXMubGVmdCk7XHJcbiAgICB0aGlzLnNldEJ1dHRvbkRpc2FibGVkKHRoaXMubGVmdCk7XHJcbiAgfVxyXG5cclxuICBvblRhYmxlQ2hlY2tlZFJvdyhyb3c6IFhUcmFuc2Zlck5vZGUsIHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVDaGVja2JveENvbHVtbikgcmV0dXJuO1xyXG4gICAgbGV0IGNoZWNrZWQgPSByb3dbdGhpcy50YWJsZUNoZWNrYm94Q29sdW1uLmlkXTtcclxuICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KCd0YWJsZScsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICB9XHJcblxyXG4gIG9uVGFibGVDaGVja2VkQWxsKHJvdzogWFRhYmxlSGVhZENoZWNrYm94LCBzb3VyY2U6IFhUcmFuc2ZlclNvdXJjZSkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4pIHJldHVybjtcclxuICAgIGxldCBjaGVja2VkID0gcm93LmNoZWNrYm94W3RoaXMudGFibGVDaGVja2JveENvbHVtbi5pZF07XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZS5saXN0ISkge1xyXG4gICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENoZWNrZWRDb3VudCgndGFibGUnLCBzb3VyY2UpO1xyXG4gICAgdGhpcy5zZXRCdXR0b25EaXNhYmxlZChzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgb25JbnZlcnNlKHNvdXJjZTogWFRyYW5zZmVyU291cmNlKSB7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZS5saXN0ISkge1xyXG4gICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSAhaXRlbS5jaGVja2VkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdHlwZSA9IGAke3RoaXMudHlwZX1gIGFzIFhUcmFuc2ZlclR5cGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3RyZWUnICYmIHNvdXJjZS5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgdHlwZSA9ICdsaXN0JztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q2hlY2tlZENvdW50KHR5cGUsIHNvdXJjZSk7XHJcbiAgICB0aGlzLnNldENoZWNrZWRBbGwoc291cmNlKTtcclxuICAgIHRoaXMuc2V0QnV0dG9uRGlzYWJsZWQoc291cmNlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGFibGVDaGVja0NvbHVtbigpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgIT09ICd0YWJsZScgfHwgWElzRW1wdHkodGhpcy50YWJsZUNvbHVtbnMpKSByZXR1cm47XHJcbiAgICB0aGlzLnRhYmxlQ2hlY2tib3hDb2x1bW4gPSB0aGlzLnRhYmxlQ29sdW1ucz8uZmluZCgoeCkgPT4geC5yb3dDaGVja2VkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2hlY2tlZEFsbCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKChzb3VyY2UuY2hlY2tlZENvdW50IGFzIG51bWJlcikgPiAwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5jaGVja2VkQ291bnQgPT09IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIHNvdXJjZS5jaGVja2VkQWxsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICAgIHNvdXJjZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgICBzb3VyY2UuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENoZWNrZWRDb3VudCh0eXBlOiBYVHJhbnNmZXJUeXBlID0gJ2xpc3QnLCAuLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcclxuICAgICAgaWYgKFsndGFibGUnLCAnbGlzdCddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgc291cmNlLmNoZWNrZWRDb3VudCA9IHNvdXJjZS5saXN0Py5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkICYmIHguY2hlY2tlZCkubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0cmVlJykge1xyXG4gICAgICAgIHNvdXJjZS5jaGVja2VkQ291bnQgPSBzb3VyY2UubGlzdD8uZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+ICF4LmRpc2FibGVkICYmICFYSXNFbXB0eSh0aGlzLnRyZWVBY3RpdmF0ZWRJZCkgJiYgdGhpcy50cmVlQWN0aXZhdGVkSWQuaW5jbHVkZXMoeC5pZClcclxuICAgICAgICApLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCdXR0b25EaXNhYmxlZCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHNvdXJjZS5kaXNhYmxlZEJ1dHRvbiA9IHNvdXJjZS5jaGVja2VkQ291bnQgPT09IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNPYmplY3RBcnJheSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yaWdodC5saXN0ITtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJpZ2h0Lmxpc3Q/Lm1hcCgoeCkgPT4geC5pZCkhO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VhcmNoTGlzdCguLi5zb3VyY2VzOiBYVHJhbnNmZXJTb3VyY2VbXSkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoKSB7XHJcbiAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgICAgaWYgKFhJc0VtcHR5KHNvdXJjZS5zZWFyY2hJbnB1dCkpIHtcclxuICAgICAgICAgIHNvdXJjZS5zZWFyY2hMaXN0ID0gWy4uLihzb3VyY2UubGlzdCBhcyBYVHJhbnNmZXJOb2RlW10pXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0YWJsZScpIHtcclxuICAgICAgdGhpcy5nZXRUYWJsZURhdGEoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgWFNldERhdGE8WFRyYW5zZmVyTm9kZT4odGhpcy5kYXRhLCB0aGlzLl91blN1YmplY3QpLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICB0aGlzLnNldExpc3QoeCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TGlzdChkYXRhOiBYVHJhbnNmZXJOb2RlW10pIHtcclxuICAgIGlmIChYSXNFbXB0eShkYXRhKSkgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbGlzdCc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgaWYgKCFYSXNFbXB0eSh0aGlzLnZhbHVlcykpIHtcclxuICAgICAgICAgIHRoaXMubGVmdC5saXN0ID0gdGhpcy5ub2Rlcy5maWx0ZXIoKHgpID0+IHRoaXMudmFsdWVzLmluZGV4T2YoeC5pZCkgPCAwKTtcclxuICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IHRoaXMubm9kZXMuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpID49IDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0cmVlJzpcclxuICAgICAgICB0aGlzLm5vZGVzID0gZGF0YTtcclxuICAgICAgICB0aGlzLnNldFRyZWVOb2RlRGlzYWJsZWQoKTtcclxuICAgICAgICB0aGlzLmxlZnQubGlzdCA9IFsuLi50aGlzLm5vZGVzXTtcclxuICAgICAgICBpZiAoIVhJc0VtcHR5KHRoaXMudmFsdWVzKSkge1xyXG4gICAgICAgICAgdGhpcy5yaWdodC5saXN0ID0gdGhpcy5ub2Rlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB0aGlzLnZhbHVlcy5pbmRleE9mKHguaWQpID49IDApXHJcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgcmVzID0geyAuLi54IH07XHJcbiAgICAgICAgICAgICAgcmVzLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0KHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0Q291bnQodGhpcy50eXBlLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRUYWJsZURhdGFEaXNhYmxlZCgpO1xyXG4gICAgICAgIHRoaXMubGVmdC5saXN0ID0gWy4uLnRoaXMubm9kZXNdO1xyXG4gICAgICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc09iamVjdEFycmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHQubGlzdCA9IFtcclxuICAgICAgICAgICAgICAuLi50aGlzLnZhbHVlLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IHsgLi4ueCB9O1xyXG4gICAgICAgICAgICAgICAgcmVzLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXMuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yaWdodC5saXN0ID0gWy4uLnRoaXMudmFsdWVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFNlYXJjaExpc3QodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgICB0aGlzLnNldExpc3RDb3VudCh0aGlzLnR5cGUsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZURhdGEoKSB7XHJcbiAgICBpZiAoWElzRnVuY3Rpb24odGhpcy5kYXRhKSkge1xyXG4gICAgICAodGhpcy5kYXRhIGFzIEZ1bmN0aW9uKSh0aGlzLnRhYmxlSW5kZXgsIHRoaXMudGFibGVTaXplLCB0aGlzLnRhYmxlUXVlcnkpLnN1YnNjcmliZSgoeDogWFJlc3VsdExpc3Q8WFRyYW5zZmVyTm9kZT4pID0+IHtcclxuICAgICAgICB0aGlzLnRhYmxlVG90YWwgPSB4LnRvdGFsITtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHgubGlzdCE7XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KHgubGlzdCEpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGl0bGVzKCkge1xyXG4gICAgbGV0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLnRpdGxlcykpIHtcclxuICAgICAgdGl0bGVzID0gW3RoaXMubG9jYWxUaXRsZSEsIHRoaXMubG9jYWxlLnNlbGVjdGVkVGl0bGUhXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRpdGxlcyA9IHRoaXMudGl0bGVzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAwKSB0aGlzLmxlZnQudGl0bGUgPSB0aXRsZXNbMF07XHJcbiAgICBpZiAodGl0bGVzLmxlbmd0aCA+IDEpIHRoaXMucmlnaHQudGl0bGUgPSB0aXRsZXNbMV07XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldExpc3RTdHlsZSgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmxpc3RTdHlsZSkpIHJldHVybjtcclxuICAgIGxldCBzdHlsZXM6IG9iamVjdFtdID0gW107XHJcbiAgICBpZiAoWElzT2JqZWN0KHRoaXMubGlzdFN0eWxlKSkge1xyXG4gICAgICBzdHlsZXMgPSBbdGhpcy5saXN0U3R5bGUsIHRoaXMubGlzdFN0eWxlXTtcclxuICAgIH0gZWxzZSBpZiAoWElzT2JqZWN0QXJyYXkodGhpcy5saXN0U3R5bGUpKSB7XHJcbiAgICAgIHN0eWxlcyA9IHRoaXMubGlzdFN0eWxlIGFzIG9iamVjdFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAwKSB0aGlzLmxlZnQubGlzdFN0eWxlID0gc3R5bGVzWzBdO1xyXG4gICAgaWYgKHN0eWxlcy5sZW5ndGggPiAxKSB0aGlzLnJpZ2h0Lmxpc3RTdHlsZSA9IHN0eWxlc1sxXTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VHJlZU5vZGVEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpICYmIHRoaXMubm9kZXMpIHtcclxuICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZURhdGFEaXNhYmxlZCgpIHtcclxuICAgIGlmICghWElzRW1wdHkodGhpcy52YWx1ZXMpICYmIHRoaXMubm9kZXMpIHtcclxuICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLm5vZGVzKSB7XHJcbiAgICAgICAgbGV0IGhhc0luID0gdGhpcy52YWx1ZXMuaW5kZXhPZihpdGVtLmlkKSA+PSAwO1xyXG4gICAgICAgIGl0ZW0uZGlzYWJsZWQgPSBoYXNJbjtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBoYXNJbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRIaWRkZW5DaGVja0FsbCgpIHtcclxuICAgIGlmIChYSXNFbXB0eSh0aGlzLmhpZGRlbkNoZWNrQWxsKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQ2hlY2tBbGwhLmxlbmd0aCA+IDAgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsIVswXSkpIHRoaXMubGVmdC5oaWRkZW5DaGVja0FsbCA9IHRoaXMuaGlkZGVuQ2hlY2tBbGwhWzBdO1xyXG4gICAgaWYgKHRoaXMuaGlkZGVuQ2hlY2tBbGwhLmxlbmd0aCA+IDEgJiYgWElzQm9vbGVhbih0aGlzLmhpZGRlbkNoZWNrQWxsIVsxXSkpIHRoaXMucmlnaHQuaGlkZGVuQ2hlY2tBbGwgPSB0aGlzLmhpZGRlbkNoZWNrQWxsIVsxXTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Rm9vdGVyVHBsKCkge1xyXG4gICAgaWYgKFhJc1VuZGVmaW5lZCh0aGlzLmZvb3RlclRwbCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmZvb3RlclRwbCEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxlZnQuZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwhWzBdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9vdGVyVHBsIS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMucmlnaHQuZm9vdGVyVHBsID0gdGhpcy5mb290ZXJUcGwhWzFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRUYWJsZUhlYWRTZWFyY2hUcGwoKSB7XHJcbiAgICBpZiAoWElzVW5kZWZpbmVkKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGFibGVIZWFkU2VhcmNoVHBsIS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGVmdC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCFbMF07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJsZUhlYWRTZWFyY2hUcGwhLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5yaWdodC50YWJsZUhlYWRTZWFyY2hUcGwgPSB0aGlzLnRhYmxlSGVhZFNlYXJjaFRwbCFbMV07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI3RyYW5zZmVyIGNsYXNzPVwieC10cmFuc2ZlclwiIGNka0Ryb3BMaXN0R3JvdXAgW25nQ2xhc3NdPVwiY2xhc3NNYXBcIj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cImxlZnQuZm9vdGVyVHBsXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlVGl0bGVUcGw7IGNvbnRleHQ6IHsgc291cmNlOiBsZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwibGVmdC5saXN0U3R5bGUhXCIgY2xhc3M9XCJ4LXRyYW5zZmVyLWxpc3RcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiXHJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJsZWZ0Lmxpc3RcIlxyXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcgJiYgdHlwZSA9PT0gJ2xpc3QnXCJcclxuICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cIngtdHJhbnNmZXItZHJvcGxpc3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cIngtdHJhbnNmZXItaXRlbVwiICpuZ0Zvcj1cImxldCBub2RlIG9mIGxlZnQubGlzdDsgdHJhY2tCeTogdHJhY2tCeU5vZGVcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3VyY2VOb2RlVHBsOyBjb250ZXh0OiB7IG5vZGU6IG5vZGUsIHNvdXJjZTogbGVmdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHgtdHJlZVxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0cmVlJ1wiXHJcbiAgICAgICAgICBbZGF0YV09XCJsZWZ0Lmxpc3QhXCJcclxuICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICBhbGxvd01hbnlBY3RpdmF0ZWRcclxuICAgICAgICAgIFsoYWN0aXZhdGVkSWQpXT1cInRyZWVBY3RpdmF0ZWRJZFwiXHJcbiAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uVHJlZU5vZGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgIFtsYWJlbFRwbF09XCJ0cmVlTGFiZWxUcGxcIlxyXG4gICAgICAgID48L3gtdHJlZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyZWVMYWJlbFRwbCBsZXQtbm9kZT1cIiRub2RlXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdHJlZS1sYWJlbFwiIHgta2V5d29yZCBbdGV4dF09XCJsZWZ0LnNlYXJjaElucHV0IVwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8eC10YWJsZVxyXG4gICAgICAgICAgI2xlZnRUYWJsZUNvbVxyXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIlxyXG4gICAgICAgICAgW2RhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cInRhYmxlQ29sdW1ucyFcIlxyXG4gICAgICAgICAgWyhzaXplKV09XCJ0YWJsZVNpemVcIlxyXG4gICAgICAgICAgWyhpbmRleCldPVwidGFibGVJbmRleFwiXHJcbiAgICAgICAgICAoaW5kZXhDaGFuZ2UpPVwiZ2V0VGFibGVEYXRhKClcIlxyXG4gICAgICAgICAgW3F1ZXJ5XT1cInRhYmxlUXVlcnlcIlxyXG4gICAgICAgICAgW3RvdGFsXT1cInRhYmxlVG90YWxcIlxyXG4gICAgICAgICAgKGFjdGl2YXRlZFJvd0NoYW5nZSk9XCJvblRhYmxlQ2hlY2tlZFJvdygkZXZlbnQsIGxlZnQpXCJcclxuICAgICAgICAgIChoZWFkQ2hlY2tib3hDaGFuZ2UpPVwib25UYWJsZUNoZWNrZWRBbGwoJGV2ZW50LCBsZWZ0KVwiXHJcbiAgICAgICAgICBoaWRkZW5XcmFwQm9yZGVyXHJcbiAgICAgICAgICBoaWRkZW5QYWdpbmF0aW9uQm9yZGVyXHJcbiAgICAgICAgICBzaG93RWxsaXBzaXM9XCJmYWxzZVwiXHJcbiAgICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgICBwYWdpbmF0aW9uUG9zaXRpb249XCJib3R0b20tY2VudGVyXCJcclxuICAgICAgICAgIGFsbG93U2VsZWN0Um93PVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwibGVmdC50YWJsZUhlYWRTZWFyY2hUcGxcIlxyXG4gICAgICAgID48L3gtdGFibGU+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIiAqbmdJZj1cImxlZnQuZm9vdGVyVHBsXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsZWZ0LmZvb3RlclRwbDsgY29udGV4dDogeyAkc291cmNlOiBsZWZ0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLWJ1dHRvbnNcIj5cclxuICAgIDx4LWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGljb249XCJmdG8tY2hldnJvbi1yaWdodFwiIFtkaXNhYmxlZF09XCJsZWZ0LmRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm1vdmUobGVmdCwgcmlnaHQpXCI+PC94LWJ1dHRvbj5cclxuICAgIDx4LWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGljb249XCJmdG8tY2hldnJvbi1sZWZ0XCIgW2Rpc2FibGVkXT1cInJpZ2h0LmRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm1vdmUocmlnaHQsIGxlZnQpXCI+PC94LWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1ib3hcIiBbY2xhc3MueC10cmFuc2Zlci1oYXMtZm9vdGVyXT1cInJpZ2h0LmZvb3RlclRwbFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNvdXJjZVRpdGxlVHBsOyBjb250ZXh0OiB7IHNvdXJjZTogcmlnaHQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbbmdTd2l0Y2hdPVwidHlwZVwiIFtuZ1N0eWxlXT1cInJpZ2h0Lmxpc3RTdHlsZSFcIiBjbGFzcz1cIngtdHJhbnNmZXItbGlzdFwiPlxyXG4gICAgICA8eC10YWJsZVxyXG4gICAgICAgICNyaWdodFRhYmxlQ29tXHJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIlxyXG4gICAgICAgIFtkYXRhXT1cInJpZ2h0Lmxpc3QhXCJcclxuICAgICAgICBbY29sdW1uc109XCJ0YWJsZUNvbHVtbnMhXCJcclxuICAgICAgICAoYWN0aXZhdGVkUm93Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkUm93KCRldmVudCwgcmlnaHQpXCJcclxuICAgICAgICAoaGVhZENoZWNrYm94Q2hhbmdlKT1cIm9uVGFibGVDaGVja2VkQWxsKCRldmVudCwgcmlnaHQpXCJcclxuICAgICAgICBoaWRkZW5XcmFwQm9yZGVyXHJcbiAgICAgICAgaGlkZGVuUGFnaW5hdGlvbkJvcmRlclxyXG4gICAgICAgIHNob3dQYWdpbmF0aW9uPVwiZmFsc2VcIlxyXG4gICAgICAgIHNob3dFbGxpcHNpcz1cImZhbHNlXCJcclxuICAgICAgICBzaG93VG90YWw9XCJmYWxzZVwiXHJcbiAgICAgICAgcGFnaW5hdGlvblBvc2l0aW9uPVwiYm90dG9tLWNlbnRlclwiXHJcbiAgICAgICAgYWxsb3dTZWxlY3RSb3c9XCJmYWxzZVwiXHJcbiAgICAgICAgW2hlYWRTZWFyY2hUcGxdPVwicmlnaHQudGFibGVIZWFkU2VhcmNoVHBsXCJcclxuICAgICAgPjwveC10YWJsZT5cclxuICAgICAgPHVsXHJcbiAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxyXG4gICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ2RrKCRldmVudClcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwicmlnaHQubGlzdFwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWcgfHwgKGRyYWcgJiYgdHlwZSAhPT0gJ2xpc3QnKVwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwicHJlZGljYXRlXCJcclxuICAgICAgICBjbGFzcz1cIngtdHJhbnNmZXItZHJvcGxpc3RcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwieC10cmFuc2Zlci1pdGVtXCIgKm5nRm9yPVwibGV0IG5vZGUgb2YgcmlnaHQubGlzdDsgdHJhY2tCeTogdHJhY2tCeU5vZGVcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJub2RlXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic291cmNlTm9kZVRwbDsgY29udGV4dDogeyBub2RlOiBub2RlLCBzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci1mb290ZXJcIiAqbmdJZj1cInJpZ2h0LmZvb3RlclRwbFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmlnaHQuZm9vdGVyVHBsOyBjb250ZXh0OiB7ICRzb3VyY2U6IHJpZ2h0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc291cmNlVGl0bGVUcGwgbGV0LXNvdXJjZT1cInNvdXJjZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LXRyYW5zZmVyLXRpdGxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC10cmFuc2Zlci10aXRsZS1sZWZ0XCI+XHJcbiAgICAgIDx4LWNoZWNrYm94XHJcbiAgICAgICAgKm5nSWY9XCJzb3VyY2UudGl0bGUgJiYgIXNvdXJjZS5oaWRkZW5DaGVja0FsbFwiXHJcbiAgICAgICAgW2RhdGFdPVwiW3RpdGxlVHBsID8gJycgOiBzb3VyY2UudGl0bGVdXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNvdXJjZS5jaGVja2VkQWxsXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja2VkQWxsQ2hhbmdlKCRldmVudCwgc291cmNlKVwiXHJcbiAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic291cmNlLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgIHNpbmdsZVxyXG4gICAgICA+PC94LWNoZWNrYm94PlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInNvdXJjZS50aXRsZSAmJiBzb3VyY2UuaGlkZGVuQ2hlY2tBbGxcIj57eyBzb3VyY2UudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgIDx4LWxpbmsgKm5nSWY9XCJpbnZlcnNlICYmIHR5cGUgPT09ICdsaXN0J1wiIGNsYXNzPVwieC10cmFuc2Zlci1pbnZlcnNlXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwib25JbnZlcnNlKHNvdXJjZSlcIj57e1xyXG4gICAgICAgICd0cmFuc2Zlci5pbnZlcnNlJyB8IHhJMThuXHJcbiAgICAgIH19PC94LWxpbms+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJ0aXRsZVRwbDsgY29udGV4dDogeyAkdGl0bGU6IHNvdXJjZS50aXRsZSwgJGNoZWNrZWRDb3VudDogc291cmNlLmNoZWNrZWRDb3VudCwgJGNvdW50OiBzb3VyY2UuY291bnQgfVwiXHJcbiAgICAgID48c3BhbiBjbGFzcz1cIngtdHJhbnNmZXItdG90YWxcIj57eyBzb3VyY2UuY2hlY2tlZENvdW50IH19IC8ge3sgc291cmNlLmNvdW50IH19PC9zcGFuPjwvbmctY29udGFpbmVyXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIngtdHJhbnNmZXItc2VhcmNoXCIgKm5nSWY9XCJzZWFyY2ggJiYgdHlwZSAhPT0gJ3RhYmxlJ1wiPlxyXG4gICAgPHgtaW5wdXQgaWNvbj1cImZ0by1zZWFyY2hcIiBbKG5nTW9kZWwpXT1cInNvdXJjZS5zZWFyY2hJbnB1dFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoSW5wdXRDaGFuZ2Uoc291cmNlKVwiIGNsZWFyYWJsZT48L3gtaW5wdXQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvdXJjZU5vZGVUcGwgbGV0LW5vZGU9XCJub2RlXCIgbGV0LXNvdXJjZT1cInNvdXJjZVwiPlxyXG4gIDx4LWNoZWNrYm94XHJcbiAgICBbZGF0YV09XCJbeyBpZDogbm9kZS5pZCwgbGFiZWw6IG5vZGVUcGwgPyBub2RlVHBsIDogbGFiZWxUcGwsIG5vZGU6IG5vZGUgfV1cIlxyXG4gICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJub2RlLmNoZWNrZWRcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tlZENoYW5nZSgkZXZlbnQsIHNvdXJjZSlcIlxyXG4gICAgc2luZ2xlXHJcbiAgPjwveC1jaGVja2JveD5cclxuICA8bmctdGVtcGxhdGUgI2xhYmVsVHBsPlxyXG4gICAgPHNwYW4geC1rZXl3b3JkIFt0ZXh0XT1cInNvdXJjZS5zZWFyY2hJbnB1dCFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|