@rivet-health/design-system 40.35.2 → 40.36.0
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/esm2020/lib/table/table/state-helpers/column-helpers.mjs +48 -10
- package/esm2020/lib/table/table/state.mjs +17 -9
- package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +8 -18
- package/fesm2015/rivet-health-design-system.mjs +57 -28
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +69 -34
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/table/state-helpers/column-helpers.d.ts +11 -1
- package/lib/table/table/state.d.ts +3 -0
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +3 -9
- package/package.json +1 -1
package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs
CHANGED
|
@@ -3,6 +3,7 @@ import Fuse from 'fuse.js';
|
|
|
3
3
|
import { BehaviorSubject, combineLatest, map } from 'rxjs';
|
|
4
4
|
import { RivSelect } from '../../../input/select/state';
|
|
5
5
|
import { RivTable } from '../state';
|
|
6
|
+
import { TableColumnHelpers } from '../state-helpers/column-helpers';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common";
|
|
8
9
|
import * as i2 from "../../../notification/banner/banner.component";
|
|
@@ -39,18 +40,7 @@ export class TableColumnSettingsSideSheetComponent {
|
|
|
39
40
|
ngOnInit() {
|
|
40
41
|
this.columnList = combineLatest([
|
|
41
42
|
this.manager.state.pipe(map(s => {
|
|
42
|
-
const
|
|
43
|
-
const allColumns = s.display.allColumns.map((column, i) => {
|
|
44
|
-
const nextColumnPinned = i + 2 <= columnsLength
|
|
45
|
-
? s.display.allColumns[i + 1].pinned
|
|
46
|
-
: false;
|
|
47
|
-
return {
|
|
48
|
-
...column,
|
|
49
|
-
resolvedName: s.display.columnNameMap.get(column.key) ?? column.key,
|
|
50
|
-
stateIndex: i,
|
|
51
|
-
isLastPinnedColumn: column.pinned && !nextColumnPinned,
|
|
52
|
-
};
|
|
53
|
-
});
|
|
43
|
+
const allColumns = TableColumnHelpers.getColumnSettingsColumnList(s);
|
|
54
44
|
const fuse = new Fuse(allColumns, {
|
|
55
45
|
keys: ['resolvedName'],
|
|
56
46
|
ignoreLocation: true,
|
|
@@ -78,12 +68,12 @@ export class TableColumnSettingsSideSheetComponent {
|
|
|
78
68
|
disabledColumns,
|
|
79
69
|
};
|
|
80
70
|
}
|
|
81
|
-
const
|
|
71
|
+
const allVisibleColumns = allColumns.map(column => ({
|
|
82
72
|
...column,
|
|
83
73
|
highlightIndices: [],
|
|
84
74
|
}));
|
|
85
|
-
const enabledColumns =
|
|
86
|
-
const disabledColumns =
|
|
75
|
+
const enabledColumns = allVisibleColumns.filter(column => column.enabled);
|
|
76
|
+
const disabledColumns = allVisibleColumns.filter(column => !column.enabled);
|
|
87
77
|
return {
|
|
88
78
|
enabledColumns: enabledColumns,
|
|
89
79
|
disabledColumns: disabledColumns,
|
|
@@ -200,14 +190,14 @@ export class TableColumnSettingsSideSheetComponent {
|
|
|
200
190
|
}
|
|
201
191
|
}
|
|
202
192
|
TableColumnSettingsSideSheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableColumnSettingsSideSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
203
|
-
TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option drop-zone\"\n [attr.draggable]=\"(searching | async) === false\"\n [attr.droppable]=\"(searching | async) === false\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n columns.enabledColumns.length === 0 &&\n (searching | async) === false\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n ((searching | async) === false ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [class.drop-zone]=\"!disableEnablingColumns(columns)\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\">\n <span\n class=\"reorder\"\n *ngIf=\"(searching | async) === false\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"column.enabled || !disableEnablingColumns(columns)\"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.BannerComponent, selector: "riv-banner", inputs: ["variant", "icon", "iconTooltip", "heading", "dismissable"], outputs: ["dismiss"] }, { kind: "component", type: i3.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i4.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition", "disabled"] }, { kind: "component", type: i7.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: i8.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i9.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipAnchor", "rivTooltipCloseDelay", "rivTooltipOpenDelay", "rivTooltipGracePeriod"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
193
|
+
TableColumnSettingsSideSheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option drop-zone\"\n [attr.draggable]=\"(searching | async) === false\"\n [attr.droppable]=\"(searching | async) === false\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n columns.enabledColumns.length === 0 &&\n (searching | async) === false\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n ((searching | async) === false ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [class.drop-zone]=\"!disableEnablingColumns(columns)\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\">\n <ng-container\n *ngTemplateOutlet=\"reorderIcon; context: { column, columns }\"\n ></ng-container>\n\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"column.enabled || !disableEnablingColumns(columns)\"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n\n <ng-container\n *ngTemplateOutlet=\"enableIcon; context: { column, columns }\"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reorderIcon let-column=\"column\" let-columns=\"columns\">\n <span\n class=\"reorder\"\n *ngIf=\"(searching | async) === false\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n</ng-template>\n\n<ng-template #enableIcon let-column=\"column\" let-columns=\"columns\">\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n\n <button\n *ngIf=\"column.alwaysVisible\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"column.tooltipForHideIcon\"\n [disabled]=\"true\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'Lock'\"\n ></button>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.BannerComponent, selector: "riv-banner", inputs: ["variant", "icon", "iconTooltip", "heading", "dismissable"], outputs: ["dismiss"] }, { kind: "component", type: i3.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i4.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition", "disabled"] }, { kind: "component", type: i7.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: i8.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i9.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure"], outputs: ["close"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipAnchor", "rivTooltipCloseDelay", "rivTooltipOpenDelay", "rivTooltipGracePeriod"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
204
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableColumnSettingsSideSheetComponent, decorators: [{
|
|
205
195
|
type: Component,
|
|
206
|
-
args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option drop-zone\"\n [attr.draggable]=\"(searching | async) === false\"\n [attr.droppable]=\"(searching | async) === false\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n columns.enabledColumns.length === 0 &&\n (searching | async) === false\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n ((searching | async) === false ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [class.drop-zone]=\"!disableEnablingColumns(columns)\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\">\n <span\n class=\"reorder\"\n *ngIf=\"(searching | async) === false\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"column.enabled || !disableEnablingColumns(columns)\"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n </div>\n </div>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
|
|
196
|
+
args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"columns.enabledColumns.length > 0\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option drop-zone\"\n [attr.draggable]=\"(searching | async) === false\"\n [attr.droppable]=\"(searching | async) === false\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"'Un-freeze columns'\"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n columns.enabledColumns.length === 0 &&\n (searching | async) === false\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n ((searching | async) === false ||\n ((searching | async) && columns.enabledColumns.length > 0))\n \"\n ></div>\n <div\n *ngIf=\"columns.disabledColumns.length > 0\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns)\n \"\n [class.drop-zone]=\"!disableEnablingColumns(columns)\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\">\n <ng-container\n *ngTemplateOutlet=\"reorderIcon; context: { column, columns }\"\n ></ng-container>\n\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"column.enabled || !disableEnablingColumns(columns)\"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n\n <ng-container\n *ngTemplateOutlet=\"enableIcon; context: { column, columns }\"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reorderIcon let-column=\"column\" let-columns=\"columns\">\n <span\n class=\"reorder\"\n *ngIf=\"(searching | async) === false\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n</ng-template>\n\n<ng-template #enableIcon let-column=\"column\" let-columns=\"columns\">\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n\n <button\n *ngIf=\"column.alwaysVisible\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"column.tooltipForHideIcon\"\n [disabled]=\"true\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'Lock'\"\n ></button>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}\n"] }]
|
|
207
197
|
}], propDecorators: { manager: [{
|
|
208
198
|
type: Input
|
|
209
199
|
}], anchor: [{
|
|
210
200
|
type: ViewChild,
|
|
211
201
|
args: ['trigger', { read: ElementRef }]
|
|
212
202
|
}] } });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7QUFvQnBDLE1BQU0sT0FBTyxxQ0FBcUM7SUFObEQ7UUFrQlcsU0FBSSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEMsY0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBSWxFLHNCQUFpQixHQUFXLFFBQVEsQ0FBQyxlQUFl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Q2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O21JQXZRVSxxQ0FBcUM7dUhBQXJDLHFDQUFxQywwTEFTbEIsVUFBVSw2QkMxQzFDLGtsVUEwU0E7NEZEelFhLHFDQUFxQztrQkFOakQsU0FBUzsrQkFDRSxzQ0FBc0MsbUJBRy9CLHVCQUF1QixDQUFDLE1BQU07OEJBUy9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aXN1YWxpemF0aW9uL2hpZ2hsaWdodC9oaWdobGlnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG50eXBlIENvbHVtbkxpc3Q8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPSAoUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4gJiB7XG4gIHJlc29sdmVkTmFtZTogQyB8IHN0cmluZztcbiAgaGlnaGxpZ2h0SW5kaWNlczogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgc3RhdGVJbmRleDogbnVtYmVyO1xuICBpc0xhc3RQaW5uZWRDb2x1bW46IGJvb2xlYW47XG59KVtdO1xuXG50eXBlIENvbHVtbkdyb3VwczxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPiA9IHtcbiAgZW5hYmxlZENvbHVtbnM6IENvbHVtbkxpc3Q8Qz47XG4gIGRpc2FibGVkQ29sdW1uczogQ29sdW1uTGlzdDxDPjtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uU2V0dGluZ3NTaWRlU2hlZXRDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZUYWJsZS5NYW5hZ2VyPFIsIEMsIEY+O1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgYW5jaG9yPzogRWxlbWVudFJlZjtcblxuICByZWFkb25seSBvcGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyUXVlcnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICByZWFkb25seSBzZWFyY2hpbmcgPSB0aGlzLmZpbHRlclF1ZXJ5LnBpcGUobWFwKHF1ZXJ5ID0+ICEhcXVlcnkpKTtcblxuICBjb2x1bW5MaXN0PzogT2JzZXJ2YWJsZTxDb2x1bW5Hcm91cHM8Qz4+O1xuXG4gIG1heEVuYWJsZWRDb2x1bW5zOiBudW1iZXIgPSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd247XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5MaXN0ID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmFnZXIhLnN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gcy5kaXNwbGF5LmFsbENvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBzLmRpc3BsYXkuYWxsQ29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbHVtblBpbm5lZCA9XG4gICAgICAgICAgICAgIGkgKyAyIDw9IGNvbHVtbnNMZW5ndGhcbiAgICAgICAgICAgICAgICA/IHMuZGlzcGxheS5hbGxDb2x1bW5zW2kgKyAxXS5waW5uZWRcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIHJlc29sdmVkTmFtZTpcbiAgICAgICAgICAgICAgICBzLmRpc3BsYXkuY29sdW1uTmFtZU1hcC5nZXQoY29sdW1uLmtleSkgPz8gY29sdW1uLmtleSxcbiAgICAgICAgICAgICAgc3RhdGVJbmRleDogaSxcbiAgICAgICAgICAgICAgaXNMYXN0UGlubmVkQ29sdW1uOiBjb2x1bW4ucGlubmVkICYmICFuZXh0Q29sdW1uUGlubmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYWxsQ29sdW1ucywge1xuICAgICAgICAgICAga2V5czogWydyZXNvbHZlZE5hbWUnXSxcbiAgICAgICAgICAgIGlnbm9yZUxvY2F0aW9uOiB0cnVlLFxuICAgICAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgZnVzZSwgYWxsQ29sdW1ucyB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLmZpbHRlclF1ZXJ5LFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt7IGZ1c2UsIGFsbENvbHVtbnMgfSwgZmlsdGVyUXVlcnldKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmdXNlLnNlYXJjaChmaWx0ZXJRdWVyeSkubWFwKG1hdGNoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0bWF0Y2ggPSBtYXRjaC5tYXRjaGVzPy5maW5kKFxuICAgICAgICAgICAgICByZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3Jlc29sdmVkTmFtZScsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ubWF0Y2guaXRlbSxcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAgIC4uLihmaXJzdG1hdGNoPy5pbmRpY2VzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBSaXZTZWxlY3QuaXNGdXNlTWF0Y2hFeGFjdChmaXJzdG1hdGNoISwgZmlsdGVyUXVlcnkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGVuYWJsZWRDb2x1bW5zID0gbWF0Y2hlcy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lbmFibGVkKTtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbmFibGVkQ29sdW1ucyxcbiAgICAgICAgICAgIGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsVmlzYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW10sXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5hYmxlZENvbHVtbnM6IGVuYWJsZWRDb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVkQ29sdW1uczogZGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlcik7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuaGFuZGxlRHJhZ092ZXIpO1xuICB9XG5cbiAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHdoZW4gd2UgaGF2ZSBlbnRlcmVkIGEgZHJvcCB6b25lIGZvciBhcHBseWluZyBvdXIgdmlzdWFsXG4gIC8vIHRyZWF0bWVudC4gSG93ZXZlciwgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGUgZHJvcCBldmVudCwgeW91IG11c3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAvLyBvbiB0aGUgZHJhZ292ZXIuIFdlIGFyZSBoYW5kbGluZyB0aGlzIG5hdGl2ZWx5IG9uIHRoZSBkb2N1bWVudCwgb3V0c2lkZSBvZiBhbmd1bGFyXG4gIC8vIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJZiB3ZSBoYXZlIGEgZHJhZ2dlZE92ZXJDb2x1bW5JZHggYW5kIHdlIGRyYWcgb3ZlciBhblxuICAvLyBlbGVtZW50IHdpdGggY2xhc3MgZHJvcC16b25lLCB3ZSB3aWxsIGFzc3VtZSB5b3Ugd2FudCB0byB0aGUgZHJvcCBlbGVtZW50IGVuYWJsZWRcbiAgLy8gYW5kIHdlIHdpbGwgcHJldmVudERlZmF1bHQuXG4gIGhhbmRsZURyYWdPdmVyID0gKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggIT0gbnVsbCAmJiB0YXJnZXQuY2xvc2VzdCgnLmRyb3Atem9uZScpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBjb2x1bW5FbmFibGVkQ2hhbmdlKFxuICAgIGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICBzb3VyY2U6ICdvcHRpb25zTWVudScgfCAnZXllSWNvbicsXG4gICkge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICAgIGVuYWJsZWQsXG4gICAgICBzb3VyY2UsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5QaW5DaGFuZ2UoY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgcGlubmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZScsXG4gICAgICBjb2x1bW46IGNvbHVtbi5rZXksXG4gICAgICBwaW5uZWQsXG4gICAgfSk7XG4gIH1cbiAgcmVzZXRUb0RlZmF1bHQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucycsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5Nb3ZlVG8oY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbi5rZXksXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5GcmVlemVVcFRvKFxuICAgIGZyZWV6ZTogYm9vbGVhbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZTogJ2ZyZWV6ZURpdmlkZXInIHwgJ29wdGlvbnNNZW51JyxcbiAgICBjb2x1bW4/OiBDLFxuICApIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnLFxuICAgICAgZnJlZXplLFxuICAgICAgaW5kZXgsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW4sXG4gICAgfSk7XG4gIH1cblxuICBhbGxDb2x1bW5zRGlzYWJsZWQoY29sdW1uczogQ29sdW1uR3JvdXBzPEM+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBhbGxDb2x1bW5zRW5hYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPT0gMCAmJiBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIHNob3dBbGxDb2x1bW5zVmlzaWJsZShjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggKyBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPD1cbiAgICAgIHRoaXMubWF4RW5hYmxlZENvbHVtbnNcbiAgICApO1xuICB9XG5cbiAgZGlzYWJsZUVuYWJsaW5nQ29sdW1uKFxuICAgIGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sXG4gICAgY29sdW1uczogQ29sdW1uR3JvdXBzPEM+LFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbHVtbi5lbmFibGVkICYmIHRoaXMuZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKTtcbiAgfVxuXG4gIGRpc2FibGVFbmFibGluZ0NvbHVtbnMoY29sdW1uczogQ29sdW1uR3JvdXBzPEM+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID49IHRoaXMubWF4RW5hYmxlZENvbHVtbnM7XG4gIH1cblxuICBpY29uTGltaXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBPdXIgdGFibGVzIHN1cHBvcnQgJHt0aGlzLm1heEVuYWJsZWRDb2x1bW5zfSB2aXNpYmxlIGNvbHVtbnMuIENvbnNpZGVyIGhpZGluZyBzb21lIG9mIHlvdXIgY3VycmVudCBjb2x1bW5zIHRvIGFkZCBhbnl0aGluZyBuZXcuYDtcbiAgfVxuXG4gIGxpbWl0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgWW914oCZdmUgcmVhY2hlZCB0aGUgJHt0aGlzLm1heEVuYWJsZWRDb2x1bW5zfS1jb2x1bW4gbGltaXQuIEhpZGUgYSB2aXNpYmxlIGNvbHVtbiB0byBzaG93IHRoaXMgb25lLmA7XG4gIH1cblxuICBlbmFibGVBbGxDb2x1bW5zKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZScsXG4gICAgICBlbmFibGVkLFxuICAgIH0pO1xuICB9XG5cbiAgZHJhZ2dlZENvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdnZWRDb2x1bW5LZXk6IEMgfCBudWxsID0gbnVsbDtcbiAgZHJhZ2dlZE92ZXJDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdTdGFydChpZHg6IG51bWJlciwga2V5OiBDKSB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ID0gaWR4O1xuICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IGtleTtcbiAgfVxuXG4gIGRyYWdPdmVyKG9udG9JZHg6IG51bWJlcikge1xuICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBvbnRvSWR4O1xuICB9XG5cbiAgZHJvcChcbiAgICBvbnRvSWR4OiBudW1iZXIsXG4gICAgc3RhdGVJbmRleDogbnVtYmVyLFxuICAgIGVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgZW5hYmxlZENvbHVtbkNvdW50OiBudW1iZXIsXG4gICkge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJyxcbiAgICAgICAgcHJldmlvdXNJbmRleDogdGhpcy5kcmFnZ2VkQ29sdW1uSWR4LFxuICAgICAgICBuZXdJbmRleDogc3RhdGVJbmRleCxcbiAgICAgICAgc291cmNlOiAnbWVudURyYWcnLFxuICAgICAgICBjb2x1bW46IHRoaXMuZHJhZ2dlZENvbHVtbktleSB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZHJvcEVuYWJsZWRTdGF0ZShlbmFibGVkLCBlbmFibGVkQ29sdW1uQ291bnQpO1xuXG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZHJvcEVuYWJsZWRTdGF0ZShlbmFibGVkOiBib29sZWFuLCBlbmFibGVkQ29sdW1uQ291bnQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5LZXkgIT09IG51bGwgJiYgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpc0VuYWJsZWQgPSBlbmFibGVkQ29sdW1uQ291bnQgPiB0aGlzLmRyYWdnZWRDb2x1bW5JZHg7XG4gICAgICBjb25zdCBzaG91bGRGaXJlID0gZW5hYmxlZCA/ICFpc0VuYWJsZWQgOiBpc0VuYWJsZWQ7XG4gICAgICBpZiAoc2hvdWxkRmlyZSkge1xuICAgICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnLFxuICAgICAgICAgIGNvbHVtbjogdGhpcy5kcmFnZ2VkQ29sdW1uS2V5LFxuICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgc291cmNlOiAnZHJhZ0Ryb3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG51bGw7XG4gICAgICB0aGlzLmRyYWdnZWRDb2x1bW5LZXkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkQ29sdW1uc1dpdGhPZmZzZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuIiwiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI3RyaWdnZXIgcml2QnV0dG9uIChjbGljayk9XCJvcGVuLm5leHQodHJ1ZSlcIj5cbiAgQ29sdW1uc1xuPC9idXR0b24+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5MaXN0IHwgYXN5bmM7IGxldCBjb2x1bW5zXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcGVuIHwgYXN5bmNcIj5cbiAgICA8cml2LXNpZGUtc2hlZXQgKGNsb3NlKT1cIm9wZW4ubmV4dChmYWxzZSk7IGZpbHRlclF1ZXJ5Lm5leHQoJycpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICA8c3Bhbj5Db2x1bW5zPC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbi5uZXh0KGZhbHNlKTsgZmlsdGVyUXVlcnkubmV4dCgnJylcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxyaXYtc2VhcmNoXG4gICAgICAgICAgW25hbWVdPVwiJ2NvbHVtbi1zZWFyY2gnXCJcbiAgICAgICAgICBbdmFsdWVdPVwiKGZpbHRlclF1ZXJ5IHwgYXN5bmMpIHx8ICcnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmlsdGVyUXVlcnkubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgPjwvcml2LXNlYXJjaD5cbiAgICAgICAgPHJpdi1iYW5uZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2ljb25Ub29sdGlwXT1cImljb25MaW1pdFRvb2x0aXAoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBDb2x1bW4gbGltaXQgcmVhY2hlZFxuICAgICAgICA8L3Jpdi1iYW5uZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1oZWFkZXIgZHJvcC16b25lXCJcbiAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZSh0cnVlLCBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aClcIlxuICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi1oZWFkZXItbGFiZWxcIj5TaG93biBpbiB0YWJsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxDb2x1bW5zRW5hYmxlZChjb2x1bW5zKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZUFsbENvbHVtbnMoZmFsc2UpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEhpZGUgYWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMuZW5hYmxlZENvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24gZHJvcC16b25lXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKGkpXCJcbiAgICAgICAgICAgICAgICAgIChkcm9wKT1cIlxuICAgICAgICAgICAgICAgICAgICBkcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnN0YXRlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci10b3BdPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWJvdHRvbV09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pc0xhc3RQaW5uZWRDb2x1bW4gJiYgKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZyb3plblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUGluSW5hY3RpdmUnXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkZyb3plbiB0aHJvdWdoIGhlcmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwiJ1VuLWZyZWV6ZSBjb2x1bW5zJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGlzYWJsZS1vdmVycmlkZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5GcmVlemVVcFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc3RhdGVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmcmVlemVEaXZpZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlciBkcm9wLXpvbmVcIlxuICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZSh0cnVlLCBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aClcIlxuICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj5ObyBjb2x1bW5zIHNob3duPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJlc2V0IHRvIGRlZmF1bHRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGl2aWRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICgoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICgoc2VhcmNoaW5nIHwgYXN5bmMpICYmIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZShmYWxzZSwgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgpXCJcbiAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4taGVhZGVyLWxhYmVsXCI+SGlkZGVuIGZyb20gdGFibGU8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICAgc2hvd0FsbENvbHVtbnNWaXNpYmxlKGNvbHVtbnMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsQ29sdW1uc0Rpc2FibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyh0cnVlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTaG93IGFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmRpc2FibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cIlxuICAgICAgICAgICAgICAgICAgKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICFkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICAgIWRpc2FibGVFbmFibGluZ0NvbHVtbnMoY29sdW1ucylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kcm9wLXpvbmVdPVwiIWRpc2FibGVFbmFibGluZ0NvbHVtbnMoY29sdW1ucylcIlxuICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGNvbHVtbi5zdGF0ZUluZGV4LCBjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgZHJhZ092ZXIoaSArIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwiXG4gICAgICAgICAgICAgICAgICBkcm9wKFxuICAgICAgICAgICAgICAgICAgICBpICsgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5zdGF0ZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgY29sdW1uLCBjb2x1bW5zIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcml2LXNpZGUtc2hlZXQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uVGVtcGxhdGUgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb2x1bW4gc2Nyb2xsLXBhZGRpbmdcIlxuICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlRW5hYmxpbmdDb2x1bW4oY29sdW1uLCBjb2x1bW5zKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInJlb3JkZXJcIlxuICAgICAgICAqbmdJZj1cIihzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVFbmFibGluZ0NvbHVtbihjb2x1bW4sIGNvbHVtbnMpXCJcbiAgICAgID5cbiAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidSZW9yZGVyJ1wiIFtzaXplXT1cIjIwXCI+PC9yaXYtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgIFt0ZXh0XT1cImNvbHVtbi5yZXNvbHZlZE5hbWVcIlxuICAgICAgICBbaW5kaWNlc109XCJjb2x1bW4uaGlnaGxpZ2h0SW5kaWNlc1wiXG4gICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8cml2LW1lbnVcbiAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAqbmdJZj1cImNvbHVtbi5lbmFibGVkIHx8ICFkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgIWNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICBjb2x1bW5GcmVlemVVcFRvKHRydWUsIGNvbHVtbi5zdGF0ZUluZGV4LCAnb3B0aW9uc01lbnUnLCBjb2x1bW4ua2V5KVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICBGcmVlemUgdXAgdG8gY29sdW1uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZW5hYmxlZCAmJiBjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkZyZWV6ZVVwVG8oZmFsc2UsIDAsICdvcHRpb25zTWVudScsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFVuLWZyZWV6ZSBjb2x1bW5zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnc3RhcnQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBNb3ZlIHRvIHN0YXJ0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnZW5kJylcIlxuICAgICAgICA+XG4gICAgICAgICAgTW92ZSB0byBlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uLCAhY29sdW1uLmVuYWJsZWQsICdvcHRpb25zTWVudScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1tZW51PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtyaXZUb29sdGlwXT1cIlxuICAgICAgICAgIGNvbHVtbi5lbmFibGVkXG4gICAgICAgICAgICA/ICdIaWRlIGNvbHVtbidcbiAgICAgICAgICAgIDogZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKVxuICAgICAgICAgICAgPyBsaW1pdFRvb2x0aXAoKVxuICAgICAgICAgICAgOiAnU2hvdyBjb2x1bW4nXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiZGlzYWJsZS1vdmVycmlkZVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVuYWJsaW5nQ29sdW1uKGNvbHVtbiwgY29sdW1ucylcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgIFtpY29uXT1cImNvbHVtbi5lbmFibGVkID8gJ0V5ZScgOiAnRXllT2ZmJ1wiXG4gICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkLCAnZXllSWNvbicpXCJcbiAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFhckUsTUFBTSxPQUFPLHFDQUFxQztJQU5sRDtRQWtCVyxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QUVELGdCQUFnQixDQUFDLE9BQWdCLEVBQUUsa0JBQTBCO1FBQzNELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ3BFLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUM3RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDcEQsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN6QixJQUFJLEVBQUUscUJBQXFCO29CQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDN0IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE1BQU0sRUFBRSxVQUFVO2lCQUNuQixDQUFDLENBQUM7YUFDSjtZQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7bUlBM1BVLHFDQUFxQzt1SEFBckMscUNBQXFDLDBMQVNsQixVQUFVLDZCQ25DMUMsMHRWQXFVQTs0RkQzU2EscUNBQXFDO2tCQU5qRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTTs4QkFTL0MsT0FBTztzQkFETixLQUFLO2dCQUlOLE1BQU07c0JBREwsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEZ1c2UgZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vaW5wdXQvc2VsZWN0L3N0YXRlJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5IZWxwZXJzIH0gZnJvbSAnLi4vc3RhdGUtaGVscGVycy9jb2x1bW4taGVscGVycyc7XG5cbnR5cGUgQ29sdW1uR3JvdXBzPEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+ID0ge1xuICBlbmFibGVkQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLkNvbHVtbkxpc3Q8Qz47XG4gIGRpc2FibGVkQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLkNvbHVtbkxpc3Q8Qz47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbHVtblNldHRpbmdzU2lkZVNoZWV0Q29tcG9uZW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2VGFibGUuTWFuYWdlcjxSLCBDLCBGPjtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGFuY2hvcj86IEVsZW1lbnRSZWY7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGZpbHRlclF1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgcmVhZG9ubHkgc2VhcmNoaW5nID0gdGhpcy5maWx0ZXJRdWVyeS5waXBlKG1hcChxdWVyeSA9PiAhIXF1ZXJ5KSk7XG5cbiAgY29sdW1uTGlzdD86IE9ic2VydmFibGU8Q29sdW1uR3JvdXBzPEM+PjtcblxuICBtYXhFbmFibGVkQ29sdW1uczogbnVtYmVyID0gUml2VGFibGUuQ29sdW1uc01heFNob3duO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29sdW1uTGlzdCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5hZ2VyIS5zdGF0ZS5waXBlKFxuICAgICAgICBtYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLkNvbHVtbkxpc3Q8Qz4gPVxuICAgICAgICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmdldENvbHVtblNldHRpbmdzQ29sdW1uTGlzdChzKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhbGxDb2x1bW5zLCB7XG4gICAgICAgICAgICBrZXlzOiBbJ3Jlc29sdmVkTmFtZSddLFxuICAgICAgICAgICAgaWdub3JlTG9jYXRpb246IHRydWUsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBmdXNlLCBhbGxDb2x1bW5zIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHRoaXMuZmlsdGVyUXVlcnksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3sgZnVzZSwgYWxsQ29sdW1ucyB9LCBmaWx0ZXJRdWVyeV0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlclF1ZXJ5KSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKGZpbHRlclF1ZXJ5KS5tYXAobWF0Y2ggPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RtYXRjaCA9IG1hdGNoLm1hdGNoZXM/LmZpbmQoXG4gICAgICAgICAgICAgIHJlc3VsdCA9PiByZXN1bHQua2V5ID09PSAncmVzb2x2ZWROYW1lJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5tYXRjaC5pdGVtLFxuICAgICAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgICAgLi4uKGZpcnN0bWF0Y2g/LmluZGljZXMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIFJpdlNlbGVjdC5pc0Z1c2VNYXRjaEV4YWN0KGZpcnN0bWF0Y2ghLCBmaWx0ZXJRdWVyeSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZW5hYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmVuYWJsZWQpO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IG1hdGNoZXMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmVuYWJsZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVuYWJsZWRDb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxWaXNpYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXSxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRDb2x1bW5zID0gYWxsVmlzaWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbHVtbiA9PiBjb2x1bW4uZW5hYmxlZCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWRDb2x1bW5zID0gYWxsVmlzaWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbHVtbiA9PiAhY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmFibGVkQ29sdW1uczogZW5hYmxlZENvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZWRDb2x1bW5zOiBkaXNhYmxlZENvbHVtbnMsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmhhbmRsZURyYWdPdmVyKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlcik7XG4gIH1cblxuICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgd2hlbiB3ZSBoYXZlIGVudGVyZWQgYSBkcm9wIHpvbmUgZm9yIGFwcGx5aW5nIG91ciB2aXN1YWxcbiAgLy8gdHJlYXRtZW50LiBIb3dldmVyLCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoZSBkcm9wIGV2ZW50LCB5b3UgbXVzdCBjYWxsIHByZXZlbnREZWZhdWx0XG4gIC8vIG9uIHRoZSBkcmFnb3Zlci4gV2UgYXJlIGhhbmRsaW5nIHRoaXMgbmF0aXZlbHkgb24gdGhlIGRvY3VtZW50LCBvdXRzaWRlIG9mIGFuZ3VsYXJcbiAgLy8gYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIElmIHdlIGhhdmUgYSBkcmFnZ2VkT3ZlckNvbHVtbklkeCBhbmQgd2UgZHJhZyBvdmVyIGFuXG4gIC8vIGVsZW1lbnQgd2l0aCBjbGFzcyBkcm9wLXpvbmUsIHdlIHdpbGwgYXNzdW1lIHlvdSB3YW50IHRvIHRoZSBkcm9wIGVsZW1lbnQgZW5hYmxlZFxuICAvLyBhbmQgd2Ugd2lsbCBwcmV2ZW50RGVmYXVsdC5cbiAgaGFuZGxlRHJhZ092ZXIgPSAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCAhPSBudWxsICYmIHRhcmdldC5jbG9zZXN0KCcuZHJvcC16b25lJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbHVtbkVuYWJsZWRDaGFuZ2UoXG4gICAgY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICBlbmFibGVkOiBib29sZWFuLFxuICAgIHNvdXJjZTogJ29wdGlvbnNNZW51JyB8ICdleWVJY29uJyxcbiAgKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnLFxuICAgICAgY29sdW1uOiBjb2x1bW4ua2V5LFxuICAgICAgZW5hYmxlZCxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtblBpbkNoYW5nZShjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwaW5uZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICAgIHBpbm5lZCxcbiAgICB9KTtcbiAgfVxuICByZXNldFRvRGVmYXVsdCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbk1vdmVUbyhjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZScsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbkZyZWV6ZVVwVG8oXG4gICAgZnJlZXplOiBib29sZWFuLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc291cmNlOiAnZnJlZXplRGl2aWRlcicgfCAnb3B0aW9uc01lbnUnLFxuICAgIGNvbHVtbj86IEMsXG4gICkge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZScsXG4gICAgICBmcmVlemUsXG4gICAgICBpbmRleCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbixcbiAgICB9KTtcbiAgfVxuXG4gIGFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgc2hvd0FsbENvbHVtbnNWaXNpYmxlKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCArIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA8PVxuICAgICAgdGhpcy5tYXhFbmFibGVkQ29sdW1uc1xuICAgICk7XG4gIH1cblxuICBkaXNhYmxlRW5hYmxpbmdDb2x1bW4oXG4gICAgY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICBjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4sXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhY29sdW1uLmVuYWJsZWQgJiYgdGhpcy5kaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpO1xuICB9XG5cbiAgZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPj0gdGhpcy5tYXhFbmFibGVkQ29sdW1ucztcbiAgfVxuXG4gIGljb25MaW1pdFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYE91ciB0YWJsZXMgc3VwcG9ydCAke3RoaXMubWF4RW5hYmxlZENvbHVtbnN9IHZpc2libGUgY29sdW1ucy4gQ29uc2lkZXIgaGlkaW5nIHNvbWUgb2YgeW91ciBjdXJyZW50IGNvbHVtbnMgdG8gYWRkIGFueXRoaW5nIG5ldy5gO1xuICB9XG5cbiAgbGltaXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBZb3XigJl2ZSByZWFjaGVkIHRoZSAke3RoaXMubWF4RW5hYmxlZENvbHVtbnN9LWNvbHVtbiBsaW1pdC4gSGlkZSBhIHZpc2libGUgY29sdW1uIHRvIHNob3cgdGhpcyBvbmUuYDtcbiAgfVxuXG4gIGVuYWJsZUFsbENvbHVtbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJyxcbiAgICAgIGVuYWJsZWQsXG4gICAgfSk7XG4gIH1cblxuICBkcmFnZ2VkQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgZHJhZ2dlZENvbHVtbktleTogQyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyLCBrZXk6IEMpIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5JZHggPSBpZHg7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0ga2V5O1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKFxuICAgIG9udG9JZHg6IG51bWJlcixcbiAgICBzdGF0ZUluZGV4OiBudW1iZXIsXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICBlbmFibGVkQ29sdW1uQ291bnQ6IG51bWJlcixcbiAgKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBzdGF0ZUluZGV4LFxuICAgICAgICBzb3VyY2U6ICdtZW51RHJhZycsXG4gICAgICAgIGNvbHVtbjogdGhpcy5kcmFnZ2VkQ29sdW1uS2V5IHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kcm9wRW5hYmxlZFN0YXRlKGVuYWJsZWQsIGVuYWJsZWRDb2x1bW5Db3VudCk7XG5cbiAgICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBkcm9wRW5hYmxlZFN0YXRlKGVuYWJsZWQ6IGJvb2xlYW4sIGVuYWJsZWRDb2x1bW5Db3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbktleSAhPT0gbnVsbCAmJiB0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGVuYWJsZWRDb2x1bW5Db3VudCA+IHRoaXMuZHJhZ2dlZENvbHVtbklkeDtcbiAgICAgIGNvbnN0IHNob3VsZEZpcmUgPSBlbmFibGVkID8gIWlzRW5hYmxlZCA6IGlzRW5hYmxlZDtcbiAgICAgIGlmIChzaG91bGRGaXJlKSB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZScsXG4gICAgICAgICAgY29sdW1uOiB0aGlzLmRyYWdnZWRDb2x1bW5LZXksXG4gICAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgICBzb3VyY2U6ICdkcmFnRHJvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZWRDb2x1bW5zV2l0aE9mZnNldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG4iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjdHJpZ2dlciByaXZCdXR0b24gKGNsaWNrKT1cIm9wZW4ubmV4dCh0cnVlKVwiPlxuICBDb2x1bW5zXG48L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkxpc3QgfCBhc3luYzsgbGV0IGNvbHVtbnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wZW4gfCBhc3luY1wiPlxuICAgIDxyaXYtc2lkZS1zaGVldCAoY2xvc2UpPVwib3Blbi5uZXh0KGZhbHNlKTsgZmlsdGVyUXVlcnkubmV4dCgnJylcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPkNvbHVtbnM8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICBbbmFtZV09XCInY29sdW1uLXNlYXJjaCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCIoZmlsdGVyUXVlcnkgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWx0ZXJRdWVyeS5uZXh0KCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8cml2LWJhbm5lclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaWNvblRvb2x0aXBdPVwiaWNvbkxpbWl0VG9vbHRpcCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIENvbHVtbiBsaW1pdCByZWFjaGVkXG4gICAgICAgIDwvcml2LWJhbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlciBkcm9wLXpvbmVcIlxuICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUsIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVwiXG4gICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPlNob3duIGluIHRhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyhmYWxzZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgSGlkZSBhbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucy5lbmFibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbiBkcm9wLXpvbmVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cIihzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydChjb2x1bW4uc3RhdGVJbmRleCwgY29sdW1uLmtleSlcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyb3AoXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc3RhdGVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLXRvcF09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ID4gaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2VkLW92ZXItYm90dG9tXT1cIlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNvbHVtbklkeCA9PT0gaSAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggPCBpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGNvbHVtbiwgY29sdW1ucyB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmlzTGFzdFBpbm5lZENvbHVtbiAmJiAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uIHNjcm9sbC1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnJvemVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlubmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidQaW5JbmFjdGl2ZSdcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RnJvemVuIHRocm91Z2ggaGVyZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbcml2VG9vbHRpcF09XCInVW4tZnJlZXplIGNvbHVtbnMnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNhYmxlLW92ZXJyaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFjb2x1bW4uZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkZyZWV6ZVVwVG8oXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5zdGF0ZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWV6ZURpdmlkZXInXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4taGVhZGVyIGRyb3Atem9uZVwiXG4gICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUsIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVwiXG4gICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPk5vIGNvbHVtbnMgc2hvd248L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmVzZXQgdG8gZGVmYXVsdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgKChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgKChzZWFyY2hpbmcgfCBhc3luYykgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwKSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKGZhbHNlLCBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aClcIlxuICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi1oZWFkZXItbGFiZWxcIj5IaWRkZW4gZnJvbSB0YWJsZTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICBzaG93QWxsQ29sdW1uc1Zpc2libGUoY29sdW1ucylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxDb2x1bW5zRGlzYWJsZWQoY29sdW1ucylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmFibGVBbGxDb2x1bW5zKHRydWUpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNob3cgYWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICAgIWRpc2FibGVFbmFibGluZ0NvbHVtbnMoY29sdW1ucylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRyb3Atem9uZV09XCIhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBkcmFnT3ZlcihpICsgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJcbiAgICAgICAgICAgICAgICAgIGRyb3AoXG4gICAgICAgICAgICAgICAgICAgIGkgKyBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnN0YXRlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9yaXYtc2lkZS1zaGVldD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5UZW1wbGF0ZSBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVFbmFibGluZ0NvbHVtbihjb2x1bW4sIGNvbHVtbnMpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW9yZGVySWNvbjsgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgIFt0ZXh0XT1cImNvbHVtbi5yZXNvbHZlZE5hbWVcIlxuICAgICAgICBbaW5kaWNlc109XCJjb2x1bW4uaGlnaGxpZ2h0SW5kaWNlc1wiXG4gICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8cml2LW1lbnVcbiAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAqbmdJZj1cImNvbHVtbi5lbmFibGVkIHx8ICFkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgIWNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICBjb2x1bW5GcmVlemVVcFRvKHRydWUsIGNvbHVtbi5zdGF0ZUluZGV4LCAnb3B0aW9uc01lbnUnLCBjb2x1bW4ua2V5KVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICBGcmVlemUgdXAgdG8gY29sdW1uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZW5hYmxlZCAmJiBjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkZyZWV6ZVVwVG8oZmFsc2UsIDAsICdvcHRpb25zTWVudScsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFVuLWZyZWV6ZSBjb2x1bW5zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnc3RhcnQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBNb3ZlIHRvIHN0YXJ0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnZW5kJylcIlxuICAgICAgICA+XG4gICAgICAgICAgTW92ZSB0byBlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4uYWx3YXlzVmlzaWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkLCAnb3B0aW9uc01lbnUnKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4uZW5hYmxlZCA/ICdIaWRlIGNvbHVtbicgOiAnU2hvdyBjb2x1bW4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9yaXYtbWVudT5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImVuYWJsZUljb247IGNvbnRleHQ6IHsgY29sdW1uLCBjb2x1bW5zIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVvcmRlckljb24gbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxuICA8c3BhblxuICAgIGNsYXNzPVwicmVvcmRlclwiXG4gICAgKm5nSWY9XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVFbmFibGluZ0NvbHVtbihjb2x1bW4sIGNvbHVtbnMpXCJcbiAgPlxuICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUmVvcmRlcidcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW5hYmxlSWNvbiBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cIiFjb2x1bW4uYWx3YXlzVmlzaWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcml2QnV0dG9uXG4gICAgW3JpdlRvb2x0aXBdPVwiXG4gICAgICBjb2x1bW4uZW5hYmxlZFxuICAgICAgICA/ICdIaWRlIGNvbHVtbidcbiAgICAgICAgOiBkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgID8gbGltaXRUb29sdGlwKClcbiAgICAgICAgOiAnU2hvdyBjb2x1bW4nXG4gICAgXCJcbiAgICBjbGFzcz1cImRpc2FibGUtb3ZlcnJpZGVcIlxuICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRW5hYmxpbmdDb2x1bW4oY29sdW1uLCBjb2x1bW5zKVwiXG4gICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgW2ljb25dPVwiY29sdW1uLmVuYWJsZWQgPyAnRXllJyA6ICdFeWVPZmYnXCJcbiAgICAoY2xpY2spPVwiY29sdW1uRW5hYmxlZENoYW5nZShjb2x1bW4sICFjb2x1bW4uZW5hYmxlZCwgJ2V5ZUljb24nKVwiXG4gID48L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJjb2x1bW4uYWx3YXlzVmlzaWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcml2QnV0dG9uXG4gICAgW3JpdlRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBGb3JIaWRlSWNvblwiXG4gICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgIFtpY29uXT1cIidMb2NrJ1wiXG4gID48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|