@rivet-health/design-system 40.17.0 → 40.18.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/input/select/select/select.component.mjs +12 -11
- package/esm2020/lib/input/select/state.mjs +1 -1
- package/fesm2015/rivet-health-design-system.mjs +2 -2
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +2 -2
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/input/select/state.d.ts +2 -0
- package/package.json +1 -1
|
@@ -8,14 +8,15 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
import * as i1 from "@angular/common";
|
|
9
9
|
import * as i2 from "../../button/button.component";
|
|
10
10
|
import * as i3 from "../../../overlay/callout/callout.component";
|
|
11
|
-
import * as i4 from "../../../
|
|
12
|
-
import * as i5 from "
|
|
13
|
-
import * as i6 from "
|
|
14
|
-
import * as i7 from "../../../
|
|
15
|
-
import * as i8 from "
|
|
16
|
-
import * as i9 from "
|
|
17
|
-
import * as i10 from "
|
|
18
|
-
import * as i11 from "../../../
|
|
11
|
+
import * as i4 from "../../../overlay/callout/help/help.component";
|
|
12
|
+
import * as i5 from "../../../icon/icon.component";
|
|
13
|
+
import * as i6 from "../../input-label/input-label.component";
|
|
14
|
+
import * as i7 from "../../../load/loading-cover/loading-cover.component";
|
|
15
|
+
import * as i8 from "../../../overlay/overlay.directive";
|
|
16
|
+
import * as i9 from "../../search/search.component";
|
|
17
|
+
import * as i10 from "../select-node/select-node.component";
|
|
18
|
+
import * as i11 from "../../../visualization/zero-state/zero-state.component";
|
|
19
|
+
import * as i12 from "../../../format/pipes/number.pipe";
|
|
19
20
|
export class SelectComponent extends InputLabelComponent {
|
|
20
21
|
constructor() {
|
|
21
22
|
super(...arguments);
|
|
@@ -119,10 +120,10 @@ export class SelectComponent extends InputLabelComponent {
|
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
122
|
SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
122
|
-
SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", disabled: "disabled", locked: "locked", allowedCalloutPositions: "allowedCalloutPositions", preferredCalloutPosition: "preferredCalloutPosition" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "customSelectedOptionsTemplate", first: true, predicate: ["customSelectedOptions"], descendants: true }, { propertyName: "optionTemplate", first: true, predicate: ["option"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n class=\"custom-trigger-button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\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: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "component", type: i6.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "zIndexOverride", "errorMessage"] }, { kind: "directive", type: i7.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i8.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "allowedCalloutPositions", "preferredCalloutPosition"] }, { kind: "component", type: i9.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i10.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
123
|
+
SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", disabled: "disabled", locked: "locked", allowedCalloutPositions: "allowedCalloutPositions", preferredCalloutPosition: "preferredCalloutPosition" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "customSelectedOptionsTemplate", first: true, predicate: ["customSelectedOptions"], descendants: true }, { propertyName: "optionTemplate", first: true, predicate: ["option"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n class=\"custom-trigger-button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\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: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.HelpComponent, selector: "riv-help", inputs: ["help", "size"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "component", type: i7.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "zIndexOverride", "errorMessage"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "allowedCalloutPositions", "preferredCalloutPosition"] }, { kind: "component", type: i10.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i11.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i12.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
123
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectComponent, decorators: [{
|
|
124
125
|
type: Component,
|
|
125
|
-
args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n class=\"custom-trigger-button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
|
|
126
|
+
args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </button>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n class=\"custom-trigger-button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.custom-trigger-button{max-width:100%}.order-by{font:var(--input-medium);color:var(--type-light-low-contrast)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0;display:flex;align-items:center;gap:var(--size-small)}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
|
|
126
127
|
}], propDecorators: { manager: [{
|
|
127
128
|
type: Input
|
|
128
129
|
}], size: [{
|
|
@@ -160,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
160
161
|
(function (SelectComponent) {
|
|
161
162
|
SelectComponent.Sizes = ['small', 'medium', 'large'];
|
|
162
163
|
})(SelectComponent || (SelectComponent = {}));
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFReEcsTUFBTSxPQUFPLGVBQ1gsU0FBUSxtQkFBbUI7SUFQN0I7O1FBY0UsU0FBSSxHQUF5QixRQUFRLENBQUM7UUFHdEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUcxQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR3hCLDRCQUF1QixHQUF3QztZQUM3RCxHQUFHLG9DQUFvQztTQUN4QyxDQUFDO1FBR0YsNkJBQXdCLEdBQXNDLGNBQWMsQ0FBQztRQWlHcEUsd0JBQW1CLEdBQzFCO1lBQ0U7Z0JBQ0UsT0FBTyxFQUFFO29CQUNQO3dCQUNFLEVBQUUsRUFBRSxPQUFPO3dCQUNYLEtBQUssRUFBRSxLQUFLO3dCQUNaLElBQUksRUFBRSwrQ0FBK0M7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YixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCO2dCQUloQyxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCOztBQTZIcEMsV0FBaUIsZUFBZTtJQU9qQixxQkFBSyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUU3RCxDQUFDLEVBVGdCLGVBQWUsS0FBZixlQUFlLFFBUy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2tpcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IENhbGxvdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9vdmVybGF5L2NhbGxvdXQvY2FsbG91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdFNlbGVjdEFsbG93ZWRDYWxsb3V0UG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vLi4vb3ZlcmxheS9jYWxsb3V0L3NlbGVjdC1jYWxsb3V0LWRlZmF1bHRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50PE8gZXh0ZW5kcyBSaXZTZWxlY3QuQmFzZU9wdGlvbj5cbiAgZXh0ZW5kcyBJbnB1dExhYmVsQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlNlbGVjdC5NYW5hZ2VyPE8+O1xuXG4gIEBJbnB1dCgpXG4gIHNpemU6IFNlbGVjdENvbXBvbmVudC5TaXplID0gJ21lZGl1bSc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBsb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBhbGxvd2VkQ2FsbG91dFBvc2l0aW9uczogQ2FsbG91dENvbXBvbmVudC5BbmNob3JlZFBvc2l0aW9uW10gPSBbXG4gICAgLi4uZGVmYXVsdFNlbGVjdEFsbG93ZWRDYWxsb3V0UG9zaXRpb25zLFxuICBdO1xuXG4gIEBJbnB1dCgpXG4gIHByZWZlcnJlZENhbGxvdXRQb3NpdGlvbjogQ2FsbG91dENvbXBvbmVudC5BbmNob3JlZFBvc2l0aW9uID0gJ2JvdHRvbS1yaWdodCc7XG5cbiAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcicpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tU2VsZWN0ZWRPcHRpb25zJylcbiAgY3VzdG9tU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7XG4gICAgc2VsZWN0ZWQ6IFJpdlNlbGVjdC5PcHRpb25TZXQ8Tz47XG4gIH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ29wdGlvbicpXG4gIG9wdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBub2RlOiBSaXZTZWxlY3QuRnVsbE9wdGlvbjxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdoZWFkZXInKVxuICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJylcbiAgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHN0YXRlOiBSaXZTZWxlY3QuRnVsbFN0YXRlPE8+IH0+O1xuXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVRyaWdnZXJCdXR0b24nKVxuICBjdXN0b21UcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdzdGFuZGFyZFRyaWdnZXJCdXR0b24nKVxuICBzdGFuZGFyZFRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIG9yZGVyQnlNYW5hZ2VyPzogUml2U2VsZWN0Lk1hbmFnZXI8U2VsZWN0Q29tcG9uZW50Lk9yZGVyQnlPcHRpb24+O1xuICBwcml2YXRlIG9yZGVyQnlTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcmRlckJ5TWFuYWdlciA9IFJpdlNlbGVjdC5jcmVhdGVJbk1lbW9yeU1hbmFnZXIoXG4gICAgICAoKSA9PiB0aGlzLm9yZGVyQnlPcHRpb25Hcm91cHMsXG4gICAgICB7XG4gICAgICAgIHNob3dTaW5nbGVTZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogbmV3IFJpdlNlbGVjdC5PcHRpb25TZXQoW1xuICAgICAgICAgICAgICB0aGlzLm9yZGVyQnlPcHRpb25Hcm91cHNbMF0ub3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICh7IGlkIH0pID0+IGlkID09PSAndGl0bGUnLFxuICAgICAgICAgICAgICApISxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLm9yZGVyQnlTdWJzY3JpcHRpb24gPSB0aGlzLm9yZGVyQnlNYW5hZ2VyLnN0YXRlXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHMgPT4gWy4uLnMuc2VsZWN0aW9uLnNlbGVjdGVkXVswXT8uaWQgPz8gbnVsbCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyZW50KSA9PiBwcmV2ID09PSBjdXJyZW50KSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUob3JkZXIgPT4ge1xuICAgICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgICAgdHlwZTogJ29yZGVyQ2hhbmdlJyxcbiAgICAgICAgICBwYXlsb2FkOiBvcmRlcixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3JkZXJCeVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldFRyaWdnZXIoKTogRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnQgPz9cbiAgICAgIHRoaXMuc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGFsbG93ZWRPcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5sb2NrZWQpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q2hhbmdlKG11bHRpOiBib29sZWFuLCBpZDogT1snaWQnXSkge1xuICAgIGlmIChtdWx0aSkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnLFxuICAgICAgICBpZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbicsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdvcGVuQ2hhbmdlJyxcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBvcmRlckJ5T3B0aW9uR3JvdXBzOiBSaXZTZWxlY3QuT3B0aW9uR3JvdXA8U2VsZWN0Q29tcG9uZW50Lk9yZGVyQnlPcHRpb24+W10gPVxuICAgIFtcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndGl0bGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdBLVonLFxuICAgICAgICAgICAgaGVscDogJ1NvcnRzIHZhbHVlcyBpbiBhbHBoYW51bWVyaWMgb3JkZXIgKEEtWiwgMC05KScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ2NvdW50JyxcbiAgICAgICAgICAgIHRpdGxlOiAnVm9sdW1lJyxcbiAgICAgICAgICAgIGhlbHA6ICdTb3J0cyB2YWx1ZXMgYnkgY291bnQgKGhpZ2hlc3QgdG8gbG93ZXN0KScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXTtcblxuICBnZXRTZWxlY3RlZE9yZGVyQnlPcHRpb24oXG4gICAgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4sXG4gICk6IFNlbGVjdENvbXBvbmVudC5PcmRlckJ5T3B0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMub3JkZXJCeU9wdGlvbkdyb3Vwc1swXS5vcHRpb25zLmZpbmQoXG4gICAgICAgICh7IGlkIH0pID0+IGlkID09PSBzdGF0ZS5xdWVyeS5vcmRlcixcbiAgICAgICkgPz8gbnVsbFxuICAgICk7XG4gIH1cblxuICBzZWFyY2hDaGFuZ2UgPSBkZWJvdW5jZSgocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnLCBwYXlsb2FkOiBxdWVyeSB9KTtcbiAgfSwgNTAwKTtcblxuICAvLyB0cmFja0J5U3ltYm9sIGZvciBvdXIgb3B0aW9uIGdyb3VwcyB0aGF0IGRvbid0IGhhdmUgYSBnb29kIGlkZW50aXR5LlxuICAvLyB0aGlzIGxhemlseSBhdHRhY2hlcyBhIEphdmFzY3JpcHQgc3ltYm9sIHRvIGFueSB2YWx1ZSBhbmQgcmV0dXJucyBpdC5cbiAgLy8gU3ltYm9scyBhcmUgZ3VhcmFudGVlZCB1bmlxdWUgYW5kIHRoZXkgZG8gbm90IGV4aXN0IGluIEpTT04sIHNvIHRoZXlcbiAgLy8gZG8gbm90IGludGVyZmVyZSB3aXRoIGFueSB0eXBlcyBvciBzZXJpYWxpemF0aW9uIGZvciBBUEkgY2FsbHMuIFRoZVxuICAvLyBvbmx5IHB1cnBvc2UgdGhleSBzZXJ2ZSBpcyB0byB0ZWxsIG5nRm9yIHdoaWNoIG9iamVjdHMgYXJlIHN0aWxsIGluXG4gIC8vIHRoZSBhcnJheS4gTm90ZTogdGhpcyBpcyBvbmx5IHNhZmUgb24gYW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAgdHJhY2tCeVN5bWJvbChfOiBudW1iZXIsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXZhbHVlLl90cmFja2luZ1N5bWJvbCkge1xuICAgICAgdmFsdWUuX3RyYWNraW5nU3ltYm9sID0gU3ltYm9sKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5fdHJhY2tpbmdTeW1ib2w7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uKF86IG51bWJlciwgb3B0aW9uOiBSaXZTZWxlY3QuRnVsbE9wdGlvbjxPPik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIG9wdGlvbi5pZDtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbGVjdENvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIE9yZGVyQnlPcHRpb24gPSB7XG4gICAgaWQ6IFJpdlNlbGVjdC5PcmRlckJ5O1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgaGVscDogc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBTaXplcyA9IFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFNpemUgPSAodHlwZW9mIFNpemVzKVtudW1iZXJdO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1hbmFnZXI/LnN0YXRlIHwgYXN5bmM7IGxldCBzXCI+XG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8cml2LWxvYWRpbmctY292ZXIgW2xvYWRpbmddPVwicy5sb2FkLmxvYWRpbmdcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50LWJvZHlcIlxuICAgICAgICBbY2xhc3MuaW5saW5lXT1cInMuZGlzcGxheS5pbmxpbmVcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ21heC1oZWlnaHQnOiBzLmRpc3BsYXkubWF4SGVpZ2h0LFxuICAgICAgICAgICdtYXgtd2lkdGgnOiBzLmRpc3BsYXkubWF4V2lkdGgsXG4gICAgICAgICAgJ21pbi1oZWlnaHQnOiBzLmRpc3BsYXkubWluSGVpZ2h0LFxuICAgICAgICAgICdtaW4td2lkdGgnOiBzLmRpc3BsYXkubWluV2lkdGhcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICAqbmdJZj1cInMucXVlcnkuc2hvd1NlYXJjaFwiXG4gICAgICAgICAgW3ZhbHVlXT1cInMucXVlcnkuc2VhcmNoXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicy5xdWVyeS5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F1dG9Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicy5xdWVyeS5zaG93T3JkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZGVyLWJ5XCI+U29ydCBieTo8L3NwYW4+XG4gICAgICAgICAgPHJpdi1zZWxlY3QgW21hbmFnZXJdPVwib3JkZXJCeU1hbmFnZXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHJpZ2dlciBsZXQtc3RhdGU9XCJzdGF0ZVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwic3RhdGUuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgICBbaWNvblBvc2l0aW9uXT1cIidsYXN0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRTZWxlY3RlZE9yZGVyQnlPcHRpb24ocyk/LnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3Jpdi1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgJiZcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dTZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgIXMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICBbbm9kZV09XCJ7XG4gICAgICAgICAgICAgIGlkOiAnX19OT09QX18nLFxuICAgICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5zZWFyY2ggPyAnU2VsZWN0IGFsbCBtYXRjaGluZycgOiAnU2VsZWN0IGFsbCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBzLnNlbGVjdGlvbi52aXNpYmxlU2VsZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygcy5mdWxsT3B0aW9uR3JvdXBzOyB0cmFja0J5OiB0cmFja0J5U3ltYm9sXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpdmlkZXJdPVwicy5kaXNwbGF5LmRpdmlkZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwLmhlYWRlcjsgbGV0IGhlYWRlclwiIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlPcHRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU7IGVsc2Ugc3RhbmRhcmRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG9wdGlvbiB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHJpdi1zZWxlY3Qtbm9kZVxuICAgICAgICAgICAgICAgICAgW21vZGVdPVwicy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCA/ICdtdWx0aScgOiAnc2luZ2xlJ1wiXG4gICAgICAgICAgICAgICAgICBbbm9kZV09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW3Nob3dTaW5nbGVTZWxlY3RlZF09XCJzLmRpc3BsYXkuc2hvd1NpbmdsZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdENoYW5nZShzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0LCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGV4cGFuZENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cInMuZGlzcGxheS5kaXNwbGF5TGltaXRNZXNzYWdlOyBsZXQgbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cImRpc3BsYXktbGltaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG1lc3NhZ2UgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHJpdi16ZXJvLXN0YXRlXG4gICAgICAgICAgICAqbmdJZj1cInMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlOyBsZXQgbWVzc2FnZVwiXG4gICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcbiAgICAgICAgICA+PC9yaXYtemVyby1zdGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb290ZXIgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZVwiIGNsYXNzPVwiY3VzdG9tLWZvb3RlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcml2LWxvYWRpbmctY292ZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzLmRpc3BsYXkuaW5saW5lOyBlbHNlIGNvbnRlbnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVHJpZ2dlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAjY3VzdG9tVHJpZ2dlckJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiYWxsb3dlZE9wZW4oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjdXN0b20tdHJpZ2dlci1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRyaWdnZXI+XG4gICAgICA8cml2LWlucHV0LWxhYmVsXG4gICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgIFtoZWxwXT1cImhlbHBcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbZXJyb3JNZXNzYWdlXT1cImVycm9yTWVzc2FnZVwiXG4gICAgICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAgICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgICAgICAgIFtjbGFzcy53YXJuaW5nXT1cInN0YXRlID09PSAnd2FybmluZydcIlxuICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZC5zaXplOyBlbHNlIHBsYWNlaG9sZGVyVmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBjdXN0b21TZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBlbHNlIHN0YW5kYXJkU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHNlbGVjdGVkOiBzLnNlbGVjdGlvbi5zZWxlY3RlZCB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3tcbiAgICAgICAgICAgICAgICBzLmRpc3BsYXkuZm9ybWF0dGVkU2VsZWN0ZWRPcHRpb25zXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInMuZGlzcGxheS5waWxsQ291bnQgPiAxXCIgY2xhc3M9XCJzZWxlY3RlZC1jb3VudFwiPlxuICAgICAgICAgICAgICAgIHt7IHMuZGlzcGxheS5waWxsQ291bnQgfCByaXZOdW1iZXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVmFsdWU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlIHBsYWNlaG9sZGVyXCI+e3sgcy5kaXNwbGF5LnBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uXCI+XG4gICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhbG9ja2VkXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwicy5kaXNwbGF5Lm9wZW4gPyAnQ2hldnJvblVwJyA6ICdDaGV2cm9uRG93bidcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgIDxyaXYtaWNvbiAqbmdJZj1cImxvY2tlZFwiIFtuYW1lXT1cIidMb2NrJ1wiIFtzaXplXT1cIjIwXCI+PC9yaXYtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9yaXYtaW5wdXQtbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLmRpc3BsYXkub3BlblwiPlxuICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICpyaXYtb3ZlcmxheVxuICAgICAgICBbYW5jaG9yXT1cImdldFRyaWdnZXIoKVwiXG4gICAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgICAgIFthbGxvd2VkUG9zaXRpb25zXT1cImFsbG93ZWRDYWxsb3V0UG9zaXRpb25zXCJcbiAgICAgICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cInByZWZlcnJlZENhbGxvdXRQb3NpdGlvblwiXG4gICAgICAgIChjbG9zZSk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ29wZW5DaGFuZ2UnLCBvcGVuOiBmYWxzZSB9KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBSUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXhHLE1BQU0sT0FBTyxlQUNYLFNBQVEsbUJBQW1CO0lBUDdCOztRQWNFLFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBR3RDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUd4Qiw0QkFBdUIsR0FBd0M7WUFDN0QsR0FBRyxvQ0FBb0M7U0FDeEMsQ0FBQztRQUdGLDZCQUF3QixHQUFzQyxjQUFjLENBQUM7UUFpR3BFLHdCQUFtQixHQUMxQjtZQUNFO2dCQUNFLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxFQUFFLEVBQUUsT0FBTzt3QkFDWCxLQUFLLEVBQUUsS0FBSzt3QkFDWixJQUFJLEVBQUUsK0NBQStD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RGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJdEIsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQjtnQkFJaEMscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1Qjs7QUE2SHBDLFdBQWlCLGVBQWU7SUFPakIscUJBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFN0QsQ0FBQyxFQVRnQixlQUFlLEtBQWYsZUFBZSxRQVMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNraXAsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaXZTZWxlY3QgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBDYWxsb3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vb3ZlcmxheS9jYWxsb3V0L2NhbGxvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRTZWxlY3RBbGxvd2VkQ2FsbG91dFBvc2l0aW9ucyB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvY2FsbG91dC9zZWxlY3QtY2FsbG91dC1kZWZhdWx0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudDxPIGV4dGVuZHMgUml2U2VsZWN0LkJhc2VPcHRpb24+XG4gIGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxPPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBTZWxlY3RDb21wb25lbnQuU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsb3dlZENhbGxvdXRQb3NpdGlvbnM6IENhbGxvdXRDb21wb25lbnQuQW5jaG9yZWRQb3NpdGlvbltdID0gW1xuICAgIC4uLmRlZmF1bHRTZWxlY3RBbGxvd2VkQ2FsbG91dFBvc2l0aW9ucyxcbiAgXTtcblxuICBASW5wdXQoKVxuICBwcmVmZXJyZWRDYWxsb3V0UG9zaXRpb246IENhbGxvdXRDb21wb25lbnQuQW5jaG9yZWRQb3NpdGlvbiA9ICdib3R0b20tcmlnaHQnO1xuXG4gIEBDb250ZW50Q2hpbGQoJ3RyaWdnZXInKVxuICB0cmlnZ2VyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHN0YXRlOiBSaXZTZWxlY3QuRnVsbFN0YXRlPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVNlbGVjdGVkT3B0aW9ucycpXG4gIGN1c3RvbVNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgIHNlbGVjdGVkOiBSaXZTZWxlY3QuT3B0aW9uU2V0PE8+O1xuICB9PjtcblxuICBAQ29udGVudENoaWxkKCdvcHRpb24nKVxuICBvcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgbm9kZTogUml2U2VsZWN0LkZ1bGxPcHRpb248Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJylcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHN0YXRlOiBSaXZTZWxlY3QuRnVsbFN0YXRlPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicpXG4gIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAVmlld0NoaWxkKCdjdXN0b21UcmlnZ2VyQnV0dG9uJylcbiAgY3VzdG9tVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnc3RhbmRhcmRUcmlnZ2VyQnV0dG9uJylcbiAgc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICBvcmRlckJ5TWFuYWdlcj86IFJpdlNlbGVjdC5NYW5hZ2VyPFNlbGVjdENvbXBvbmVudC5PcmRlckJ5T3B0aW9uPjtcbiAgcHJpdmF0ZSBvcmRlckJ5U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3JkZXJCeU1hbmFnZXIgPSBSaXZTZWxlY3QuY3JlYXRlSW5NZW1vcnlNYW5hZ2VyKFxuICAgICAgKCkgPT4gdGhpcy5vcmRlckJ5T3B0aW9uR3JvdXBzLFxuICAgICAge1xuICAgICAgICBzaG93U2luZ2xlU2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IG5ldyBSaXZTZWxlY3QuT3B0aW9uU2V0KFtcbiAgICAgICAgICAgICAgdGhpcy5vcmRlckJ5T3B0aW9uR3JvdXBzWzBdLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAoeyBpZCB9KSA9PiBpZCA9PT0gJ3RpdGxlJyxcbiAgICAgICAgICAgICAgKSEsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5vcmRlckJ5U3Vic2NyaXB0aW9uID0gdGhpcy5vcmRlckJ5TWFuYWdlci5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChzID0+IFsuLi5zLnNlbGVjdGlvbi5zZWxlY3RlZF1bMF0/LmlkID8/IG51bGwpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycmVudCkgPT4gcHJldiA9PT0gY3VycmVudCksXG4gICAgICAgIHNraXAoMSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKG9yZGVyID0+IHtcbiAgICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICAgIHR5cGU6ICdvcmRlckNoYW5nZScsXG4gICAgICAgICAgcGF5bG9hZDogb3JkZXIsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9yZGVyQnlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXRUcmlnZ2VyKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50ID8/XG4gICAgICB0aGlzLnN0YW5kYXJkVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBhbGxvd2VkT3BlbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubG9ja2VkKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdvcGVuQ2hhbmdlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdENoYW5nZShtdWx0aTogYm9vbGVhbiwgaWQ6IE9bJ2lkJ10pIHtcbiAgICBpZiAobXVsdGkpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJyxcbiAgICAgICAgaWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnc2V0U2VsZWN0ZWRPcHRpb24nLFxuICAgICAgICBpZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnb3BlbkNoYW5nZScsXG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgb3JkZXJCeU9wdGlvbkdyb3VwczogUml2U2VsZWN0Lk9wdGlvbkdyb3VwPFNlbGVjdENvbXBvbmVudC5PcmRlckJ5T3B0aW9uPltdID1cbiAgICBbXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ3RpdGxlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQS1aJyxcbiAgICAgICAgICAgIGhlbHA6ICdTb3J0cyB2YWx1ZXMgaW4gYWxwaGFudW1lcmljIG9yZGVyIChBLVosIDAtOSknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdjb3VudCcsXG4gICAgICAgICAgICB0aXRsZTogJ1ZvbHVtZScsXG4gICAgICAgICAgICBoZWxwOiAnU29ydHMgdmFsdWVzIGJ5IGNvdW50IChoaWdoZXN0IHRvIGxvd2VzdCknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgZ2V0U2VsZWN0ZWRPcmRlckJ5T3B0aW9uKFxuICAgIHN0YXRlOiBSaXZTZWxlY3QuRnVsbFN0YXRlPE8+LFxuICApOiBTZWxlY3RDb21wb25lbnQuT3JkZXJCeU9wdGlvbiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm9yZGVyQnlPcHRpb25Hcm91cHNbMF0ub3B0aW9ucy5maW5kKFxuICAgICAgICAoeyBpZCB9KSA9PiBpZCA9PT0gc3RhdGUucXVlcnkub3JkZXIsXG4gICAgICApID8/IG51bGxcbiAgICApO1xuICB9XG5cbiAgc2VhcmNoQ2hhbmdlID0gZGVib3VuY2UoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJywgcGF5bG9hZDogcXVlcnkgfSk7XG4gIH0sIDUwMCk7XG5cbiAgLy8gdHJhY2tCeVN5bWJvbCBmb3Igb3VyIG9wdGlvbiBncm91cHMgdGhhdCBkb24ndCBoYXZlIGEgZ29vZCBpZGVudGl0eS5cbiAgLy8gdGhpcyBsYXppbHkgYXR0YWNoZXMgYSBKYXZhc2NyaXB0IHN5bWJvbCB0byBhbnkgdmFsdWUgYW5kIHJldHVybnMgaXQuXG4gIC8vIFN5bWJvbHMgYXJlIGd1YXJhbnRlZWQgdW5pcXVlIGFuZCB0aGV5IGRvIG5vdCBleGlzdCBpbiBKU09OLCBzbyB0aGV5XG4gIC8vIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBhbnkgdHlwZXMgb3Igc2VyaWFsaXphdGlvbiBmb3IgQVBJIGNhbGxzLiBUaGVcbiAgLy8gb25seSBwdXJwb3NlIHRoZXkgc2VydmUgaXMgdG8gdGVsbCBuZ0ZvciB3aGljaCBvYmplY3RzIGFyZSBzdGlsbCBpblxuICAvLyB0aGUgYXJyYXkuIE5vdGU6IHRoaXMgaXMgb25seSBzYWZlIG9uIGFuIGFycmF5IG9mIG9iamVjdHMuXG4gIHRyYWNrQnlTeW1ib2woXzogbnVtYmVyLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZS5fdHJhY2tpbmdTeW1ib2wpIHtcbiAgICAgIHZhbHVlLl90cmFja2luZ1N5bWJvbCA9IFN5bWJvbCgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuX3RyYWNraW5nU3ltYm9sO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbihfOiBudW1iZXIsIG9wdGlvbjogUml2U2VsZWN0LkZ1bGxPcHRpb248Tz4pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBvcHRpb24uaWQ7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTZWxlY3RDb21wb25lbnQge1xuICBleHBvcnQgdHlwZSBPcmRlckJ5T3B0aW9uID0ge1xuICAgIGlkOiBSaXZTZWxlY3QuT3JkZXJCeTtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGhlbHA6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgY29uc3QgU2l6ZXMgPSBbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTaXplcylbbnVtYmVyXTtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPHJpdi1sb2FkaW5nLWNvdmVyIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29udGVudC1ib2R5XCJcbiAgICAgICAgW2NsYXNzLmlubGluZV09XCJzLmRpc3BsYXkuaW5saW5lXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdtYXgtaGVpZ2h0Jzogcy5kaXNwbGF5Lm1heEhlaWdodCxcbiAgICAgICAgICAnbWF4LXdpZHRoJzogcy5kaXNwbGF5Lm1heFdpZHRoLFxuICAgICAgICAgICdtaW4taGVpZ2h0Jzogcy5kaXNwbGF5Lm1pbkhlaWdodCxcbiAgICAgICAgICAnbWluLXdpZHRoJzogcy5kaXNwbGF5Lm1pbldpZHRoXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8aGVhZGVyICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxyaXYtc2VhcmNoXG4gICAgICAgICAgKm5nSWY9XCJzLnF1ZXJ5LnNob3dTZWFyY2hcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzLnF1ZXJ5LnNlYXJjaFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInMucXVlcnkuc2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgIFthdXRvRm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvcml2LXNlYXJjaD5cbiAgICAgICAgPGRpdiAqbmdJZj1cInMucXVlcnkuc2hvd09yZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmRlci1ieVwiPlNvcnQgYnk6PC9zcGFuPlxuICAgICAgICAgIDxyaXYtc2VsZWN0IFttYW5hZ2VyXT1cIm9yZGVyQnlNYW5hZ2VyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RyaWdnZXIgbGV0LXN0YXRlPVwic3RhdGVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cInN0YXRlLmRpc3BsYXkub3BlbiA/ICdDaGV2cm9uVXAnIDogJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Qb3NpdGlvbl09XCInbGFzdCdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZ2V0U2VsZWN0ZWRPcmRlckJ5T3B0aW9uKHMpPy50aXRsZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9yaXYtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICA8cml2LXNlbGVjdC1ub2RlXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0ICYmXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93U2VsZWN0QWxsICYmXG4gICAgICAgICAgICAgICFzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFttb2RlXT1cIidtdWx0aSdcIlxuICAgICAgICAgICAgW25vZGVdPVwie1xuICAgICAgICAgICAgICBpZDogJ19fTk9PUF9fJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHMucXVlcnkuc2VhcmNoID8gJ1NlbGVjdCBhbGwgbWF0Y2hpbmcnIDogJ1NlbGVjdCBhbGwnLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogcy5zZWxlY3Rpb24udmlzaWJsZVNlbGVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJyB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHMuZnVsbE9wdGlvbkdyb3VwczsgdHJhY2tCeTogdHJhY2tCeVN5bWJvbFwiXG4gICAgICAgICAgICBjbGFzcz1cImdyb3VwXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXZpZGVyXT1cInMuZGlzcGxheS5kaXZpZGVyc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cC5oZWFkZXI7IGxldCBoZWFkZXJcIiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICB7eyBoZWFkZXIgfX1cbiAgICAgICAgICAgICAgPHJpdi1oZWxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cC5oZWxwOyBsZXQgaGVscFwiXG4gICAgICAgICAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICA+PC9yaXYtaGVscD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBncm91cC5vcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICAgICAgIFttb2RlXT1cInMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgPyAnbXVsdGknIDogJ3NpbmdsZSdcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93U2luZ2xlU2VsZWN0ZWRdPVwicy5kaXNwbGF5LnNob3dTaW5nbGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RDaGFuZ2Uocy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChleHBhbmRDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25FeHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6ICRldmVudFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuZGlzcGxheUxpbWl0TWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWxpbWl0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImN1c3RvbS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcy5kaXNwbGF5LmlubGluZTsgZWxzZSBjb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRyaWdnZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3VzdG9tLXRyaWdnZXItYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc3RhdGU6IHMgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRUcmlnZ2VyPlxuICAgICAgPHJpdi1pbnB1dC1sYWJlbFxuICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICBbaGVscF09XCJoZWxwXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIlxuICAgICAgICBbbGFiZWxBY3Rpb25UZXh0XT1cImxhYmVsQWN0aW9uVGV4dFwiXG4gICAgICAgIChsYWJlbEFjdGlvbik9XCJsYWJlbEFjdGlvbi5lbWl0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgI3N0YW5kYXJkVHJpZ2dlckJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwidHJpZ2dlclwiXG4gICAgICAgICAgW2NsYXNzLnNtYWxsXT1cInNpemUgPT09ICdzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzcy5sYXJnZV09XCJzaXplID09PSAnbGFyZ2UnXCJcbiAgICAgICAgICBbY2xhc3Mud2FybmluZ109XCJzdGF0ZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwic3RhdGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTsgZWxzZSBwbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgY3VzdG9tU2VsZWN0ZWRPcHRpb25zVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgZWxzZSBzdGFuZGFyZFNlbGVjdGVkT3B0aW9uc1RlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21TZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWxlY3RlZDogcy5zZWxlY3Rpb24uc2VsZWN0ZWQgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRTZWxlY3RlZE9wdGlvbnNUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7XG4gICAgICAgICAgICAgICAgcy5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9uc1xuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzLmRpc3BsYXkucGlsbENvdW50ID4gMVwiIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj5cbiAgICAgICAgICAgICAgICB7eyBzLmRpc3BsYXkucGlsbENvdW50IHwgcml2TnVtYmVyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclZhbHVlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZSBwbGFjZWhvbGRlclwiPnt7IHMuZGlzcGxheS5wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvblwiPlxuICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWxvY2tlZFwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cInMuZGlzcGxheS5vcGVuID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8cml2LWljb24gKm5nSWY9XCJsb2NrZWRcIiBbbmFtZV09XCInTG9jaydcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvcml2LWlucHV0LWxhYmVsPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicy5kaXNwbGF5Lm9wZW5cIj5cbiAgICAgIDxyaXYtY2FsbG91dFxuICAgICAgICAqcml2LW92ZXJsYXlcbiAgICAgICAgW2FuY2hvcl09XCJnZXRUcmlnZ2VyKClcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJhbGxvd2VkQ2FsbG91dFBvc2l0aW9uc1wiXG4gICAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCJwcmVmZXJyZWRDYWxsb3V0UG9zaXRpb25cIlxuICAgICAgICAoY2xvc2UpPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdvcGVuQ2hhbmdlJywgb3BlbjogZmFsc2UgfSlcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|