@flywheel-io/vision 2.7.6 → 2.7.9
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/components/dialog/dialog-confirm.component.d.ts +3 -3
- package/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +4 -5
- package/components/select-menu/select-menu.component.d.ts +1 -0
- package/components/tooltip/tooltip-panel/tooltip-panel.component.d.ts +1 -1
- package/esm2022/components/dialog/dialog-confirm.component.mjs +10 -5
- package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +17 -14
- package/esm2022/components/select-menu/select-menu.component.mjs +10 -4
- package/fesm2022/flywheel-io-vision.mjs +33 -18
- package/fesm2022/flywheel-io-vision.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { DialogRef } from '@angular/cdk/dialog';
|
|
2
2
|
import { ElementRef, EventEmitter } from '@angular/core';
|
|
3
3
|
import { IconType } from '../icon/icon.types';
|
|
4
|
-
import { DialogWidth } from './dialog.component';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
export declare class FwDialogConfirmComponent {
|
|
7
6
|
dialogRef: DialogRef;
|
|
@@ -10,6 +9,7 @@ export declare class FwDialogConfirmComponent {
|
|
|
10
9
|
icon?: IconType;
|
|
11
10
|
iconColor?: 'primary' | 'secondary' | 'red' | 'orange' | 'green' | 'slate';
|
|
12
11
|
confirmColor?: 'primary' | 'secondary' | 'danger' | 'slate' | 'warning' | 'success';
|
|
12
|
+
cancelColor?: 'primary' | 'secondary' | 'danger' | 'slate' | 'warning' | 'success';
|
|
13
13
|
confirmButtonText?: string;
|
|
14
14
|
confirmButtonIcon?: IconType;
|
|
15
15
|
cancelButtonText?: string;
|
|
@@ -24,7 +24,6 @@ export declare class FwDialogConfirmComponent {
|
|
|
24
24
|
};
|
|
25
25
|
close: EventEmitter<void>;
|
|
26
26
|
confirm: EventEmitter<void>;
|
|
27
|
-
protected readonly DialogWidth: typeof DialogWidth;
|
|
28
27
|
private isClosing;
|
|
29
28
|
constructor(dialogRef: DialogRef, elementRef: ElementRef);
|
|
30
29
|
get classes(): {
|
|
@@ -32,7 +31,8 @@ export declare class FwDialogConfirmComponent {
|
|
|
32
31
|
};
|
|
33
32
|
get dialogClasses(): string;
|
|
34
33
|
handleCloseButton(): void;
|
|
34
|
+
protected handleConfirm(): void;
|
|
35
35
|
private closeWithAnimation;
|
|
36
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<FwDialogConfirmComponent, [{ optional: true; }, null]>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FwDialogConfirmComponent, "fw-dialog-confirm", never, { "title": { "alias": "title"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconColor": { "alias": "iconColor"; "required": false; }; "confirmColor": { "alias": "confirmColor"; "required": false; }; "confirmButtonText": { "alias": "confirmButtonText"; "required": false; }; "confirmButtonIcon": { "alias": "confirmButtonIcon"; "required": false; }; "cancelButtonText": { "alias": "cancelButtonText"; "required": false; }; "contentIcon": { "alias": "contentIcon"; "required": false; }; "contentTitle": { "alias": "contentTitle"; "required": false; }; "contentText": { "alias": "contentText"; "required": false; }; "showConfirmButtonIcon": { "alias": "showConfirmButtonIcon"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "width": { "alias": "width"; "required": false; }; "externalClasses": { "alias": "class"; "required": false; }; }, { "close": "close"; "confirm": "confirm"; }, never, never, false, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FwDialogConfirmComponent, "fw-dialog-confirm", never, { "title": { "alias": "title"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconColor": { "alias": "iconColor"; "required": false; }; "confirmColor": { "alias": "confirmColor"; "required": false; }; "cancelColor": { "alias": "cancelColor"; "required": false; }; "confirmButtonText": { "alias": "confirmButtonText"; "required": false; }; "confirmButtonIcon": { "alias": "confirmButtonIcon"; "required": false; }; "cancelButtonText": { "alias": "cancelButtonText"; "required": false; }; "contentIcon": { "alias": "contentIcon"; "required": false; }; "contentTitle": { "alias": "contentTitle"; "required": false; }; "contentText": { "alias": "contentText"; "required": false; }; "showConfirmButtonIcon": { "alias": "showConfirmButtonIcon"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; "width": { "alias": "width"; "required": false; }; "externalClasses": { "alias": "class"; "required": false; }; }, { "close": "close"; "confirm": "confirm"; }, never, never, false, never>;
|
|
38
38
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BooleanInput } from '@angular/cdk/coercion';
|
|
2
2
|
import { CdkMenuTrigger } from '@angular/cdk/menu';
|
|
3
|
-
import { AfterContentInit,
|
|
3
|
+
import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, QueryList, WritableSignal } from '@angular/core';
|
|
4
4
|
import { ControlValueAccessor } from '@angular/forms';
|
|
5
5
|
import { FwMenuComponent } from '../../menu/menu.component';
|
|
6
6
|
import { FwMenuContainerComponent } from '../../menu/menu-container/menu-container.component';
|
|
@@ -11,9 +11,8 @@ import * as i0 from "@angular/core";
|
|
|
11
11
|
* @see [Storybook Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/form-controls-multi-select--docs)
|
|
12
12
|
*/
|
|
13
13
|
export declare class FwMultiSelectMenuComponent implements ControlValueAccessor, AfterContentInit, OnDestroy {
|
|
14
|
-
protected _changeDetectorRef: ChangeDetectorRef;
|
|
15
14
|
private elementRef;
|
|
16
|
-
outsideClick(): void;
|
|
15
|
+
outsideClick(event: MouseEvent): void;
|
|
17
16
|
options: object[];
|
|
18
17
|
valueProperty?: string;
|
|
19
18
|
titleProperty?: string;
|
|
@@ -52,9 +51,9 @@ export declare class FwMultiSelectMenuComponent implements ControlValueAccessor,
|
|
|
52
51
|
get value(): any[];
|
|
53
52
|
set value(newValue: any[]);
|
|
54
53
|
private _value;
|
|
55
|
-
constructor(
|
|
54
|
+
constructor(elementRef: ElementRef);
|
|
56
55
|
tabIndex: number;
|
|
57
|
-
get
|
|
56
|
+
get disabledClass(): boolean;
|
|
58
57
|
onChange: (value: any[]) => void;
|
|
59
58
|
onTouched: () => void;
|
|
60
59
|
registerOnChange(fn: (value: any[]) => void): void;
|
|
@@ -9,6 +9,7 @@ export declare class FwSelectMenuComponent implements OnChanges, AfterContentIni
|
|
|
9
9
|
protected _changeDetectorRef: ChangeDetectorRef;
|
|
10
10
|
private ngControl;
|
|
11
11
|
outsideClick(evt: any): void;
|
|
12
|
+
get disabledClass(): boolean;
|
|
12
13
|
JSON: JSON;
|
|
13
14
|
options: object[];
|
|
14
15
|
valueProperty?: string;
|
|
@@ -5,7 +5,7 @@ export type DelayLength = 'none' | 'short' | 'long';
|
|
|
5
5
|
export type SimplePosition = 'above' | 'below' | 'left' | 'right';
|
|
6
6
|
export declare class FwTooltipPanelComponent {
|
|
7
7
|
animation: any;
|
|
8
|
-
trigger: import("@angular/core").InputSignalWithTransform<CdkOverlayOrigin,
|
|
8
|
+
trigger: import("@angular/core").InputSignalWithTransform<CdkOverlayOrigin, ElementRef<HTMLElement> | CdkOverlayOrigin>;
|
|
9
9
|
title: string;
|
|
10
10
|
isOpen: import("@angular/core").InputSignal<boolean>;
|
|
11
11
|
position: import("@angular/core").InputSignal<SimplePosition>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Component, EventEmitter, HostBinding, Input, Optional, Output } from '@angular/core';
|
|
2
|
-
import { DialogWidth } from './dialog.component';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
import * as i1 from "@angular/cdk/dialog";
|
|
5
4
|
import * as i2 from "@angular/common";
|
|
@@ -15,6 +14,7 @@ export class FwDialogConfirmComponent {
|
|
|
15
14
|
this.title = 'Confirm';
|
|
16
15
|
this.iconColor = 'primary';
|
|
17
16
|
this.confirmColor = 'primary';
|
|
17
|
+
this.cancelColor = 'slate';
|
|
18
18
|
this.confirmButtonText = 'Confirm';
|
|
19
19
|
this.confirmButtonIcon = 'done-check';
|
|
20
20
|
this.cancelButtonText = 'Cancel';
|
|
@@ -25,7 +25,6 @@ export class FwDialogConfirmComponent {
|
|
|
25
25
|
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
26
26
|
this.close = new EventEmitter();
|
|
27
27
|
this.confirm = new EventEmitter();
|
|
28
|
-
this.DialogWidth = DialogWidth;
|
|
29
28
|
this.isClosing = false;
|
|
30
29
|
}
|
|
31
30
|
get classes() {
|
|
@@ -57,6 +56,10 @@ export class FwDialogConfirmComponent {
|
|
|
57
56
|
handleCloseButton() {
|
|
58
57
|
this.closeWithAnimation();
|
|
59
58
|
}
|
|
59
|
+
handleConfirm() {
|
|
60
|
+
this.dialogRef.close(true);
|
|
61
|
+
this.confirm.emit();
|
|
62
|
+
}
|
|
60
63
|
closeWithAnimation() {
|
|
61
64
|
if (this.isClosing) {
|
|
62
65
|
return;
|
|
@@ -68,11 +71,11 @@ export class FwDialogConfirmComponent {
|
|
|
68
71
|
}, 300);
|
|
69
72
|
}
|
|
70
73
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogConfirmComponent, deps: [{ token: i1.DialogRef, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
74
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FwDialogConfirmComponent, selector: "fw-dialog-confirm", inputs: { title: "title", icon: "icon", iconColor: "iconColor", confirmColor: "confirmColor", cancelColor: "cancelColor", confirmButtonText: "confirmButtonText", confirmButtonIcon: "confirmButtonIcon", cancelButtonText: "cancelButtonText", contentIcon: "contentIcon", contentTitle: "contentTitle", contentText: "contentText", showConfirmButtonIcon: "showConfirmButtonIcon", showClose: "showClose", width: "width", externalClasses: ["class", "externalClasses"] }, outputs: { close: "close", confirm: "confirm" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n @if (contentIcon) {\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\">\n {{ contentIcon }}\n </fw-icon>\n }\n\n @if (contentTitle) {\n <p class=\"vision-p2 content-title\">\n {{ contentTitle }}\n </p>\n }\n\n @if (contentText) {\n <p class=\"vision-p2 content-text\">\n {{ contentText }}\n </p>\n }\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n @if (cancelButtonText) {\n <fw-button\n variant=\"outline\"\n [color]=\"cancelColor\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n }\n\n @if (confirmButtonText) {\n <fw-button\n variant=\"solid\"\n [color]=\"confirmColor\"\n [leftIcon]=\"showConfirmButtonIcon ? confirmButtonIcon : null\"\n (click)=\"handleConfirm()\">\n {{ confirmButtonText }}\n </fw-button>\n }\n </fw-dialog-actions>\n</fw-dialog>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host .fw-dialog-confirm{position:relative}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: i4.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i5.FwDialogActionsComponent, selector: "fw-dialog-actions" }, { kind: "component", type: i6.FwDialogComponent, selector: "fw-dialog", inputs: ["width", "title", "icon", "iconColor", "showClose", "class"], outputs: ["close"] }, { kind: "component", type: i7.FwDialogContentComponent, selector: "fw-dialog-content", inputs: ["padded"] }] }); }
|
|
72
75
|
}
|
|
73
76
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogConfirmComponent, decorators: [{
|
|
74
77
|
type: Component,
|
|
75
|
-
args: [{ selector: 'fw-dialog-confirm', template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\"
|
|
78
|
+
args: [{ selector: 'fw-dialog-confirm', template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n @if (contentIcon) {\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\">\n {{ contentIcon }}\n </fw-icon>\n }\n\n @if (contentTitle) {\n <p class=\"vision-p2 content-title\">\n {{ contentTitle }}\n </p>\n }\n\n @if (contentText) {\n <p class=\"vision-p2 content-text\">\n {{ contentText }}\n </p>\n }\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n @if (cancelButtonText) {\n <fw-button\n variant=\"outline\"\n [color]=\"cancelColor\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n }\n\n @if (confirmButtonText) {\n <fw-button\n variant=\"solid\"\n [color]=\"confirmColor\"\n [leftIcon]=\"showConfirmButtonIcon ? confirmButtonIcon : null\"\n (click)=\"handleConfirm()\">\n {{ confirmButtonText }}\n </fw-button>\n }\n </fw-dialog-actions>\n</fw-dialog>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host .fw-dialog-confirm{position:relative}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"] }]
|
|
76
79
|
}], ctorParameters: () => [{ type: i1.DialogRef, decorators: [{
|
|
77
80
|
type: Optional
|
|
78
81
|
}] }, { type: i0.ElementRef }], propDecorators: { title: [{
|
|
@@ -83,6 +86,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
83
86
|
type: Input
|
|
84
87
|
}], confirmColor: [{
|
|
85
88
|
type: Input
|
|
89
|
+
}], cancelColor: [{
|
|
90
|
+
type: Input
|
|
86
91
|
}], confirmButtonText: [{
|
|
87
92
|
type: Input
|
|
88
93
|
}], confirmButtonIcon: [{
|
|
@@ -112,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
112
117
|
type: HostBinding,
|
|
113
118
|
args: ['class']
|
|
114
119
|
}] } });
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1jb25maXJtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2RpYWxvZy9kaWFsb2ctY29uZmlybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQVMxRyxNQUFNLE9BQU8sd0JBQXdCO0lBdUJuQyxZQUErQixTQUFvQixFQUFVLFVBQXNCO1FBQXBELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBdEIxRSxVQUFLLEdBQVksU0FBUyxDQUFDO1FBRTNCLGNBQVMsR0FBb0UsU0FBUyxDQUFDO1FBQ3ZGLGlCQUFZLEdBQTBFLFNBQVMsQ0FBQztRQUNoRyxnQkFBVyxHQUEwRSxPQUFPLENBQUM7UUFDN0Ysc0JBQWlCLEdBQVksU0FBUyxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFjLFlBQVksQ0FBQztRQUM1QyxxQkFBZ0IsR0FBWSxRQUFRLENBQUM7UUFFckMsaUJBQVksR0FBWSxlQUFlLENBQUM7UUFFeEMsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsVUFBSyxHQUFnRixhQUFhLENBQUM7UUFHNUcsNERBQTREO1FBQ2xELFVBQUssR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyRCxZQUFPLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekQsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUcxQixDQUFDO0lBRUQsSUFBMEIsT0FBTztRQUMvQixNQUFNLE9BQU8sR0FB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ZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWNvblR5cGUgfSBmcm9tICcuLi9pY29uL2ljb24udHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdy1kaWFsb2ctY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2ctY29uZmlybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RpYWxvZy1jb25maXJtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZ3RGlhbG9nQ29uZmlybUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nID0gJ0NvbmZpcm0nO1xuICBASW5wdXQoKSBpY29uPzogSWNvblR5cGU7XG4gIEBJbnB1dCgpIGljb25Db2xvcj86ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3JlZCcgfCAnb3JhbmdlJyB8ICdncmVlbicgfCAnc2xhdGUnID0gJ3ByaW1hcnknO1xuICBASW5wdXQoKSBjb25maXJtQ29sb3I/OiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdkYW5nZXInIHwgJ3NsYXRlJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgY2FuY2VsQ29sb3I/OiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdkYW5nZXInIHwgJ3NsYXRlJyB8ICd3YXJuaW5nJyB8ICdzdWNjZXNzJyA9ICdzbGF0ZSc7XG4gIEBJbnB1dCgpIGNvbmZpcm1CdXR0b25UZXh0Pzogc3RyaW5nID0gJ0NvbmZpcm0nO1xuICBASW5wdXQoKSBjb25maXJtQnV0dG9uSWNvbj86IEljb25UeXBlID0gJ2RvbmUtY2hlY2snO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nID0gJ0NhbmNlbCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSBjb250ZW50VGl0bGU/OiBzdHJpbmcgPSAnQXJlIHlvdSBzdXJlPyc7XG4gIEBJbnB1dCgpIGNvbnRlbnRUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q29uZmlybUJ1dHRvbkljb24gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xvc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6ICdleHRyYS1zbWFsbCcgfCAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ2V4dHJhLWxhcmdlJyB8ICdyZXNwb25zaXZlJyA9ICdleHRyYS1zbWFsbCc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBleHRlcm5hbENsYXNzZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBpc0Nsb3NpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwdWJsaWMgZGlhbG9nUmVmOiBEaWFsb2dSZWYsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGdldCBjbGFzc2VzKCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICBjb25zdCBjbGFzc2VzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxDbGFzc2VzKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZXh0ZXJuYWxDbGFzc2VzID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmV4dGVybmFsQ2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGNscy50cmltKCkpIHtcbiAgICAgICAgICAgIGNsYXNzZXNbY2xzLnRyaW0oKV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5leHRlcm5hbENsYXNzZXMpKSB7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxDbGFzc2VzLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGNscy50cmltKCkpIHtcbiAgICAgICAgICAgIGNsYXNzZXNbY2xzLnRyaW0oKV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKGNsYXNzZXMsIHRoaXMuZXh0ZXJuYWxDbGFzc2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuXG4gIGdldCBkaWFsb2dDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNDbG9zaW5nID8gJ2RpYWxvZy1jbG9zaW5nJyA6ICcnO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2VCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVdpdGhBbmltYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb25maXJtKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICAgIHRoaXMuY29uZmlybS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlV2l0aEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Nsb3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ2xvc2luZyA9IHRydWU7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICB9LCAzMDApO1xuICB9XG59XG4iLCI8ZnctZGlhbG9nXG4gIFt3aWR0aF09XCJ3aWR0aFwiXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtpY29uXT1cImljb25cIlxuICBbaWNvbkNvbG9yXT1cImljb25Db2xvclwiXG4gIFtzaG93Q2xvc2VdPVwic2hvd0Nsb3NlXCJcbiAgW25nQ2xhc3NdPVwiZGlhbG9nQ2xhc3Nlc1wiPlxuICA8ZnctZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50LWNvbmZpcm1cIj5cbiAgICAgIEBpZiAoY29udGVudEljb24pIHtcbiAgICAgICAgPGZ3LWljb24gY2xhc3M9XCJjb250ZW50LWljb25cIiBbbmdDbGFzc109XCJjb25maXJtQ29sb3JcIj5cbiAgICAgICAgICB7eyBjb250ZW50SWNvbiB9fVxuICAgICAgICA8L2Z3LWljb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY29udGVudFRpdGxlKSB7XG4gICAgICAgIDxwIGNsYXNzPVwidmlzaW9uLXAyIGNvbnRlbnQtdGl0bGVcIj5cbiAgICAgICAgICB7eyBjb250ZW50VGl0bGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGNvbnRlbnRUZXh0KSB7XG4gICAgICAgIDxwIGNsYXNzPVwidmlzaW9uLXAyIGNvbnRlbnQtdGV4dFwiPlxuICAgICAgICAgIHt7IGNvbnRlbnRUZXh0IH19XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9mdy1kaWFsb2ctY29udGVudD5cbiAgPGZ3LWRpYWxvZy1hY3Rpb25zPlxuICAgIEBpZiAoY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgPGZ3LWJ1dHRvblxuICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgIFtjb2xvcl09XCJjYW5jZWxDb2xvclwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbG9zZUJ1dHRvbigpXCI+XG4gICAgICAgIHt7IGNhbmNlbEJ1dHRvblRleHQgfX1cbiAgICAgIDwvZnctYnV0dG9uPlxuICAgIH1cblxuICAgIEBpZiAoY29uZmlybUJ1dHRvblRleHQpIHtcbiAgICAgIDxmdy1idXR0b25cbiAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgW2NvbG9yXT1cImNvbmZpcm1Db2xvclwiXG4gICAgICAgIFtsZWZ0SWNvbl09XCJzaG93Q29uZmlybUJ1dHRvbkljb24gPyBjb25maXJtQnV0dG9uSWNvbiA6IG51bGxcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ29uZmlybSgpXCI+XG4gICAgICAgIHt7IGNvbmZpcm1CdXR0b25UZXh0IH19XG4gICAgICA8L2Z3LWJ1dHRvbj5cbiAgICB9XG4gIDwvZnctZGlhbG9nLWFjdGlvbnM+XG48L2Z3LWRpYWxvZz5cbiJdfQ==
|
|
@@ -21,8 +21,12 @@ import * as i9 from "../../../directives/menu-register.directive";
|
|
|
21
21
|
* @see [Storybook Docs](https://cdn.flywheel.io/docs/vision/master/?path=/docs/form-controls-multi-select--docs)
|
|
22
22
|
*/
|
|
23
23
|
export class FwMultiSelectMenuComponent {
|
|
24
|
-
outsideClick() {
|
|
24
|
+
outsideClick(event) {
|
|
25
25
|
if (this._isOpen) {
|
|
26
|
+
const clickedInside = this.elementRef.nativeElement.contains(event.target);
|
|
27
|
+
if (clickedInside) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
26
30
|
this.trigger.close();
|
|
27
31
|
this._isOpen = false;
|
|
28
32
|
}
|
|
@@ -36,8 +40,7 @@ export class FwMultiSelectMenuComponent {
|
|
|
36
40
|
set value(newValue) {
|
|
37
41
|
this.updateValue(newValue);
|
|
38
42
|
}
|
|
39
|
-
constructor(
|
|
40
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
43
|
+
constructor(elementRef) {
|
|
41
44
|
this.elementRef = elementRef;
|
|
42
45
|
// options
|
|
43
46
|
this.options = [];
|
|
@@ -134,8 +137,8 @@ export class FwMultiSelectMenuComponent {
|
|
|
134
137
|
}
|
|
135
138
|
};
|
|
136
139
|
}
|
|
137
|
-
get
|
|
138
|
-
return this.disabled
|
|
140
|
+
get disabledClass() {
|
|
141
|
+
return this.disabled;
|
|
139
142
|
}
|
|
140
143
|
registerOnChange(fn) {
|
|
141
144
|
this.onChange = fn;
|
|
@@ -287,14 +290,14 @@ export class FwMultiSelectMenuComponent {
|
|
|
287
290
|
}, 0);
|
|
288
291
|
}
|
|
289
292
|
}
|
|
290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwMultiSelectMenuComponent, deps: [{ token: i0.
|
|
291
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: FwMultiSelectMenuComponent, selector: "fw-multi-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, valueProperty: { classPropertyName: "valueProperty", publicName: "valueProperty", isSignal: false, isRequired: false, transformFunction: null }, titleProperty: { classPropertyName: "titleProperty", publicName: "titleProperty", isSignal: false, isRequired: false, transformFunction: null }, iconProperty: { classPropertyName: "iconProperty", publicName: "iconProperty", isSignal: false, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, useCheckbox: { classPropertyName: "useCheckbox", publicName: "useCheckbox", isSignal: false, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: false, isRequired: false, transformFunction: null }, maxSelectedShown: { classPropertyName: "maxSelectedShown", publicName: "maxSelectedShown", isSignal: false, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showSelectionInfo: { classPropertyName: "showSelectionInfo", publicName: "showSelectionInfo", isSignal: true, isRequired: false, transformFunction: null }, filterItemsOnSelect: { classPropertyName: "filterItemsOnSelect", publicName: "filterItemsOnSelect", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: false, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: false, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: false, isRequired: false, transformFunction: null }, optionsWidth: { classPropertyName: "optionsWidth", publicName: "optionsWidth", isSignal: false, isRequired: false, transformFunction: null }, minOptionsHeight: { classPropertyName: "minOptionsHeight", publicName: "minOptionsHeight", isSignal: false, isRequired: false, transformFunction: null }, maxOptionsHeight: { classPropertyName: "maxOptionsHeight", publicName: "maxOptionsHeight", isSignal: false, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "document:click": "outsideClick()", "keydown": "handleKeyDown($event)" }, properties: { "tabIndex": "this.tabIndex", "
|
|
293
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwMultiSelectMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
294
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: FwMultiSelectMenuComponent, selector: "fw-multi-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, valueProperty: { classPropertyName: "valueProperty", publicName: "valueProperty", isSignal: false, isRequired: false, transformFunction: null }, titleProperty: { classPropertyName: "titleProperty", publicName: "titleProperty", isSignal: false, isRequired: false, transformFunction: null }, iconProperty: { classPropertyName: "iconProperty", publicName: "iconProperty", isSignal: false, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, useCheckbox: { classPropertyName: "useCheckbox", publicName: "useCheckbox", isSignal: false, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: false, isRequired: false, transformFunction: null }, maxSelectedShown: { classPropertyName: "maxSelectedShown", publicName: "maxSelectedShown", isSignal: false, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showSelectionInfo: { classPropertyName: "showSelectionInfo", publicName: "showSelectionInfo", isSignal: true, isRequired: false, transformFunction: null }, filterItemsOnSelect: { classPropertyName: "filterItemsOnSelect", publicName: "filterItemsOnSelect", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: false, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: false, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: false, isRequired: false, transformFunction: null }, optionsWidth: { classPropertyName: "optionsWidth", publicName: "optionsWidth", isSignal: false, isRequired: false, transformFunction: null }, minOptionsHeight: { classPropertyName: "minOptionsHeight", publicName: "minOptionsHeight", isSignal: false, isRequired: false, transformFunction: null }, maxOptionsHeight: { classPropertyName: "maxOptionsHeight", publicName: "maxOptionsHeight", isSignal: false, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "document:click": "outsideClick($event)", "keydown": "handleKeyDown($event)" }, properties: { "tabIndex": "this.tabIndex", "class.disabled": "this.disabledClass" } }, providers: [
|
|
292
295
|
{
|
|
293
296
|
provide: NG_VALUE_ACCESSOR,
|
|
294
297
|
useExisting: forwardRef(() => FwMultiSelectMenuComponent),
|
|
295
298
|
multi: true,
|
|
296
299
|
},
|
|
297
|
-
], queries: [{ propertyName: "customMenuItems", predicate: FwMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "menuFilter", first: true, predicate: FwMenuContainerComponent, descendants: true, isSignal: true }, { propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], ngImport: i0, template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n\n <div\n fwMenuRegister\n class=\"chip-grid\"\n [ngClass]=\"[size]\"\n [ngStyle]=\"{ minHeight: minHeight, maxHeight: maxHeight }\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <span *ngIf=\"value.length === 0\" class=\"placeholder\">{{placeholder}}</span>\n\n <!-- CHIPS -->\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleChipClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"maxSelectedShown === 0 && value.length > 0\" class=\"selected-text\">\n {{ value.length }} selected\n </span>\n <span *ngIf=\"value.length > maxSelectedShown && maxSelectedShown > 0\" class=\"max-exceeded\">\n +{{ value.length - maxSelectedShown }} more\n </span>\n </div>\n\n <fw-icon *ngIf=\"showClear() && value.length > 0\" (click)=\"updateValue([])\">close</fw-icon>\n <fw-icon>chevron-down</fw-icon>\n </div>\n\n <!-- MENU -->\n <ng-template #selectMenu>\n <fw-menu-filter\n [keyHandler]=\"handleKeyDown\"\n [showFilter]=\"showFilter()\"\n [focusFilterOnMount]=\"showFilter()\"\n [width]=\"optionsWidth || (wrapper.offsetWidth - 2) + 'px'\"\n [additionalMenuItems]=\"this.customMenuItems.toArray()\"\n [emptyText]=\"emptyText\"\n [maxHeight]=\"maxOptionsHeight\"\n [minHeight]=\"minOptionsHeight\"\n [filterFn]=\"customFilter\"\n (filteredMenuItemChange)=\"displayedOptions.set($event)\"\n
|
|
300
|
+
], queries: [{ propertyName: "customMenuItems", predicate: FwMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "menuFilter", first: true, predicate: FwMenuContainerComponent, descendants: true, isSignal: true }, { propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], ngImport: i0, template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n\n <div\n fwMenuRegister\n class=\"chip-grid\"\n [ngClass]=\"[size]\"\n [ngStyle]=\"{ minHeight: minHeight, maxHeight: maxHeight }\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <span *ngIf=\"value.length === 0\" class=\"placeholder\">{{placeholder}}</span>\n\n <!-- CHIPS -->\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleChipClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"maxSelectedShown === 0 && value.length > 0\" class=\"selected-text\">\n {{ value.length }} selected\n </span>\n <span *ngIf=\"value.length > maxSelectedShown && maxSelectedShown > 0\" class=\"max-exceeded\">\n +{{ value.length - maxSelectedShown }} more\n </span>\n </div>\n\n <fw-icon *ngIf=\"showClear() && value.length > 0\" (click)=\"updateValue([])\">close</fw-icon>\n <fw-icon>chevron-down</fw-icon>\n </div>\n\n <!-- MENU -->\n <ng-template #selectMenu>\n <fw-menu-filter\n [keyHandler]=\"handleKeyDown\"\n [showFilter]=\"showFilter()\"\n [focusFilterOnMount]=\"showFilter()\"\n [width]=\"optionsWidth || (wrapper.offsetWidth - 2) + 'px'\"\n [additionalMenuItems]=\"this.customMenuItems.toArray()\"\n [emptyText]=\"emptyText\"\n [maxHeight]=\"maxOptionsHeight\"\n [minHeight]=\"minOptionsHeight\"\n [filterFn]=\"customFilter\"\n (filteredMenuItemChange)=\"displayedOptions.set($event)\"\n >\n <div class=\"filter-content\" *ngIf=\"showSelectionInfo()\">\n <p>{{value.length}} selections</p>\n <fw-button variant=\"ghost\" (click)=\"updateValue([])\">Clear</fw-button>\n </div>\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled\"\n [value]=\"createArray(selectedValues)\"\n (change)=\"handleMenuChange($event)\">\n <ng-container *ngIf=\"customMenuItems.length === 0\">\n <fw-menu-item\n *ngFor=\"let item of options; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [selected]=\"value.includes(item[valueProperty])\"\n [showCheckbox]=\"useCheckbox\"\n (mouseenter)=\"setFocusedIndex(item)\"\n >\n </fw-menu-item>\n </ng-container>\n <ng-content ngProjectAs=\"custom-menu-items\" select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></ng-content>\n </fw-menu>\n </fw-menu-filter>\n </ng-template>\n</div>\n", styles: [":host{pointer-events:auto}:host.disabled{opacity:.4;cursor:not-allowed}:host.disabled>div{pointer-events:none}:host .placeholder{color:var(--typography-light);font-size:14px;padding-left:4px;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}:host .chip-grid{min-height:36px;width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;justify-content:space-between;padding:4px;align-items:center;border-radius:6px;overflow:hidden;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .selected-text{color:var(--typography-base);font-size:14px;padding:0 2px 0 4px;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}:host .chip-grid .max-exceeded{font-size:12px}.filter-content{display:flex;align-items:center;justify-content:space-between;padding-left:4px;padding-top:4px}.filter-content p{color:var(--typography-muted);width:fit-content;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i3.FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: i4.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "textWrap", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: i5.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i6.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value"], outputs: ["change"] }, { kind: "component", type: i7.FwMenuContainerComponent, selector: "fw-menu-container, fw-menu-filter", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "focusFilterOnMount", "offset", "emptyText", "filterFn", "additionalMenuItems", "keyHandler"], outputs: ["filteredMenuItemChange", "filterChanged"] }, { kind: "component", type: i8.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "mouseEnterHandler", "focused", "selected"], outputs: ["mouseEnterHandlerChange", "click"] }, { kind: "directive", type: i9.MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] }); }
|
|
298
301
|
}
|
|
299
302
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
|
|
300
303
|
type: Component,
|
|
@@ -304,10 +307,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
304
307
|
useExisting: forwardRef(() => FwMultiSelectMenuComponent),
|
|
305
308
|
multi: true,
|
|
306
309
|
},
|
|
307
|
-
], template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n\n <div\n fwMenuRegister\n class=\"chip-grid\"\n [ngClass]=\"[size]\"\n [ngStyle]=\"{ minHeight: minHeight, maxHeight: maxHeight }\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <span *ngIf=\"value.length === 0\" class=\"placeholder\">{{placeholder}}</span>\n\n <!-- CHIPS -->\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleChipClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"maxSelectedShown === 0 && value.length > 0\" class=\"selected-text\">\n {{ value.length }} selected\n </span>\n <span *ngIf=\"value.length > maxSelectedShown && maxSelectedShown > 0\" class=\"max-exceeded\">\n +{{ value.length - maxSelectedShown }} more\n </span>\n </div>\n\n <fw-icon *ngIf=\"showClear() && value.length > 0\" (click)=\"updateValue([])\">close</fw-icon>\n <fw-icon>chevron-down</fw-icon>\n </div>\n\n <!-- MENU -->\n <ng-template #selectMenu>\n <fw-menu-filter\n [keyHandler]=\"handleKeyDown\"\n [showFilter]=\"showFilter()\"\n [focusFilterOnMount]=\"showFilter()\"\n [width]=\"optionsWidth || (wrapper.offsetWidth - 2) + 'px'\"\n [additionalMenuItems]=\"this.customMenuItems.toArray()\"\n [emptyText]=\"emptyText\"\n [maxHeight]=\"maxOptionsHeight\"\n [minHeight]=\"minOptionsHeight\"\n [filterFn]=\"customFilter\"\n (filteredMenuItemChange)=\"displayedOptions.set($event)\"\n
|
|
308
|
-
}], ctorParameters: () => [{ type: i0.
|
|
310
|
+
], template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n\n <div\n fwMenuRegister\n class=\"chip-grid\"\n [ngClass]=\"[size]\"\n [ngStyle]=\"{ minHeight: minHeight, maxHeight: maxHeight }\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <span *ngIf=\"value.length === 0\" class=\"placeholder\">{{placeholder}}</span>\n\n <!-- CHIPS -->\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleChipClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"maxSelectedShown === 0 && value.length > 0\" class=\"selected-text\">\n {{ value.length }} selected\n </span>\n <span *ngIf=\"value.length > maxSelectedShown && maxSelectedShown > 0\" class=\"max-exceeded\">\n +{{ value.length - maxSelectedShown }} more\n </span>\n </div>\n\n <fw-icon *ngIf=\"showClear() && value.length > 0\" (click)=\"updateValue([])\">close</fw-icon>\n <fw-icon>chevron-down</fw-icon>\n </div>\n\n <!-- MENU -->\n <ng-template #selectMenu>\n <fw-menu-filter\n [keyHandler]=\"handleKeyDown\"\n [showFilter]=\"showFilter()\"\n [focusFilterOnMount]=\"showFilter()\"\n [width]=\"optionsWidth || (wrapper.offsetWidth - 2) + 'px'\"\n [additionalMenuItems]=\"this.customMenuItems.toArray()\"\n [emptyText]=\"emptyText\"\n [maxHeight]=\"maxOptionsHeight\"\n [minHeight]=\"minOptionsHeight\"\n [filterFn]=\"customFilter\"\n (filteredMenuItemChange)=\"displayedOptions.set($event)\"\n >\n <div class=\"filter-content\" *ngIf=\"showSelectionInfo()\">\n <p>{{value.length}} selections</p>\n <fw-button variant=\"ghost\" (click)=\"updateValue([])\">Clear</fw-button>\n </div>\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled\"\n [value]=\"createArray(selectedValues)\"\n (change)=\"handleMenuChange($event)\">\n <ng-container *ngIf=\"customMenuItems.length === 0\">\n <fw-menu-item\n *ngFor=\"let item of options; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [selected]=\"value.includes(item[valueProperty])\"\n [showCheckbox]=\"useCheckbox\"\n (mouseenter)=\"setFocusedIndex(item)\"\n >\n </fw-menu-item>\n </ng-container>\n <ng-content ngProjectAs=\"custom-menu-items\" select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></ng-content>\n </fw-menu>\n </fw-menu-filter>\n </ng-template>\n</div>\n", styles: [":host{pointer-events:auto}:host.disabled{opacity:.4;cursor:not-allowed}:host.disabled>div{pointer-events:none}:host .placeholder{color:var(--typography-light);font-size:14px;padding-left:4px;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}:host .chip-grid{min-height:36px;width:100%;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;justify-content:space-between;padding:4px;align-items:center;border-radius:6px;overflow:hidden;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .selected-text{color:var(--typography-base);font-size:14px;padding:0 2px 0 4px;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}:host .chip-grid .max-exceeded{font-size:12px}.filter-content{display:flex;align-items:center;justify-content:space-between;padding-left:4px;padding-top:4px}.filter-content p{color:var(--typography-muted);width:fit-content;margin:0}\n"] }]
|
|
311
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { outsideClick: [{
|
|
309
312
|
type: HostListener,
|
|
310
|
-
args: ['document:click']
|
|
313
|
+
args: ['document:click', ['$event']]
|
|
311
314
|
}], options: [{
|
|
312
315
|
type: Input
|
|
313
316
|
}], valueProperty: [{
|
|
@@ -361,11 +364,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
361
364
|
}], tabIndex: [{
|
|
362
365
|
type: HostBinding,
|
|
363
366
|
args: ['tabIndex']
|
|
364
|
-
}],
|
|
367
|
+
}], disabledClass: [{
|
|
365
368
|
type: HostBinding,
|
|
366
|
-
args: ['
|
|
369
|
+
args: ['class.disabled']
|
|
367
370
|
}], handleKeyDown: [{
|
|
368
371
|
type: HostListener,
|
|
369
372
|
args: ['keydown', ['$event']]
|
|
370
373
|
}] } });
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUdMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsTUFBTSxFQUVOLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFFL0U7OztHQUdHO0FBYUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNMLFlBQVk7UUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FB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QkFHSCxLQUFLO3NCQURSLEtBQUs7Z0JBZ0JtQixRQUFRO3NCQUFoQyxXQUFXO3VCQUFDLFVBQVU7Z0JBQ2tCLGFBQWE7c0JBQXJELFdBQVc7dUJBQUMsc0JBQXNCO2dCQTRPbkMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDZGtNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9tZW51JztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRndNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGd01lbnVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUtY29udGFpbmVyL21lbnUtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGd01lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWVudS9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRndNdWx0aVNlbGVjdCBhIGNvbXBvbmVudCBmb3Igc2VsZWN0aW5nIG11bHRpcGxlIG9wdGlvbnNcbiAqIEBzZWUgW1N0b3J5Ym9vayBEb2NzXShodHRwczovL2Nkbi5mbHl3aGVlbC5pby9kb2NzL3Zpc2lvbi9tYXN0ZXIvP3BhdGg9L2RvY3MvZm9ybS1jb250cm9scy1tdWx0aS1zZWxlY3QtLWRvY3MpXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Z3LW11bHRpLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1zZWxlY3QtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRndNdWx0aVNlbGVjdE1lbnVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRndNdWx0aVNlbGVjdE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKSBvdXRzaWRlQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJpZ2dlciAmJiB0aGlzLnRyaWdnZXIuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBASW5wdXQoKSBvcHRpb25zOiBvYmplY3RbXSA9IFtdO1xuICBASW5wdXQoKSB2YWx1ZVByb3BlcnR5Pzogc3RyaW5nID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyA9ICd0aXRsZSc7XG4gIEBJbnB1dCgpIGljb25Qcm9wZXJ0eT86IHN0cmluZyA9ICdpY29uJztcblxuXG4gIC8vIGJlaGF2aW91clxuICBASW5wdXQoKSBlbXB0eVRleHQ6IHN0cmluZyA9ICdObyBtYXRjaGVzIGZvdW5kLi4uJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3Qgc29tZXRoaW5nLi4uJztcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZUNoZWNrYm94PzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjbG9zZU9uU2VsZWN0PzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIG1heFNlbGVjdGVkU2hvd246IG51bWJlciA9IDEwMDtcblxuICBzaG93Q2xlYXIgPSBpbnB1dChmYWxzZSk7XG4gIHNob3dGaWx0ZXIgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogKHZhbDogQm9vbGVhbklucHV0KSA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKSB9KTtcbiAgc2hvd1NlbGVjdGlvbkluZm8gPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWw6IEJvb2xlYW5JbnB1dCkgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbCkgfSk7XG4gIGZpbHRlckl0ZW1zT25TZWxlY3QgPSBpbnB1dCh0cnVlLCB7IHRyYW5zZm9ybTogKHZhbDogQm9vbGVhbklucHV0KSA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKSB9KTtcblxuICAvLyBzaXppbmdcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG1pbkhlaWdodDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG1heEhlaWdodDogc3RyaW5nID0gJzIwMHB4JztcbiAgQElucHV0KCkgb3B0aW9uc1dpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBtaW5PcHRpb25zSGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBtYXhPcHRpb25zSGVpZ2h0OiBzdHJpbmcgPSAnNDAwcHgnO1xuICBASW5wdXQoKSBzaXplPzogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJyA9ICdtZWRpdW0nO1xuXG4gIC8vIHZpZXcgY2hpbGRyZW5cbiAgQFZpZXdDaGlsZChDZGtNZW51VHJpZ2dlcikgdHJpZ2dlcjogQ2RrTWVudVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoRndNZW51Q29tcG9uZW50KSBtZW51OiBGd01lbnVDb21wb25lbnQ7XG4gIG1lbnVGaWx0ZXIgPSB2aWV3Q2hpbGQoRndNZW51Q29udGFpbmVyQ29tcG9uZW50KTtcbiAgQFZpZXdDaGlsZHJlbihGd01lbnVJdGVtQ29tcG9uZW50KSByZW5kZXJlZE1lbnVJdGVtczogUXVlcnlMaXN0PEZ3TWVudUl0ZW1Db21wb25lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY3VzdG9tTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG5cbiAgLy8gbmVlZCB0aGlzIGZvciB0aGUgdGVtcGxhdGVcbiAgY3JlYXRlQXJyYXkgPSAoZDogSXRlcmFibGU8c3RyaW5nPik6IHN0cmluZ1tdID0+IEFycmF5LmZyb20oZCk7XG5cbiAgLy8gaW50ZXJuYWwgc3RhdGVcbiAgc2VsZWN0ZWRWYWx1ZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBzZWxlY3RlZE9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIGRpc3BsYXllZE9wdGlvbnM6IFdyaXRhYmxlU2lnbmFsPEZ3TWVudUl0ZW1Db21wb25lbnRbXT4gPSBzaWduYWwoW10pO1xuICBmb2N1c2VkSW5kZXggPSBzaWduYWwoMCk7XG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICApIHt9XG5cbiAgQEhvc3RCaW5kaW5nKCd0YWJJbmRleCcpIHRhYkluZGV4ID0gMDtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb2ludGVyLWV2ZW50cycpIGdldCBwb2ludGVyRXZlbnRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnbm9uZScgOiAnYXV0byc7XG4gIH1cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55W10pID0+IHZvaWQ7XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKVxuXG4gICAgdGhpcy5jdXN0b21NZW51SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckN1c3RvbU1lbnVJdGVtcygpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ3VzdG9tTWVudUl0ZW1zKCk6IHZvaWQge1xuICAgIC8vIGZpcnN0IGZpbHRlciBhbnkgbWVudUl0ZW1zIHdlJ3ZlIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBvcHRpb25zXG4gICAgY29uc3QgbmV3TWVudUl0ZW1zID0gdGhpcy5jdXN0b21NZW51SXRlbXM/LmZpbHRlcihcbiAgICAgIG1lbnVJdGVtID0+ICF0aGlzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gbWVudUl0ZW0udmFsdWUgPT09IChvcHRpb24gYXMgYW55KS52YWx1ZSksXG4gICAgKVxuXG4gICAgbmV3TWVudUl0ZW1zLmZvckVhY2goKG5ld01lbnVJdGVtKSA9PiB7XG5cbiAgICAgIC8vIHN5bmMgcmVuZGVyIHNldHRpbmdzXG4gICAgICB0aGlzLmN1c3RvbU1lbnVJdGVtcz8uZm9yRWFjaChtZW51SXRlbSA9PiB7XG4gICAgICAgIG1lbnVJdGVtLnNob3dDaGVja2JveCA9IHRoaXMudXNlQ2hlY2tib3g7XG4gICAgICAgIG1lbnVJdGVtLm11bHRpU2VsZWN0ID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBhZGQgaXQgdG8gdGhlIG9wdGlvbnNcbiAgICAgIC8vIGEgbG90IG9mIG91ciB2YWx1ZSBoYW5kbGluZyBsb2dpYyByZWxpZXMgb25cbiAgICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IG5ld01lbnVJdGVtLnZhbHVlLFxuICAgICAgICB0aXRsZTogbmV3TWVudUl0ZW0udGl0bGUsXG4gICAgICAgIGljb246IG5ld01lbnVJdGVtLmljb24sXG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuXG4gICAgICBuZXdNZW51SXRlbS5tb3VzZUVudGVySGFuZGxlci5zZXQoKF8sIGl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c2VkSW5kZXgoaXRlbSk7XG4gICAgICB9KVxuXG4gICAgICAvLyBhZGQgY2xpY2sgbGlzdGVuZXJcbiAgICAgIGNvbnN0IHN1YiA9IG5ld01lbnVJdGVtLmNsaWNrLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuYWRkVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xuICAgIH0pXG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGlwQ2xvc2UoY2hpcDogb2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWVzID0gdGhpcy52YWx1ZS5maWx0ZXIodmFsID0+IHZhbCAhPT0gY2hpcFt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG5ld1ZhbHVlcyk7XG4gICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gIH1cblxuICAvLyBoYW5kbGVzIHRoZSB2YWx1ZSBlbWlzc2lvbiBmcm9tIHRoZSBtZW51XG4gIC8vIFRPRE86IG1ha2UgbWVudSBhIGR1bWIgY29tcG9uZW50LCBpdCBzaG91bGRuJ3QgYmUgaGFuZGxpbmcgdmFsdWVzIGlkZWFsbHlcbiAgaGFuZGxlTWVudUNoYW5nZShlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gYWRkcyBhIHNpbmdsZSB2YWx1ZVxuICBhZGRWYWx1ZShpbmNvbWluZzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy52YWx1ZS5pbmNsdWRlcyhpbmNvbWluZyk7XG5cbiAgICBpZiAoYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzcGxpY2VkT3V0ID0gdGhpcy52YWx1ZS50b1NwbGljZWQodGhpcy52YWx1ZS5pbmRleE9mKGluY29taW5nKSwgMSk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHNwbGljZWRPdXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoWy4uLnRoaXMudmFsdWUsIGluY29taW5nXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gaGFuZGxlcyBhbGwgdGhlIGRpc3BsYXkgc2lkZSBlZmZlY3RzIG9mIGEgdmFsdWUgY2hhbmdlXG4gIHVwZGF0ZVZhbHVlKGluY29taW5nVmFsdWVzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgaWYgKCFpbmNvbWluZ1ZhbHVlcykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jbGVhcigpO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMucG9zdFNlbGVjdFNpZGVFZmZlY3RzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG5cbiAgICBpbmNvbWluZ1ZhbHVlcy5mb3JFYWNoKGluY29taW5nID0+IHtcblxuICAgICAgaWYgKHR5cGVvZiBpbmNvbWluZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5hZGQoaW5jb21pbmdbdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmcpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuYWRkKGluY29taW5nKTtcblxuICAgICAgICBjb25zdCBpbmNvbWluZ01hcHBlZFRvT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdFt0aGlzLnZhbHVlUHJvcGVydHldID09PSBpbmNvbWluZyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmdNYXBwZWRUb09wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl92YWx1ZSA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLnBvc3RTZWxlY3RTaWRlRWZmZWN0cygpO1xuICB9XG5cbiAgLy8gY3VzdG9tIGZpbHRlciBmb3IgaGFuZGxpbmcgZmlsdGVyT25TZWxlY3RcbiAgY3VzdG9tRmlsdGVyID0gKGZpbHRlcjogc3RyaW5nLCBtZW51SXRlbXM6IEZ3TWVudUl0ZW1Db21wb25lbnRbXSk6IEZ3TWVudUl0ZW1Db21wb25lbnRbXSA9PiB7XG4gICAgcmV0dXJuIG1lbnVJdGVtcy5maWx0ZXIobWVudUl0ZW0gPT4ge1xuICAgICAgY29uc3QgZmlsdGVyTWF0Y2hlcyA9IG1lbnVJdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMudmFsdWUuaW5jbHVkZXMobWVudUl0ZW0udmFsdWUpO1xuICAgICAgY29uc3QgZmlsdGVyQmVjYXVzZVNlbGVjdGVkID0gaXNTZWxlY3RlZCAmJiB0aGlzLmZpbHRlckl0ZW1zT25TZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGZpbHRlck1hdGNoZXMgJiYgIWZpbHRlckJlY2F1c2VTZWxlY3RlZDtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNlZChkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3QgY2xhbXBJbmRleCA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChuID49IG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleENoYW5nZSA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGluZGV4Q2hhbmdlKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3bHlGb2N1c2VkID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgIG5ld2x5Rm9jdXNlZC5zY3JvbGxJbnRvVmlldygpO1xuICB9XG5cbiAgc2V0Rm9jdXNlZEluZGV4KGl0ZW06IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZEluZGV4ID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCkuZmluZEluZGV4KGkgPT4gaS52YWx1ZSA9PT0gaXRlbVt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoZm91bmRJbmRleCk7XG4gIH1cblxuICBkaXNwbGF5Rm9jdXNJbmRpY2F0b3IgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMuZGlzcGxheWVkT3B0aW9ucygpLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmZvY3VzZWQgPSBpbmRleCA9PT0gdGhpcy5mb2N1c2VkSW5kZXgoKTtcbiAgICB9KVxuICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pXG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzICovXG4gIHByaXZhdGUga2V5Ym9hcmRBY3Rpb25NYXAgPSB7XG4gICAgJ0Fycm93RG93bic6ICgpID0+IHtcbiAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ2Rvd24nKTtcbiAgICB9LFxuICAgICdBcnJvd1VwJzogKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlRm9jdXNlZCgndXAnKTtcbiAgICB9LFxuICAgICdUYWInOiAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICAnRXNjYXBlJzogKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgJ0VudGVyJzogKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRNZW51SXRlbSA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpW3RoaXMuZm9jdXNlZEluZGV4KCldO1xuXG4gICAgICBpZiAoIXNlbGVjdGVkTWVudUl0ZW0pIHsgcmV0dXJuIH1cblxuICAgICAgdGhpcy5hZGRWYWx1ZShzZWxlY3RlZE1lbnVJdGVtLnZhbHVlKTtcbiAgICAgIHRoaXMucG9zdFNlbGVjdFNpZGVFZmZlY3RzKCk7XG4gICAgfSxcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VkVHJpZ2dlcktleWJvYXJkQWN0aW9uc01hcCA9IHtcbiAgICAnRW50ZXInOiAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgIH0sXG4gICAgJ0JhY2tzcGFjZSc6ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZS50b1NwbGljZWQoLTEpKTtcbiAgICB9LFxuICB9XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICAvLyBuZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiB0byBsb2NrIHRoZSBzY29wZVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT57XG5cbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy50cmlnZ2VyLmlzT3BlbigpID8gdGhpcy5rZXlib2FyZEFjdGlvbk1hcFtldmVudC5rZXldIDogdGhpcy5jbG9zZWRUcmlnZ2VyS2V5Ym9hcmRBY3Rpb25zTWFwW2V2ZW50LmtleV07XG5cbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc3RTZWxlY3RTaWRlRWZmZWN0cygpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnVGaWx0ZXIoKT8ub25GaWx0ZXJDaGFuZ2UoJycpO1xuXG4gICAgdGhpcy5jdXN0b21NZW51SXRlbXM/LmZvckVhY2gobWVudUl0ZW0gPT4ge1xuICAgICAgbWVudUl0ZW0uc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKG1lbnVJdGVtLnZhbHVlKTtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IFtuZ1N0eWxlXT1cInt3aWR0aDogd2lkdGh9XCIgI3dyYXBwZXI+XG5cbiAgPGRpdlxuICAgIGZ3TWVudVJlZ2lzdGVyXG4gICAgY2xhc3M9XCJjaGlwLWdyaWRcIlxuICAgIFtuZ0NsYXNzXT1cIltzaXplXVwiXG4gICAgW25nU3R5bGVdPVwieyBtaW5IZWlnaHQ6IG1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHQgfVwiXG4gICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInNlbGVjdE1lbnVcIj5cbiAgICA8c3BhbiAqbmdJZj1cInZhbHVlLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG5cbiAgICA8IS0tIENISVBTIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jaGlwLWdyaWRcIiAqbmdJZj1cInZhbHVlICYmIHZhbHVlLmxlbmd0aD4wXCI+XG4gICAgICA8ZnctY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBzZWxlY3RlZE9wdGlvbnMgfCBzbGljZTowOm1heFNlbGVjdGVkU2hvd25cIlxuICAgICAgICBbdGl0bGVdPVwiY2hpcFt0aXRsZVByb3BlcnR5XVwiXG4gICAgICAgIFt2YWx1ZV09XCJjaGlwW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgW2ljb25dPVwiY2hpcFtpY29uUHJvcGVydHldXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNoaXBDbG9zZShjaGlwKVwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCI+XG4gICAgICA8L2Z3LWNoaXA+XG4gICAgICA8c3BhbiAqbmdJZj1cIm1heFNlbGVjdGVkU2hvd24gPT09IDAgJiYgdmFsdWUubGVuZ3RoID4gMFwiIGNsYXNzPVwic2VsZWN0ZWQtdGV4dFwiPlxuICAgICAgICB7eyB2YWx1ZS5sZW5ndGggfX0gc2VsZWN0ZWRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUubGVuZ3RoID4gbWF4U2VsZWN0ZWRTaG93biAmJiBtYXhTZWxlY3RlZFNob3duID4gMFwiIGNsYXNzPVwibWF4LWV4Y2VlZGVkXCI+XG4gICAgICAgICt7eyB2YWx1ZS5sZW5ndGggLSBtYXhTZWxlY3RlZFNob3duIH19IG1vcmVcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxmdy1pY29uICpuZ0lmPVwic2hvd0NsZWFyKCkgJiYgdmFsdWUubGVuZ3RoID4gMFwiIChjbGljayk9XCJ1cGRhdGVWYWx1ZShbXSlcIj5jbG9zZTwvZnctaWNvbj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTUVOVSAtLT5cbiAgPG5nLXRlbXBsYXRlICNzZWxlY3RNZW51PlxuICAgIDxmdy1tZW51LWZpbHRlclxuICAgICAgW2tleUhhbmRsZXJdPVwiaGFuZGxlS2V5RG93blwiXG4gICAgICBbc2hvd0ZpbHRlcl09XCJzaG93RmlsdGVyKClcIlxuICAgICAgW2ZvY3VzRmlsdGVyT25Nb3VudF09XCJzaG93RmlsdGVyKClcIlxuICAgICAgW3dpZHRoXT1cIm9wdGlvbnNXaWR0aCB8fCAod3JhcHBlci5vZmZzZXRXaWR0aCAtIDIpICsgJ3B4J1wiXG4gICAgICBbYWRkaXRpb25hbE1lbnVJdGVtc109XCJ0aGlzLmN1c3RvbU1lbnVJdGVtcy50b0FycmF5KClcIlxuICAgICAgW2VtcHR5VGV4dF09XCJlbXB0eVRleHRcIlxuICAgICAgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCJcbiAgICAgIFttaW5IZWlnaHRdPVwibWluT3B0aW9uc0hlaWdodFwiXG4gICAgICBbZmlsdGVyRm5dPVwiY3VzdG9tRmlsdGVyXCJcbiAgICAgIChmaWx0ZXJlZE1lbnVJdGVtQ2hhbmdlKT1cImRpc3BsYXllZE9wdGlvbnMuc2V0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250ZW50XCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uSW5mbygpXCI+XG4gICAgICAgIDxwPnt7dmFsdWUubGVuZ3RofX0gc2VsZWN0aW9uczwvcD5cbiAgICAgICAgPGZ3LWJ1dHRvbiB2YXJpYW50PVwiZ2hvc3RcIiAoY2xpY2spPVwidXBkYXRlVmFsdWUoW10pXCI+Q2xlYXI8L2Z3LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZ3LW1lbnVcbiAgICAgICAgW211bHRpU2VsZWN0XT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbdmFsdWVdPVwiY3JlYXRlQXJyYXkoc2VsZWN0ZWRWYWx1ZXMpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVNZW51Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbU1lbnVJdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8ZnctbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zOyBpbmRleCBhcyAkaW5kZXhcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bdmFsdWVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW2ljb25dPVwiaXRlbVtpY29uUHJvcGVydHldXCJcbiAgICAgICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJ2YWx1ZS5pbmNsdWRlcyhpdGVtW3ZhbHVlUHJvcGVydHldKVwiXG4gICAgICAgICAgICBbc2hvd0NoZWNrYm94XT1cInVzZUNoZWNrYm94XCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEZvY3VzZWRJbmRleChpdGVtKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJjdXN0b20tbWVudS1pdGVtc1wiIHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yLCBmdy1tZW51LWl0ZW0tZ3JvdXAsIGZ3LW1lbnUtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtZmlsdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsTUFBTSxFQUVOLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFFL0U7OztHQUdHO0FBYUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNPLFlBQVksQ0FBQyxLQUFpQjtRQUN4RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FB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c0JBQTNFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQWVqRCxNQUFNO3NCQUFmLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQWVtQixRQUFRO3NCQUFoQyxXQUFXO3VCQUFDLFVBQVU7Z0JBQ1ksYUFBYTtzQkFBL0MsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBNE83QixhQUFhO3NCQURaLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENka01lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL21lbnUnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZ3TWVudUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndNZW51Q29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWVudS9tZW51LWNvbnRhaW5lci9tZW51LWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRndNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqIEZ3TXVsdGlTZWxlY3QgYSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBtdWx0aXBsZSBvcHRpb25zXG4gKiBAc2VlIFtTdG9yeWJvb2sgRG9jc10oaHR0cHM6Ly9jZG4uZmx5d2hlZWwuaW8vZG9jcy92aXNpb24vbWFzdGVyLz9wYXRoPS9kb2NzL2Zvcm0tY29udHJvbHMtbXVsdGktc2VsZWN0LS1kb2NzKVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdy1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3QtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZ3TXVsdGlTZWxlY3RNZW51Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZ3TXVsdGlTZWxlY3RNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgb3V0c2lkZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICBpZiAoY2xpY2tlZEluc2lkZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmlnZ2VyICYmIHRoaXMudHJpZ2dlci5pc09wZW4oKSkge1xuICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBvcHRpb25zXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIEBJbnB1dCgpIHZhbHVlUHJvcGVydHk/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSB0aXRsZVByb3BlcnR5Pzogc3RyaW5nID0gJ3RpdGxlJztcbiAgQElucHV0KCkgaWNvblByb3BlcnR5Pzogc3RyaW5nID0gJ2ljb24nO1xuXG5cbiAgLy8gYmVoYXZpb3VyXG4gIEBJbnB1dCgpIGVtcHR5VGV4dDogc3RyaW5nID0gJ05vIG1hdGNoZXMgZm91bmQuLi4nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBzb21ldGhpbmcuLi4nO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2hlY2tib3g/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbWF4U2VsZWN0ZWRTaG93bjogbnVtYmVyID0gMTAwO1xuXG4gIHNob3dDbGVhciA9IGlucHV0KGZhbHNlKTtcbiAgc2hvd0ZpbHRlciA9IGlucHV0KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsOiBCb29sZWFuSW5wdXQpID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpIH0pO1xuICBzaG93U2VsZWN0aW9uSW5mbyA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbDogQm9vbGVhbklucHV0KSA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKSB9KTtcbiAgZmlsdGVySXRlbXNPblNlbGVjdCA9IGlucHV0KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsOiBCb29sZWFuSW5wdXQpID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpIH0pO1xuXG4gIC8vIHNpemluZ1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzIwMHB4JztcbiAgQElucHV0KCkgbWluSGVpZ2h0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbWF4SGVpZ2h0OiBzdHJpbmcgPSAnMjAwcHgnO1xuICBASW5wdXQoKSBvcHRpb25zV2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pbk9wdGlvbnNIZWlnaHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heE9wdGlvbnNIZWlnaHQ6IHN0cmluZyA9ICc0MDBweCc7XG4gIEBJbnB1dCgpIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnID0gJ21lZGl1bSc7XG5cbiAgLy8gdmlldyBjaGlsZHJlblxuICBAVmlld0NoaWxkKENka01lbnVUcmlnZ2VyKSB0cmlnZ2VyOiBDZGtNZW51VHJpZ2dlcjtcbiAgQFZpZXdDaGlsZChGd01lbnVDb21wb25lbnQpIG1lbnU6IEZ3TWVudUNvbXBvbmVudDtcbiAgbWVudUZpbHRlciA9IHZpZXdDaGlsZChGd01lbnVDb250YWluZXJDb21wb25lbnQpO1xuICBAVmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpIHJlbmRlcmVkTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjdXN0b21NZW51SXRlbXM6IFF1ZXJ5TGlzdDxGd01lbnVJdGVtQ29tcG9uZW50PjtcblxuICAvLyBuZWVkIHRoaXMgZm9yIHRoZSB0ZW1wbGF0ZVxuICBjcmVhdGVBcnJheSA9IChkOiBJdGVyYWJsZTxzdHJpbmc+KTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShkKTtcblxuICAvLyBpbnRlcm5hbCBzdGF0ZVxuICBzZWxlY3RlZFZhbHVlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdGVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgZGlzcGxheWVkT3B0aW9uczogV3JpdGFibGVTaWduYWw8RndNZW51SXRlbUNvbXBvbmVudFtdPiA9IHNpZ25hbChbXSk7XG4gIGZvY3VzZWRJbmRleCA9IHNpZ25hbCgwKTtcbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICkge31cblxuICBASG9zdEJpbmRpbmcoJ3RhYkluZGV4JykgdGFiSW5kZXggPSAwO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZ2V0IGRpc2FibGVkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55W10pID0+IHZvaWQ7XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKVxuXG4gICAgdGhpcy5jdXN0b21NZW51SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckN1c3RvbU1lbnVJdGVtcygpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ3VzdG9tTWVudUl0ZW1zKCk6IHZvaWQge1xuICAgIC8vIGZpcnN0IGZpbHRlciBhbnkgbWVudUl0ZW1zIHdlJ3ZlIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBvcHRpb25zXG4gICAgY29uc3QgbmV3TWVudUl0ZW1zID0gdGhpcy5jdXN0b21NZW51SXRlbXM/LmZpbHRlcihcbiAgICAgIG1lbnVJdGVtID0+ICF0aGlzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gbWVudUl0ZW0udmFsdWUgPT09IChvcHRpb24gYXMgYW55KS52YWx1ZSksXG4gICAgKVxuXG4gICAgbmV3TWVudUl0ZW1zLmZvckVhY2goKG5ld01lbnVJdGVtKSA9PiB7XG5cbiAgICAgIC8vIHN5bmMgcmVuZGVyIHNldHRpbmdzXG4gICAgICB0aGlzLmN1c3RvbU1lbnVJdGVtcz8uZm9yRWFjaChtZW51SXRlbSA9PiB7XG4gICAgICAgIG1lbnVJdGVtLnNob3dDaGVja2JveCA9IHRoaXMudXNlQ2hlY2tib3g7XG4gICAgICAgIG1lbnVJdGVtLm11bHRpU2VsZWN0ID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBhZGQgaXQgdG8gdGhlIG9wdGlvbnNcbiAgICAgIC8vIGEgbG90IG9mIG91ciB2YWx1ZSBoYW5kbGluZyBsb2dpYyByZWxpZXMgb25cbiAgICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IG5ld01lbnVJdGVtLnZhbHVlLFxuICAgICAgICB0aXRsZTogbmV3TWVudUl0ZW0udGl0bGUsXG4gICAgICAgIGljb246IG5ld01lbnVJdGVtLmljb24sXG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuXG4gICAgICBuZXdNZW51SXRlbS5tb3VzZUVudGVySGFuZGxlci5zZXQoKF8sIGl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c2VkSW5kZXgoaXRlbSk7XG4gICAgICB9KVxuXG4gICAgICAvLyBhZGQgY2xpY2sgbGlzdGVuZXJcbiAgICAgIGNvbnN0IHN1YiA9IG5ld01lbnVJdGVtLmNsaWNrLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuYWRkVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xuICAgIH0pXG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGlwQ2xvc2UoY2hpcDogb2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWVzID0gdGhpcy52YWx1ZS5maWx0ZXIodmFsID0+IHZhbCAhPT0gY2hpcFt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG5ld1ZhbHVlcyk7XG4gICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gIH1cblxuICAvLyBoYW5kbGVzIHRoZSB2YWx1ZSBlbWlzc2lvbiBmcm9tIHRoZSBtZW51XG4gIC8vIFRPRE86IG1ha2UgbWVudSBhIGR1bWIgY29tcG9uZW50LCBpdCBzaG91bGRuJ3QgYmUgaGFuZGxpbmcgdmFsdWVzIGlkZWFsbHlcbiAgaGFuZGxlTWVudUNoYW5nZShlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gYWRkcyBhIHNpbmdsZSB2YWx1ZVxuICBhZGRWYWx1ZShpbmNvbWluZzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy52YWx1ZS5pbmNsdWRlcyhpbmNvbWluZyk7XG5cbiAgICBpZiAoYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzcGxpY2VkT3V0ID0gdGhpcy52YWx1ZS50b1NwbGljZWQodGhpcy52YWx1ZS5pbmRleE9mKGluY29taW5nKSwgMSk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHNwbGljZWRPdXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoWy4uLnRoaXMudmFsdWUsIGluY29taW5nXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gaGFuZGxlcyBhbGwgdGhlIGRpc3BsYXkgc2lkZSBlZmZlY3RzIG9mIGEgdmFsdWUgY2hhbmdlXG4gIHVwZGF0ZVZhbHVlKGluY29taW5nVmFsdWVzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgaWYgKCFpbmNvbWluZ1ZhbHVlcykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jbGVhcigpO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMucG9zdFNlbGVjdFNpZGVFZmZlY3RzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG5cbiAgICBpbmNvbWluZ1ZhbHVlcy5mb3JFYWNoKGluY29taW5nID0+IHtcblxuICAgICAgaWYgKHR5cGVvZiBpbmNvbWluZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5hZGQoaW5jb21pbmdbdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmcpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuYWRkKGluY29taW5nKTtcblxuICAgICAgICBjb25zdCBpbmNvbWluZ01hcHBlZFRvT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdFt0aGlzLnZhbHVlUHJvcGVydHldID09PSBpbmNvbWluZyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmdNYXBwZWRUb09wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl92YWx1ZSA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLnBvc3RTZWxlY3RTaWRlRWZmZWN0cygpO1xuICB9XG5cbiAgLy8gY3VzdG9tIGZpbHRlciBmb3IgaGFuZGxpbmcgZmlsdGVyT25TZWxlY3RcbiAgY3VzdG9tRmlsdGVyID0gKGZpbHRlcjogc3RyaW5nLCBtZW51SXRlbXM6IEZ3TWVudUl0ZW1Db21wb25lbnRbXSk6IEZ3TWVudUl0ZW1Db21wb25lbnRbXSA9PiB7XG4gICAgcmV0dXJuIG1lbnVJdGVtcy5maWx0ZXIobWVudUl0ZW0gPT4ge1xuICAgICAgY29uc3QgZmlsdGVyTWF0Y2hlcyA9IG1lbnVJdGVtLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMudmFsdWUuaW5jbHVkZXMobWVudUl0ZW0udmFsdWUpO1xuICAgICAgY29uc3QgZmlsdGVyQmVjYXVzZVNlbGVjdGVkID0gaXNTZWxlY3RlZCAmJiB0aGlzLmZpbHRlckl0ZW1zT25TZWxlY3QoKTtcblxuICAgICAgcmV0dXJuIGZpbHRlck1hdGNoZXMgJiYgIWZpbHRlckJlY2F1c2VTZWxlY3RlZDtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXNlZChkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvY3VzZWRJbmRleCgpO1xuXG4gICAgY29uc3QgY2xhbXBJbmRleCA9IChuOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChuID49IG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleENoYW5nZSA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gY2xhbXBJbmRleChpbmRleCArIGluZGV4Q2hhbmdlKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQobmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3bHlGb2N1c2VkID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKClbdGhpcy5mb2N1c2VkSW5kZXgoKV07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgIG5ld2x5Rm9jdXNlZC5zY3JvbGxJbnRvVmlldygpO1xuICB9XG5cbiAgc2V0Rm9jdXNlZEluZGV4KGl0ZW06IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZEluZGV4ID0gdGhpcy5kaXNwbGF5ZWRPcHRpb25zKCkuZmluZEluZGV4KGkgPT4gaS52YWx1ZSA9PT0gaXRlbVt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoZm91bmRJbmRleCk7XG4gIH1cblxuICBkaXNwbGF5Rm9jdXNJbmRpY2F0b3IgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMuZGlzcGxheWVkT3B0aW9ucygpLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmZvY3VzZWQgPSBpbmRleCA9PT0gdGhpcy5mb2N1c2VkSW5kZXgoKTtcbiAgICB9KVxuICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pXG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzICovXG4gIHByaXZhdGUga2V5Ym9hcmRBY3Rpb25NYXAgPSB7XG4gICAgJ0Fycm93RG93bic6ICgpID0+IHtcbiAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ2Rvd24nKTtcbiAgICB9LFxuICAgICdBcnJvd1VwJzogKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlRm9jdXNlZCgndXAnKTtcbiAgICB9LFxuICAgICdUYWInOiAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICAnRXNjYXBlJzogKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgJ0VudGVyJzogKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRNZW51SXRlbSA9IHRoaXMuZGlzcGxheWVkT3B0aW9ucygpW3RoaXMuZm9jdXNlZEluZGV4KCldO1xuXG4gICAgICBpZiAoIXNlbGVjdGVkTWVudUl0ZW0pIHsgcmV0dXJuIH1cblxuICAgICAgdGhpcy5hZGRWYWx1ZShzZWxlY3RlZE1lbnVJdGVtLnZhbHVlKTtcbiAgICAgIHRoaXMucG9zdFNlbGVjdFNpZGVFZmZlY3RzKCk7XG4gICAgfSxcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VkVHJpZ2dlcktleWJvYXJkQWN0aW9uc01hcCA9IHtcbiAgICAnRW50ZXInOiAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgIH0sXG4gICAgJ0JhY2tzcGFjZSc6ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZS50b1NwbGljZWQoLTEpKTtcbiAgICB9LFxuICB9XG4gIC8qIGVzbGludC1lbmFibGUgKi9cblxuICAvLyBuZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiB0byBsb2NrIHRoZSBzY29wZVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT57XG5cbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy50cmlnZ2VyLmlzT3BlbigpID8gdGhpcy5rZXlib2FyZEFjdGlvbk1hcFtldmVudC5rZXldIDogdGhpcy5jbG9zZWRUcmlnZ2VyS2V5Ym9hcmRBY3Rpb25zTWFwW2V2ZW50LmtleV07XG5cbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc3RTZWxlY3RTaWRlRWZmZWN0cygpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnVGaWx0ZXIoKT8ub25GaWx0ZXJDaGFuZ2UoJycpO1xuXG4gICAgdGhpcy5jdXN0b21NZW51SXRlbXM/LmZvckVhY2gobWVudUl0ZW0gPT4ge1xuICAgICAgbWVudUl0ZW0uc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKG1lbnVJdGVtLnZhbHVlKTtcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IFtuZ1N0eWxlXT1cInt3aWR0aDogd2lkdGh9XCIgI3dyYXBwZXI+XG5cbiAgPGRpdlxuICAgIGZ3TWVudVJlZ2lzdGVyXG4gICAgY2xhc3M9XCJjaGlwLWdyaWRcIlxuICAgIFtuZ0NsYXNzXT1cIltzaXplXVwiXG4gICAgW25nU3R5bGVdPVwieyBtaW5IZWlnaHQ6IG1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHQgfVwiXG4gICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInNlbGVjdE1lbnVcIj5cbiAgICA8c3BhbiAqbmdJZj1cInZhbHVlLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L3NwYW4+XG5cbiAgICA8IS0tIENISVBTIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jaGlwLWdyaWRcIiAqbmdJZj1cInZhbHVlICYmIHZhbHVlLmxlbmd0aD4wXCI+XG4gICAgICA8ZnctY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBzZWxlY3RlZE9wdGlvbnMgfCBzbGljZTowOm1heFNlbGVjdGVkU2hvd25cIlxuICAgICAgICBbdGl0bGVdPVwiY2hpcFt0aXRsZVByb3BlcnR5XVwiXG4gICAgICAgIFt2YWx1ZV09XCJjaGlwW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgW2ljb25dPVwiY2hpcFtpY29uUHJvcGVydHldXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNoaXBDbG9zZShjaGlwKVwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCI+XG4gICAgICA8L2Z3LWNoaXA+XG4gICAgICA8c3BhbiAqbmdJZj1cIm1heFNlbGVjdGVkU2hvd24gPT09IDAgJiYgdmFsdWUubGVuZ3RoID4gMFwiIGNsYXNzPVwic2VsZWN0ZWQtdGV4dFwiPlxuICAgICAgICB7eyB2YWx1ZS5sZW5ndGggfX0gc2VsZWN0ZWRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUubGVuZ3RoID4gbWF4U2VsZWN0ZWRTaG93biAmJiBtYXhTZWxlY3RlZFNob3duID4gMFwiIGNsYXNzPVwibWF4LWV4Y2VlZGVkXCI+XG4gICAgICAgICt7eyB2YWx1ZS5sZW5ndGggLSBtYXhTZWxlY3RlZFNob3duIH19IG1vcmVcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxmdy1pY29uICpuZ0lmPVwic2hvd0NsZWFyKCkgJiYgdmFsdWUubGVuZ3RoID4gMFwiIChjbGljayk9XCJ1cGRhdGVWYWx1ZShbXSlcIj5jbG9zZTwvZnctaWNvbj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTUVOVSAtLT5cbiAgPG5nLXRlbXBsYXRlICNzZWxlY3RNZW51PlxuICAgIDxmdy1tZW51LWZpbHRlclxuICAgICAgW2tleUhhbmRsZXJdPVwiaGFuZGxlS2V5RG93blwiXG4gICAgICBbc2hvd0ZpbHRlcl09XCJzaG93RmlsdGVyKClcIlxuICAgICAgW2ZvY3VzRmlsdGVyT25Nb3VudF09XCJzaG93RmlsdGVyKClcIlxuICAgICAgW3dpZHRoXT1cIm9wdGlvbnNXaWR0aCB8fCAod3JhcHBlci5vZmZzZXRXaWR0aCAtIDIpICsgJ3B4J1wiXG4gICAgICBbYWRkaXRpb25hbE1lbnVJdGVtc109XCJ0aGlzLmN1c3RvbU1lbnVJdGVtcy50b0FycmF5KClcIlxuICAgICAgW2VtcHR5VGV4dF09XCJlbXB0eVRleHRcIlxuICAgICAgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCJcbiAgICAgIFttaW5IZWlnaHRdPVwibWluT3B0aW9uc0hlaWdodFwiXG4gICAgICBbZmlsdGVyRm5dPVwiY3VzdG9tRmlsdGVyXCJcbiAgICAgIChmaWx0ZXJlZE1lbnVJdGVtQ2hhbmdlKT1cImRpc3BsYXllZE9wdGlvbnMuc2V0KCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiICpuZ0lmPVwic2hvd1NlbGVjdGlvbkluZm8oKVwiPlxuICAgICAgICA8cD57e3ZhbHVlLmxlbmd0aH19IHNlbGVjdGlvbnM8L3A+XG4gICAgICAgIDxmdy1idXR0b24gdmFyaWFudD1cImdob3N0XCIgKGNsaWNrKT1cInVwZGF0ZVZhbHVlKFtdKVwiPkNsZWFyPC9mdy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3ZhbHVlXT1cImNyZWF0ZUFycmF5KHNlbGVjdGVkVmFsdWVzKVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlTWVudUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21NZW51SXRlbXMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uczsgaW5kZXggYXMgJGluZGV4XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtW3RpdGxlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFtpY29uXT1cIml0ZW1baWNvblByb3BlcnR5XVwiXG4gICAgICAgICAgICBbbXVsdGlTZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwidmFsdWUuaW5jbHVkZXMoaXRlbVt2YWx1ZVByb3BlcnR5XSlcIlxuICAgICAgICAgICAgW3Nob3dDaGVja2JveF09XCJ1c2VDaGVja2JveFwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZXRGb2N1c2VkSW5kZXgoaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2Z3LW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwiY3VzdG9tLW1lbnUtaXRlbXNcIiBzZWxlY3Q9XCJbZnctbWVudS1pdGVtLCBmdy1tZW51LXNlcGFyYXRvciwgZnctbWVudS1pdGVtLWdyb3VwLCBmdy1tZW51LWhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Z3LW1lbnU+XG4gICAgPC9mdy1tZW51LWZpbHRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|