ngx-tethys 17.0.2 → 17.0.4
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/CHANGELOG.md +23 -0
- package/autocomplete/autocomplete.component.d.ts +2 -5
- package/cascader/cascader.component.d.ts +9 -1
- package/cascader/cascader.service.d.ts +3 -0
- package/drag-drop/drag.directive.d.ts +1 -4
- package/drag-drop/drop-container.directive.d.ts +4 -5
- package/dropdown/dropdown-submenu.component.d.ts +3 -6
- package/esm2022/autocomplete/autocomplete.component.mjs +7 -14
- package/esm2022/button/button-group.component.mjs +2 -2
- package/esm2022/cascader/cascader.component.mjs +27 -5
- package/esm2022/cascader/cascader.service.mjs +33 -3
- package/esm2022/core/behaviors/disabled.mjs +2 -2
- package/esm2022/date-picker/abstract-picker.directive.mjs +3 -3
- package/esm2022/date-picker/base-picker.component.mjs +3 -2
- package/esm2022/drag-drop/drag.directive.mjs +3 -7
- package/esm2022/drag-drop/drop-container.directive.mjs +9 -7
- package/esm2022/dropdown/dropdown-submenu.component.mjs +7 -12
- package/esm2022/form/form.directive.mjs +3 -2
- package/esm2022/grid/thy-grid-item.component.mjs +7 -11
- package/esm2022/image/preview/image-preview.component.mjs +9 -13
- package/esm2022/input/input-count.component.mjs +9 -10
- package/esm2022/input/input-group.component.mjs +9 -9
- package/esm2022/nav/nav-item.directive.mjs +7 -13
- package/esm2022/nav/nav.component.mjs +8 -13
- package/esm2022/radio/button/radio-button.component.mjs +2 -2
- package/esm2022/radio/group/radio-group.component.mjs +6 -1
- package/esm2022/radio/radio.component.mjs +2 -2
- package/esm2022/resizable/resizable.directive.mjs +11 -14
- package/esm2022/resizable/resize-handle.component.mjs +8 -13
- package/esm2022/shared/directives/thy-drag-drop.directive.mjs +8 -8
- package/esm2022/space/space.component.mjs +7 -9
- package/esm2022/table/table-column.component.mjs +3 -2
- package/esm2022/table/table.component.mjs +11 -12
- package/esm2022/tabs/tabs.component.mjs +8 -10
- package/esm2022/time-picker/time-picker.utils.mjs +8 -8
- package/esm2022/util/helpers/helpers.mjs +10 -1
- package/esm2022/version.mjs +2 -2
- package/esm2022/watermark/watermark.directive.mjs +9 -14
- package/fesm2022/ngx-tethys-autocomplete.mjs +8 -14
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +2 -1
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +58 -6
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +2 -2
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +2 -2
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +9 -10
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +8 -11
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +2 -1
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-grid.mjs +6 -10
- package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +10 -12
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +13 -14
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +11 -21
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +6 -1
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +15 -22
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +8 -7
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +7 -8
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +12 -12
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +7 -9
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +8 -7
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-util.mjs +9 -0
- package/fesm2022/ngx-tethys-util.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +8 -13
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/grid/thy-grid-item.component.d.ts +3 -6
- package/image/preview/image-preview.component.d.ts +3 -6
- package/input/input-count.component.d.ts +2 -4
- package/input/input-group.component.d.ts +3 -4
- package/nav/nav-item.directive.d.ts +3 -6
- package/nav/nav.component.d.ts +3 -6
- package/package.json +1 -1
- package/resizable/resizable.directive.d.ts +2 -4
- package/resizable/resize-handle.component.d.ts +3 -6
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/shared/directives/thy-drag-drop.directive.d.ts +2 -4
- package/space/space.component.d.ts +2 -4
- package/table/table.component.d.ts +3 -3
- package/tabs/tabs.component.d.ts +2 -4
- package/util/helpers/helpers.d.ts +12 -0
- package/watermark/watermark.directive.d.ts +3 -6
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { InputCssPixel,
|
|
2
|
+
import { InputCssPixel, UpdateHostClassService } from 'ngx-tethys/core';
|
|
3
3
|
import { get, helpers, isString, keyBy, set } from 'ngx-tethys/util';
|
|
4
4
|
import { EMPTY, fromEvent, merge, Observable, of } from 'rxjs';
|
|
5
|
-
import { delay, startWith, switchMap
|
|
5
|
+
import { delay, startWith, switchMap } from 'rxjs/operators';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
7
|
import { CdkDrag, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
|
7
8
|
import { ViewportRuler } from '@angular/cdk/overlay';
|
|
8
9
|
import { normalizePassiveListenerOptions } from '@angular/cdk/platform';
|
|
9
10
|
import { DOCUMENT, isPlatformServer, NgClass, NgFor, NgIf, NgTemplateOutlet, NgStyle } from '@angular/common';
|
|
10
|
-
import { booleanAttribute, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Inject, Input, IterableDiffers, NgZone, numberAttribute, Output, PLATFORM_ID, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
11
|
+
import { booleanAttribute, ChangeDetectorRef, Component, ContentChild, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, inject, Inject, Input, IterableDiffers, NgZone, numberAttribute, Output, PLATFORM_ID, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
11
12
|
import { THY_TABLE_COLUMN_PARENT_COMPONENT, ThyTableColumnComponent } from './table-column.component';
|
|
12
13
|
import { ThyTableSortDirection } from './table.interface';
|
|
13
14
|
import { TableRowDragDisabledPipe } from './pipes/drag.pipe';
|
|
@@ -48,13 +49,12 @@ const css = {
|
|
|
48
49
|
tableScrollMiddle: 'thy-table-scroll-middle'
|
|
49
50
|
};
|
|
50
51
|
const passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });
|
|
51
|
-
const _MixinBase = mixinUnsubscribe(MixinBase);
|
|
52
52
|
/**
|
|
53
53
|
* 表格组件
|
|
54
54
|
* @name thy-table
|
|
55
55
|
* @order 10
|
|
56
56
|
*/
|
|
57
|
-
export class ThyTable
|
|
57
|
+
export class ThyTable {
|
|
58
58
|
get tableScrollElement() {
|
|
59
59
|
return this.elementRef.nativeElement.getElementsByClassName(css.tableBody)[0];
|
|
60
60
|
}
|
|
@@ -227,7 +227,6 @@ export class ThyTable extends _MixinBase {
|
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
229
|
constructor(elementRef, _differs, viewportRuler, updateHostClassService, document, platformId, ngZone, renderer, cdr) {
|
|
230
|
-
super();
|
|
231
230
|
this.elementRef = elementRef;
|
|
232
231
|
this._differs = _differs;
|
|
233
232
|
this.viewportRuler = viewportRuler;
|
|
@@ -237,6 +236,7 @@ export class ThyTable extends _MixinBase {
|
|
|
237
236
|
this.ngZone = ngZone;
|
|
238
237
|
this.renderer = renderer;
|
|
239
238
|
this.cdr = cdr;
|
|
239
|
+
this.destroyRef = inject(DestroyRef);
|
|
240
240
|
this.customType = customType;
|
|
241
241
|
this.model = [];
|
|
242
242
|
this.groups = [];
|
|
@@ -730,14 +730,14 @@ export class ThyTable extends _MixinBase {
|
|
|
730
730
|
this._setClass(true);
|
|
731
731
|
this.initialized = true;
|
|
732
732
|
merge(this.viewportRuler.change(200), of(null).pipe(delay(200)))
|
|
733
|
-
.pipe(
|
|
733
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
734
734
|
.subscribe(() => {
|
|
735
735
|
this._refreshColumns();
|
|
736
736
|
this.updateScrollClass();
|
|
737
737
|
this.cdr.detectChanges();
|
|
738
738
|
});
|
|
739
739
|
this.ngZone.runOutsideAngular(() => {
|
|
740
|
-
this.scroll$.pipe(
|
|
740
|
+
this.scroll$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
741
741
|
this.updateScrollClass();
|
|
742
742
|
});
|
|
743
743
|
});
|
|
@@ -773,7 +773,7 @@ export class ThyTable extends _MixinBase {
|
|
|
773
773
|
// Note: since Chrome 56 defaults document level `touchstart` listener to passive.
|
|
774
774
|
// The element `touchstart` listener is not passive by default
|
|
775
775
|
// We never call `preventDefault()` on it, so we're safe making it passive too.
|
|
776
|
-
passiveEventListenerOptions))).subscribe(subscriber)))),
|
|
776
|
+
passiveEventListenerOptions))).subscribe(subscriber)))), takeUntilDestroyed(this.destroyRef))
|
|
777
777
|
.subscribe(event => {
|
|
778
778
|
if (!this.draggable) {
|
|
779
779
|
event.stopPropagation();
|
|
@@ -794,7 +794,6 @@ export class ThyTable extends _MixinBase {
|
|
|
794
794
|
}
|
|
795
795
|
}
|
|
796
796
|
ngOnDestroy() {
|
|
797
|
-
super.ngOnDestroy();
|
|
798
797
|
this._destroyInvalidAttribute();
|
|
799
798
|
}
|
|
800
799
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyTable, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.ViewportRuler }, { token: i2.UpdateHostClassService }, { token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -804,7 +803,7 @@ export class ThyTable extends _MixinBase {
|
|
|
804
803
|
useExisting: ThyTable
|
|
805
804
|
},
|
|
806
805
|
UpdateHostClassService
|
|
807
|
-
], queries: [{ propertyName: "emptyTemplate", first: true, predicate: ["empty"], descendants: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "listOfColumnComponents", predicate: ThyTableColumnComponent }], viewQueries: [{ propertyName: "tableElementRef", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "rows", predicate: ["rows"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list\u6A21\u5F0F\u4E0B\u6CA1\u6709\u76F4\u63A5\u4F7F\u7528item\u6A21\u677F\uFF0C\u662F\u56E0\u4E3A\u4F7F\u7528\u4E86\u6A21\u677F\u5F71\u54CD\u4E86Angular\u7684\u4F9D\u8D56\u6811\uFF0C\u5BFC\u81F4CdkDragDrop\u6392\u5E8F\u5931\u6548\uFF0C\u76EE\u524D\u8FD9\u6837\u4FEE\u6539\u53EF\u4EE5\u6682\u65F6\u89E3\u51B3\u7EBF\u4E0A\u4E0D\u80FD\u6392\u5E8F\u7684\u95EE\u9898\uFF0CTree\u6A21\u5F0F\u7684\u6392\u5E8F\u6682\u65F6\u4E0D\u652F\u6301 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyDragDropDirective, selector: "[thyDragDrop]" }, { kind: "directive", type: 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: 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: ThyContextMenuDirective, selector: "[thyContextMenu]", outputs: ["thyContextMenu"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThySwitch, selector: "thy-switch", inputs: ["thyType", "thySize", "thyDisabled", "thyLoading"], outputs: ["thyChange"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyTableSkeleton, selector: "thy-table-skeleton", inputs: ["thyBorderRadius", "thyRowHeight", "thyAnimated", "thyAnimatedInterval", "thyPrimaryColor", "thySecondaryColor", "thyRowCount", "thyHeadless", "thyTheme", "thySize", "thyMinWidth", "thyColumns"] }, { kind: "component", type: ThyPagination, selector: "thy-pagination", inputs: ["thyPageIndex", "thyPageSize", "thyTotal", "thyCustomPages", "thyDisabled", "thyShowQuickJumper", "thyShowTotalPageCount", "thySize", "thyMaxCount", "thyMarginalCount", "thyRangeCount", "thyShowSizeChanger", "thyPageSizeOptions", "thyHideOnSinglePage", "thyShowTotal"], outputs: ["thyPageIndexChange", "thyPageChanged", "thyPageSizeChanged"] }, { kind: "pipe", type: TableIsValidModelValuePipe, name: "isValidModelValue" }, { kind: "pipe", type: TableRowDragDisabledPipe, name: "tableRowDragDisabled" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
806
|
+
], queries: [{ propertyName: "emptyTemplate", first: true, predicate: ["empty"], descendants: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "listOfColumnComponents", predicate: ThyTableColumnComponent }], viewQueries: [{ propertyName: "tableElementRef", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "rows", predicate: ["rows"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"thy-table-body\"\n cdkScrollable\n [ngClass]=\"{ 'thy-table-fixed': hasFixed, 'thy-table-bordered-theme': theme === 'bordered' && hasFixed }\">\n <table\n #table\n class=\"table\"\n [ngClass]=\"[className]\"\n [class.table-fixed]=\"thyLayoutFixed\"\n [class.table-draggable]=\"draggable\"\n [class.table-group]=\"mode === 'group'\"\n [style.min-width]=\"thyMinWidth\">\n <colgroup>\n <col *ngFor=\"let column of columns\" [width]=\"column.width\" [style.minWidth]=\"hasFixed ? column.width : column.minWidth\" />\n </colgroup>\n\n <thead *ngIf=\"!thyHeadless\">\n <tr>\n <th\n *ngFor=\"let column of columns\"\n [ngClass]=\"column.headerClassName\"\n [class.thy-table-column-sortable]=\"column.sortable\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n (click)=\"onColumnHeaderClick($event, column)\">\n <ng-container *ngIf=\"!column.headerTemplateRef\">\n <span>{{ column.title }}</span>\n </ng-container>\n <ng-container *ngIf=\"column.headerTemplateRef\">\n <ng-template [ngTemplateOutlet]=\"column.headerTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: column }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.sortable\">\n <thy-icon [ngClass]=\"['thy-table-column-sortable-icon', 'px-1', column.sortDirection]\" thyIconName=\"sort-vertical-tt\">\n </thy-icon>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <tbody\n *ngIf=\"loadingDone\"\n thyDragDrop\n cdkDropList\n [cdkDropListDisabled]=\"!draggable\"\n [cdkDropListSortPredicate]=\"dropListEnterPredicate\"\n (cdkDropListDropped)=\"onDragDropped($event)\">\n <!-- group -->\n <ng-container *ngIf=\"mode === 'group'\">\n <ng-container *ngFor=\"let group of groups\">\n <tr\n class=\"thy-table-group\"\n (click)=\"expandGroup(group)\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"group\"\n [cdkDragDisabled]=\"group | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragGroupStarted($event)\"\n (cdkDragEnded)=\"onDragGroupEnd($event)\">\n <td [attr.colspan]=\"columns.length\">\n <div class=\"thy-table-group-container\">\n <ng-container *ngIf=\"draggable && !(group | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n <thy-icon class=\"expand-icon\" [thyIconName]=\"group.expand ? 'angle-down' : 'angle-right'\"></thy-icon>\n <ng-container *ngIf=\"groupTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"></ng-template>\n </ng-container>\n </div>\n </td>\n </tr>\n <ng-container *ngIf=\"group.children?.length && group.expand\">\n <ng-container *ngFor=\"let row of group.children; trackBy: trackByFn; let i = index\">\n <ng-template\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- list\u6A21\u5F0F\u4E0B\u6CA1\u6709\u76F4\u63A5\u4F7F\u7528item\u6A21\u677F\uFF0C\u662F\u56E0\u4E3A\u4F7F\u7528\u4E86\u6A21\u677F\u5F71\u54CD\u4E86Angular\u7684\u4F9D\u8D56\u6811\uFF0C\u5BFC\u81F4CdkDragDrop\u6392\u5E8F\u5931\u6548\uFF0C\u76EE\u524D\u8FD9\u6837\u4FEE\u6539\u53EF\u4EE5\u6682\u65F6\u89E3\u51B3\u7EBF\u4E0A\u4E0D\u80FD\u6392\u5E8F\u7684\u95EE\u9898\uFF0CTree\u6A21\u5F0F\u7684\u6392\u5E8F\u6682\u65F6\u4E0D\u652F\u6301 -->\n <ng-container *ngIf=\"mode === 'list'\">\n <tr\n #rows\n *ngFor=\"let row of model; trackBy: trackByFn; let i = index\"\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: 0\n }\"></ng-template>\n </tr>\n </ng-container>\n\n <ng-container *ngIf=\"mode === 'tree'\">\n <ng-container *ngFor=\"let row of model; trackBy: trackByFn; let i = index\">\n <ng-template [ngTemplateOutlet]=\"trTemplate\" [ngTemplateOutletContext]=\"{ row: row, index: i, level: 0 }\"></ng-template>\n </ng-container>\n </ng-container>\n\n <ng-template #trTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <tr\n #rows\n class=\"thy-sortable-item\"\n cdkDrag\n [cdkDragPreviewClass]=\"dragPreviewClass\"\n [cdkDragData]=\"row\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n [cdkDragDisabled]=\"row | tableRowDragDisabled : thyDragDisabledPredicate\"\n [ngClass]=\"renderRowClassName(row, i)\"\n (click)=\"onRowClick($event, row)\"\n (thyContextMenu)=\"onRowContextMenu($event, row)\">\n <ng-template\n [ngTemplateOutlet]=\"tdsTemplate\"\n [ngTemplateOutletContext]=\"{\n row: row,\n index: i,\n level: level + 1\n }\"></ng-template>\n </tr>\n\n <ng-container *ngIf=\"mode === 'tree' && isExpanded(row)\">\n <ng-template\n *ngFor=\"let child of row[thyChildrenKey]; trackBy: trackByFn; let j = index\"\n [ngTemplateOutlet]=\"trTemplate\"\n [ngTemplateOutletContext]=\"{ row: child, index: j, level: level + 1 }\"></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #tdsTemplate let-row=\"row\" let-i=\"index\" let-level=\"level\">\n <td\n *ngFor=\"let column of columns; let j = index\"\n [ngClass]=\"column.className\"\n [class.thy-operation-links]=\"!!column.operational\"\n [class.thy-table-column-secondary]=\"!!column.secondary\"\n [class.thy-table-checkbox-column]=\"column.type === customType.checkbox\"\n [class.thy-table-fixed-column-left]=\"column.fixed === fixedDirection.left\"\n [class.thy-table-fixed-column-right]=\"column.fixed === fixedDirection.right\"\n [style.left.px]=\"column.left\"\n [style.right.px]=\"column.right\"\n [ngStyle]=\"mode === 'tree' && column.expand ? tdIndentComputed(level) : null\">\n <ng-container *ngIf=\"j === 0 && draggable && !(row | tableRowDragDisabled : thyDragDisabledPredicate)\">\n <thy-icon class=\"table-draggable-icon\" thyIconName=\"drag\"></thy-icon>\n </ng-container>\n\n <!--template-->\n <ng-container *ngIf=\"isTemplateRef(column.cellTemplateRef)\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.left.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-template [ngTemplateOutlet]=\"column.cellTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-template>\n </ng-container>\n\n <!--not template-->\n <ng-container *ngIf=\"!isTemplateRef(column.cellTemplateRef)\">\n <!-- default -->\n <ng-container *ngIf=\"column.model && !column.type\">\n <thy-icon\n class=\"tree-expand-icon cursor-pointer\"\n *ngIf=\"mode === 'tree' && column.expand\"\n [thyIconName]=\"isExpanded(row) ? 'angle-down' : 'angle-right'\"\n [style.visibility]=\"showExpand(row) ? 'visible' : 'hidden'\"\n [style.marginLeft.px]=\"iconIndentComputed(level)\"></thy-icon>\n <ng-container *ngIf=\"getModelValue(row, column.model) | isValidModelValue; else default\">\n {{ getModelValue(row, column.model) }}\n </ng-container>\n <ng-template #default>\n <div *ngIf=\"column.defaultText\" class=\"text-desc\">\n {{ column.defaultText }}\n </div>\n </ng-template>\n </ng-container>\n\n <!-- index -->\n <ng-container *ngIf=\"column.type === customType.index\">\n {{ i + 1 }}\n </ng-container>\n\n <!-- checkbox -->\n <ng-container *ngIf=\"column.type === customType.checkbox\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onCheckboxChange(row, column)\"\n (click)=\"onStopPropagation($event)\"\n [disabled]=\"column.disabled\" />\n </ng-container>\n\n <!-- radio -->\n <ng-container *ngIf=\"column.type === customType.radio\">\n <input\n type=\"radio\"\n [(ngModel)]=\"selectedRadioRow\"\n [value]=\"row\"\n [disabled]=\"column.disabled\"\n (click)=\"onStopPropagation($event)\"\n (change)=\"onRadioSelectChange($event, row)\" />\n </ng-container>\n\n <!-- switch -->\n <ng-container *ngIf=\"column.type === customType.switch\">\n <thy-switch\n [(ngModel)]=\"row[column.key]\"\n (ngModelChange)=\"onModelChange(row, column)\"\n [disabled]=\"column.disabled\"\n (thyChange)=\"onSwitchChange($event, row, column)\"></thy-switch>\n </ng-container>\n </ng-container>\n </td>\n </ng-template>\n </tbody>\n </table>\n\n <div *ngIf=\"loadingDone && model.length === 0 && groups.length === 0\" class=\"thy-table-empty clear-hover\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n <ng-template #defaultEmpty>\n <thy-empty\n [thyMessage]=\"emptyOptions.message\"\n [thyTranslationKey]=\"emptyOptions.translationKey\"\n [thyTranslationValues]=\"emptyOptions.translationValues\"\n [thyEntityName]=\"emptyOptions.entityName\"\n [thyEntityNameTranslateKey]=\"emptyOptions.entityNameTranslateKey\"\n [thyIconName]=\"emptyOptions.iconName\"\n [thySize]=\"emptyOptions.size\"\n [thyMarginTop]=\"emptyOptions.marginTop\"\n [thyTopAuto]=\"emptyOptions.topAuto\"\n [thyContainer]=\"emptyOptions.container\"></thy-empty>\n </ng-template>\n </div>\n\n <thy-table-skeleton\n *ngIf=\"!loadingDone\"\n [thyRowCount]=\"6\"\n [thyHeadless]=\"true\"\n [thyTheme]=\"theme\"\n [thySize]=\"size\"\n [thyMinWidth]=\"thyMinWidth\"\n [thyColumns]=\"skeletonColumns\">\n </thy-table-skeleton>\n\n <div class=\"thy-table-footer\" *ngIf=\"pagination.total > pagination.size\" [class.thy-table-footer-has-padding]=\"theme === 'default'\">\n <thy-pagination\n [thyPageIndex]=\"pagination.index\"\n [thyTotal]=\"pagination.total\"\n [thyPageSize]=\"pagination.size\"\n [thyPageSizeOptions]=\"pagination.sizeOptions\"\n [thyShowSizeChanger]=\"showSizeChanger\"\n [thyShowTotal]=\"showTotal\"\n (thyPageChanged)=\"onPageChange($event)\"\n (thyPageIndexChange)=\"onPageIndexChange($event)\"\n (thyPageSizeChanged)=\"onPageSizeChange($event)\"></thy-pagination>\n </div>\n</div>\n\n<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyDragDropDirective, selector: "[thyDragDrop]" }, { kind: "directive", type: 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: 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: ThyContextMenuDirective, selector: "[thyContextMenu]", outputs: ["thyContextMenu"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThySwitch, selector: "thy-switch", inputs: ["thyType", "thySize", "thyDisabled", "thyLoading"], outputs: ["thyChange"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyTableSkeleton, selector: "thy-table-skeleton", inputs: ["thyBorderRadius", "thyRowHeight", "thyAnimated", "thyAnimatedInterval", "thyPrimaryColor", "thySecondaryColor", "thyRowCount", "thyHeadless", "thyTheme", "thySize", "thyMinWidth", "thyColumns"] }, { kind: "component", type: ThyPagination, selector: "thy-pagination", inputs: ["thyPageIndex", "thyPageSize", "thyTotal", "thyCustomPages", "thyDisabled", "thyShowQuickJumper", "thyShowTotalPageCount", "thySize", "thyMaxCount", "thyMarginalCount", "thyRangeCount", "thyShowSizeChanger", "thyPageSizeOptions", "thyHideOnSinglePage", "thyShowTotal"], outputs: ["thyPageIndexChange", "thyPageChanged", "thyPageSizeChanged"] }, { kind: "pipe", type: TableIsValidModelValuePipe, name: "isValidModelValue" }, { kind: "pipe", type: TableRowDragDisabledPipe, name: "tableRowDragDisabled" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
808
807
|
}
|
|
809
808
|
__decorate([
|
|
810
809
|
InputCssPixel(),
|
|
@@ -972,4 +971,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
972
971
|
type: ContentChildren,
|
|
973
972
|
args: [ThyTableColumnComponent]
|
|
974
973
|
}] } });
|
|
975
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFlLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWtCLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEksT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsZUFBZSxFQUNmLE1BQU0sRUFDTixlQUFl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QU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFLRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBS0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRWtDLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbkMsc0JBQXNCO3NCQUR6QixlQUFlO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBJbnB1dENzc1BpeGVsLCBNaXhpbkJhc2UsIG1peGluVW5zdWJzY3JpYmUsIFRoeVVuc3Vic2NyaWJlLCBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIFNhZmVBbnkgfSBmcm9tICduZ3gtdGV0aHlzL3R5cGVzJztcbmltcG9ydCB7IGdldCwgaGVscGVycywgaXNTdHJpbmcsIGtleUJ5LCBzZXQgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1TZXJ2ZXIsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcbiAgICBJdGVyYWJsZUNoYW5nZXMsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE5nWm9uZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQsIFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCwgVGh5VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBQYWdlQ2hhbmdlZEV2ZW50LFxuICAgIFRoeU11bHRpU2VsZWN0RXZlbnQsXG4gICAgVGh5UGFnZSxcbiAgICBUaHlSYWRpb1NlbGVjdEV2ZW50LFxuICAgIFRoeVN3aXRjaEV2ZW50LFxuICAgIFRoeVRhYmxlU2tlbGV0b25Db2x1bW4sXG4gICAgVGh5VGFibGVEcmFnZ2FibGVFdmVudCxcbiAgICBUaHlUYWJsZUVtcHR5T3B0aW9ucyxcbiAgICBUaHlUYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlUm93RXZlbnQsXG4gICAgVGh5VGFibGVTb3J0RGlyZWN0aW9uLFxuICAgIFRoeVRhYmxlU29ydEV2ZW50XG59IGZyb20gJy4vdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJhZy5waXBlJztcbmltcG9ydCB7IFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy90YWJsZS5waXBlJztcbmltcG9ydCB7IFRoeVBhZ2luYXRpb24gfSBmcm9tICduZ3gtdGV0aHlzL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGh5VGFibGVTa2VsZXRvbiB9IGZyb20gJy4vdGFibGUtc2tlbGV0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRoeUVtcHR5IH0gZnJvbSAnbmd4LXRldGh5cy9lbXB0eSc7XG5pbXBvcnQgeyBUaHlTd2l0Y2ggfSBmcm9tICduZ3gtdGV0aHlzL3N3aXRjaCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeURyYWdEcm9wRGlyZWN0aXZlLCBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUgfSBmcm9tICcuL2VudW1zJztcblxuZXhwb3J0IHR5cGUgVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JyB8ICdib3JkZXJlZCcgfCAnYm94ZWQnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZU1vZGUgPSAnbGlzdCcgfCAnZ3JvdXAnIHwgJ3RyZWUnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVNpemUgPSAnbWQnIHwgJ3NtJyB8ICd4cycgfCAnbGcnIHwgJ3hsZycgfCAnZGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRoeUZpeGVkRGlyZWN0aW9uIHtcbiAgICBsZWZ0ID0gJ2xlZnQnLFxuICAgIHJpZ2h0ID0gJ3JpZ2h0J1xufVxuXG5pbnRlcmZhY2UgVGh5VGFibGVHcm91cDxUID0gdW5rbm93bj4ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGV4cGFuZD86IGJvb2xlYW47XG4gICAgY2hpbGRyZW4/OiBvYmplY3RbXTtcbiAgICBvcmlnaW4/OiBUO1xufVxuXG5jb25zdCB0YWJsZVRoZW1lTWFwID0ge1xuICAgIGRlZmF1bHQ6ICd0YWJsZS1kZWZhdWx0JyxcbiAgICBib3JkZXJlZDogJ3RhYmxlLWJvcmRlcmVkJyxcbiAgICBib3hlZDogJ3RhYmxlLWJveGVkJ1xufTtcblxuY29uc3QgY3VzdG9tVHlwZSA9IHtcbiAgICBpbmRleDogJ2luZGV4JyxcbiAgICBjaGVja2JveDogJ2NoZWNrYm94JyxcbiAgICByYWRpbzogJ3JhZGlvJyxcbiAgICBzd2l0Y2g6ICdzd2l0Y2gnXG59O1xuXG5jb25zdCBjc3MgPSB7XG4gICAgdGFibGVCb2R5OiAndGh5LXRhYmxlLWJvZHknLFxuICAgIHRhYmxlU2Nyb2xsTGVmdDogJ3RoeS10YWJsZS1zY3JvbGwtbGVmdCcsXG4gICAgdGFibGVTY3JvbGxSaWdodDogJ3RoeS10YWJsZS1zY3JvbGwtcmlnaHQnLFxuICAgIHRhYmxlU2Nyb2xsTWlkZGxlOiAndGh5LXRhYmxlLXNjcm9sbC1taWRkbGUnXG59O1xuXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuY29uc3QgX01peGluQmFzZTogQ29uc3RydWN0b3I8VGh5VW5zdWJzY3JpYmU+ICYgdHlwZW9mIE1peGluQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuLyoqXG4gKiDooajmoLznu4Tku7ZcbiAqIEBuYW1lIHRoeS10YWJsZVxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfVEFCTEVfQ09MVU1OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5VGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgVXBkYXRlSG9zdENsYXNzU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LXRhYmxlJyxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm9yZGVyZWRdJzogYHRoZW1lID09PSAnYm9yZGVyZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtYm94ZWRdJzogYHRoZW1lID09PSAnYm94ZWQnYCxcbiAgICAgICAgJ1tjbGFzcy50aHktdGFibGUtZml4ZWQtaGVhZGVyXSc6ICd0aHlIZWFkZXJGaXhlZCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBUaHlDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeVN3aXRjaCxcbiAgICAgICAgVGh5RW1wdHksXG4gICAgICAgIFRoeVRhYmxlU2tlbGV0b24sXG4gICAgICAgIFRoeVBhZ2luYXRpb24sXG4gICAgICAgIFRhYmxlSXNWYWxpZE1vZGVsVmFsdWVQaXBlLFxuICAgICAgICBUYWJsZVJvd0RyYWdEaXNhYmxlZFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeVRhYmxlIGV4dGVuZHMgX01peGluQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCB7XG4gICAgcHVibGljIGN1c3RvbVR5cGUgPSBjdXN0b21UeXBlO1xuXG4gICAgcHVibGljIG1vZGVsOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogVGh5VGFibGVHcm91cFtdID0gW107XG5cbiAgICBwdWJsaWMgcm93S2V5ID0gJ19pZCc7XG5cbiAgICBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nO1xuXG4gICAgcHVibGljIG1vZGU6IFRoeVRhYmxlTW9kZSA9ICdsaXN0JztcblxuICAgIHB1YmxpYyB0aGVtZTogVGh5VGFibGVUaGVtZSA9ICdkZWZhdWx0JztcblxuICAgIHB1YmxpYyBjbGFzc05hbWUgPSAnJztcblxuICAgIHB1YmxpYyBzaXplOiBUaHlUYWJsZVNpemUgPSAnbWQnO1xuXG4gICAgcHVibGljIHJvd0NsYXNzTmFtZTogc3RyaW5nIHwgRnVuY3Rpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSB0cnVlO1xuXG4gICAgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZW1wdHlPcHRpb25zOiBUaHlUYWJsZUVtcHR5T3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkUmFkaW9Sb3c6IFNhZmVBbnkgPSBudWxsO1xuXG4gICAgcHVibGljIHBhZ2luYXRpb246IFRoeVBhZ2UgPSB7IGluZGV4OiAxLCBzaXplOiAyMCwgdG90YWw6IDAsIHNpemVPcHRpb25zOiBbMjAsIDUwLCAxMDBdIH07XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuOiBTYWZlQW55O1xuXG4gICAgcHVibGljIHdob2xlUm93U2VsZWN0ID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZml4ZWREaXJlY3Rpb24gPSBUaHlGaXhlZERpcmVjdGlvbjtcblxuICAgIHB1YmxpYyBoYXNGaXhlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbHVtbnM6IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50W10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RpZmY6IEl0ZXJhYmxlRGlmZmVyPFNhZmVBbnk+O1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfb2xkVGh5Q2xhc3NOYW1lID0gJyc7XG5cbiAgICBwcml2YXRlIHNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG5cbiAgICBwcml2YXRlIGdldCB0YWJsZVNjcm9sbEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MudGFibGVCb2R5KVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzY3JvbGwkKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy50YWJsZVNjcm9sbEVsZW1lbnQgPyBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKSA6IEVNUFRZKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mlbDmja7kuLrnqbrml7blsZXnpLrnmoTmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5JykgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjxTYWZlQW55PjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ3Jvd3MnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcm93czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWxleekuuaWueW8j++8jOWIl+ihqC/liIbnu4Qv5qCRXG4gICAgICogQHR5cGUgbGlzdCB8IGdyb3VwIHwgdHJlZVxuICAgICAqIEBkZWZhdWx0IGxpc3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlKHZhbHVlOiBUaHlUYWJsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWUgfHwgdGhpcy5tb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGXnmoTlgLzkuLogYGdyb3VwYCDml7bliIbnu4TnmoQgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5R3JvdXBCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBCeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruavj+ihjOaVsOaNrueahOWUr+S4gOagh+ivhuWxnuaAp+WQjVxuICAgICAqIEBkZWZhdWx0IF9pZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0tleSh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLnJvd0tleSA9IHZhbHVlIHx8IHRoaXMucm93S2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhue7hOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3Vwcyh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOaNrua6kFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGVsKHZhbHVlOiBTYWZlQW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgdGhpcy5fZGlmZiA9IHRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLm1vZGVsKS5jcmVhdGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURhdGFNb2RlbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE5pi+56S66aOO5qC877yMYGJvcmRlcmVkYCDml7blpLTpg6jmnInog4zmma/oibLkuJTliIblibLnur/ljLrliKvmmI7mmL5cbiAgICAgKiBAdHlwZSBkZWZhdWx0IHwgYm9yZGVyZWQgfCBib3hlZFxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUaGVtZSh2YWx1ZTogVGh5VGFibGVUaGVtZSkge1xuICAgICAgICB0aGlzLnRoZW1lID0gdmFsdWUgfHwgdGhpcy50aGVtZTtcbiAgICAgICAgdGhpcy5fc2V0Q2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTlpKflsI9cbiAgICAgKiBAdHlwZSB4cyB8IHNtIHwgbWQgfCBsZyB8IHhsZyB8IGRlZmF1bHRcbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUodmFsdWU6IFRoeVRhYmxlU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZSB8fCB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85pyA5bCP5a695bqm77yM5LiA6Iis5piv6YCC55So5LqO6K6+572u5YiX5a695Li655m+5YiG5LmL5oiWYXV0b+aXtumZkOWItuihqOagvOacgOWwj+WuveW6pidcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlNaW5XaWR0aDogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5Li6IGZpeGVkIOW4g+WxgOihqOagvO+8jOiuvue9riBmaXhlZCDlkI7vvIzliJflrr3lsIbkuKXmoLzmjInnhaforr7nva7lrr3luqblsZXnpLrvvIzliJflrr3lsIbkuI3kvJrmoLnmja7ooajmoLzlhoXlrrnoh6rliqjosIPmlbRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlMYXlvdXRGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuihqOWktOWbuuWumu+8jOiLpeiuvue9ruS4uiB0cnVl77yMIOmcgOimgeWQjOatpeiuvue9riB0aHlIZWlnaHRcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB0aHlIZWFkZXJGaXhlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOmrmOW6plxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dENzc1BpeGVsKClcbiAgICB0aHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOeahOagt+W8j1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUNsYXNzTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLmZpbHRlcihhID0+IGEudHJpbSgpKTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gdGhpcy5fb2xkVGh5Q2xhc3NOYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2xkVGh5Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gbGlzdC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC86KGM55qE5qC35byP77yM5Lyg5YWl5Ye95pWw77yM5pSv5oyBIHJvd+OAgWluZGV4XG4gICAgICogQHR5cGUgc3RyaW5nIHwgKHJvdywgaW5kZXgpID0+IHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVJvd0NsYXNzTmFtZSh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5yb3dDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3nirbmgIFcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeUxvYWRpbmdEb25lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7liqDovb3ml7bmmL7npLrnmoTmlofmnKzvvIzlt7Llup/lvINcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUxvYWRpbmdUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmFjee9ruepuueKtuaAgee7hOS7tlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUVtcHR5T3B0aW9ucyh2YWx1ZTogVGh5VGFibGVFbXB0eU9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5lbXB0eU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblvIDlkK/ooYzmi5bmi71cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHRoaXMuZHJhZ2dhYmxlICYmIHRoaXMubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyZWUgbW9kZSBzb3J0aW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjemhteeggVxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlQYWdlSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uaW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mr4/pobXmmL7npLrmlbDph49cbiAgICAgKiBAZGVmYXVsdCAyMFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeVBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mgLvpobXmlbBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlQYWdlVG90YWwodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3ooYzmmK/lkKboh6rliqjpgInkuK0gQ2hlY2tib3jvvIzkuI3lvIDlkK/ml7blj6rmnInngrnlh7sgQ2hlY2tib3gg5YiX5pe25omN5Lya6Kem5Y+R6YCJ5LitXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5V2hvbGVSb3dTZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSArPSAnIHRhYmxlLWhvdmVyJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndob2xlUm93U2VsZWN0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66KGo5qC85aS0XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5SGVhZGxlc3MgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktO+8jOW3suW6n+W8g++8jOivt+S9v+eUqCB0aHlIZWFkbGVzc1xuICAgICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgdGh5SGVhZGxlc3NcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5U2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnRoeUhlYWRsZXNzID0gIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuW3puS+pyBUb3RhbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IGFsaWFzOiAndGh5U2hvd1RvdGFsJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUb3RhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5pi+56S66LCD5pW05q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGGXG4gICAgICovXG4gICAgQElucHV0KHsgYWxpYXM6ICd0aHlTaG93U2l6ZUNoYW5nZXInLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmr4/pobXmmL7npLrmnaHmlbDkuIvmi4nmoYblj6/pgInpoblcbiAgICAgKiBAdHlwZSBudW1iZXJbXVxuICAgICAqL1xuICAgIEBJbnB1dCgndGh5UGFnZVNpemVPcHRpb25zJylcbiAgICBzZXQgcGFnZVNpemVPcHRpb25zKHZhbHVlOiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZU9wdGlvbnMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2RlIOS4uiB0cmVlIOaXtu+8jOiuvue9riBUcmVlIOagkeeKtuaVsOaNruWxleekuuaXtueahOe8qei/m1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRoeUluZGVudCA9IDIwO1xuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lr7nosaHkuK3nmoTlrZDoioLngrkgS2V5XG4gICAgICogQHR5cGUgc3RyaW5nXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nO1xuXG4gICAgLyoqXG4gICAgICog5byA5ZCvIEhvdmVyIOWQjuaYvuekuuaTjeS9nO+8jOm7mOiupOS4jeaYvuekuuaTjeS9nOWMuuWGheWuue+8jOm8oOaghyBIb3ZlciDml7blsZXnpLpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRhYmxlLWhvdmVyLWRpc3BsYXktb3BlcmF0aW9uJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0aHlIb3ZlckRpc3BsYXlPcGVyYXRpb246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGU6IChpdGVtOiBTYWZlQW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzliJfnmoTpqqjmnrbnsbvlnotcbiAgICAgKiBAdHlwZSBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Q29sdW1uU2tlbGV0b25UeXBlczogVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGVbXSA9IFtcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUudGl0bGUsXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLm1lbWJlcixcbiAgICAgICAgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGUuZGVmYXVsdFxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLnu4Tku7blm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25Td2l0Y2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVN3aXRjaEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiG6aG15b2T5YmN6aG15pS55Y+Y5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpIHRoeU9uUGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlpJrpgInlm57osIPkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25NdWx0aVNlbGVjdENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeU11bHRpU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUmFkaW9TZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlSYWRpb1NlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOaLluWKqOS/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkRyYWdnYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC86KGM54K55Ye76Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVJvd0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWIl+aOkuW6j+S/ruaUueS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZVNvcnRFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8VGh5VGFibGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlUYWJsZUNvbHVtbkNvbXBvbmVudClcbiAgICBzZXQgbGlzdE9mQ29sdW1uQ29tcG9uZW50cyhjb21wb25lbnRzOiBRdWVyeUxpc3Q8VGh5VGFibGVDb2x1bW5Db21wb25lbnQ+KSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb21wb25lbnRzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzRml4ZWQgPSAhIXRoaXMuY29sdW1ucy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmZpeGVkID09PSB0aGlzLmZpeGVkRGlyZWN0aW9uLmxlZnQgfHwgaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5idWlsZFNrZWxldG9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaVsOaNrueahOaKmOWPoOWxleW8gOeKtuaAgVxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXA6IERpY3Rpb25hcnk8Ym9vbGVhbj4gPSB7fTtcblxuICAgIHB1YmxpYyBleHBhbmRTdGF0dXNNYXBPZkdyb3VwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwcml2YXRlIGV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBkcmFnUHJldmlld0NsYXNzID0gJ3RoeS10YWJsZS1kcmFnLXByZXZpZXcnO1xuXG4gICAgcHVibGljIHNrZWxldG9uQ29sdW1uczogVGh5VGFibGVTa2VsZXRvbkNvbHVtbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2RpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIHVwZGF0ZUhvc3RDbGFzc1NlcnZpY2U6IFVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IFNhZmVBbnksXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9iaW5kVHJhY2tGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb2x1bW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5leHBhbmQgPT09IHRydWUpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbMF0uZXhwYW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1uRml4ZWRQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGxlZnRGaXhlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maXhlZCA9PT0gVGh5Rml4ZWREaXJlY3Rpb24ubGVmdCk7XG4gICAgICAgIGxlZnRGaXhlZENvbHVtbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbGVmdEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5sZWZ0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5sZWZ0ICsgcGFyc2VJbnQocHJldmlvdXMud2lkdGgudG9TdHJpbmcoKSwgMTApIDogMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLnJpZ2h0KS5yZXZlcnNlKCk7XG4gICAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHJpZ2h0Rml4ZWRDb2x1bW5zW2luZGV4IC0gMV07XG4gICAgICAgICAgICBpdGVtLnJpZ2h0ID0gcHJldmlvdXMgPyBwcmV2aW91cy5yaWdodCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhTW9kZWwoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxTZWxlY3Rpb25zKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2VsZWN0aW9ucy5pbmNsdWRlcyhyb3dbdGhpcy5yb3dLZXldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93OiBvYmplY3QsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaCkge1xuICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gZ2V0KHJvdywgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJvdzogU2FmZUFueSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEN1c3RvbU1vZGVsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXM6IEl0ZXJhYmxlQ2hhbmdlczxTYWZlQW55Pikge1xuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPFNhZmVBbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1c3RvbU1vZGVsVmFsdWUocmVjb3JkLml0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9iaW5kVHJhY2tGbigpIHtcbiAgICAgICAgdGhpcy50cmFja0J5Rm4gPSBmdW5jdGlvbiAodGhpczogU2FmZUFueSwgaW5kZXg6IG51bWJlciwgcm93OiBTYWZlQW55KTogU2FmZUFueSB7XG4gICAgICAgICAgICByZXR1cm4gcm93ICYmIHRoaXMucm93S2V5ID8gcm93W3RoaXMucm93S2V5XSA6IGluZGV4O1xuICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnWyQkY29sdW1uXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldENsYXNzKGZpcnN0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmaXJzdCAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaChgdGFibGUtJHt0aGlzLnNpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlVGhlbWVNYXBbdGhpcy50aGVtZV0pIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMucHVzaCh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG9zdENsYXNzU2VydmljZS51cGRhdGVDbGFzcyhjbGFzc05hbWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1uU2VsZWN0aW9ucyhrZXk6IHN0cmluZywgc2VsZWN0aW9uczogU2FmZUFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBrZXkpO1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb25zKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVtcGxhdGVSZWYocmVmOiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiByZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kZWxWYWx1ZShyb3c6IFNhZmVBbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZ2V0KHJvdywgcGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlclJvd0NsYXNzTmFtZShyb3c6IFNhZmVBbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMucm93Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3NOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnJvd0NsYXNzTmFtZSBhcyBGdW5jdGlvbikocm93LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShyb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tb2RlbCkge1xuICAgICAgICAgICAgc2V0KHJvdywgY29sdW1uLm1vZGVsLCByb3dbY29sdW1uLmtleV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy53aG9sZVJvd1NlbGVjdCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGh5T25QYWdlSW5kZXhDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZVNpemVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgIHRoaXMub25NdWx0aVNlbGVjdENoYW5nZShudWxsLCByb3csIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMubW9kZWwuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLmtleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtdWx0aVNlbGVjdEV2ZW50OiBUaHlNdWx0aVNlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25NdWx0aVNlbGVjdENoYW5nZS5lbWl0KG11bHRpU2VsZWN0RXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJhZGlvU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IHJhZGlvU2VsZWN0RXZlbnQ6IFRoeVJhZGlvU2VsZWN0RXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uUmFkaW9TZWxlY3RDaGFuZ2UuZW1pdChyYWRpb1NlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2l0Y2hDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnksIGNvbHVtbjogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBzd2l0Y2hFdmVudDogVGh5U3dpdGNoRXZlbnQgPSB7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIHJlZnJlc2g6ICh2YWx1ZTogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgcm93O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtjb2x1bW4ua2V5XSA9IGdldCh2YWx1ZSwgY29sdW1uLm1vZGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblN3aXRjaENoYW5nZS5lbWl0KHN3aXRjaEV2ZW50KTtcbiAgICB9XG5cbiAgICBzaG93RXhwYW5kKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcm93W3RoaXMudGh5Q2hpbGRyZW5LZXldICYmIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzRXhwYW5kZWQocm93OiBTYWZlQW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXTtcbiAgICB9XG5cbiAgICBpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAndHJlZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbCAqIHRoaXMudGh5SW5kZW50IC0gNTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkSW5kZW50Q29tcHV0ZWQobGV2ZWw6IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogYCR7KGxldmVsICsgMSkgKiB0aGlzLnRoeUluZGVudCAtIDV9cHhgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwYW5kQ2hpbGRyZW4ocm93OiBTYWZlQW55KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQocm93KSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0dyb3VwU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWcgPSB7IC4uLnRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cCB9O1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAuZXhwYW5kKTtcbiAgICAgICAgdGhpcy5mb2xkR3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMub25EcmFnU3RhcnRlZChldmVudCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cEVuZChldmVudDogQ2RrRHJhZ0VuZDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZ1tncm91cC5pZF0pO1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRyYWdHcm91cERyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhLmlkID09PSBncm91cC5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cFxuICAgICAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBldmVudC5pdGVtLFxuICAgICAgICAgICAgICAgIG1vZGVsczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICAgICAgb2xkSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZHJhZyBncm91cCBjaGlsZHJlblxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcy5maW5kKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaXRlbS5kYXRhW3RoaXMuZ3JvdXBCeV0gPT09IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGEuaWQgPT09IGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldO1xuICAgICAgICAgICAgICAgIH0pICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IGdyb3VwLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4IC0gZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogZXZlbnQuY3VycmVudEluZGV4IC0gZ3JvdXBJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShncm91cC5jaGlsZHJlbiwgZHJhZ0V2ZW50Lm9sZEluZGV4LCBkcmFnRXZlbnQubmV3SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8dW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnUHJldmlld0NsYXNzKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRkczogSFRNTENvbGxlY3Rpb24gPSBldmVudC5zb3VyY2UuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk/LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocHJldmlldz8uY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7b3JpZ2luYWxUZHNbaW5kZXhdPy5jbGllbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZHJvcExpc3RFbnRlclByZWRpY2F0ZSA9IChpbmRleDogbnVtYmVyLCBkcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCkgPT4ge1xuICAgICAgICByZXR1cm4gZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kYXRhLmdyb3VwX2lkID09PSBkcmFnLmRhdGEuZ3JvdXBfaWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25EcmFnTW9kZWxEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgIG1vZGVsczogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICAgICB9O1xuICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5tb2RlbCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgdGhpcy50aHlPbkRyYWdnYWJsZUNoYW5nZS5lbWl0KGRyYWdFdmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdHcm91cERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ01vZGVsRHJvcHBlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGV2ZW50OiBFdmVudCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnREaXJlY3Rpb24sIG1vZGVsLCBzb3J0Q2hhbmdlIH0gPSBjb2x1bW47XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlc2M7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmFzYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gVGh5VGFibGVTb3J0RGlyZWN0aW9uLmRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2x1bW4uc29ydERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRFdmVudCA9IHsgZXZlbnQsIGtleTogbW9kZWwsIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgc29ydENoYW5nZS5lbWl0KHNvcnRFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnRoeVNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMub25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50LCByb3cpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2hvbGVSb3dTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCB8fCBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW87XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbiAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5jaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5rZXldID0gIXJvd1tjb2x1bW4ua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTXVsdGlTZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUucmFkaW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1JvdyA9IHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SYWRpb1NlbGVjdENoYW5nZShldmVudCwgcm93KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvd0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICByb3c6IHJvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudGh5T25Sb3dDbGljay5lbWl0KHJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Sb3dDbGlja1Byb3BhZ2F0aW9uRXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy50cmVlLWV4cGFuZC1pY29uJykpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hpbGRyZW4ocm93KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dDb250ZXh0TWVudShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCBjb250ZXh0TWVudUV2ZW50OiBUaHlUYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblJvd0NvbnRleHRNZW51LmVtaXQoY29udGV4dE1lbnVFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgICAgIGNvbnN0IF9jb2x1bW5zID0gY29tcG9uZW50cy5tYXAoY29tcG9uZW50ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbXBvbmVudC53aWR0aCxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbXBvbmVudC5jbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChuLCBpKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG4sIF9jb2x1bW5zW2ldKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyb3VwcyhvcmlnaW5Hcm91cHM6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luR3JvdXBzTWFwID0gaGVscGVycy5rZXlCeShvcmlnaW5Hcm91cHMsICdpZCcpO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICBvcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luOiBTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cDogVGh5VGFibGVHcm91cCA9IHsgaWQ6IG9yaWdpblt0aGlzLnJvd0tleV0sIGNoaWxkcmVuOiBbXSwgb3JpZ2luIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXAuaGFzT3duUHJvcGVydHkoZ3JvdXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZXhwYW5kID0gISEob3JpZ2luR3JvdXBzTWFwW2dyb3VwLmlkXSBhcyBTYWZlQW55KS5leHBhbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTW9kZWwoKSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwc01hcCA9IGtleUJ5KHRoaXMuZ3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc01hcFtyb3dbdGhpcy5ncm91cEJ5XV07XG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBhbmRHcm91cChncm91cDogVGh5VGFibGVHcm91cCkge1xuICAgICAgICBncm91cC5leHBhbmQgPSAhZ3JvdXAuZXhwYW5kO1xuICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBbZ3JvdXAuaWRdID0gZ3JvdXAuZXhwYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvbGRHcm91cHMoZ3JvdXBzOiBUaHlUYWJsZUdyb3VwW10pIHtcbiAgICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRHcm91cChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsQ2xhc3MoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF4U2Nyb2xsTGVmdCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsV2lkdGggLSBzY3JvbGxFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBsYXN0U2Nyb2xsQ2xhc3NOYW1lID0gdGhpcy5zY3JvbGxDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gJyc7XG4gICAgICAgIGlmIChzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoID4gc2Nyb2xsRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgaWYgKHNjcm9sbFggPj0gbWF4U2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lID0gY3NzLnRhYmxlU2Nyb2xsTWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCBsYXN0U2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50YWJsZVNjcm9sbEVsZW1lbnQsIHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UuaW5pdGlhbGl6ZUVsZW1lbnQodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKHRydWUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBtZXJnZSh0aGlzLnZpZXdwb3J0UnVsZXIuY2hhbmdlKDIwMCksIG9mKG51bGwpLnBpcGUoZGVsYXkoMjAwKSkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTa2VsZXRvbkNvbHVtbnMoKSB7XG4gICAgICAgIHRoaXMuc2tlbGV0b25Db2x1bW5zID0gW107XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50aHlDb2x1bW5Ta2VsZXRvblR5cGVzW2luZGV4XSB8fCBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGggfHwgJ2F1dG8nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbLi4udGhpcy5za2VsZXRvbkNvbHVtbnMsIGl0ZW1dO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93cy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5yb3dzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5yb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRvdWNoLCBwb2ludGVyIGFuZCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG9nZXRoZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHJvd3MsIHdoaWNoIHdpbGwgbGVhZCB0byBhZGRpbmcgTiAqIDMgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNleGFtcGxlcyksIHdlIGNhbiB1c2UgZmVhdHVyZSBkZXRlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUuIElmIHBvaW50ZXIgZXZlbnRzIGFyZSBhdmFpbGFibGUsIHdlIGhhdmUgdG8gbGlzdGVuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGBwb2ludGVyZG93bmAgZXZlbnQuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgd2UncmUgb24gYSB0b3VjaCBkZXZpY2Ugb3Igbm90LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3VjaCBldmVudHMgYXJlIGhhbmRsZWQgZWFybGllciB0aGFuIG1vdXNlIGV2ZW50cywgdGhvIG5vdCBhbGwgdXNlciBhZ2VudHMgZGlzcGF0Y2ggbW91c2UgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRvdWNoIGV2ZW50cy4gU2VlIHRoZSBzcGVjOiBodHRwczovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5Qb2ludGVyRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BvaW50ZXJkb3duJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnb250b3VjaHN0YXJ0JyBpbiByb3cubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAndG91Y2hzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ21vdXNlZG93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHNpbmNlIENocm9tZSA1NiBkZWZhdWx0cyBkb2N1bWVudCBsZXZlbCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgdG8gcGFzc2l2ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgYHRvdWNoc3RhcnRgIGxpc3RlbmVyIGlzIG5vdCBwYXNzaXZlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmV2ZXIgY2FsbCBgcHJldmVudERlZmF1bHQoKWAgb24gaXQsIHNvIHdlJ3JlIHNhZmUgbWFraW5nIGl0IHBhc3NpdmUgdG9vLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+cGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IG1vZGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeU1vZGU7XG4gICAgICAgIGNvbnN0IHRoeUdyb3Vwc0NoYW5nZSA9IHNpbXBsZUNoYW5nZXMudGh5R3JvdXBzO1xuICAgICAgICBjb25zdCBpc0dyb3VwTW9kZSA9IG1vZGVDaGFuZ2UgJiYgbW9kZUNoYW5nZS5jdXJyZW50VmFsdWUgPT09ICdncm91cCc7XG4gICAgICAgIGlmIChpc0dyb3VwTW9kZSAmJiB0aHlHcm91cHNDaGFuZ2UgJiYgdGh5R3JvdXBzQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkR3JvdXBzKHRoeUdyb3Vwc0NoYW5nZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE1vZGVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGlmZikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmYuZGlmZih0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RGlmZkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveUludmFsaWRBdHRyaWJ1dGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGh5LXRhYmxlLWJvZHlcIlxuICBjZGtTY3JvbGxhYmxlXG4gIFtuZ0NsYXNzXT1cInsgJ3RoeS10YWJsZS1maXhlZCc6IGhhc0ZpeGVkLCAndGh5LXRhYmxlLWJvcmRlcmVkLXRoZW1lJzogdGhlbWUgPT09ICdib3JkZXJlZCcgJiYgaGFzRml4ZWQgfVwiPlxuICA8dGFibGVcbiAgICAjdGFibGVcbiAgICBjbGFzcz1cInRhYmxlXCJcbiAgICBbbmdDbGFzc109XCJbY2xhc3NOYW1lXVwiXG4gICAgW2NsYXNzLnRhYmxlLWZpeGVkXT1cInRoeUxheW91dEZpeGVkXCJcbiAgICBbY2xhc3MudGFibGUtZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWdyb3VwXT1cIm1vZGUgPT09ICdncm91cCdcIlxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGh5TWluV2lkdGhcIj5cbiAgICA8Y29sZ3JvdXA+XG4gICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIFt3aWR0aF09XCJjb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwiaGFzRml4ZWQgPyBjb2x1bW4ud2lkdGggOiBjb2x1bW4ubWluV2lkdGhcIiAvPlxuICAgIDwvY29sZ3JvdXA+XG5cbiAgICA8dGhlYWQgKm5nSWY9XCIhdGh5SGVhZGxlc3NcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uSGVhZGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjb2x1bW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uIFtuZ0NsYXNzXT1cIlsndGh5LXRhYmxlLWNvbHVtbi1zb3J0YWJsZS1pY29uJywgJ3B4LTEnLCBjb2x1bW4uc29ydERpcmVjdGlvbl1cIiB0aHlJY29uTmFtZT1cInNvcnQtdmVydGljYWwtdHRcIj5cbiAgICAgICAgICAgIDwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG5cbiAgICA8dGJvZHlcbiAgICAgICpuZ0lmPVwibG9hZGluZ0RvbmVcIlxuICAgICAgdGh5RHJhZ0Ryb3BcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ2dhYmxlXCJcbiAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZHJvcExpc3RFbnRlclByZWRpY2F0ZVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiPlxuICAgICAgPCEtLSBncm91cCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnZ3JvdXAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZEdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJncm91cFwiXG4gICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ0dyb3VwU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnR3JvdXBFbmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS10YWJsZS1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dhYmxlICYmICEoZ3JvdXAgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJleHBhbmQtaWNvblwiIFt0aHlJY29uTmFtZV09XCJncm91cC5leHBhbmQgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGdyb3VwLm9yaWdpbiwgZ3JvdXA6IGdyb3VwLm9yaWdpbiB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLmNoaWxkcmVuPy5sZW5ndGggJiYgZ3JvdXAuZXhwYW5kXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBsaXN05qih5byP5LiL5rKh5pyJ55u05o6l5L2/55SoaXRlbeaooeadv++8jOaYr+WboOS4uuS9v+eUqOS6huaooeadv+W9seWTjeS6hkFuZ3VsYXLnmoTkvp3otZbmoJHvvIzlr7zoh7RDZGtEcmFnRHJvcOaOkuW6j+WkseaViO+8jOebruWJjei/meagt+S/ruaUueWPr+S7peaaguaXtuino+WGs+e6v+S4iuS4jeiDveaOkuW6j+eahOmXrumimO+8jFRyZWXmqKHlvI/nmoTmjpLluo/mmoLml7bkuI3mlK/mjIEgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2xpc3QnXCI+XG4gICAgICAgIDx0clxuICAgICAgICAgICNyb3dzXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbDsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdywgaW5kZXg6IGksIGxldmVsOiAwIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RyVGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1pPVwiaW5kZXhcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgIGNsYXNzPVwidGh5LXNvcnRhYmxlLWl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCJkcmFnUHJldmlld0NsYXNzXCJcbiAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCJcbiAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cInJvdyB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJyZW5kZXJSb3dDbGFzc05hbWUocm93LCBpKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAodGh5Q29udGV4dE1lbnUpPVwib25Sb3dDb250ZXh0TWVudSgkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRkc1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMVxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3dbdGh5Q2hpbGRyZW5LZXldOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IGNoaWxkLCBpbmRleDogaiwgbGV2ZWw6IGxldmVsICsgMSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Rkc1RlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCJcbiAgICAgICAgICBbY2xhc3MudGh5LW9wZXJhdGlvbi1saW5rc109XCIhIWNvbHVtbi5vcGVyYXRpb25hbFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc2Vjb25kYXJ5XT1cIiEhY29sdW1uLnNlY29uZGFyeVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jaGVja2JveC1jb2x1bW5dPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtZml4ZWQtY29sdW1uLWxlZnRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5sZWZ0XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1yaWdodF09XCJjb2x1bW4uZml4ZWQgPT09IGZpeGVkRGlyZWN0aW9uLnJpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2x1bW4ubGVmdFwiXG4gICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cImNvbHVtbi5yaWdodFwiXG4gICAgICAgICAgW25nU3R5bGVdPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmQgPyB0ZEluZGVudENvbXB1dGVkKGxldmVsKSA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaiA9PT0gMCAmJiBkcmFnZ2FibGUgJiYgIShyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZSlcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRhYmxlLWRyYWdnYWJsZS1pY29uXCIgdGh5SWNvbk5hbWU9XCJkcmFnXCI+PC90aHktaWNvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS10ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgY29sdW1uLmV4cGFuZFwiXG4gICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJpY29uSW5kZW50Q29tcHV0ZWQobGV2ZWwpXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tbm90IHRlbXBsYXRlLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlUmVmKGNvbHVtbi5jZWxsVGVtcGxhdGVSZWYpXCI+XG4gICAgICAgICAgICA8IS0tIGRlZmF1bHQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1vZGVsICYmICFjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtZXhwYW5kLWljb24gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICAgIFt0aHlJY29uTmFtZV09XCJpc0V4cGFuZGVkKHJvdykgPyAnYW5nbGUtZG93bicgOiAnYW5nbGUtcmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG93RXhwYW5kKHJvdykgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB8IGlzVmFsaWRNb2RlbFZhbHVlOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb2RlbFZhbHVlKHJvdywgY29sdW1uLm1vZGVsKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGVmYXVsdFRleHRcIiBjbGFzcz1cInRleHQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmRlZmF1bHRUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBpbmRleCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5pbmRleFwiPlxuICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4ua2V5XVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN0b3BQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIHJhZGlvIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFJhZGlvUm93XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvU2VsZWN0Q2hhbmdlKCRldmVudCwgcm93KVwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBzd2l0Y2ggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuc3dpdGNoXCI+XG4gICAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAodGh5Q2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCI+PC90aHktc3dpdGNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdEb25lICYmIG1vZGVsLmxlbmd0aCA9PT0gMCAmJiBncm91cHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0aHktdGFibGUtZW1wdHkgY2xlYXItaG92ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1wdHlUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RW1wdHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgIDx0aHktZW1wdHlcbiAgICAgICAgW3RoeU1lc3NhZ2VdPVwiZW1wdHlPcHRpb25zLm1lc3NhZ2VcIlxuICAgICAgICBbdGh5VHJhbnNsYXRpb25LZXldPVwiZW1wdHlPcHRpb25zLnRyYW5zbGF0aW9uS2V5XCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uVmFsdWVzXT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvblZhbHVlc1wiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lXT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lXCJcbiAgICAgICAgW3RoeUVudGl0eU5hbWVUcmFuc2xhdGVLZXldPVwiZW1wdHlPcHRpb25zLmVudGl0eU5hbWVUcmFuc2xhdGVLZXlcIlxuICAgICAgICBbdGh5SWNvbk5hbWVdPVwiZW1wdHlPcHRpb25zLmljb25OYW1lXCJcbiAgICAgICAgW3RoeVNpemVdPVwiZW1wdHlPcHRpb25zLnNpemVcIlxuICAgICAgICBbdGh5TWFyZ2luVG9wXT1cImVtcHR5T3B0aW9ucy5tYXJnaW5Ub3BcIlxuICAgICAgICBbdGh5VG9wQXV0b109XCJlbXB0eU9wdGlvbnMudG9wQXV0b1wiXG4gICAgICAgIFt0aHlDb250YWluZXJdPVwiZW1wdHlPcHRpb25zLmNvbnRhaW5lclwiPjwvdGh5LWVtcHR5PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDx0aHktdGFibGUtc2tlbGV0b25cbiAgICAqbmdJZj1cIiFsb2FkaW5nRG9uZVwiXG4gICAgW3RoeVJvd0NvdW50XT1cIjZcIlxuICAgIFt0aHlIZWFkbGVzc109XCJ0cnVlXCJcbiAgICBbdGh5VGhlbWVdPVwidGhlbWVcIlxuICAgIFt0aHlTaXplXT1cInNpemVcIlxuICAgIFt0aHlNaW5XaWR0aF09XCJ0aHlNaW5XaWR0aFwiXG4gICAgW3RoeUNvbHVtbnNdPVwic2tlbGV0b25Db2x1bW5zXCI+XG4gIDwvdGh5LXRhYmxlLXNrZWxldG9uPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJwYWdpbmF0aW9uLnRvdGFsID4gcGFnaW5hdGlvbi5zaXplXCIgW2NsYXNzLnRoeS10YWJsZS1mb290ZXItaGFzLXBhZGRpbmddPVwidGhlbWUgPT09ICdkZWZhdWx0J1wiPlxuICAgIDx0aHktcGFnaW5hdGlvblxuICAgICAgW3RoeVBhZ2VJbmRleF09XCJwYWdpbmF0aW9uLmluZGV4XCJcbiAgICAgIFt0aHlUb3RhbF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgIFt0aHlQYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnNpemVcIlxuICAgICAgW3RoeVBhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnNpemVPcHRpb25zXCJcbiAgICAgIFt0aHlTaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFt0aHlTaG93VG90YWxdPVwic2hvd1RvdGFsXCJcbiAgICAgICh0aHlQYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAodGh5UGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VTaXplQ2hhbmdlZCk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L3RoeS1wYWdpbmF0aW9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
974
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE9BQU8sRUFBeUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlHLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtB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S0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUtHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFLRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBS0csYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFa0MsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUduQyxzQkFBc0I7c0JBRHpCLGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRDc3NQaXhlbCwgVXBkYXRlSG9zdENsYXNzU2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBTYWZlQW55IH0gZnJvbSAnbmd4LXRldGh5cy90eXBlcyc7XG5pbXBvcnQgeyBnZXQsIGhlbHBlcnMsIGlzU3RyaW5nLCBrZXlCeSwgc2V0IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IEVNUFRZLCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlQ2hhbmdlUmVjb3JkLFxuICAgIEl0ZXJhYmxlQ2hhbmdlcyxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUExBVEZPUk1fSUQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElUaHlUYWJsZUNvbHVtblBhcmVudENvbXBvbmVudCwgVEhZX1RBQkxFX0NPTFVNTl9QQVJFTlRfQ09NUE9ORU5ULCBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFBhZ2VDaGFuZ2VkRXZlbnQsXG4gICAgVGh5TXVsdGlTZWxlY3RFdmVudCxcbiAgICBUaHlQYWdlLFxuICAgIFRoeVJhZGlvU2VsZWN0RXZlbnQsXG4gICAgVGh5U3dpdGNoRXZlbnQsXG4gICAgVGh5VGFibGVTa2VsZXRvbkNvbHVtbixcbiAgICBUaHlUYWJsZURyYWdnYWJsZUV2ZW50LFxuICAgIFRoeVRhYmxlRW1wdHlPcHRpb25zLFxuICAgIFRoeVRhYmxlRXZlbnQsXG4gICAgVGh5VGFibGVSb3dFdmVudCxcbiAgICBUaHlUYWJsZVNvcnREaXJlY3Rpb24sXG4gICAgVGh5VGFibGVTb3J0RXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3dEcmFnRGlzYWJsZWRQaXBlIH0gZnJvbSAnLi9waXBlcy9kcmFnLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgVGh5UGFnaW5hdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBUaHlUYWJsZVNrZWxldG9uIH0gZnJvbSAnLi90YWJsZS1za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVN3aXRjaCB9IGZyb20gJ25neC10ZXRoeXMvc3dpdGNoJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RHJhZ0Ryb3BEaXJlY3RpdmUsIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZSB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgdHlwZSBUaHlUYWJsZVRoZW1lID0gJ2RlZmF1bHQnIHwgJ2JvcmRlcmVkJyB8ICdib3hlZCc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlTW9kZSA9ICdsaXN0JyB8ICdncm91cCcgfCAndHJlZSc7XG5cbmV4cG9ydCB0eXBlIFRoeVRhYmxlU2l6ZSA9ICdtZCcgfCAnc20nIHwgJ3hzJyB8ICdsZycgfCAneGxnJyB8ICdkZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGh5Rml4ZWREaXJlY3Rpb24ge1xuICAgIGxlZnQgPSAnbGVmdCcsXG4gICAgcmlnaHQgPSAncmlnaHQnXG59XG5cbmludGVyZmFjZSBUaHlUYWJsZUdyb3VwPFQgPSB1bmtub3duPiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgZXhwYW5kPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IG9iamVjdFtdO1xuICAgIG9yaWdpbj86IFQ7XG59XG5cbmNvbnN0IHRhYmxlVGhlbWVNYXAgPSB7XG4gICAgZGVmYXVsdDogJ3RhYmxlLWRlZmF1bHQnLFxuICAgIGJvcmRlcmVkOiAndGFibGUtYm9yZGVyZWQnLFxuICAgIGJveGVkOiAndGFibGUtYm94ZWQnXG59O1xuXG5jb25zdCBjdXN0b21UeXBlID0ge1xuICAgIGluZGV4OiAnaW5kZXgnLFxuICAgIGNoZWNrYm94OiAnY2hlY2tib3gnLFxuICAgIHJhZGlvOiAncmFkaW8nLFxuICAgIHN3aXRjaDogJ3N3aXRjaCdcbn07XG5cbmNvbnN0IGNzcyA9IHtcbiAgICB0YWJsZUJvZHk6ICd0aHktdGFibGUtYm9keScsXG4gICAgdGFibGVTY3JvbGxMZWZ0OiAndGh5LXRhYmxlLXNjcm9sbC1sZWZ0JyxcbiAgICB0YWJsZVNjcm9sbFJpZ2h0OiAndGh5LXRhYmxlLXNjcm9sbC1yaWdodCcsXG4gICAgdGFibGVTY3JvbGxNaWRkbGU6ICd0aHktdGFibGUtc2Nyb2xsLW1pZGRsZSdcbn07XG5cbmNvbnN0IHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucyA9IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMoeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4vKipcbiAqIOihqOagvOe7hOS7tlxuICogQG5hbWUgdGh5LXRhYmxlXG4gKiBAb3JkZXIgMTBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9UQUJMRV9DT0xVTU5fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlUYWJsZVxuICAgICAgICB9LFxuICAgICAgICBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktdGFibGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3JkZXJlZF0nOiBgdGhlbWUgPT09ICdib3JkZXJlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1ib3hlZF0nOiBgdGhlbWUgPT09ICdib3hlZCdgLFxuICAgICAgICAnW2NsYXNzLnRoeS10YWJsZS1maXhlZC1oZWFkZXJdJzogJ3RoeUhlYWRlckZpeGVkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlEcmFnRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIFRoeUNvbnRleHRNZW51RGlyZWN0aXZlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVGh5U3dpdGNoLFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgVGh5VGFibGVTa2VsZXRvbixcbiAgICAgICAgVGh5UGFnaW5hdGlvbixcbiAgICAgICAgVGFibGVJc1ZhbGlkTW9kZWxWYWx1ZVBpcGUsXG4gICAgICAgIFRhYmxlUm93RHJhZ0Rpc2FibGVkUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJVGh5VGFibGVDb2x1bW5QYXJlbnRDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHB1YmxpYyBjdXN0b21UeXBlID0gY3VzdG9tVHlwZTtcblxuICAgIHB1YmxpYyBtb2RlbDogb2JqZWN0W10gPSBbXTtcblxuICAgIHB1YmxpYyBncm91cHM6IFRoeVRhYmxlR3JvdXBbXSA9IFtdO1xuXG4gICAgcHVibGljIHJvd0tleSA9ICdfaWQnO1xuXG4gICAgcHVibGljIGdyb3VwQnk6IHN0cmluZztcblxuICAgIHB1YmxpYyBtb2RlOiBUaHlUYWJsZU1vZGUgPSAnbGlzdCc7XG5cbiAgICBwdWJsaWMgdGhlbWU6IFRoeVRhYmxlVGhlbWUgPSAnZGVmYXVsdCc7XG5cbiAgICBwdWJsaWMgY2xhc3NOYW1lID0gJyc7XG5cbiAgICBwdWJsaWMgc2l6ZTogVGh5VGFibGVTaXplID0gJ21kJztcblxuICAgIHB1YmxpYyByb3dDbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uO1xuXG4gICAgcHVibGljIGxvYWRpbmdEb25lID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIGVtcHR5T3B0aW9uczogVGh5VGFibGVFbXB0eU9wdGlvbnMgPSB7fTtcblxuICAgIHB1YmxpYyBkcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZFJhZGlvUm93OiBTYWZlQW55ID0gbnVsbDtcblxuICAgIHB1YmxpYyBwYWdpbmF0aW9uOiBUaHlQYWdlID0geyBpbmRleDogMSwgc2l6ZTogMjAsIHRvdGFsOiAwLCBzaXplT3B0aW9uczogWzIwLCA1MCwgMTAwXSB9O1xuXG4gICAgcHVibGljIHRyYWNrQnlGbjogU2FmZUFueTtcblxuICAgIHB1YmxpYyB3aG9sZVJvd1NlbGVjdCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGZpeGVkRGlyZWN0aW9uID0gVGh5Rml4ZWREaXJlY3Rpb247XG5cbiAgICBwdWJsaWMgaGFzRml4ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb2x1bW5zOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudFtdID0gW107XG5cbiAgICBwcml2YXRlIF9kaWZmOiBJdGVyYWJsZURpZmZlcjxTYWZlQW55PjtcblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX29sZFRoeUNsYXNzTmFtZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBzY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxMZWZ0O1xuXG4gICAgcHJpdmF0ZSBnZXQgdGFibGVTY3JvbGxFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY3NzLnRhYmxlQm9keSlbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgc2Nyb2xsJCgpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMudGFibGVTY3JvbGxFbGVtZW50ID8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCAnc2Nyb2xsJykgOiBFTVBUWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5pWw5o2u5Li656m65pe25bGV56S655qE5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdlbXB0eScpIGVtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFNhZmVBbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8U2FmZUFueT47XG5cbiAgICBAVmlld0NoaWxkcmVuKCdyb3dzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgICAvKipcbiAgICAgKiDooajmoLzlsZXnpLrmlrnlvI/vvIzliJfooagv5YiG57uEL+agkVxuICAgICAqIEB0eXBlIGxpc3QgfCBncm91cCB8IHRyZWVcbiAgICAgKiBAZGVmYXVsdCBsaXN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5TW9kZSh2YWx1ZTogVGh5VGFibGVNb2RlKSB7XG4gICAgICAgIHRoaXMubW9kZSA9IHZhbHVlIHx8IHRoaXMubW9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aHlNb2Rl55qE5YC85Li6IGBncm91cGAg5pe25YiG57uE55qEIEtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUdyb3VwQnkodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmdyb3VwQnkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mr4/ooYzmlbDmja7nmoTllK/kuIDmoIfor4blsZ7mgKflkI1cbiAgICAgKiBAZGVmYXVsdCBfaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlSb3dLZXkodmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5yb3dLZXkgPSB2YWx1ZSB8fCB0aGlzLnJvd0tleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIbnu4TmlbDmja7mupBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlHcm91cHModmFsdWU6IFNhZmVBbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3Vwcyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7mupBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlNb2RlbCh2YWx1ZTogU2FmZUFueSkge1xuICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWUgfHwgW107XG4gICAgICAgIHRoaXMuX2RpZmYgPSB0aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5tb2RlbCkuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRhTW9kZWwoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOagvOeahOaYvuekuumjjuagvO+8jGBib3JkZXJlZGAg5pe25aS06YOo5pyJ6IOM5pmv6Imy5LiU5YiG5Ymy57q/5Yy65Yir5piO5pi+XG4gICAgICogQHR5cGUgZGVmYXVsdCB8IGJvcmRlcmVkIHwgYm94ZWRcbiAgICAgKiBAZGVmYXVsdCBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VGhlbWUodmFsdWU6IFRoeVRhYmxlVGhlbWUpIHtcbiAgICAgICAgdGhpcy50aGVtZSA9IHZhbHVlIHx8IHRoaXMudGhlbWU7XG4gICAgICAgIHRoaXMuX3NldENsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5qC855qE5aSn5bCPXG4gICAgICogQHR5cGUgeHMgfCBzbSB8IG1kIHwgbGcgfCB4bGcgfCBkZWZhdWx0XG4gICAgICogQGRlZmF1bHQgbWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHZhbHVlOiBUaHlUYWJsZVNpemUpIHtcbiAgICAgICAgdGhpcy5zaXplID0gdmFsdWUgfHwgdGhpcy5zaXplO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOacgOWwj+WuveW6pu+8jOS4gOiIrOaYr+mAgueUqOS6juiuvue9ruWIl+WuveS4uueZvuWIhuS5i+aIlmF1dG/ml7bpmZDliLbooajmoLzmnIDlsI/lrr3luqYnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRDc3NQaXhlbCgpXG4gICAgdGh5TWluV2lkdGg6IHN0cmluZyB8IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4uiBmaXhlZCDluIPlsYDooajmoLzvvIzorr7nva4gZml4ZWQg5ZCO77yM5YiX5a695bCG5Lil5qC85oyJ54Wn6K6+572u5a695bqm5bGV56S677yM5YiX5a695bCG5LiN5Lya5qC55o2u6KGo5qC85YaF5a656Ieq5Yqo6LCD5pW0XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5TGF5b3V0Rml4ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbooajlpLTlm7rlrprvvIzoi6Xorr7nva7kuLogdHJ1Ze+8jCDpnIDopoHlkIzmraXorr7nva4gdGh5SGVpZ2h0XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdGh5SGVhZGVyRml4ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDooajmoLznmoTpq5jluqZcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpXG4gICAgQElucHV0KClcbiAgICBASW5wdXRDc3NQaXhlbCgpXG4gICAgdGh5SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLznmoTmoLflvI9cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlDbGFzc05hbWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoYSA9PiBhLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBsaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IHRoaXMuX29sZFRoeUNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29sZFRoeUNsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGxpc3Quam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOihjOeahOagt+W8j++8jOS8oOWFpeWHveaVsO+8jOaUr+aMgSByb3fjgIFpbmRleFxuICAgICAqIEB0eXBlIHN0cmluZyB8IChyb3csIGluZGV4KSA9PiBzdHJpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlSb3dDbGFzc05hbWUodmFsdWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93Q2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L2954q25oCBXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlMb2FkaW5nRG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Yqg6L295pe25pi+56S655qE5paH5pys77yM5bey5bqf5byDXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlMb2FkaW5nVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDphY3nva7nqbrnirbmgIHnu4Tku7ZcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eU9wdGlvbnModmFsdWU6IFRoeVRhYmxlRW1wdHlPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZW1wdHlPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5byA5ZCv6KGM5ouW5ou9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5RHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gdmFsdWU7XG4gICAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiB0aGlzLmRyYWdnYWJsZSAmJiB0aGlzLm1vZGUgPT09ICd0cmVlJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmVlIG1vZGUgc29ydGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3pobXnoIFcbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5UGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q+P6aG15pi+56S65pWw6YePXG4gICAgICogQGRlZmF1bHQgMjBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIHNldCB0aHlQYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5oC76aG15pWwXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5UGFnZVRvdGFsKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnRvdGFsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit5b2T5YmN6KGM5piv5ZCm6Ieq5Yqo6YCJ5LitIENoZWNrYm9477yM5LiN5byA5ZCv5pe25Y+q5pyJ54K55Ye7IENoZWNrYm94IOWIl+aXtuaJjeS8muinpuWPkemAieS4rVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeVdob2xlUm93U2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyB0YWJsZS1ob3Zlcic7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aG9sZVJvd1NlbGVjdCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuihqOagvOWktFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHRoeUhlYWRsZXNzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrooajmoLzlpLTvvIzlt7Llup/lvIPvvIzor7fkvb/nlKggdGh5SGVhZGxlc3NcbiAgICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIHRoeUhlYWRsZXNzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgc2V0IHRoeVNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50aHlIZWFkbGVzcyA9ICF2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbmmL7npLrlt6bkvqcgVG90YWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyBhbGlhczogJ3RoeVNob3dUb3RhbCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93VG90YWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYvuekuuiwg+aVtOavj+mhteaYvuekuuadoeaVsOS4i+aLieahhlxuICAgICAqL1xuICAgIEBJbnB1dCh7IGFsaWFzOiAndGh5U2hvd1NpemVDaGFuZ2VyJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dTaXplQ2hhbmdlciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5q+P6aG15pi+56S65p2h5pWw5LiL5ouJ5qGG5Y+v6YCJ6aG5XG4gICAgICogQHR5cGUgbnVtYmVyW11cbiAgICAgKi9cbiAgICBASW5wdXQoJ3RoeVBhZ2VTaXplT3B0aW9ucycpXG4gICAgc2V0IHBhZ2VTaXplT3B0aW9ucyh2YWx1ZTogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLnNpemVPcHRpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGh5TW9kZSDkuLogdHJlZSDml7bvvIzorr7nva4gVHJlZSDmoJHnirbmlbDmja7lsZXnpLrml7bnmoTnvKnov5tcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlJbmRlbnQgPSAyMDtcblxuICAgIC8qKlxuICAgICAqIHRoeU1vZGUg5Li6IHRyZWUg5pe277yM6K6+572uIFRyZWUg5qCR54q25pWw5o2u5a+56LGh5Lit55qE5a2Q6IqC54K5IEtleVxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNoaWxkcmVuS2V5ID0gJ2NoaWxkcmVuJztcblxuICAgIC8qKlxuICAgICAqIOW8gOWQryBIb3ZlciDlkI7mmL7npLrmk43kvZzvvIzpu5jorqTkuI3mmL7npLrmk43kvZzljLrlhoXlrrnvvIzpvKDmoIcgSG92ZXIg5pe25bGV56S6XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10YWJsZS1ob3Zlci1kaXNwbGF5LW9wZXJhdGlvbicpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgdGh5SG92ZXJEaXNwbGF5T3BlcmF0aW9uOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlOiAoaXRlbTogU2FmZUFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6KGo5qC85YiX55qE6aqo5p6257G75Z6LXG4gICAgICogQHR5cGUgVGh5VGFibGVDb2x1bW5Ta2VsZXRvblR5cGVbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNvbHVtblNrZWxldG9uVHlwZXM6IFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlW10gPSBbXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLnRpdGxlLFxuICAgICAgICBUaHlUYWJsZUNvbHVtblNrZWxldG9uVHlwZS5tZW1iZXIsXG4gICAgICAgIFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLmRlZmF1bHRcbiAgICBdO1xuXG4gICAgLyoqXG4gICAgICog5YiH5o2i57uE5Lu25Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU3dpdGNoQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5U3dpdGNoRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlTd2l0Y2hFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIhumhteWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQYWdlQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOWIhumhteW9k+WJjemhteaUueWPmOWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VJbmRleENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKSB0aHlPblBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICog5aSa6YCJ5Zue6LCD5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uTXVsdGlTZWxlY3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlNdWx0aVNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5TXVsdGlTZWxlY3RFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOWNlemAieWbnuiwg+S6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblJhZGlvU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5UmFkaW9TZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVJhZGlvU2VsZWN0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmi5bliqjkv67mlLnkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25EcmFnZ2FibGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaHlUYWJsZURyYWdnYWJsZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVEcmFnZ2FibGVFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOihqOagvOihjOeCueWHu+inpuWPkeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPblJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8VGh5VGFibGVSb3dFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRhYmxlUm93RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDliJfmjpLluo/kv67mlLnkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlU29ydEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VGFibGVTb3J0RXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgdGh5T25Sb3dDb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPFRoeVRhYmxlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUYWJsZUV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTYWZlQW55PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5VGFibGVDb2x1bW5Db21wb25lbnQpXG4gICAgc2V0IGxpc3RPZkNvbHVtbkNvbXBvbmVudHMoY29tcG9uZW50czogUXVlcnlMaXN0PFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50Pikge1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gY29tcG9uZW50cy50b0FycmF5KCk7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpeGVkID0gISF0aGlzLmNvbHVtbnMuZmluZChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5maXhlZCA9PT0gdGhpcy5maXhlZERpcmVjdGlvbi5sZWZ0IHx8IGl0ZW0uZml4ZWQgPT09IHRoaXMuZml4ZWREaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRTa2VsZXRvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDb2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YU1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmlbDmja7nmoTmipjlj6DlsZXlvIDnirbmgIFcbiAgICBwdWJsaWMgZXhwYW5kU3RhdHVzTWFwOiBEaWN0aW9uYXJ5PGJvb2xlYW4+ID0ge307XG5cbiAgICBwdWJsaWMgZXhwYW5kU3RhdHVzTWFwT2ZHcm91cDogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgcHJpdmF0ZSBleHBhbmRTdGF0dXNNYXBPZkdyb3VwQmVmb3JlRHJhZzogRGljdGlvbmFyeTxib29sZWFuPiA9IHt9O1xuXG4gICAgZHJhZ1ByZXZpZXdDbGFzcyA9ICd0aHktdGFibGUtZHJhZy1wcmV2aWV3JztcblxuICAgIHB1YmxpYyBza2VsZXRvbkNvbHVtbnM6IFRoeVRhYmxlU2tlbGV0b25Db2x1bW5bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9kaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHByaXZhdGUgdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICAgICAgcHJpdmF0ZSB1cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlOiBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBTYWZlQW55LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5fYmluZFRyYWNrRm4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZXhwYW5kID09PSB0cnVlKSAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zWzBdLmV4cGFuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNvbHVtbkZpeGVkUG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbHVtbkZpeGVkUG9zaXRpb25zKCkge1xuICAgICAgICBjb25zdCBsZWZ0Rml4ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihpdGVtID0+IGl0ZW0uZml4ZWQgPT09IFRoeUZpeGVkRGlyZWN0aW9uLmxlZnQpO1xuICAgICAgICBsZWZ0Rml4ZWRDb2x1bW5zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGxlZnRGaXhlZENvbHVtbnNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGl0ZW0ubGVmdCA9IHByZXZpb3VzID8gcHJldmlvdXMubGVmdCArIHBhcnNlSW50KHByZXZpb3VzLndpZHRoLnRvU3RyaW5nKCksIDEwKSA6IDA7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByaWdodEZpeGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZpeGVkID09PSBUaHlGaXhlZERpcmVjdGlvbi5yaWdodCkucmV2ZXJzZSgpO1xuICAgICAgICByaWdodEZpeGVkQ29sdW1ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSByaWdodEZpeGVkQ29sdW1uc1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgaXRlbS5yaWdodCA9IHByZXZpb3VzID8gcHJldmlvdXMucmlnaHQgKyBwYXJzZUludChwcmV2aW91cy53aWR0aC50b1N0cmluZygpLCAxMCkgOiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRGF0YU1vZGVsKCkge1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbnMocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxDdXN0b21Nb2RlbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsU2VsZWN0aW9ucyhyb3c6IG9iamVjdCwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29sdW1uLnNlbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4ua2V5XSA9IGNvbHVtbi5zZWxlY3Rpb25zLmluY2x1ZGVzKHJvd1t0aGlzLnJvd0tleV0pO1xuICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyb3csIGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNlbGVjdGlvbnMuaW5jbHVkZXMocm93W3RoaXMucm93S2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvUm93ID0gcm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxDdXN0b21Nb2RlbFZhbHVlKHJvdzogb2JqZWN0LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5zd2l0Y2gpIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4ua2V5XSA9IGdldChyb3csIGNvbHVtbi5tb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VzdG9tTW9kZWxWYWx1ZShyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxDdXN0b21Nb2RlbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXBwbHlEaWZmQ2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8U2FmZUFueT4pIHtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbSgocmVjb3JkOiBJdGVyYWJsZUNoYW5nZVJlY29yZDxTYWZlQW55PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXN0b21Nb2RlbFZhbHVlKHJlY29yZC5pdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmluZFRyYWNrRm4oKSB7XG4gICAgICAgIHRoaXMudHJhY2tCeUZuID0gZnVuY3Rpb24gKHRoaXM6IFNhZmVBbnksIGluZGV4OiBudW1iZXIsIHJvdzogU2FmZUFueSk6IFNhZmVBbnkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdyAmJiB0aGlzLnJvd0tleSA/IHJvd1t0aGlzLnJvd0tleV0gOiBpbmRleDtcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rlc3Ryb3lJbnZhbGlkQXR0cmlidXRlKCkge1xuICAgICAgICB0aGlzLm1vZGVsLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJvdykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ1skJGNvbHVtbl0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRDbGFzcyhmaXJzdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghZmlyc3QgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zaXplKSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzLnB1c2goYHRhYmxlLSR7dGhpcy5zaXplfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWJsZVRoZW1lTWFwW3RoaXMudGhlbWVdKSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzLnB1c2godGFibGVUaGVtZU1hcFt0aGlzLnRoZW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUhvc3RDbGFzc1NlcnZpY2UudXBkYXRlQ2xhc3MoY2xhc3NOYW1lcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNvbHVtblNlbGVjdGlvbnMoa2V5OiBzdHJpbmcsIHNlbGVjdGlvbnM6IFNhZmVBbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0ga2V5KTtcbiAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9ucyhyb3csIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1RlbXBsYXRlUmVmKHJlZjogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gcmVmIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1vZGVsVmFsdWUocm93OiBTYWZlQW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGdldChyb3csIHBhdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJSb3dDbGFzc05hbWUocm93OiBTYWZlQW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmluZyh0aGlzLnJvd0NsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5yb3dDbGFzc05hbWUgYXMgRnVuY3Rpb24pKHJvdywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2Uocm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb2x1bW4ubW9kZWwpIHtcbiAgICAgICAgICAgIHNldChyb3csIGNvbHVtbi5tb2RlbCwgcm93W2NvbHVtbi5rZXldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblN0b3BQcm9wYWdhdGlvbihldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMud2hvbGVSb3dTZWxlY3QpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFnZUNoYW5nZShldmVudDogUGFnZUNoYW5nZWRFdmVudCkge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QYWdlSW5kZXhDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRoeU9uUGFnZUluZGV4Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aHlPblBhZ2VTaXplQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKHJvdzogU2FmZUFueSwgY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICB0aGlzLm9uTXVsdGlTZWxlY3RDaGFuZ2UobnVsbCwgcm93LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk11bHRpU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55LCBjb2x1bW46IFRoeVRhYmxlQ29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLm1vZGVsLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtW2NvbHVtbi5rZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbXVsdGlTZWxlY3RFdmVudDogVGh5TXVsdGlTZWxlY3RFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRoeU9uTXVsdGlTZWxlY3RDaGFuZ2UuZW1pdChtdWx0aVNlbGVjdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SYWRpb1NlbGVjdENoYW5nZShldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSkge1xuICAgICAgICBjb25zdCByYWRpb1NlbGVjdEV2ZW50OiBUaHlSYWRpb1NlbGVjdEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50aHlPblJhZGlvU2VsZWN0Q2hhbmdlLmVtaXQocmFkaW9TZWxlY3RFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3dpdGNoQ2hhbmdlKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55LCBjb2x1bW46IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3Qgc3dpdGNoRXZlbnQ6IFRoeVN3aXRjaEV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICByZWZyZXNoOiAodmFsdWU6IFNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IHJvdztcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmtleV0gPSBnZXQodmFsdWUsIGNvbHVtbi5tb2RlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25Td2l0Y2hDaGFuZ2UuZW1pdChzd2l0Y2hFdmVudCk7XG4gICAgfVxuXG4gICAgc2hvd0V4cGFuZChyb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgcmV0dXJuIHJvd1t0aGlzLnRoeUNoaWxkcmVuS2V5XSAmJiByb3dbdGhpcy50aHlDaGlsZHJlbktleV0ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpc0V4cGFuZGVkKHJvdzogU2FmZUFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRTdGF0dXNNYXBbcm93W3RoaXMucm93S2V5XV07XG4gICAgfVxuXG4gICAgaWNvbkluZGVudENvbXB1dGVkKGxldmVsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbGV2ZWwgKiB0aGlzLnRoeUluZGVudCAtIDU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0ZEluZGVudENvbXB1dGVkKGxldmVsOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGAkeyhsZXZlbCArIDEpICogdGhpcy50aHlJbmRlbnQgLSA1fXB4YFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGV4cGFuZENoaWxkcmVuKHJvdzogU2FmZUFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKHJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kU3RhdHVzTWFwW3Jvd1t0aGlzLnJvd0tleV1dID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcFtyb3dbdGhpcy5yb3dLZXldXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdHcm91cFN0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydDx1bmtub3duPikge1xuICAgICAgICB0aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXBCZWZvcmVEcmFnID0geyAuLi50aGlzLmV4cGFuZFN0YXR1c01hcE9mR3JvdXAgfTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHMuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmV4cGFuZCk7XG4gICAgICAgIHRoaXMuZm9sZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25EcmFnR3JvdXBFbmQoZXZlbnQ6IENka0RyYWdFbmQ8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHMuZmlsdGVyKGdyb3VwID0+IHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cEJlZm9yZURyYWdbZ3JvdXAuaWRdKTtcbiAgICAgICAgdGhpcy5leHBhbmRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25EcmFnR3JvdXBEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPikge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lml0ZW0uZGF0YS5pZCA9PT0gZ3JvdXAuaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIC8vIGRyYWcgZ3JvdXBcbiAgICAgICAgICAgIGNvbnN0IGRyYWdFdmVudDogVGh5VGFibGVEcmFnZ2FibGVFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogZXZlbnQuaXRlbSxcbiAgICAgICAgICAgICAgICBtb2RlbHM6IHRoaXMuZ3JvdXBzLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5ncm91cHMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRoeU9uRHJhZ2dhYmxlQ2hhbmdlLmVtaXQoZHJhZ0V2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRyYWcgZ3JvdXAgY2hpbGRyZW5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuZmluZChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lml0ZW0uZGF0YVt0aGlzLmdyb3VwQnldID09PSBncm91cC5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9XG4gICAgICAgICAgICAgICAgZXZlbnQuY29udGFpbmVyLmdldFNvcnRlZEl0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhLmlkID09PSBldmVudC5pdGVtLmRhdGFbdGhpcy5ncm91cEJ5XTtcbiAgICAgICAgICAgICAgICB9KSArIDE7XG4gICAgICAgICAgICBjb25zdCBkcmFnRXZlbnQ6IFRoeVRhYmxlRHJhZ2dhYmxlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICAgICAgbW9kZWxzOiBncm91cC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCAtIGdyb3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IGV2ZW50LmN1cnJlbnRJbmRleCAtIGdyb3VwSW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZ3JvdXAuY2hpbGRyZW4sIGRyYWdFdmVudC5vbGRJbmRleCwgZHJhZ0V2ZW50Lm5ld0luZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0PHVua25vd24+KSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ1ByZXZpZXdDbGFzcylbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZHM6IEhUTUxDb2xsZWN0aW9uID0gZXZlbnQuc291cmNlLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlldykge1xuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHByZXZpZXc/LmNoaWxkcmVuKS5mb3JFYWNoKChlbGVtZW50OiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke29yaWdpbmFsVGRzW2luZGV4XT8uY2xpZW50V2lkdGh9cHhgO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGRyb3BMaXN0RW50ZXJQcmVkaWNhdGUgPSAoaW5kZXg6IG51bWJlciwgZHJhZzogQ2RrRHJhZywgZHJvcDogQ2RrRHJvcExpc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGRyb3AuZ2V0U29ydGVkSXRlbXMoKVtpbmRleF0uZGF0YS5ncm91cF9pZCA9PT0gZHJhZy5kYXRhLmdyb3VwX2lkO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uRHJhZ01vZGVsRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICAgICAgY29uc3QgZHJhZ0V2ZW50OiBUaHlUYWJsZURyYWdnYWJsZUV2ZW50ID0ge1xuICAgICAgICAgICAgbW9kZWw6IGV2ZW50Lml0ZW0sXG4gICAgICAgICAgICBtb2RlbHM6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICBvbGRJbmRleDogZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgIG5ld0luZGV4OiBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgfTtcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubW9kZWwsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIHRoaXMudGh5T25EcmFnZ2FibGVDaGFuZ2UuZW1pdChkcmFnRXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJhZ0Ryb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgIHRoaXMub25EcmFnR3JvdXBEcm9wcGVkKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgdGhpcy5vbkRyYWdNb2RlbERyb3BwZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5IZWFkZXJDbGljayhldmVudDogRXZlbnQsIGNvbHVtbjogVGh5VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzb3J0RGlyZWN0aW9uLCBtb2RlbCwgc29ydENoYW5nZSB9ID0gY29sdW1uO1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbjtcbiAgICAgICAgICAgIGlmIChzb3J0RGlyZWN0aW9uID09PSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZXNjO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0RGlyZWN0aW9uID09PSBUaHlUYWJsZVNvcnREaXJlY3Rpb24uZGVzYykge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5hc2M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFRoeVRhYmxlU29ydERpcmVjdGlvbi5kZWZhdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uLnNvcnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBjb25zdCBzb3J0RXZlbnQgPSB7IGV2ZW50LCBrZXk6IG1vZGVsLCBkaXJlY3Rpb24gfTtcbiAgICAgICAgICAgIHNvcnRDaGFuZ2UuZW1pdChzb3J0RXZlbnQpO1xuICAgICAgICAgICAgdGhpcy50aHlTb3J0Q2hhbmdlLmVtaXQoc29ydEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudCwgcm93KTtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndob2xlUm93U2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3ggfHwgaXRlbS50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4gJiYgIWNvbHVtbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuY2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4ua2V5XSA9ICFyb3dbY29sdW1uLmtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uocm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk11bHRpU2VsZWN0Q2hhbmdlKGV2ZW50LCByb3csIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnJhZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9Sb3cgPSByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmFkaW9TZWxlY3RDaGFuZ2UoZXZlbnQsIHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3dFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgcm93OiByb3dcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRoeU9uUm93Q2xpY2suZW1pdChyb3dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUm93Q2xpY2tQcm9wYWdhdGlvbkV2ZW50SGFuZGxlcihldmVudDogRXZlbnQsIHJvdzogU2FmZUFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCcudHJlZS1leHBhbmQtaWNvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZENoaWxkcmVuKHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93Q29udGV4dE1lbnUoZXZlbnQ6IEV2ZW50LCByb3c6IFNhZmVBbnkpIHtcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVFdmVudDogVGh5VGFibGVFdmVudCA9IHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudGh5T25Sb3dDb250ZXh0TWVudS5lbWl0KGNvbnRleHRNZW51RXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZnJlc2hDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5jb2x1bW5zIHx8IFtdO1xuICAgICAgICBjb25zdCBfY29sdW1ucyA9IGNvbXBvbmVudHMubWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjb21wb25lbnQud2lkdGgsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb21wb25lbnQuY2xhc3NOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobiwgaSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuLCBfY29sdW1uc1tpXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRHcm91cHMob3JpZ2luR3JvdXBzOiBTYWZlQW55KSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkdyb3Vwc01hcCA9IGhlbHBlcnMua2V5Qnkob3JpZ2luR3JvdXBzLCAnaWQnKTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgb3JpZ2luR3JvdXBzLmZvckVhY2goKG9yaWdpbjogU2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXA6IFRoeVRhYmxlR3JvdXAgPSB7IGlkOiBvcmlnaW5bdGhpcy5yb3dLZXldLCBjaGlsZHJlbjogW10sIG9yaWdpbiB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwLmhhc093blByb3BlcnR5KGdyb3VwLmlkKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9IHRoaXMuZXhwYW5kU3RhdHVzTWFwT2ZHcm91cFtncm91cC5pZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmV4cGFuZCA9ICEhKG9yaWdpbkdyb3Vwc01hcFtncm91cC5pZF0gYXMgU2FmZUFueSkuZXhwYW5kO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1vZGVsKCkge1xuICAgICAgICBjb25zdCBncm91cHNNYXAgPSBrZXlCeSh0aGlzLmdyb3VwcywgJ2lkJyk7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNNYXBbcm93W3RoaXMuZ3JvdXBCeV1dO1xuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4ucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwYW5kR3JvdXAoZ3JvdXA6IFRoeVRhYmxlR3JvdXApIHtcbiAgICAgICAgZ3JvdXAuZXhwYW5kID0gIWdyb3VwLmV4cGFuZDtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0dXNNYXBPZkdyb3VwW2dyb3VwLmlkXSA9IGdyb3VwLmV4cGFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZEdyb3Vwcyhncm91cHM6IFRoeVRhYmxlR3JvdXBbXSkge1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEdyb3VwKGdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2xkR3JvdXBzKGdyb3VwczogVGh5VGFibGVHcm91cFtdKSB7XG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjcm9sbENsYXNzKCkge1xuICAgICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy50YWJsZVNjcm9sbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbExlZnQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbFdpZHRoIC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgY29uc3QgbGFzdFNjcm9sbENsYXNzTmFtZSA9IHRoaXMuc2Nyb2xsQ2xhc3NOYW1lO1xuICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9ICcnO1xuICAgICAgICBpZiAoc2Nyb2xsRWxlbWVudC5zY3JvbGxXaWR0aCA+IHNjcm9sbEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChzY3JvbGxYID49IG1heFNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbFJpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDbGFzc05hbWUgPSBjc3MudGFibGVTY3JvbGxMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENsYXNzTmFtZSA9IGNzcy50YWJsZVNjcm9sbE1pZGRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNjcm9sbENsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnRhYmxlU2Nyb2xsRWxlbWVudCwgbGFzdFNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudGFibGVTY3JvbGxFbGVtZW50LCB0aGlzLnNjcm9sbENsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3N0Q2xhc3NTZXJ2aWNlLmluaXRpYWxpemVFbGVtZW50KHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9zZXRDbGFzcyh0cnVlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgbWVyZ2UodGhpcy52aWV3cG9ydFJ1bGVyLmNoYW5nZSgyMDApLCBvZihudWxsKS5waXBlKGRlbGF5KDIwMCkpKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZFNrZWxldG9uQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5za2VsZXRvbkNvbHVtbnMgPSBbXTtcblxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBUaHlUYWJsZUNvbHVtbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnRoeUNvbHVtblNrZWxldG9uVHlwZXNbaW5kZXhdIHx8IFRoeVRhYmxlQ29sdW1uU2tlbGV0b25UeXBlLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCB8fCAnYXV0bydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29sdW1ucyA9IFsuLi50aGlzLnNrZWxldG9uQ29sdW1ucywgaXRlbV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLnJvd3MpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlPEV2ZW50PihzdWJzY3JpYmVyID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnJvd3MubWFwKHJvdyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHRoZXJlJ3Mgbm8gbmVlZCB0byBhZGQgdG91Y2gsIHBvaW50ZXIgYW5kIG1vdXNlIGV2ZW50IGxpc3RlbmVycyB0b2dldGhlci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2Ygcm93cywgd2hpY2ggd2lsbCBsZWFkIHRvIGFkZGluZyBOICogMyBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYyAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI2V4YW1wbGVzKSwgd2UgY2FuIHVzZSBmZWF0dXJlIGRldGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZS4gSWYgcG9pbnRlciBldmVudHMgYXJlIGF2YWlsYWJsZSwgd2UgaGF2ZSB0byBsaXN0ZW4gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgYHBvaW50ZXJkb3duYCBldmVudC4gT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGRldGVybWluZSBpZiB3ZSdyZSBvbiBhIHRvdWNoIGRldmljZSBvciBub3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBhcmUgaGFuZGxlZCBlYXJsaWVyIHRoYW4gbW91c2UgZXZlbnRzLCB0aG8gbm90IGFsbCB1c2VyIGFnZW50cyBkaXNwYXRjaCBtb3VzZSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdG91Y2ggZXZlbnRzLiBTZWUgdGhlIHNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvI21vdXNlLWV2ZW50cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBvaW50ZXJFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncG9pbnRlcmRvd24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdvbnRvdWNoc3RhcnQnIGluIHJvdy5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICd0b3VjaHN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbW91c2Vkb3duJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogc2luY2UgQ2hyb21lIDU2IGRlZmF1bHRzIGRvY3VtZW50IGxldmVsIGB0b3VjaHN0YXJ0YCBsaXN0ZW5lciB0byBwYXNzaXZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudCBgdG91Y2hzdGFydGAgbGlzdGVuZXIgaXMgbm90IHBhc3NpdmUgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZXZlciBjYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBvbiBpdCwgc28gd2UncmUgc2FmZSBtYWtpbmcgaXQgcGFzc2l2ZSB0b28uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucz5wYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBtb2RlQ2hhbmdlID0gc2ltcGxlQ2hhbmdlcy50aHlNb2RlO1xuICAgICAgICBjb25zdCB0aHlHcm91cHNDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzLnRoeUdyb3VwcztcbiAgICAgICAgY29uc3QgaXNHcm91cE1vZGUgPSBtb2RlQ2hhbmdlICYmIG1vZGVDaGFuZ2UuY3VycmVudFZhbHVlID09PSAnZ3JvdXAnO1xuICAgICAgICBpZiAoaXNHcm91cE1vZGUgJiYgdGh5R3JvdXBzQ2hhbmdlICYmIHRoeUdyb3Vwc0NoYW5nZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZEdyb3Vwcyh0aHlHcm91cHNDaGFuZ2UuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNb2RlbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RpZmYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmLmRpZmYodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLl9hcHBseURpZmZDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lJbnZhbGlkQXR0cmlidXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRoeS10YWJsZS1ib2R5XCJcbiAgY2RrU2Nyb2xsYWJsZVxuICBbbmdDbGFzc109XCJ7ICd0aHktdGFibGUtZml4ZWQnOiBoYXNGaXhlZCwgJ3RoeS10YWJsZS1ib3JkZXJlZC10aGVtZSc6IHRoZW1lID09PSAnYm9yZGVyZWQnICYmIGhhc0ZpeGVkIH1cIj5cbiAgPHRhYmxlXG4gICAgI3RhYmxlXG4gICAgY2xhc3M9XCJ0YWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiW2NsYXNzTmFtZV1cIlxuICAgIFtjbGFzcy50YWJsZS1maXhlZF09XCJ0aHlMYXlvdXRGaXhlZFwiXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdnYWJsZV09XCJkcmFnZ2FibGVcIlxuICAgIFtjbGFzcy50YWJsZS1ncm91cF09XCJtb2RlID09PSAnZ3JvdXAnXCJcbiAgICBbc3R5bGUubWluLXdpZHRoXT1cInRoeU1pbldpZHRoXCI+XG4gICAgPGNvbGdyb3VwPlxuICAgICAgPGNvbCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCIgW3N0eWxlLm1pbldpZHRoXT1cImhhc0ZpeGVkID8gY29sdW1uLndpZHRoIDogY29sdW1uLm1pbldpZHRoXCIgLz5cbiAgICA8L2NvbGdyb3VwPlxuXG4gICAgPHRoZWFkICpuZ0lmPVwiIXRoeUhlYWRsZXNzXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1jb2x1bW4tc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbkhlYWRlckNsaWNrKCRldmVudCwgY29sdW1uKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW4udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29sdW1uIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIj5cbiAgICAgICAgICAgIDx0aHktaWNvbiBbbmdDbGFzc109XCJbJ3RoeS10YWJsZS1jb2x1bW4tc29ydGFibGUtaWNvbicsICdweC0xJywgY29sdW1uLnNvcnREaXJlY3Rpb25dXCIgdGh5SWNvbk5hbWU9XCJzb3J0LXZlcnRpY2FsLXR0XCI+XG4gICAgICAgICAgICA8L3RoeS1pY29uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuXG4gICAgPHRib2R5XG4gICAgICAqbmdJZj1cImxvYWRpbmdEb25lXCJcbiAgICAgIHRoeURyYWdEcm9wXG4gICAgICBjZGtEcm9wTGlzdFxuICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdnYWJsZVwiXG4gICAgICBbY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlXT1cImRyb3BMaXN0RW50ZXJQcmVkaWNhdGVcIlxuICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyYWdEcm9wcGVkKCRldmVudClcIj5cbiAgICAgIDwhLS0gZ3JvdXAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2dyb3VwJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHNcIj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIGNsYXNzPVwidGh5LXRhYmxlLWdyb3VwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRHcm91cChncm91cClcIlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJncm91cCB8IHRhYmxlUm93RHJhZ0Rpc2FibGVkIDogdGh5RHJhZ0Rpc2FibGVkUHJlZGljYXRlXCJcbiAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdHcm91cFN0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0dyb3VwRW5kKCRldmVudClcIj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHktdGFibGUtZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyYWdnYWJsZSAmJiAhKGdyb3VwIHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwiZXhwYW5kLWljb25cIiBbdGh5SWNvbk5hbWVdPVwiZ3JvdXAuZXhwYW5kID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBncm91cC5vcmlnaW4sIGdyb3VwOiBncm91cC5vcmlnaW4gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5jaGlsZHJlbj8ubGVuZ3RoICYmIGdyb3VwLmV4cGFuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGdyb3VwLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGlzdOaooeW8j+S4i+ayoeacieebtOaOpeS9v+eUqGl0ZW3mqKHmnb/vvIzmmK/lm6DkuLrkvb/nlKjkuobmqKHmnb/lvbHlk43kuoZBbmd1bGFy55qE5L6d6LWW5qCR77yM5a+86Ie0Q2RrRHJhZ0Ryb3DmjpLluo/lpLHmlYjvvIznm67liY3ov5nmoLfkv67mlLnlj6/ku6XmmoLml7bop6PlhrPnur/kuIrkuI3og73mjpLluo/nmoTpl67popjvvIxUcmVl5qih5byP55qE5o6S5bqP5pqC5pe25LiN5pSv5oyBIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdsaXN0J1wiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAjcm93c1xuICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJ0aHktc29ydGFibGUtaXRlbVwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgIFtjZGtEcmFnUHJldmlld0NsYXNzXT1cImRyYWdQcmV2aWV3Q2xhc3NcIlxuICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIlxuICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwicm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGVcIlxuICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbmRlclJvd0NsYXNzTmFtZShyb3csIGkpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICh0aHlDb250ZXh0TWVudSk9XCJvblJvd0NvbnRleHRNZW51KCRldmVudCwgcm93KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICBsZXZlbDogMFxuICAgICAgICAgICAgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgbW9kZWw7IHRyYWNrQnk6IHRyYWNrQnlGbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0clRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3csIGluZGV4OiBpLCBsZXZlbDogMCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0clRlbXBsYXRlIGxldC1yb3c9XCJyb3dcIiBsZXQtaT1cImluZGV4XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgI3Jvd3NcbiAgICAgICAgICBjbGFzcz1cInRoeS1zb3J0YWJsZS1pdGVtXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdQcmV2aWV3Q2xhc3NdPVwiZHJhZ1ByZXZpZXdDbGFzc1wiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cInJvd1wiXG4gICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJyb3cgfCB0YWJsZVJvd0RyYWdEaXNhYmxlZCA6IHRoeURyYWdEaXNhYmxlZFByZWRpY2F0ZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwicmVuZGVyUm93Q2xhc3NOYW1lKHJvdywgaSlcIlxuICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgKHRoeUNvbnRleHRNZW51KT1cIm9uUm93Q29udGV4dE1lbnUoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDFcbiAgICAgICAgICAgIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAndHJlZScgJiYgaXNFeHBhbmRlZChyb3cpXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygcm93W3RoeUNoaWxkcmVuS2V5XTsgdHJhY2tCeTogdHJhY2tCeUZuOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiBjaGlsZCwgaW5kZXg6IGosIGxldmVsOiBsZXZlbCArIDEgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlICN0ZHNUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LWk9XCJpbmRleFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiXG4gICAgICAgICAgW2NsYXNzLnRoeS1vcGVyYXRpb24tbGlua3NdPVwiISFjb2x1bW4ub3BlcmF0aW9uYWxcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY29sdW1uLXNlY29uZGFyeV09XCIhIWNvbHVtbi5zZWNvbmRhcnlcIlxuICAgICAgICAgIFtjbGFzcy50aHktdGFibGUtY2hlY2tib3gtY29sdW1uXT1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCJcbiAgICAgICAgICBbY2xhc3MudGh5LXRhYmxlLWZpeGVkLWNvbHVtbi1sZWZ0XT1cImNvbHVtbi5maXhlZCA9PT0gZml4ZWREaXJlY3Rpb24ubGVmdFwiXG4gICAgICAgICAgW2NsYXNzLnRoeS10YWJsZS1maXhlZC1jb2x1bW4tcmlnaHRdPVwiY29sdW1uLmZpeGVkID09PSBmaXhlZERpcmVjdGlvbi5yaWdodFwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCJjb2x1bW4ucmlnaHRcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kID8gdGRJbmRlbnRDb21wdXRlZChsZXZlbCkgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImogPT09IDAgJiYgZHJhZ2dhYmxlICYmICEocm93IHwgdGFibGVSb3dEcmFnRGlzYWJsZWQgOiB0aHlEcmFnRGlzYWJsZWRQcmVkaWNhdGUpXCI+XG4gICAgICAgICAgICA8dGh5LWljb24gY2xhc3M9XCJ0YWJsZS1kcmFnZ2FibGUtaWNvblwiIHRoeUljb25OYW1lPVwiZHJhZ1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tdGVtcGxhdGUtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihjb2x1bW4uY2VsbFRlbXBsYXRlUmVmKVwiPlxuICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJlZS1leHBhbmQtaWNvbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RyZWUnICYmIGNvbHVtbi5leHBhbmRcIlxuICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXNFeHBhbmRlZChyb3cpID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3dFeHBhbmQocm93KSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiaWNvbkluZGVudENvbXB1dGVkKGxldmVsKVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLW5vdCB0ZW1wbGF0ZS0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZVJlZihjb2x1bW4uY2VsbFRlbXBsYXRlUmVmKVwiPlxuICAgICAgICAgICAgPCEtLSBkZWZhdWx0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5tb2RlbCAmJiAhY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgICAgPHRoeS1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWV4cGFuZC1pY29uIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0cmVlJyAmJiBjb2x1bW4uZXhwYW5kXCJcbiAgICAgICAgICAgICAgICBbdGh5SWNvbk5hbWVdPVwiaXNFeHBhbmRlZChyb3cpID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvd0V4cGFuZChyb3cpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cImljb25JbmRlbnRDb21wdXRlZChsZXZlbClcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfCBpc1ZhbGlkTW9kZWxWYWx1ZTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0TW9kZWxWYWx1ZShyb3csIGNvbHVtbi5tb2RlbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRlZmF1bHRUZXh0XCIgY2xhc3M9XCJ0ZXh0LWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi5kZWZhdWx0VGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gaW5kZXggLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IGN1c3RvbVR5cGUuaW5kZXhcIj5cbiAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIGNoZWNrYm94IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLmNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmtleV1cIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiIC8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSByYWRpbyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gY3VzdG9tVHlwZS5yYWRpb1wiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRSYWRpb1Jvd1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RvcFByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb1NlbGVjdENoYW5nZSgkZXZlbnQsIHJvdylcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gc3dpdGNoIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlID09PSBjdXN0b21UeXBlLnN3aXRjaFwiPlxuICAgICAgICAgICAgICA8dGh5LXN3aXRjaFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5rZXldXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKHRoeUNoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiPjwvdGh5LXN3aXRjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nRG9uZSAmJiBtb2RlbC5sZW5ndGggPT09IDAgJiYgZ3JvdXBzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGh5LXRhYmxlLWVtcHR5IGNsZWFyLWhvdmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVtcHR5XCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHk+XG4gICAgICA8dGh5LWVtcHR5XG4gICAgICAgIFt0aHlNZXNzYWdlXT1cImVtcHR5T3B0aW9ucy5tZXNzYWdlXCJcbiAgICAgICAgW3RoeVRyYW5zbGF0aW9uS2V5XT1cImVtcHR5T3B0aW9ucy50cmFuc2xhdGlvbktleVwiXG4gICAgICAgIFt0aHlUcmFuc2xhdGlvblZhbHVlc109XCJlbXB0eU9wdGlvbnMudHJhbnNsYXRpb25WYWx1ZXNcIlxuICAgICAgICBbdGh5RW50aXR5TmFtZV09XCJlbXB0eU9wdGlvbnMuZW50aXR5TmFtZVwiXG4gICAgICAgIFt0aHlFbnRpdHlOYW1lVHJhbnNsYXRlS2V5XT1cImVtcHR5T3B0aW9ucy5lbnRpdHlOYW1lVHJhbnNsYXRlS2V5XCJcbiAgICAgICAgW3RoeUljb25OYW1lXT1cImVtcHR5T3B0aW9ucy5pY29uTmFtZVwiXG4gICAgICAgIFt0aHlTaXplXT1cImVtcHR5T3B0aW9ucy5zaXplXCJcbiAgICAgICAgW3RoeU1hcmdpblRvcF09XCJlbXB0eU9wdGlvbnMubWFyZ2luVG9wXCJcbiAgICAgICAgW3RoeVRvcEF1dG9dPVwiZW1wdHlPcHRpb25zLnRvcEF1dG9cIlxuICAgICAgICBbdGh5Q29udGFpbmVyXT1cImVtcHR5T3B0aW9ucy5jb250YWluZXJcIj48L3RoeS1lbXB0eT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8dGh5LXRhYmxlLXNrZWxldG9uXG4gICAgKm5nSWY9XCIhbG9hZGluZ0RvbmVcIlxuICAgIFt0aHlSb3dDb3VudF09XCI2XCJcbiAgICBbdGh5SGVhZGxlc3NdPVwidHJ1ZVwiXG4gICAgW3RoeVRoZW1lXT1cInRoZW1lXCJcbiAgICBbdGh5U2l6ZV09XCJzaXplXCJcbiAgICBbdGh5TWluV2lkdGhdPVwidGh5TWluV2lkdGhcIlxuICAgIFt0aHlDb2x1bW5zXT1cInNrZWxldG9uQ29sdW1uc1wiPlxuICA8L3RoeS10YWJsZS1za2VsZXRvbj5cblxuICA8ZGl2IGNsYXNzPVwidGh5LXRhYmxlLWZvb3RlclwiICpuZ0lmPVwicGFnaW5hdGlvbi50b3RhbCA+IHBhZ2luYXRpb24uc2l6ZVwiIFtjbGFzcy50aHktdGFibGUtZm9vdGVyLWhhcy1wYWRkaW5nXT1cInRoZW1lID09PSAnZGVmYXVsdCdcIj5cbiAgICA8dGh5LXBhZ2luYXRpb25cbiAgICAgIFt0aHlQYWdlSW5kZXhdPVwicGFnaW5hdGlvbi5pbmRleFwiXG4gICAgICBbdGh5VG90YWxdPVwicGFnaW5hdGlvbi50b3RhbFwiXG4gICAgICBbdGh5UGFnZVNpemVdPVwicGFnaW5hdGlvbi5zaXplXCJcbiAgICAgIFt0aHlQYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvbi5zaXplT3B0aW9uc1wiXG4gICAgICBbdGh5U2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICBbdGh5U2hvd1RvdGFsXT1cInNob3dUb3RhbFwiXG4gICAgICAodGh5UGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHRoeVBhZ2VJbmRleENoYW5nZSk9XCJvblBhZ2VJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICh0aHlQYWdlU2l6ZUNoYW5nZWQpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC90aHktcGFnaW5hdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|