coer-elements 0.0.49 → 0.0.51
Sign up to get free protection for your applications and to get access to all the features.
- package/components/lib/coer-list/coer-list.component.d.ts +9 -2
- package/components/lib/coer-sidenav/coer-sidenav.component.d.ts +1 -0
- package/esm2022/components/lib/coer-list/coer-list.component.mjs +16 -3
- package/esm2022/components/lib/coer-sidenav/coer-menu-option/coer-menu-option.component.mjs +4 -4
- package/esm2022/components/lib/coer-sidenav/coer-sidenav.component.mjs +5 -4
- package/esm2022/tools/lib/filters.class.mjs +49 -0
- package/esm2022/tools/lib/page.class.mjs +19 -9
- package/esm2022/tools/public-api.mjs +2 -1
- package/fesm2022/coer-elements-components.mjs +22 -8
- package/fesm2022/coer-elements-components.mjs.map +1 -1
- package/fesm2022/coer-elements-tools.mjs +66 -9
- package/fesm2022/coer-elements-tools.mjs.map +1 -1
- package/package.json +1 -1
- package/tools/lib/filters.class.d.ts +11 -0
- package/tools/lib/page.class.d.ts +5 -0
- package/tools/public-api.d.ts +1 -0
@@ -1,13 +1,16 @@
|
|
1
1
|
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
2
|
+
import { AfterViewInit } from '@angular/core';
|
2
3
|
import * as i0 from "@angular/core";
|
3
|
-
export declare class CoerList<T> {
|
4
|
+
export declare class CoerList<T> implements AfterViewInit {
|
4
5
|
protected _id: string;
|
6
|
+
protected _enableAnimations: boolean;
|
5
7
|
dataSource: import("@angular/core").InputSignal<T[]>;
|
6
8
|
propDisplay: import("@angular/core").InputSignal<string>;
|
7
9
|
header: import("@angular/core").InputSignal<string>;
|
8
10
|
headerIcon: import("@angular/core").InputSignal<string>;
|
9
11
|
showDeleteButton: import("@angular/core").InputSignal<boolean | ((item: T, index: number) => boolean)>;
|
10
12
|
showGoButton: import("@angular/core").InputSignal<boolean | ((item: T, index: number) => boolean)>;
|
13
|
+
showBackButton: import("@angular/core").InputSignal<boolean>;
|
11
14
|
isLoading: import("@angular/core").InputSignal<boolean>;
|
12
15
|
isDraggable: import("@angular/core").InputSignal<boolean>;
|
13
16
|
showSearch: import("@angular/core").InputSignal<boolean>;
|
@@ -28,11 +31,13 @@ export declare class CoerList<T> {
|
|
28
31
|
onDoubleClick: import("@angular/core").OutputEmitterRef<T>;
|
29
32
|
onClickDelete: import("@angular/core").OutputEmitterRef<T>;
|
30
33
|
onClickGo: import("@angular/core").OutputEmitterRef<T>;
|
34
|
+
onClickBack: import("@angular/core").OutputEmitterRef<void>;
|
31
35
|
protected _dataSource: import("@angular/core").Signal<T[]>;
|
32
36
|
protected _isDraggable: import("@angular/core").Signal<boolean>;
|
33
37
|
protected _hasTemplate: import("@angular/core").Signal<boolean>;
|
34
38
|
protected _showbuttons: import("@angular/core").Signal<boolean>;
|
35
39
|
protected get _height(): string;
|
40
|
+
ngAfterViewInit(): void;
|
36
41
|
/** */
|
37
42
|
protected GetDisplay: (item: any) => string;
|
38
43
|
/** */
|
@@ -40,11 +45,13 @@ export declare class CoerList<T> {
|
|
40
45
|
/** */
|
41
46
|
protected GetTemplate(item: any): string;
|
42
47
|
/** */
|
48
|
+
protected _showBackButton: () => boolean;
|
49
|
+
/** */
|
43
50
|
protected _showDeleteButton: (item: any) => boolean;
|
44
51
|
/** */
|
45
52
|
protected _showGoButton: (item: any) => boolean;
|
46
53
|
/** */
|
47
54
|
protected Drop(event: CdkDragDrop<T[]>): void;
|
48
55
|
static ɵfac: i0.ɵɵFactoryDeclaration<CoerList<any>, never>;
|
49
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CoerList<any>, "coer-list", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "propDisplay": { "alias": "propDisplay"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "headerIcon": { "alias": "headerIcon"; "required": false; "isSignal": true; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; "isSignal": true; }; "showGoButton": { "alias": "showGoButton"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isDraggable": { "alias": "isDraggable"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "MinWidth": { "alias": "MinWidth"; "required": false; "isSignal": true; }; "MaxWidth": { "alias": "MaxWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "marginTop": { "alias": "marginTop"; "required": false; "isSignal": true; }; "marginRight": { "alias": "marginRight"; "required": false; "isSignal": true; }; "marginBottom": { "alias": "marginBottom"; "required": false; "isSignal": true; }; "marginLeft": { "alias": "marginLeft"; "required": false; "isSignal": true; }; }, { "onDrop": "onDrop"; "onSort": "onSort"; "onClick": "onClick"; "onDoubleClick": "onDoubleClick"; "onClickDelete": "onClickDelete"; "onClickGo": "onClickGo"; }, never, never, false, never>;
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CoerList<any>, "coer-list", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "propDisplay": { "alias": "propDisplay"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "headerIcon": { "alias": "headerIcon"; "required": false; "isSignal": true; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; "isSignal": true; }; "showGoButton": { "alias": "showGoButton"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isDraggable": { "alias": "isDraggable"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "MinWidth": { "alias": "MinWidth"; "required": false; "isSignal": true; }; "MaxWidth": { "alias": "MaxWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "marginTop": { "alias": "marginTop"; "required": false; "isSignal": true; }; "marginRight": { "alias": "marginRight"; "required": false; "isSignal": true; }; "marginBottom": { "alias": "marginBottom"; "required": false; "isSignal": true; }; "marginLeft": { "alias": "marginLeft"; "required": false; "isSignal": true; }; }, { "onDrop": "onDrop"; "onSort": "onSort"; "onClick": "onClick"; "onDoubleClick": "onDoubleClick"; "onClickDelete": "onClickDelete"; "onClickGo": "onClickGo"; "onClickBack": "onClickBack"; }, never, never, false, never>;
|
50
57
|
}
|
@@ -8,6 +8,7 @@ export declare class CoerSidenav {
|
|
8
8
|
protected isOpen: WritableSignal<boolean>;
|
9
9
|
protected _isModalOpen: WritableSignal<boolean>;
|
10
10
|
protected _navigation: WritableSignal<IMenu[]>;
|
11
|
+
protected _isLoading: WritableSignal<boolean>;
|
11
12
|
protected sidenav: import("@angular/core").Signal<MatDrawer>;
|
12
13
|
protected menuList: import("@angular/core").Signal<readonly CoerTreeAccordion[]>;
|
13
14
|
protected get backdrop(): boolean;
|
@@ -10,6 +10,7 @@ export class CoerList {
|
|
10
10
|
constructor() {
|
11
11
|
//Variables
|
12
12
|
this._id = Tools.GetGuid('coer-List');
|
13
|
+
this._enableAnimations = false;
|
13
14
|
//Inputs
|
14
15
|
this.dataSource = input([]);
|
15
16
|
this.propDisplay = input('name');
|
@@ -17,6 +18,7 @@ export class CoerList {
|
|
17
18
|
this.headerIcon = input('');
|
18
19
|
this.showDeleteButton = input(false);
|
19
20
|
this.showGoButton = input(false);
|
21
|
+
this.showBackButton = input(false);
|
20
22
|
this.isLoading = input(false);
|
21
23
|
this.isDraggable = input(false);
|
22
24
|
this.showSearch = input(false);
|
@@ -38,6 +40,7 @@ export class CoerList {
|
|
38
40
|
this.onDoubleClick = output();
|
39
41
|
this.onClickDelete = output();
|
40
42
|
this.onClickGo = output();
|
43
|
+
this.onClickBack = output();
|
41
44
|
//computed
|
42
45
|
this._dataSource = computed(() => {
|
43
46
|
let index = 0;
|
@@ -65,6 +68,11 @@ export class CoerList {
|
|
65
68
|
return item['index'];
|
66
69
|
};
|
67
70
|
/** */
|
71
|
+
this._showBackButton = () => {
|
72
|
+
return this.showBackButton()
|
73
|
+
&& !this.isLoading();
|
74
|
+
};
|
75
|
+
/** */
|
68
76
|
this._showDeleteButton = (item) => {
|
69
77
|
const showButton = this.showDeleteButton();
|
70
78
|
return (typeof showButton === 'boolean')
|
@@ -93,6 +101,11 @@ export class CoerList {
|
|
93
101
|
}
|
94
102
|
return height;
|
95
103
|
}
|
104
|
+
ngAfterViewInit() {
|
105
|
+
Tools.Sleep().then(() => {
|
106
|
+
this._enableAnimations = true;
|
107
|
+
});
|
108
|
+
}
|
96
109
|
/** */
|
97
110
|
GetTemplate(item) {
|
98
111
|
return this.template()(item, item.index);
|
@@ -108,10 +121,10 @@ export class CoerList {
|
|
108
121
|
this.onDrop.emit(item);
|
109
122
|
}
|
110
123
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CoerList, selector: "coer-list", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, propDisplay: { classPropertyName: "propDisplay", publicName: "propDisplay", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, headerIcon: { classPropertyName: "headerIcon", publicName: "headerIcon", isSignal: true, isRequired: false, transformFunction: null }, showDeleteButton: { classPropertyName: "showDeleteButton", publicName: "showDeleteButton", isSignal: true, isRequired: false, transformFunction: null }, showGoButton: { classPropertyName: "showGoButton", publicName: "showGoButton", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isDraggable: { classPropertyName: "isDraggable", publicName: "isDraggable", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, MinWidth: { classPropertyName: "MinWidth", publicName: "MinWidth", isSignal: true, isRequired: false, transformFunction: null }, MaxWidth: { classPropertyName: "MaxWidth", publicName: "MaxWidth", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, marginTop: { classPropertyName: "marginTop", publicName: "marginTop", isSignal: true, isRequired: false, transformFunction: null }, marginRight: { classPropertyName: "marginRight", publicName: "marginRight", isSignal: true, isRequired: false, transformFunction: null }, marginBottom: { classPropertyName: "marginBottom", publicName: "marginBottom", isSignal: true, isRequired: false, transformFunction: null }, marginLeft: { classPropertyName: "marginLeft", publicName: "marginLeft", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDrop: "onDrop", onSort: "onSort", onClick: "onClick", onDoubleClick: "onDoubleClick", onClickDelete: "onClickDelete", onClickGo: "onClickGo" }, ngImport: i0, template: "<div [id]=\"_id\" class=\"coer-list\" [ngStyle]=\"{ \r\n 'margin-top': marginTop(), \r\n 'margin-right': marginRight(), \r\n 'margin-bottom': marginBottom(), \r\n 'margin-left': marginLeft(), \r\n }\">\r\n\r\n @if(isLoading()) {\r\n <!-- Grid Message -->\r\n <div class=\"loading\">\r\n <i class=\"spinner-border\"></i>\r\n <span class=\"fa-fade\">Loading</span>\r\n </div>\r\n }\r\n\r\n @else if(dataSource().length <= 0) {\r\n <div class=\"no-data\"> No Data </div>\r\n }\r\n\r\n <header [id]=\"_id + '-header'\" class=\"row\"> \r\n @if(header().length > 0 || headerIcon().length > 0) {\r\n <div class=\"col-auto\">\r\n <h6>\r\n @if(headerIcon().length > 0) {\r\n <i [class]=\"headerIcon()\"></i> \r\n }\r\n\r\n @if(header().length > 0) {\r\n <span>{{ header() }}</span> \r\n }\r\n </h6> \r\n </div>\r\n }\r\n \r\n <!-- Search -->\r\n @if(showSearch() && dataSource().length > 0) {\r\n <div class=\"ms-auto col-auto\">\r\n <coer-textbox\r\n #inputSearch \r\n placeholder=\"Search\"\r\n [isDisabled]=\"isLoading()\"\r\n [selectOnFocus]=\"true\"\r\n width=\"250px\"\r\n marginTop=\"5px\"\r\n marginBottom=\"5px\"\r\n [showSearchIcon]=\"true\"\r\n [showClearIcon]=\"true\"\r\n ></coer-textbox>\r\n </div>\r\n }\r\n </header>\r\n\r\n <div [ngStyle]=\"{ \r\n 'width': width(), \r\n 'min-Width': MinWidth(), \r\n 'max-Width': MaxWidth(), \r\n }\">\r\n <ul cdkDropList (cdkDropListDropped)=\"Drop($event)\" class='list-group coer-list'\r\n [ngStyle]=\"{ \r\n 'height': _height, \r\n 'min-height': minHeight(), \r\n 'max-height': maxHeight(), \r\n 'd-none': dataSource().length <= 0 \r\n }\">\r\n \r\n @for (item of _dataSource(); track GetIndexRow(item)) {\r\n <li cdkDrag \r\n class=\"list-group-item coer-list-box\" \r\n cdkDragBoundary=\"ul.coer-list\"\r\n (click)=\"onClick.emit(item)\" \r\n (dblclick)=\"onDoubleClick.emit(item)\">\r\n \r\n <div *cdkDragPlaceholder class=\"coer-list-placeholder cursor-grabbing\"></div>\r\n <div class=\"coer-list-content\"> \r\n @if(_hasTemplate()) {\r\n <div [innerHTML]=\"GetTemplate(item) | html\" class=\"template\"></div>\r\n }\r\n \r\n @else {\r\n <div> {{ GetDisplay(item) }} </div> \r\n } \r\n \r\n <div>\r\n @if(_showDeleteButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"delete\" \r\n (onClick)=\"onClickDelete.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n @if(_showGoButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"go\" \r\n marginLeft=\"5px\" \r\n (onClick)=\"onClickGo.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n <i cdkDragHandle [ngClass]=\"{ \r\n 'fa-solid fa-grip-vertical text-secondary ps-2': true,\r\n 'cursor-grab': true, \r\n 'cursor-grabbing': false, \r\n 'd-none': !_isDraggable()\r\n }\"></i> \r\n </div> \r\n </div> \r\n </li> \r\n } \r\n </ul>\r\n </div>\r\n</div>", styles: ["div.coer-list header{align-items:center;justify-content:space-between;padding-right:0px 8px;margin:0}div.coer-list header h6{display:flex;align-items:center;gap:10px;min-height:40px;max-height:40px;margin-top:5px;margin-bottom:5px}div.coer-list header>div{display:flex;align-items:baseline}div.coer-list ul.coer-list{width:100%;border:solid 1px #ccc;display:block;background:#fff;border-radius:4px;overflow:auto}div.coer-list li.coer-list-box{padding:10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;background:#fff;font-size:14px}div.coer-list li.coer-list-box div.coer-list-content{width:100%;display:flex;align-items:center;justify-content:space-between}div.coer-list .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}div.coer-list .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list .coer-list-box:last-child{border:none}div.coer-list .coer-list.cdk-drop-list-dragging .coer-list-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.coer-list-placeholder{background:#ccc;border:dotted 3px #999;min-height:40px;transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.cdk-drag-placeholder,div.coer-list ul.cdk-drop-list-dragging,div.coer-list ul.cdk-drop-list-dragging *{cursor:grabbing}div.coer-list div.loading,div.coer-list div.no-data{position:absolute;display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:25px;color:gray;z-index:1}div.coer-list div.loading{background-color:#bbbbbb83!important;flex-direction:column!important;gap:10px!important}div.coer-list div.loading span.fa-fade{position:relative!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i3.CoerButton, selector: "coer-button", inputs: ["id", "color", "type", "icon", "iconPosition", "animation", "isLoading", "isDisabled", "isInvisible", "width", "minWidth", "height", "minHeight", "marginTop", "marginRight", "marginBottom", "marginLeft", "path", "tooltipPosition", "tooltip"], outputs: ["onClick"] }, { kind: "component", type: i4.CoerTextBox, selector: "coer-textbox", inputs: ["value", "id", "button", "label", "placeholder", "minLength", "maxLength", "showSearchIcon", "showClearIcon", "width", "minWidth", "maxWidth", "marginTop", "marginRight", "marginBottom", "marginLeft", "isInvalid", "isValid", "isDisabled", "isReadonly", "isLoading", "selectOnFocus", "textPosition"], outputs: ["onKeyupEnter", "onInput", "onClickClear", "onClickButton"] }, { kind: "pipe", type: i5.HtmlPipe, name: "html" }] }); }
|
124
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CoerList, selector: "coer-list", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, propDisplay: { classPropertyName: "propDisplay", publicName: "propDisplay", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, headerIcon: { classPropertyName: "headerIcon", publicName: "headerIcon", isSignal: true, isRequired: false, transformFunction: null }, showDeleteButton: { classPropertyName: "showDeleteButton", publicName: "showDeleteButton", isSignal: true, isRequired: false, transformFunction: null }, showGoButton: { classPropertyName: "showGoButton", publicName: "showGoButton", isSignal: true, isRequired: false, transformFunction: null }, showBackButton: { classPropertyName: "showBackButton", publicName: "showBackButton", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isDraggable: { classPropertyName: "isDraggable", publicName: "isDraggable", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, MinWidth: { classPropertyName: "MinWidth", publicName: "MinWidth", isSignal: true, isRequired: false, transformFunction: null }, MaxWidth: { classPropertyName: "MaxWidth", publicName: "MaxWidth", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, marginTop: { classPropertyName: "marginTop", publicName: "marginTop", isSignal: true, isRequired: false, transformFunction: null }, marginRight: { classPropertyName: "marginRight", publicName: "marginRight", isSignal: true, isRequired: false, transformFunction: null }, marginBottom: { classPropertyName: "marginBottom", publicName: "marginBottom", isSignal: true, isRequired: false, transformFunction: null }, marginLeft: { classPropertyName: "marginLeft", publicName: "marginLeft", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDrop: "onDrop", onSort: "onSort", onClick: "onClick", onDoubleClick: "onDoubleClick", onClickDelete: "onClickDelete", onClickGo: "onClickGo", onClickBack: "onClickBack" }, ngImport: i0, template: "<div [id]=\"_id\" class=\"coer-list\" [ngStyle]=\"{ \r\n 'margin-top': marginTop(), \r\n 'margin-right': marginRight(), \r\n 'margin-bottom': marginBottom(), \r\n 'margin-left': marginLeft(), \r\n }\">\r\n\r\n @if(isLoading()) {\r\n <!-- Grid Message -->\r\n <div class=\"loading\">\r\n <i class=\"spinner-border\"></i>\r\n <span class=\"fa-fade\">Loading</span>\r\n </div>\r\n }\r\n\r\n @else if(dataSource().length <= 0) {\r\n <div class=\"no-data\"> No Data </div>\r\n }\r\n\r\n <header [id]=\"_id + '-header'\" class=\"row justify-content-end\"> \r\n @if(header().length > 0 || headerIcon().length > 0) {\r\n <div class=\"col-auto me-auto\">\r\n <h6>\r\n @if(headerIcon().length > 0) {\r\n <i [class]=\"headerIcon()\"></i> \r\n }\r\n\r\n @if(header().length > 0) {\r\n <span>{{ header() }}</span> \r\n }\r\n </h6> \r\n </div>\r\n }\r\n\r\n @if(_showBackButton()) {\r\n <div class=\"col-auto ps-2 pe-0\"> \r\n <coer-button\r\n type=\"icon-outline\"\r\n color=\"secondary\"\r\n icon=\"back\"\r\n tooltip=\"Back\"\r\n [animation]=\"_enableAnimations\"\r\n (onClick)=\"onClickBack.emit()\"\r\n ></coer-button> \r\n </div>\r\n }\r\n \r\n <!-- Search -->\r\n @if(showSearch() && dataSource().length > 0) {\r\n <div class=\"col-auto pe-0\">\r\n <coer-textbox\r\n #inputSearch \r\n placeholder=\"Search\"\r\n [isDisabled]=\"isLoading()\"\r\n [selectOnFocus]=\"true\"\r\n width=\"250px\"\r\n marginTop=\"5px\"\r\n marginBottom=\"5px\"\r\n [showSearchIcon]=\"true\"\r\n [showClearIcon]=\"true\"\r\n ></coer-textbox>\r\n </div>\r\n }\r\n </header>\r\n\r\n <div [ngStyle]=\"{ \r\n 'width': width(), \r\n 'min-Width': MinWidth(), \r\n 'max-Width': MaxWidth(), \r\n }\">\r\n <ul cdkDropList (cdkDropListDropped)=\"Drop($event)\" class='list-group coer-list'\r\n [ngStyle]=\"{ \r\n 'height': _height, \r\n 'min-height': minHeight(), \r\n 'max-height': maxHeight(), \r\n 'd-none': dataSource().length <= 0 \r\n }\">\r\n \r\n @for (item of _dataSource(); track GetIndexRow(item)) {\r\n <li cdkDrag \r\n class=\"list-group-item coer-list-box\" \r\n cdkDragBoundary=\"ul.coer-list\"\r\n (click)=\"onClick.emit(item)\" \r\n (dblclick)=\"onDoubleClick.emit(item)\">\r\n \r\n <div *cdkDragPlaceholder class=\"coer-list-placeholder cursor-grabbing\"></div>\r\n <div class=\"coer-list-content\"> \r\n @if(_hasTemplate()) {\r\n <div [innerHTML]=\"GetTemplate(item) | html\" class=\"template\"></div>\r\n }\r\n \r\n @else {\r\n <div> {{ GetDisplay(item) }} </div> \r\n } \r\n \r\n <div>\r\n @if(_showDeleteButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"delete\" \r\n (onClick)=\"onClickDelete.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n @if(_showGoButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"go\" \r\n marginLeft=\"5px\" \r\n (onClick)=\"onClickGo.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n <i cdkDragHandle [ngClass]=\"{ \r\n 'fa-solid fa-grip-vertical text-secondary ps-2': true,\r\n 'cursor-grab': true, \r\n 'cursor-grabbing': false, \r\n 'd-none': !_isDraggable()\r\n }\"></i> \r\n </div> \r\n </div> \r\n </li> \r\n } \r\n </ul>\r\n </div>\r\n</div>", styles: ["div.coer-list header{align-items:center;justify-content:space-between;padding-right:0px 8px;margin:0}div.coer-list header h6{display:flex;align-items:center;gap:10px;min-height:40px;max-height:40px;margin-top:5px;margin-bottom:5px}div.coer-list header>div{display:flex;align-items:baseline}div.coer-list ul.coer-list{width:100%;border:solid 1px #ccc;display:block;background:#fff;border-radius:4px;overflow:auto}div.coer-list li.coer-list-box{padding:10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;background:#fff;font-size:14px}div.coer-list li.coer-list-box div.coer-list-content{width:100%;display:flex;align-items:center;justify-content:space-between}div.coer-list .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}div.coer-list .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list .coer-list-box:last-child{border:none}div.coer-list .coer-list.cdk-drop-list-dragging .coer-list-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.coer-list-placeholder{background:#ccc;border:dotted 3px #999;min-height:40px;transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.cdk-drag-placeholder,div.coer-list ul.cdk-drop-list-dragging,div.coer-list ul.cdk-drop-list-dragging *{cursor:grabbing}div.coer-list div.loading,div.coer-list div.no-data{position:absolute;display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:25px;color:gray;z-index:1}div.coer-list div.loading{background-color:#bbbbbb83!important;flex-direction:column!important;gap:10px!important}div.coer-list div.loading span.fa-fade{position:relative!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i3.CoerButton, selector: "coer-button", inputs: ["id", "color", "type", "icon", "iconPosition", "animation", "isLoading", "isDisabled", "isInvisible", "width", "minWidth", "height", "minHeight", "marginTop", "marginRight", "marginBottom", "marginLeft", "path", "tooltipPosition", "tooltip"], outputs: ["onClick"] }, { kind: "component", type: i4.CoerTextBox, selector: "coer-textbox", inputs: ["value", "id", "button", "label", "placeholder", "minLength", "maxLength", "showSearchIcon", "showClearIcon", "width", "minWidth", "maxWidth", "marginTop", "marginRight", "marginBottom", "marginLeft", "isInvalid", "isValid", "isDisabled", "isReadonly", "isLoading", "selectOnFocus", "textPosition"], outputs: ["onKeyupEnter", "onInput", "onClickClear", "onClickButton"] }, { kind: "pipe", type: i5.HtmlPipe, name: "html" }] }); }
|
112
125
|
}
|
113
126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerList, decorators: [{
|
114
127
|
type: Component,
|
115
|
-
args: [{ selector: 'coer-list', template: "<div [id]=\"_id\" class=\"coer-list\" [ngStyle]=\"{ \r\n 'margin-top': marginTop(), \r\n 'margin-right': marginRight(), \r\n 'margin-bottom': marginBottom(), \r\n 'margin-left': marginLeft(), \r\n }\">\r\n\r\n @if(isLoading()) {\r\n <!-- Grid Message -->\r\n <div class=\"loading\">\r\n <i class=\"spinner-border\"></i>\r\n <span class=\"fa-fade\">Loading</span>\r\n </div>\r\n }\r\n\r\n @else if(dataSource().length <= 0) {\r\n <div class=\"no-data\"> No Data </div>\r\n }\r\n\r\n <header [id]=\"_id + '-header'\" class=\"row\"> \r\n @if(header().length > 0 || headerIcon().length > 0) {\r\n <div class=\"col-auto\">\r\n <h6>\r\n @if(headerIcon().length > 0) {\r\n <i [class]=\"headerIcon()\"></i> \r\n }\r\n\r\n @if(header().length > 0) {\r\n <span>{{ header() }}</span> \r\n }\r\n </h6> \r\n </div>\r\n }\r\n \r\n <!-- Search -->\r\n @if(showSearch() && dataSource().length > 0) {\r\n <div class=\"
|
128
|
+
args: [{ selector: 'coer-list', template: "<div [id]=\"_id\" class=\"coer-list\" [ngStyle]=\"{ \r\n 'margin-top': marginTop(), \r\n 'margin-right': marginRight(), \r\n 'margin-bottom': marginBottom(), \r\n 'margin-left': marginLeft(), \r\n }\">\r\n\r\n @if(isLoading()) {\r\n <!-- Grid Message -->\r\n <div class=\"loading\">\r\n <i class=\"spinner-border\"></i>\r\n <span class=\"fa-fade\">Loading</span>\r\n </div>\r\n }\r\n\r\n @else if(dataSource().length <= 0) {\r\n <div class=\"no-data\"> No Data </div>\r\n }\r\n\r\n <header [id]=\"_id + '-header'\" class=\"row justify-content-end\"> \r\n @if(header().length > 0 || headerIcon().length > 0) {\r\n <div class=\"col-auto me-auto\">\r\n <h6>\r\n @if(headerIcon().length > 0) {\r\n <i [class]=\"headerIcon()\"></i> \r\n }\r\n\r\n @if(header().length > 0) {\r\n <span>{{ header() }}</span> \r\n }\r\n </h6> \r\n </div>\r\n }\r\n\r\n @if(_showBackButton()) {\r\n <div class=\"col-auto ps-2 pe-0\"> \r\n <coer-button\r\n type=\"icon-outline\"\r\n color=\"secondary\"\r\n icon=\"back\"\r\n tooltip=\"Back\"\r\n [animation]=\"_enableAnimations\"\r\n (onClick)=\"onClickBack.emit()\"\r\n ></coer-button> \r\n </div>\r\n }\r\n \r\n <!-- Search -->\r\n @if(showSearch() && dataSource().length > 0) {\r\n <div class=\"col-auto pe-0\">\r\n <coer-textbox\r\n #inputSearch \r\n placeholder=\"Search\"\r\n [isDisabled]=\"isLoading()\"\r\n [selectOnFocus]=\"true\"\r\n width=\"250px\"\r\n marginTop=\"5px\"\r\n marginBottom=\"5px\"\r\n [showSearchIcon]=\"true\"\r\n [showClearIcon]=\"true\"\r\n ></coer-textbox>\r\n </div>\r\n }\r\n </header>\r\n\r\n <div [ngStyle]=\"{ \r\n 'width': width(), \r\n 'min-Width': MinWidth(), \r\n 'max-Width': MaxWidth(), \r\n }\">\r\n <ul cdkDropList (cdkDropListDropped)=\"Drop($event)\" class='list-group coer-list'\r\n [ngStyle]=\"{ \r\n 'height': _height, \r\n 'min-height': minHeight(), \r\n 'max-height': maxHeight(), \r\n 'd-none': dataSource().length <= 0 \r\n }\">\r\n \r\n @for (item of _dataSource(); track GetIndexRow(item)) {\r\n <li cdkDrag \r\n class=\"list-group-item coer-list-box\" \r\n cdkDragBoundary=\"ul.coer-list\"\r\n (click)=\"onClick.emit(item)\" \r\n (dblclick)=\"onDoubleClick.emit(item)\">\r\n \r\n <div *cdkDragPlaceholder class=\"coer-list-placeholder cursor-grabbing\"></div>\r\n <div class=\"coer-list-content\"> \r\n @if(_hasTemplate()) {\r\n <div [innerHTML]=\"GetTemplate(item) | html\" class=\"template\"></div>\r\n }\r\n \r\n @else {\r\n <div> {{ GetDisplay(item) }} </div> \r\n } \r\n \r\n <div>\r\n @if(_showDeleteButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"delete\" \r\n (onClick)=\"onClickDelete.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n @if(_showGoButton(item)) {\r\n <coer-button\r\n type=\"icon-no-border\"\r\n color=\"secondary\"\r\n icon=\"go\" \r\n marginLeft=\"5px\" \r\n (onClick)=\"onClickGo.emit(item)\"\r\n ></coer-button>\r\n } \r\n \r\n <i cdkDragHandle [ngClass]=\"{ \r\n 'fa-solid fa-grip-vertical text-secondary ps-2': true,\r\n 'cursor-grab': true, \r\n 'cursor-grabbing': false, \r\n 'd-none': !_isDraggable()\r\n }\"></i> \r\n </div> \r\n </div> \r\n </li> \r\n } \r\n </ul>\r\n </div>\r\n</div>", styles: ["div.coer-list header{align-items:center;justify-content:space-between;padding-right:0px 8px;margin:0}div.coer-list header h6{display:flex;align-items:center;gap:10px;min-height:40px;max-height:40px;margin-top:5px;margin-bottom:5px}div.coer-list header>div{display:flex;align-items:baseline}div.coer-list ul.coer-list{width:100%;border:solid 1px #ccc;display:block;background:#fff;border-radius:4px;overflow:auto}div.coer-list li.coer-list-box{padding:10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;background:#fff;font-size:14px}div.coer-list li.coer-list-box div.coer-list-content{width:100%;display:flex;align-items:center;justify-content:space-between}div.coer-list .cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}div.coer-list .cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list .coer-list-box:last-child{border:none}div.coer-list .coer-list.cdk-drop-list-dragging .coer-list-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.coer-list-placeholder{background:#ccc;border:dotted 3px #999;min-height:40px;transition:transform .25s cubic-bezier(0,0,.2,1)}div.coer-list div.cdk-drag-placeholder,div.coer-list ul.cdk-drop-list-dragging,div.coer-list ul.cdk-drop-list-dragging *{cursor:grabbing}div.coer-list div.loading,div.coer-list div.no-data{position:absolute;display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:25px;color:gray;z-index:1}div.coer-list div.loading{background-color:#bbbbbb83!important;flex-direction:column!important;gap:10px!important}div.coer-list div.loading span.fa-fade{position:relative!important}\n"] }]
|
116
129
|
}] });
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1saXN0L2NvZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItbGlzdC9jb2VyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBT3BELE1BQU0sT0FBTyxRQUFRO0lBTHJCO1FBT0ksV0FBVztRQUNELFFBQUcsR0FBVyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELFFBQVE7UUFDRCxlQUFVLEdBQUcsS0FBSyxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0IsZUFBVSxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxLQUFLLENBQWtELEtBQUssQ0FBQyxDQUFDO1FBQ2pGLGlCQUFZLEdBQUcsS0FBSyxDQUFrRCxLQUFLLENBQUMsQ0FBQztRQUM3RSxjQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkMsYUFBUSxHQUFHLEtB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UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBZUQsTUFBTTtJQUNJLFdBQVcsQ0FBQyxJQUFTO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQXFCRCxNQUFNO0lBQ0ksSUFBSSxDQUFDLEtBQXVCO1FBQ2xDLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzlDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RCxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzsrR0E3SFEsUUFBUTttR0FBUixRQUFRLHcwRkNUckIsd3RIQWtITTs7NEZEekdPLFFBQVE7a0JBTHBCLFNBQVM7K0JBQ0ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsgXHJcbmltcG9ydCB7IFNjcmVlbiwgVG9vbHMgfSBmcm9tICdjb2VyLWVsZW1lbnRzL3Rvb2xzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb2VyLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vY29lci1saXN0LmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZXJMaXN0PFQ+IHsgXHJcblxyXG4gICAgLy9WYXJpYWJsZXNcclxuICAgIHByb3RlY3RlZCBfaWQ6IHN0cmluZyA9IFRvb2xzLkdldEd1aWQoJ2NvZXItTGlzdCcpO1xyXG5cclxuICAgIC8vSW5wdXRzXHJcbiAgICBwdWJsaWMgZGF0YVNvdXJjZSA9IGlucHV0PFRbXT4oW10pO1xyXG4gICAgcHVibGljIHByb3BEaXNwbGF5ID0gaW5wdXQ8c3RyaW5nPignbmFtZScpO1xyXG4gICAgcHVibGljIGhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG4gICAgcHVibGljIGhlYWRlckljb24gPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHB1YmxpYyBzaG93RGVsZXRlQnV0dG9uID0gaW5wdXQ8KChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKSB8IGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBzaG93R29CdXR0b24gPSBpbnB1dDwoKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pIHwgYm9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBpc0RyYWdnYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBzaG93U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIHRlbXBsYXRlID0gaW5wdXQ8KChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwdWJsaWMgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCcxMDAlJyk7XHJcbiAgICBwdWJsaWMgTWluV2lkdGggPSBpbnB1dDxzdHJpbmc+KCcyNTBweCcpO1xyXG4gICAgcHVibGljIE1heFdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIGhlaWdodCA9IGlucHV0PHN0cmluZz4oJzM1MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWluSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTQwcHgnKTtcclxuICAgIHB1YmxpYyBtYXhIZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCcxMDB2aCcpO1xyXG4gICAgcHVibGljIG1hcmdpblRvcCA9IGlucHV0PHN0cmluZz4oJzBweCcpO1xyXG4gICAgcHVibGljIG1hcmdpblJpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMHB4Jyk7XHJcbiAgICBwdWJsaWMgbWFyZ2luQm90dG9tID0gaW5wdXQ8c3RyaW5nPignMHB4Jyk7XHJcbiAgICBwdWJsaWMgbWFyZ2luTGVmdCA9IGlucHV0PHN0cmluZz4oJzBweCcpO1xyXG5cclxuICAgIC8vT3V0cHV0c1xyXG4gICAgcHVibGljIG9uRHJvcCA9IG91dHB1dDxUPigpOyBcclxuICAgIHB1YmxpYyBvblNvcnQgPSBvdXRwdXQ8VFtdPigpOyBcclxuICAgIHB1YmxpYyBvbkNsaWNrID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25Eb3VibGVDbGljayA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uQ2xpY2tEZWxldGUgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrR28gPSBvdXRwdXQ8VD4oKTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2UgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwOyAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMuZGF0YVNvdXJjZSgpKVxyXG4gICAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oaXRlbSwgeyBpbmRleDogaW5kZXgrKyB9KSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9pc0RyYWdnYWJsZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnYWJsZSgpICYmICF0aGlzLmlzTG9hZGluZygpO1xyXG4gICAgfSk7ICBcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9oYXNUZW1wbGF0ZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRlbXBsYXRlKCkgPT0gJ2Z1bmN0aW9uJztcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX3Nob3didXR0b25zID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4geyAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2FkaW5nKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgX2hlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmhlaWdodCgpO1xyXG5cclxuICAgICAgICBpZiAoaGVpZ2h0ID09ICdmdWxsJykge1xyXG4gICAgICAgICAgICBjb25zdCBUT09MQkFSID0gNDU7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBR0VfSEVBREVSID0gNzA7XHJcbiAgICAgICAgICAgIGNvbnN0IExJU1RfSEVBREVSID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5faWR9LWhlYWRlcmApITtcclxuICAgICAgICAgICAgY29uc3QgSEVBREVSID0gKExJU1RfSEVBREVSICYmIExJU1RfSEVBREVSLmNoaWxkcmVuLmxlbmd0aCA+IDApID8gNTAgOiAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgTUFSR0lOID0gNTA7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBRERJTkcgPSA1MDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gKFNjcmVlbi5XSU5ET1dfSEVJR0hUIC0gVE9PTEJBUiAtIFBBR0VfSEVBREVSIC0gTUFSR0lOIC0gSEVBREVSIC0gUEFERElORykgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0RGlzcGxheSA9IChpdGVtOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIHJldHVybiBUb29scy5Jc05vdE51bGwoaXRlbSkgPyBpdGVtW3RoaXMucHJvcERpc3BsYXkoKV0gOiAnJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0SW5kZXhSb3cgPSAoaXRlbTogYW55KTogbnVtYmVyID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbVsnaW5kZXgnXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0VGVtcGxhdGUoaXRlbTogYW55KTogc3RyaW5nIHsgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlKCkhKGl0ZW0sIGl0ZW0uaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfc2hvd0RlbGV0ZUJ1dHRvbiA9IChpdGVtOiBhbnkpOiBib29sZWFuID0+IHsgXHJcbiAgICAgICAgY29uc3Qgc2hvd0J1dHRvbiA9IHRoaXMuc2hvd0RlbGV0ZUJ1dHRvbigpIGFzIGFueTsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiAodHlwZW9mIHNob3dCdXR0b24gPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgPyBzaG93QnV0dG9uICYmICF0aGlzLmlzTG9hZGluZygpXHJcbiAgICAgICAgICAgIDogc2hvd0J1dHRvbihpdGVtLCBpdGVtLmluZGV4KSA9PT0gdHJ1ZSAmJiAhdGhpcy5pc0xvYWRpbmcoKTsgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9zaG93R29CdXR0b24gPSAoaXRlbTogYW55KTogYm9vbGVhbiA9PiB7IFxyXG4gICAgICAgIGNvbnN0IHNob3dCdXR0b24gPSB0aGlzLnNob3dHb0J1dHRvbigpIGFzIGFueTsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiAodHlwZW9mIHNob3dCdXR0b24gPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgPyBzaG93QnV0dG9uICYmICF0aGlzLmlzTG9hZGluZygpXHJcbiAgICAgICAgICAgIDogc2hvd0J1dHRvbihpdGVtLCBpdGVtLmluZGV4KSA9PT0gdHJ1ZSAmJiAhdGhpcy5pc0xvYWRpbmcoKTsgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIERyb3AoZXZlbnQ6IENka0RyYWdEcm9wPFRbXT4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9ID0gZXZlbnQ7ICAgICAgICBcclxuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMuZGF0YVNvdXJjZSgpKTtcclxuICAgICAgICBjb25zdCBpdGVtID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YVNvdXJjZVtwcmV2aW91c0luZGV4XSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBpdGVtKTsgXHJcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdChkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLm9uRHJvcC5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG59IiwiPGRpdiBbaWRdPVwiX2lkXCIgY2xhc3M9XCJjb2VyLWxpc3RcIiBbbmdTdHlsZV09XCJ7IFxyXG4gICdtYXJnaW4tdG9wJzogbWFyZ2luVG9wKCksIFxyXG4gICdtYXJnaW4tcmlnaHQnOiBtYXJnaW5SaWdodCgpLCBcclxuICAnbWFyZ2luLWJvdHRvbSc6IG1hcmdpbkJvdHRvbSgpLCBcclxuICAnbWFyZ2luLWxlZnQnOiBtYXJnaW5MZWZ0KCksIFxyXG4gIH1cIj5cclxuXHJcbiAgQGlmKGlzTG9hZGluZygpKSB7XHJcbiAgICA8IS0tIEdyaWQgTWVzc2FnZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiPjwvaT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhLWZhZGVcIj5Mb2FkaW5nPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAZWxzZSBpZihkYXRhU291cmNlKCkubGVuZ3RoIDw9IDApIHtcclxuICAgIDxkaXYgY2xhc3M9XCJuby1kYXRhXCI+IE5vIERhdGEgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8aGVhZGVyIFtpZF09XCJfaWQgKyAnLWhlYWRlcidcIiBjbGFzcz1cInJvd1wiPiBcclxuICAgIEBpZihoZWFkZXIoKS5sZW5ndGggPiAwIHx8IGhlYWRlckljb24oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgIDxoNj5cclxuICAgICAgICAgIEBpZihoZWFkZXJJY29uKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaGVhZGVySWNvbigpXCI+PC9pPiBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYoaGVhZGVyKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXIoKSB9fTwvc3Bhbj4gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9oNj4gICAgICAgIFxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIFxyXG4gICAgPCEtLSBTZWFyY2ggLS0+XHJcbiAgICBAaWYoc2hvd1NlYXJjaCgpICYmIGRhdGFTb3VyY2UoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtcy1hdXRvIGNvbC1hdXRvXCI+XHJcbiAgICAgICAgICA8Y29lci10ZXh0Ym94XHJcbiAgICAgICAgICAgICAgI2lucHV0U2VhcmNoIFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdE9uRm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIyNTBweFwiXHJcbiAgICAgICAgICAgICAgbWFyZ2luVG9wPVwiNXB4XCJcclxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b209XCI1cHhcIlxyXG4gICAgICAgICAgICAgIFtzaG93U2VhcmNoSWNvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc2hvd0NsZWFySWNvbl09XCJ0cnVlXCJcclxuICAgICAgICAgID48L2NvZXItdGV4dGJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9oZWFkZXI+XHJcblxyXG4gIDxkaXYgW25nU3R5bGVdPVwieyBcclxuICAgICd3aWR0aCc6IHdpZHRoKCksIFxyXG4gICAgJ21pbi1XaWR0aCc6IE1pbldpZHRoKCksIFxyXG4gICAgJ21heC1XaWR0aCc6IE1heFdpZHRoKCksIFxyXG4gICAgfVwiPlxyXG4gICAgPHVsIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiRHJvcCgkZXZlbnQpXCIgY2xhc3M9J2xpc3QtZ3JvdXAgY29lci1saXN0J1xyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgXHJcbiAgICAgICAgICAnaGVpZ2h0JzogX2hlaWdodCwgXHJcbiAgICAgICAgICAnbWluLWhlaWdodCc6IG1pbkhlaWdodCgpLCBcclxuICAgICAgICAgICdtYXgtaGVpZ2h0JzogbWF4SGVpZ2h0KCksIFxyXG4gICAgICAgICAgJ2Qtbm9uZSc6IGRhdGFTb3VyY2UoKS5sZW5ndGggPD0gMCAgXHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgIFxyXG4gICAgICBAZm9yIChpdGVtIG9mIF9kYXRhU291cmNlKCk7IHRyYWNrIEdldEluZGV4Um93KGl0ZW0pKSB7XHJcbiAgICAgICAgPGxpIGNka0RyYWcgXHJcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBjb2VyLWxpc3QtYm94XCIgXHJcbiAgICAgICAgICBjZGtEcmFnQm91bmRhcnk9XCJ1bC5jb2VyLWxpc3RcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2suZW1pdChpdGVtKVwiIFxyXG4gICAgICAgICAgKGRibGNsaWNrKT1cIm9uRG91YmxlQ2xpY2suZW1pdChpdGVtKVwiPlxyXG4gIFxyXG4gICAgICAgICAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiY29lci1saXN0LXBsYWNlaG9sZGVyIGN1cnNvci1ncmFiYmluZ1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvZXItbGlzdC1jb250ZW50XCI+IFxyXG4gICAgICAgICAgICBAaWYoX2hhc1RlbXBsYXRlKCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiR2V0VGVtcGxhdGUoaXRlbSkgfCBodG1sXCIgY2xhc3M9XCJ0ZW1wbGF0ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICAgICA8ZGl2PiB7eyBHZXREaXNwbGF5KGl0ZW0pIH19IDwvZGl2PiBcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICBAaWYoX3Nob3dEZWxldGVCdXR0b24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgIDxjb2VyLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiaWNvbi1uby1ib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIGljb249XCJkZWxldGVcIiAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkNsaWNrRGVsZXRlLmVtaXQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgPjwvY29lci1idXR0b24+XHJcbiAgICAgICAgICAgICAgfSBcclxuICBcclxuICAgICAgICAgICAgICBAaWYoX3Nob3dHb0J1dHRvbihpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgPGNvZXItYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJpY29uLW5vLWJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgaWNvbj1cImdvXCIgICBcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdD1cIjVweFwiICAgXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQ2xpY2tHby5lbWl0KGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgID48L2NvZXItYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxpIGNka0RyYWdIYW5kbGUgW25nQ2xhc3NdPVwieyBcclxuICAgICAgICAgICAgICAgICdmYS1zb2xpZCBmYS1ncmlwLXZlcnRpY2FsIHRleHQtc2Vjb25kYXJ5IHBzLTInOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiJzogdHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICAnY3Vyc29yLWdyYWJiaW5nJzogZmFsc2UsIFxyXG4gICAgICAgICAgICAgICAgJ2Qtbm9uZSc6ICFfaXNEcmFnZ2FibGUoKVxyXG4gICAgICAgICAgICAgIH1cIj48L2k+ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj4gIFxyXG4gICAgICAgIDwvbGk+IFxyXG4gICAgICB9IFxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1saXN0L2NvZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItbGlzdC9jb2VyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU9wRCxNQUFNLE9BQU8sUUFBUTtJQUxyQjtRQU9JLFdBQVc7UUFDRCxRQUFHLEdBQVcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFN0MsUUFBUTtRQUNELGVBQVUsR0FBRyxLQUFLLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxLQUFLLENBQVMsTUFBTSxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQixlQUFVLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLEtBQUssQ0FBa0QsS0FBSyxDQUFDLENBQUM7UUFDakYsaUJBQVksR0FBRyxLQUFLLENBQWtELEtBQUssQ0FBQyxDQUFDO1FBQzdFLG1CQUFjLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxLQUFLLENBQVUsS0FB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QUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBOUlRLFFBQVE7bUdBQVIsUUFBUSx1L0ZDVHJCLG1vSUErSE07OzRGRHRITyxRQUFRO2tCQUxwQixTQUFTOytCQUNJLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7IFxyXG5pbXBvcnQgeyBTY3JlZW4sIFRvb2xzIH0gZnJvbSAnY29lci1lbGVtZW50cy90b29scyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY29lci1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2VyLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NvZXItbGlzdC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2VyTGlzdDxUPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQgeyBcclxuXHJcbiAgICAvL1ZhcmlhYmxlc1xyXG4gICAgcHJvdGVjdGVkIF9pZDogc3RyaW5nID0gVG9vbHMuR2V0R3VpZCgnY29lci1MaXN0Jyk7XHJcbiAgICBwcm90ZWN0ZWQgX2VuYWJsZUFuaW1hdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvL0lucHV0c1xyXG4gICAgcHVibGljIGRhdGFTb3VyY2UgPSBpbnB1dDxUW10+KFtdKTtcclxuICAgIHB1YmxpYyBwcm9wRGlzcGxheSA9IGlucHV0PHN0cmluZz4oJ25hbWUnKTtcclxuICAgIHB1YmxpYyBoZWFkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICAgIHB1YmxpYyBoZWFkZXJJY29uID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcbiAgICBwdWJsaWMgc2hvd0RlbGV0ZUJ1dHRvbiA9IGlucHV0PCgoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbikgfCBib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgc2hvd0dvQnV0dG9uID0gaW5wdXQ8KChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKSB8IGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBzaG93QmFja0J1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgaXNEcmFnZ2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwdWJsaWMgc2hvd1NlYXJjaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHB1YmxpYyB0ZW1wbGF0ZSA9IGlucHV0PCgoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB8IG51bGw+KG51bGwpO1xyXG4gICAgcHVibGljIHdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHVibGljIE1pbldpZHRoID0gaW5wdXQ8c3RyaW5nPignMjUwcHgnKTtcclxuICAgIHB1YmxpYyBNYXhXaWR0aCA9IGlucHV0PHN0cmluZz4oJzEwMCUnKTtcclxuICAgIHB1YmxpYyBoZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCczNTBweCcpO1xyXG4gICAgcHVibGljIG1pbkhlaWdodCA9IGlucHV0PHN0cmluZz4oJzE0MHB4Jyk7XHJcbiAgICBwdWJsaWMgbWF4SGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTAwdmgnKTtcclxuICAgIHB1YmxpYyBtYXJnaW5Ub3AgPSBpbnB1dDxzdHJpbmc+KCcwcHgnKTtcclxuICAgIHB1YmxpYyBtYXJnaW5SaWdodCA9IGlucHV0PHN0cmluZz4oJzBweCcpO1xyXG4gICAgcHVibGljIG1hcmdpbkJvdHRvbSA9IGlucHV0PHN0cmluZz4oJzBweCcpO1xyXG4gICAgcHVibGljIG1hcmdpbkxlZnQgPSBpbnB1dDxzdHJpbmc+KCcwcHgnKTtcclxuXHJcbiAgICAvL091dHB1dHNcclxuICAgIHB1YmxpYyBvbkRyb3AgPSBvdXRwdXQ8VD4oKTsgXHJcbiAgICBwdWJsaWMgb25Tb3J0ID0gb3V0cHV0PFRbXT4oKTsgXHJcbiAgICBwdWJsaWMgb25DbGljayA9IG91dHB1dDxUPigpO1xyXG4gICAgcHVibGljIG9uRG91YmxlQ2xpY2sgPSBvdXRwdXQ8VD4oKTtcclxuICAgIHB1YmxpYyBvbkNsaWNrRGVsZXRlID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0dvID0gb3V0cHV0PFQ+KCk7XHJcbiAgICBwdWJsaWMgb25DbGlja0JhY2sgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2UgPSBjb21wdXRlZDxUW10+KCgpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwOyAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMuZGF0YVNvdXJjZSgpKVxyXG4gICAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oaXRlbSwgeyBpbmRleDogaW5kZXgrKyB9KSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9pc0RyYWdnYWJsZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnYWJsZSgpICYmICF0aGlzLmlzTG9hZGluZygpO1xyXG4gICAgfSk7ICBcclxuXHJcblxyXG4gICAgLy9jb21wdXRlZFxyXG4gICAgcHJvdGVjdGVkIF9oYXNUZW1wbGF0ZSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnRlbXBsYXRlKCkgPT0gJ2Z1bmN0aW9uJztcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvL2NvbXB1dGVkXHJcbiAgICBwcm90ZWN0ZWQgX3Nob3didXR0b25zID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4geyAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2FkaW5nKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgX2hlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmhlaWdodCgpO1xyXG5cclxuICAgICAgICBpZiAoaGVpZ2h0ID09ICdmdWxsJykge1xyXG4gICAgICAgICAgICBjb25zdCBUT09MQkFSID0gNDU7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBR0VfSEVBREVSID0gNzA7XHJcbiAgICAgICAgICAgIGNvbnN0IExJU1RfSEVBREVSID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dGhpcy5faWR9LWhlYWRlcmApITtcclxuICAgICAgICAgICAgY29uc3QgSEVBREVSID0gKExJU1RfSEVBREVSICYmIExJU1RfSEVBREVSLmNoaWxkcmVuLmxlbmd0aCA+IDApID8gNTAgOiAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgTUFSR0lOID0gNTA7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBRERJTkcgPSA1MDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gKFNjcmVlbi5XSU5ET1dfSEVJR0hUIC0gVE9PTEJBUiAtIFBBR0VfSEVBREVSIC0gTUFSR0lOIC0gSEVBREVSIC0gUEFERElORykgKyAncHgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIFRvb2xzLlNsZWVwKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMgPSB0cnVlOyBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0RGlzcGxheSA9IChpdGVtOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIHJldHVybiBUb29scy5Jc05vdE51bGwoaXRlbSkgPyBpdGVtW3RoaXMucHJvcERpc3BsYXkoKV0gOiAnJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0SW5kZXhSb3cgPSAoaXRlbTogYW55KTogbnVtYmVyID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbVsnaW5kZXgnXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0VGVtcGxhdGUoaXRlbTogYW55KTogc3RyaW5nIHsgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlKCkhKGl0ZW0sIGl0ZW0uaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfc2hvd0JhY2tCdXR0b24gPSAoKTogYm9vbGVhbiA9PiB7ICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93QmFja0J1dHRvbigpXHJcbiAgICAgICAgICAgICYmICF0aGlzLmlzTG9hZGluZygpIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBfc2hvd0RlbGV0ZUJ1dHRvbiA9IChpdGVtOiBhbnkpOiBib29sZWFuID0+IHsgXHJcbiAgICAgICAgY29uc3Qgc2hvd0J1dHRvbiA9IHRoaXMuc2hvd0RlbGV0ZUJ1dHRvbigpIGFzIGFueTsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiAodHlwZW9mIHNob3dCdXR0b24gPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgPyBzaG93QnV0dG9uICYmICF0aGlzLmlzTG9hZGluZygpXHJcbiAgICAgICAgICAgIDogc2hvd0J1dHRvbihpdGVtLCBpdGVtLmluZGV4KSA9PT0gdHJ1ZSAmJiAhdGhpcy5pc0xvYWRpbmcoKTsgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIF9zaG93R29CdXR0b24gPSAoaXRlbTogYW55KTogYm9vbGVhbiA9PiB7IFxyXG4gICAgICAgIGNvbnN0IHNob3dCdXR0b24gPSB0aGlzLnNob3dHb0J1dHRvbigpIGFzIGFueTsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiAodHlwZW9mIHNob3dCdXR0b24gPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgPyBzaG93QnV0dG9uICYmICF0aGlzLmlzTG9hZGluZygpXHJcbiAgICAgICAgICAgIDogc2hvd0J1dHRvbihpdGVtLCBpdGVtLmluZGV4KSA9PT0gdHJ1ZSAmJiAhdGhpcy5pc0xvYWRpbmcoKTsgXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIERyb3AoZXZlbnQ6IENka0RyYWdEcm9wPFRbXT4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9ID0gZXZlbnQ7ICAgICAgICBcclxuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKHRoaXMuZGF0YVNvdXJjZSgpKTtcclxuICAgICAgICBjb25zdCBpdGVtID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UoZGF0YVNvdXJjZVtwcmV2aW91c0luZGV4XSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBpdGVtKTsgXHJcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdChkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLm9uRHJvcC5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG59IiwiPGRpdiBbaWRdPVwiX2lkXCIgY2xhc3M9XCJjb2VyLWxpc3RcIiBbbmdTdHlsZV09XCJ7IFxyXG4gICdtYXJnaW4tdG9wJzogbWFyZ2luVG9wKCksIFxyXG4gICdtYXJnaW4tcmlnaHQnOiBtYXJnaW5SaWdodCgpLCBcclxuICAnbWFyZ2luLWJvdHRvbSc6IG1hcmdpbkJvdHRvbSgpLCBcclxuICAnbWFyZ2luLWxlZnQnOiBtYXJnaW5MZWZ0KCksIFxyXG4gIH1cIj5cclxuXHJcbiAgQGlmKGlzTG9hZGluZygpKSB7XHJcbiAgICA8IS0tIEdyaWQgTWVzc2FnZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiPjwvaT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhLWZhZGVcIj5Mb2FkaW5nPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAZWxzZSBpZihkYXRhU291cmNlKCkubGVuZ3RoIDw9IDApIHtcclxuICAgIDxkaXYgY2xhc3M9XCJuby1kYXRhXCI+IE5vIERhdGEgPC9kaXY+XHJcbiAgfVxyXG5cclxuICA8aGVhZGVyIFtpZF09XCJfaWQgKyAnLWhlYWRlcidcIiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+IFxyXG4gICAgQGlmKGhlYWRlcigpLmxlbmd0aCA+IDAgfHwgaGVhZGVySWNvbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIG1lLWF1dG9cIj5cclxuICAgICAgICA8aDY+XHJcbiAgICAgICAgICBAaWYoaGVhZGVySWNvbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImhlYWRlckljb24oKVwiPjwvaT4gXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQGlmKGhlYWRlcigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgPHNwYW4+e3sgaGVhZGVyKCkgfX08L3NwYW4+IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvaDY+ICAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmKF9zaG93QmFja0J1dHRvbigpKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwcy0yIHBlLTBcIj4gICAgICAgICBcclxuICAgICAgICA8Y29lci1idXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImljb24tb3V0bGluZVwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgaWNvbj1cImJhY2tcIlxyXG4gICAgICAgICAgICB0b29sdGlwPVwiQmFja1wiXHJcbiAgICAgICAgICAgIFthbmltYXRpb25dPVwiX2VuYWJsZUFuaW1hdGlvbnNcIlxyXG4gICAgICAgICAgICAob25DbGljayk9XCJvbkNsaWNrQmFjay5lbWl0KClcIlxyXG4gICAgICAgID48L2NvZXItYnV0dG9uPiAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICBcclxuICAgIDwhLS0gU2VhcmNoIC0tPlxyXG4gICAgQGlmKHNob3dTZWFyY2goKSAmJiBkYXRhU291cmNlKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcGUtMFwiPlxyXG4gICAgICAgICAgPGNvZXItdGV4dGJveFxyXG4gICAgICAgICAgICAgICNpbnB1dFNlYXJjaCBcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3RPbkZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMjUwcHhcIlxyXG4gICAgICAgICAgICAgIG1hcmdpblRvcD1cIjVweFwiXHJcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tPVwiNXB4XCJcclxuICAgICAgICAgICAgICBbc2hvd1NlYXJjaEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Nob3dDbGVhckljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICA+PC9jb2VyLXRleHRib3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvaGVhZGVyPlxyXG5cclxuICA8ZGl2IFtuZ1N0eWxlXT1cInsgXHJcbiAgICAnd2lkdGgnOiB3aWR0aCgpLCBcclxuICAgICdtaW4tV2lkdGgnOiBNaW5XaWR0aCgpLCBcclxuICAgICdtYXgtV2lkdGgnOiBNYXhXaWR0aCgpLCBcclxuICAgIH1cIj5cclxuICAgIDx1bCBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cIkRyb3AoJGV2ZW50KVwiIGNsYXNzPSdsaXN0LWdyb3VwIGNvZXItbGlzdCdcclxuICAgICAgICBbbmdTdHlsZV09XCJ7IFxyXG4gICAgICAgICAgJ2hlaWdodCc6IF9oZWlnaHQsIFxyXG4gICAgICAgICAgJ21pbi1oZWlnaHQnOiBtaW5IZWlnaHQoKSwgXHJcbiAgICAgICAgICAnbWF4LWhlaWdodCc6IG1heEhlaWdodCgpLCBcclxuICAgICAgICAgICdkLW5vbmUnOiBkYXRhU291cmNlKCkubGVuZ3RoIDw9IDAgIFxyXG4gICAgICAgICAgfVwiPlxyXG4gICAgICBcclxuICAgICAgQGZvciAoaXRlbSBvZiBfZGF0YVNvdXJjZSgpOyB0cmFjayBHZXRJbmRleFJvdyhpdGVtKSkge1xyXG4gICAgICAgIDxsaSBjZGtEcmFnIFxyXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gY29lci1saXN0LWJveFwiIFxyXG4gICAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwidWwuY29lci1saXN0XCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrLmVtaXQoaXRlbSlcIiBcclxuICAgICAgICAgIChkYmxjbGljayk9XCJvbkRvdWJsZUNsaWNrLmVtaXQoaXRlbSlcIj5cclxuICBcclxuICAgICAgICAgIDxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImNvZXItbGlzdC1wbGFjZWhvbGRlciBjdXJzb3ItZ3JhYmJpbmdcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2VyLWxpc3QtY29udGVudFwiPiBcclxuICAgICAgICAgICAgQGlmKF9oYXNUZW1wbGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIkdldFRlbXBsYXRlKGl0ZW0pIHwgaHRtbFwiIGNsYXNzPVwidGVtcGxhdGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgPGRpdj4ge3sgR2V0RGlzcGxheShpdGVtKSB9fSA8L2Rpdj4gXHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgQGlmKF9zaG93RGVsZXRlQnV0dG9uKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICA8Y29lci1idXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImljb24tbm8tYm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCIgICAgICBcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25DbGlja0RlbGV0ZS5lbWl0KGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgID48L2NvZXItYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH0gXHJcbiAgXHJcbiAgICAgICAgICAgICAgQGlmKF9zaG93R29CdXR0b24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgIDxjb2VyLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiaWNvbi1uby1ib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIGljb249XCJnb1wiICAgXHJcbiAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9XCI1cHhcIiAgIFxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkNsaWNrR28uZW1pdChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9jb2VyLWJ1dHRvbj5cclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8aSBjZGtEcmFnSGFuZGxlIFtuZ0NsYXNzXT1cInsgXHJcbiAgICAgICAgICAgICAgICAnZmEtc29saWQgZmEtZ3JpcC12ZXJ0aWNhbCB0ZXh0LXNlY29uZGFyeSBwcy0yJzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICdjdXJzb3ItZ3JhYic6IHRydWUsIFxyXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyc6IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICdkLW5vbmUnOiAhX2lzRHJhZ2dhYmxlKClcclxuICAgICAgICAgICAgICB9XCI+PC9pPiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgIFxyXG4gICAgICAgICAgPC9kaXY+ICBcclxuICAgICAgICA8L2xpPiBcclxuICAgICAgfSBcclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
@@ -33,7 +33,7 @@ export class CoerMenuOption {
|
|
33
33
|
}
|
34
34
|
get _icon() {
|
35
35
|
return (this.icon && this.icon.length > 0)
|
36
|
-
? this.icon : '
|
36
|
+
? this.icon : '';
|
37
37
|
}
|
38
38
|
get _path() {
|
39
39
|
return (this.path && this.path.length > 0)
|
@@ -82,11 +82,11 @@ export class CoerMenuOption {
|
|
82
82
|
});
|
83
83
|
}
|
84
84
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerMenuOption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
85
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CoerMenuOption, selector: "coer-menu-option", inputs: { level: "level", label: "label", icon: "icon", path: "path", tree: "tree" }, outputs: { clickMenuOption: "clickMenuOption" }, ngImport: i0, template: "<mat-nav-list class=\"coer-menu-option\" (click)=\"ClickMenuOption('')\">\r\n <mat-list-item>\r\n <span [class]=\"'icon-container ' + identityClass\" [ngStyle]=\"{ 'margin-left': marginLeft }\">\r\n <i [class]=\"_icon\"
|
85
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CoerMenuOption, selector: "coer-menu-option", inputs: { level: "level", label: "label", icon: "icon", path: "path", tree: "tree" }, outputs: { clickMenuOption: "clickMenuOption" }, ngImport: i0, template: "<mat-nav-list class=\"coer-menu-option\" (click)=\"ClickMenuOption('')\">\r\n <mat-list-item>\r\n <span [class]=\"'icon-container ' + identityClass\" [ngStyle]=\"{ 'margin-left': marginLeft }\">\r\n <i [class]=\"_icon\"></i>\r\n </span>\r\n\r\n <span [class]=\"'label-container ' + identityClass\">\r\n {{ label }}\r\n </span>\r\n </mat-list-item>\r\n</mat-nav-list>", styles: ["mat-nav-list.coer-menu-option{padding:0!important}mat-nav-list.coer-menu-option div,mat-nav-list.coer-menu-option span{font-size:16px!important;font-family:sans-serif!important;font-weight:700}mat-nav-list.coer-menu-option mat-list-item{padding:0 35px 0 10px!important;display:inline-flex!important;height:48px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.icon-container{display:inline-flex!important;align-items:center!important;justify-content:center!important;height:48px!important;min-width:20px!important;max-width:20px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.label-container{justify-content:flex-start!important;display:inline-flex!important;height:auto!important;margin-left:10px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.icon-container.active-link,mat-nav-list.coer-menu-option mat-list-item span.label-container.active-link{color:var(--orange)!important}mat-nav-list.coer-menu-option mat-list-item:hover{background-color:#2f2f2f!important}\n"], dependencies: [{ kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }] }); }
|
86
86
|
}
|
87
87
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerMenuOption, decorators: [{
|
88
88
|
type: Component,
|
89
|
-
args: [{ selector: 'coer-menu-option', template: "<mat-nav-list class=\"coer-menu-option\" (click)=\"ClickMenuOption('')\">\r\n <mat-list-item>\r\n <span [class]=\"'icon-container ' + identityClass\" [ngStyle]=\"{ 'margin-left': marginLeft }\">\r\n <i [class]=\"_icon\"
|
89
|
+
args: [{ selector: 'coer-menu-option', template: "<mat-nav-list class=\"coer-menu-option\" (click)=\"ClickMenuOption('')\">\r\n <mat-list-item>\r\n <span [class]=\"'icon-container ' + identityClass\" [ngStyle]=\"{ 'margin-left': marginLeft }\">\r\n <i [class]=\"_icon\"></i>\r\n </span>\r\n\r\n <span [class]=\"'label-container ' + identityClass\">\r\n {{ label }}\r\n </span>\r\n </mat-list-item>\r\n</mat-nav-list>", styles: ["mat-nav-list.coer-menu-option{padding:0!important}mat-nav-list.coer-menu-option div,mat-nav-list.coer-menu-option span{font-size:16px!important;font-family:sans-serif!important;font-weight:700}mat-nav-list.coer-menu-option mat-list-item{padding:0 35px 0 10px!important;display:inline-flex!important;height:48px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.icon-container{display:inline-flex!important;align-items:center!important;justify-content:center!important;height:48px!important;min-width:20px!important;max-width:20px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.label-container{justify-content:flex-start!important;display:inline-flex!important;height:auto!important;margin-left:10px!important;color:var(--white)}mat-nav-list.coer-menu-option mat-list-item span.icon-container.active-link,mat-nav-list.coer-menu-option mat-list-item span.label-container.active-link{color:var(--orange)!important}mat-nav-list.coer-menu-option mat-list-item:hover{background-color:#2f2f2f!important}\n"] }]
|
90
90
|
}], propDecorators: { level: [{
|
91
91
|
type: Input
|
92
92
|
}], label: [{
|
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
100
100
|
}], clickMenuOption: [{
|
101
101
|
type: Output
|
102
102
|
}] } });
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1tZW51LW9wdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItc2lkZW5hdi9jb2VyLW1lbnUtb3B0aW9uL2NvZXItbWVudS1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9jb21wb25lbnRzL2xpYi9jb2VyLXNpZGVuYXYvY29lci1tZW51LW9wdGlvbi9jb2VyLW1lbnUtb3B0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU96QyxNQUFNLE9BQU8sY0FBYztJQUwzQjtRQU9JLFNBQVM7UUFDRCxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLFFBQVE7UUFDQyxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFHbkIsU0FBSSxHQUFZLEVBQUUsQ0FBQztRQUU1QixTQUFTO1FBQ0Msb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztLQXVGdkU7SUFyRkcsa0JBQWtCO1FBQ2QsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxLQUFLLENB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LENBQUM7WUFFakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDaEIsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxXQUFXO1NBQzNCLENBQUMsQ0FBQTtJQUNOLENBQUM7K0dBbkdRLGNBQWM7bUdBQWQsY0FBYywrTENWM0Isd2FBVWU7OzRGREFGLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksa0JBQWtCOzhCQVVuQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElNZW51LCBJTWVudU9wdGlvblNlbGVjdGVkIH0gZnJvbSAnY29lci1lbGVtZW50cy9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVG9vbHMsIFNvdXJjZSB9IGZyb20gJ2NvZXItZWxlbWVudHMvdG9vbHMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvZXItbWVudS1vcHRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvZXItbWVudS1vcHRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NvZXItbWVudS1vcHRpb24uY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2VyTWVudU9wdGlvbiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG5cclxuICAgIC8vSW5qZWN0c1xyXG4gICAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gICAgLy9JbnB1dHNcclxuICAgIEBJbnB1dCgpIGxldmVsOiBudW1iZXIgPSAxO1xyXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgaWNvbiE6IHVuZGVmaW5lZCB8IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHBhdGghOiB1bmRlZmluZWQgfCBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0cmVlOiBJTWVudVtdID0gW107XHJcblxyXG4gICAgLy9PdXRwdXRzXHJcbiAgICBAT3V0cHV0KCkgY2xpY2tNZW51T3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxJTWVudU9wdGlvblNlbGVjdGVkPigpO1xyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgd2hpbGUgKFsnJywgJy8nXS5pbmNsdWRlcyh0aGlzLl9yb3V0ZXIudXJsKSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgVG9vbHMuU2xlZXAoMTAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0gJyc7XHJcbiAgICAgICAgICAgIGxldCByb3V0ZXJVUkwgPSB0aGlzLl9yb3V0ZXIudXJsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJz8nKSkge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyVVJMID0gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9yb3V0ZXIudXJsLnNwbGl0KCc/JylbMV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyb3V0ZXJVUkwgPT0gdGhpcy5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNsaWNrTWVudU9wdGlvbihxdWVyeVBhcmFtcywgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgX2ljb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaWNvbiAmJiB0aGlzLmljb24ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgPyB0aGlzLmljb24gOiAnJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBfcGF0aCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5wYXRoICYmIHRoaXMucGF0aC5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICA/IHRoaXMucGF0aCA6ICcvaG9tZSc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgX3RyZWUoKTogSU1lbnVbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRyZWVdLmNvbmNhdCh7XHJcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxyXG4gICAgICAgICAgICBpY29uOiB0aGlzLl9pY29uLFxyXG4gICAgICAgICAgICBwYXRoOiB0aGlzLl9wYXRoXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBtYXJnaW5MZWZ0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGV2ZWwgPT0gM1xyXG4gICAgICAgICAgICA/IGAkeyh0aGlzLmxldmVsIC0gMSkgKiAxMH1weGBcclxuICAgICAgICAgICAgOiBgJHsodGhpcy5sZXZlbCAtIDEpICogMjB9cHhgO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGlkZW50aXR5Q2xhc3MoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaWRlbnRpdHk6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlkZW50aXR5ICs9IGBsdiR7aSArIDF9JHt0aGlzLnRyZWVbaV0ubGFiZWx9LWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZGVudGl0eSArPSBgbHYke3RoaXMubGV2ZWx9JHt0aGlzLmxhYmVsfWA7XHJcbiAgICAgICAgaWYoaWRlbnRpdHkuaW5jbHVkZXMoJyAnKSkgaWRlbnRpdHkgPSBpZGVudGl0eS5yZXBsYWNlQWxsKCcgJywgJycpO1xyXG4gICAgICAgIHJldHVybiBpZGVudGl0eS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBDbGlja01lbnVPcHRpb24ocXVlcnlQYXJhbXM6IHN0cmluZywgcmVzZXRTb3VyY2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHJlc2V0U291cmNlKSB7XHJcbiAgICAgICAgICAgIGxldCByb3V0ZXJVUkwgPSB0aGlzLl9yb3V0ZXIudXJsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJz8nKSkge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyVVJMID0gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocm91dGVyVVJMICE9IHRoaXMucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgU291cmNlLlJlc2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xpY2tNZW51T3B0aW9uLmVtaXQoe1xyXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5sZXZlbCxcclxuICAgICAgICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuX3BhdGgsXHJcbiAgICAgICAgICAgIGljb246IHRoaXMuX2ljb24sXHJcbiAgICAgICAgICAgIHRyZWU6IFsuLi50aGlzLl90cmVlXSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsIjxtYXQtbmF2LWxpc3QgY2xhc3M9XCJjb2VyLW1lbnUtb3B0aW9uXCIgKGNsaWNrKT1cIkNsaWNrTWVudU9wdGlvbignJylcIj5cclxuICAgIDxtYXQtbGlzdC1pdGVtPlxyXG4gICAgICAgIDxzcGFuIFtjbGFzc109XCInaWNvbi1jb250YWluZXIgJyArIGlkZW50aXR5Q2xhc3NcIiBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tbGVmdCc6IG1hcmdpbkxlZnQgfVwiPlxyXG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiX2ljb25cIj48L2k+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2xhYmVsLWNvbnRhaW5lciAnICsgaWRlbnRpdHlDbGFzc1wiPlxyXG4gICAgICAgICAgICB7eyBsYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuPC9tYXQtbmF2LWxpc3Q+Il19
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Component, inject, viewChild, viewChildren } from '@angular/core';
|
2
2
|
import { CoerTreeAccordion } from './coer-tree-accordion/coer-tree-accordion.component';
|
3
|
-
import { breakpointSIGNAL, isModalOpenSIGNAL, isMenuOpenSIGNAL, navigationSIGNAL } from 'coer-elements/signals';
|
3
|
+
import { breakpointSIGNAL, isModalOpenSIGNAL, isMenuOpenSIGNAL, navigationSIGNAL, isLoadingSIGNAL } from 'coer-elements/signals';
|
4
4
|
import { Tools, Breadcrumbs, Menu, Screen } from 'coer-elements/tools';
|
5
5
|
import { Router } from '@angular/router';
|
6
6
|
import * as i0 from "@angular/core";
|
@@ -28,6 +28,7 @@ export class CoerSidenav {
|
|
28
28
|
this.isOpen = isMenuOpenSIGNAL;
|
29
29
|
this._isModalOpen = isModalOpenSIGNAL;
|
30
30
|
this._navigation = navigationSIGNAL;
|
31
|
+
this._isLoading = isLoadingSIGNAL;
|
31
32
|
//Elements
|
32
33
|
this.sidenav = viewChild.required('matSidenav');
|
33
34
|
this.menuList = viewChildren(CoerTreeAccordion);
|
@@ -184,10 +185,10 @@ export class CoerSidenav {
|
|
184
185
|
});
|
185
186
|
}
|
186
187
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerSidenav, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
187
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
188
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CoerSidenav, selector: "coer-sidenav", viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["matSidenav"], descendants: true, isSignal: true }, { propertyName: "menuList", predicate: CoerTreeAccordion, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-drawer-container [hasBackdrop]=\"backdrop\">\r\n <mat-drawer\r\n #matSidenav\r\n [opened]=\"isOpen()\"\r\n (opened)=\"isOpen.set(true)\"\r\n (closed)=\"isOpen.set(false)\"\r\n [mode]=\"mode\">\r\n\r\n @if(!_isLoading()) {\r\n @if(_navigation().length > 0) {\r\n <div *ngFor=\"let item of _navigation()\">\r\n <!-- Menu -->\r\n <div *ngIf=\"IsMenu(item); else OptionMenu\">\r\n <coer-tree-accordion\r\n [item]=\"item\"\r\n (clickMenuOption)=\"NavigateTo($event)\"\r\n (clickMenu)=\"MenuSelected($event)\"\r\n ></coer-tree-accordion>\r\n </div>\r\n \r\n <!-- Option Menu -->\r\n <ng-template #OptionMenu>\r\n <coer-menu-option\r\n [label]=\"item.label\"\r\n [icon]=\"item?.icon\"\r\n [path]=\"item?.path\"\r\n (clickMenuOption)=\"NavigateTo($event)\"\r\n ></coer-menu-option>\r\n </ng-template>\r\n \r\n <div class=\"separator\"></div>\r\n </div>\r\n }\r\n\r\n @else {\r\n <coer-menu-option\r\n label=\"Empty\"\r\n icon=\"fa-solid fa-face-meh\"\r\n ></coer-menu-option>\r\n }\r\n }\r\n\r\n @else {\r\n <coer-menu-option\r\n label=\"LOADING\"\r\n icon=\"fa-solid fa-sync fa-spin\"\r\n ></coer-menu-option>\r\n }\r\n\r\n <div [ngClass]=\"{ 'backdrop': _isModalOpen() }\"></div>\r\n </mat-drawer>\r\n\r\n <!-- Main Screen -->\r\n <mat-drawer-content [ngClass]=\"{ 'margin-left-40px': (!isOpen() && showAsideMenu) }\">\r\n <aside [ngClass]=\"{ 'side-nav': true, 'd-none': !showAsideMenu }\" (click)=\"Open($event)\">\r\n <div *ngFor=\"let item of _navigation()\" (click)=\"Open($event, item)\">\r\n <span [class]=\"'icon-container ' + SetIdentityClass(item.label)\">\r\n <i [class]=\"GetIcon(item)\"></i>\r\n </span>\r\n </div>\r\n\r\n <div [ngClass]=\"{ 'backdrop': _isModalOpen() }\"></div>\r\n </aside>\r\n\r\n <ng-content></ng-content>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: ["mat-drawer-container{height:calc(100vh - 45px)!important}mat-drawer-container .margin-left-40px{margin-left:40px!important}mat-drawer-container mat-drawer{width:auto;min-width:200px;background-color:var(--black)!important;z-index:1!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar{width:1px!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb{background-color:var(--gray)!important;border-radius:5px!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb:hover{background-color:var(--gray)!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb:active{background-color:var(--white)!important}mat-drawer-container mat-drawer i{font-size:16px!important}mat-drawer-container mat-drawer div.separator{border:.5px solid rgba(245,245,245,.041)!important}mat-drawer-container mat-drawer-content{margin-right:0!important}mat-drawer-container mat-drawer-content aside.side-nav{background-color:var(--black)!important;width:40px!important;position:fixed!important;left:0!important;top:45px!important;bottom:0!important;cursor:pointer!important}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container{width:100%!important;height:49.6px!important;display:flex!important;align-items:center!important;justify-content:center!important;font-size:16px!important;border-bottom:1px solid rgba(245,245,245,.041)!important;color:var(--white)}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container:hover{background-color:#2f2f2f!important}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container.active-link{color:var(--orange)!important}mat-drawer-container div.backdrop{position:absolute!important;inset:0!important;background-color:#0000005b!important;z-index:1500!important}\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: "component", type: i2.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i2.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "component", type: i2.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3.CoerMenuOption, selector: "coer-menu-option", inputs: ["level", "label", "icon", "path", "tree"], outputs: ["clickMenuOption"] }, { kind: "component", type: i4.CoerTreeAccordion, selector: "coer-tree-accordion", inputs: ["level", "item", "tree"], outputs: ["clickMenuOption", "clickMenu"] }] }); }
|
188
189
|
}
|
189
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerSidenav, decorators: [{
|
190
191
|
type: Component,
|
191
|
-
args: [{ selector: 'coer-sidenav', template: "<mat-drawer-container [hasBackdrop]=\"backdrop\">\r\n <mat-drawer\r\n #matSidenav\r\n [opened]=\"isOpen()\"\r\n (opened)=\"isOpen.set(true)\"\r\n (closed)=\"isOpen.set(false)\"\r\n [mode]=\"mode\">\r\n <div *ngFor=\"let item of _navigation()\">\r\n
|
192
|
+
args: [{ selector: 'coer-sidenav', template: "<mat-drawer-container [hasBackdrop]=\"backdrop\">\r\n <mat-drawer\r\n #matSidenav\r\n [opened]=\"isOpen()\"\r\n (opened)=\"isOpen.set(true)\"\r\n (closed)=\"isOpen.set(false)\"\r\n [mode]=\"mode\">\r\n\r\n @if(!_isLoading()) {\r\n @if(_navigation().length > 0) {\r\n <div *ngFor=\"let item of _navigation()\">\r\n <!-- Menu -->\r\n <div *ngIf=\"IsMenu(item); else OptionMenu\">\r\n <coer-tree-accordion\r\n [item]=\"item\"\r\n (clickMenuOption)=\"NavigateTo($event)\"\r\n (clickMenu)=\"MenuSelected($event)\"\r\n ></coer-tree-accordion>\r\n </div>\r\n \r\n <!-- Option Menu -->\r\n <ng-template #OptionMenu>\r\n <coer-menu-option\r\n [label]=\"item.label\"\r\n [icon]=\"item?.icon\"\r\n [path]=\"item?.path\"\r\n (clickMenuOption)=\"NavigateTo($event)\"\r\n ></coer-menu-option>\r\n </ng-template>\r\n \r\n <div class=\"separator\"></div>\r\n </div>\r\n }\r\n\r\n @else {\r\n <coer-menu-option\r\n label=\"Empty\"\r\n icon=\"fa-solid fa-face-meh\"\r\n ></coer-menu-option>\r\n }\r\n }\r\n\r\n @else {\r\n <coer-menu-option\r\n label=\"LOADING\"\r\n icon=\"fa-solid fa-sync fa-spin\"\r\n ></coer-menu-option>\r\n }\r\n\r\n <div [ngClass]=\"{ 'backdrop': _isModalOpen() }\"></div>\r\n </mat-drawer>\r\n\r\n <!-- Main Screen -->\r\n <mat-drawer-content [ngClass]=\"{ 'margin-left-40px': (!isOpen() && showAsideMenu) }\">\r\n <aside [ngClass]=\"{ 'side-nav': true, 'd-none': !showAsideMenu }\" (click)=\"Open($event)\">\r\n <div *ngFor=\"let item of _navigation()\" (click)=\"Open($event, item)\">\r\n <span [class]=\"'icon-container ' + SetIdentityClass(item.label)\">\r\n <i [class]=\"GetIcon(item)\"></i>\r\n </span>\r\n </div>\r\n\r\n <div [ngClass]=\"{ 'backdrop': _isModalOpen() }\"></div>\r\n </aside>\r\n\r\n <ng-content></ng-content>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: ["mat-drawer-container{height:calc(100vh - 45px)!important}mat-drawer-container .margin-left-40px{margin-left:40px!important}mat-drawer-container mat-drawer{width:auto;min-width:200px;background-color:var(--black)!important;z-index:1!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar{width:1px!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb{background-color:var(--gray)!important;border-radius:5px!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb:hover{background-color:var(--gray)!important}mat-drawer-container mat-drawer div.mat-drawer-inner-container::-webkit-scrollbar-thumb:active{background-color:var(--white)!important}mat-drawer-container mat-drawer i{font-size:16px!important}mat-drawer-container mat-drawer div.separator{border:.5px solid rgba(245,245,245,.041)!important}mat-drawer-container mat-drawer-content{margin-right:0!important}mat-drawer-container mat-drawer-content aside.side-nav{background-color:var(--black)!important;width:40px!important;position:fixed!important;left:0!important;top:45px!important;bottom:0!important;cursor:pointer!important}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container{width:100%!important;height:49.6px!important;display:flex!important;align-items:center!important;justify-content:center!important;font-size:16px!important;border-bottom:1px solid rgba(245,245,245,.041)!important;color:var(--white)}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container:hover{background-color:#2f2f2f!important}mat-drawer-container mat-drawer-content aside.side-nav span.icon-container.active-link{color:var(--orange)!important}mat-drawer-container div.backdrop{position:absolute!important;inset:0!important;background-color:#0000005b!important;z-index:1500!important}\n"] }]
|
192
193
|
}], ctorParameters: () => [] });
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1zaWRlbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1zaWRlbmF2L2NvZXItc2lkZW5hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItc2lkZW5hdi9jb2VyLXNpZGVuYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQTBCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hILE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQU96QyxNQUFNLE9BQU8sV0FBVztJQWNwQixRQUFRO0lBQ1IsSUFBYyxRQUFRO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFFBQVE7SUFDUixJQUFjLElBQUk7UUFDZCxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FB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LGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7b0JBQ25GLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7WUFFRCxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FyTlEsV0FBVzttR0FBWCxXQUFXLHlMQVljLGlCQUFpQixnRUN6QnZELGszREErQ3VCOzs0RkRsQ1YsV0FBVztrQkFMdkIsU0FBUzsrQkFDSSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBXcml0YWJsZVNpZ25hbCwgZWZmZWN0LCBpbmplY3QsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElNZW51LCBJTWVudVNlbGVjdGVkLCBJTWVudU9wdGlvblNlbGVjdGVkLCBJU2NyZWVuU2l6ZSB9IGZyb20gJ2NvZXItZWxlbWVudHMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvZXJUcmVlQWNjb3JkaW9uIH0gZnJvbSAnLi9jb2VyLXRyZWUtYWNjb3JkaW9uL2NvZXItdHJlZS1hY2NvcmRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgYnJlYWtwb2ludFNJR05BTCwgaXNNb2RhbE9wZW5TSUdOQUwsIGlzTWVudU9wZW5TSUdOQUwsIG5hdmlnYXRpb25TSUdOQUwgfSBmcm9tICdjb2VyLWVsZW1lbnRzL3NpZ25hbHMnO1xyXG5pbXBvcnQgeyBUb29scywgQnJlYWRjcnVtYnMsIE1lbnUsIFNjcmVlbiB9IGZyb20gJ2NvZXItZWxlbWVudHMvdG9vbHMnO1xyXG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb2VyLXNpZGVuYXYnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvZXItc2lkZW5hdi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vY29lci1zaWRlbmF2LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29lclNpZGVuYXYge1xyXG5cclxuICAgIC8vSW5qZWN0aW9uc1xyXG4gICAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gICAgLy9zaWduYWxzXHJcbiAgICBwcm90ZWN0ZWQgaXNPcGVuOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IGlzTWVudU9wZW5TSUdOQUw7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTW9kYWxPcGVuOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IGlzTW9kYWxPcGVuU0lHTkFMO1xyXG4gICAgcHJvdGVjdGVkIF9uYXZpZ2F0aW9uOiBXcml0YWJsZVNpZ25hbDxJTWVudVtdPiA9IG5hdmlnYXRpb25TSUdOQUw7XHJcblxyXG4gICAgLy9FbGVtZW50c1xyXG4gICAgcHJvdGVjdGVkIHNpZGVuYXYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0RHJhd2VyPignbWF0U2lkZW5hdicpO1xyXG4gICAgcHJvdGVjdGVkIG1lbnVMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJUcmVlQWNjb3JkaW9uKTtcclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBiYWNrZHJvcCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gWyd4cycsICdzbScsICdtZCddLmluY2x1ZGVzKGJyZWFrcG9pbnRTSUdOQUwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgbW9kZSgpOiAnb3ZlcicgfCAncHVzaCcge1xyXG4gICAgICAgIHJldHVybiBbJ3hzJywgJ3NtJywgJ21kJ10uaW5jbHVkZXMoYnJlYWtwb2ludFNJR05BTCgpKSA/ICdvdmVyJyA6ICdwdXNoJztcclxuICAgIH1cclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBzaG93QXNpZGVNZW51KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBbJ3hsJywgJ3h4bCddLmluY2x1ZGVzKGJyZWFrcG9pbnRTSUdOQUwoKSkgJiYgIXRoaXMuaXNPcGVuKClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLkJhY2tCdXR0b25Ccm93c2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNPcGVuLnNldChbJ3h4bCddLmluY2x1ZGVzKFNjcmVlbi5CUkVBS1BPSU5UKSk7XHJcblxyXG4gICAgICAgIFNjcmVlbi5SZXNpemUuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHsgYnJlYWtwb2luIH06IElTY3JlZW5TaXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBicmVha3BvaW50U0lHTkFMLnNldChicmVha3BvaW4pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5iYWNrZHJvcCkgdGhpcy5DbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7IFxyXG4gICAgfSBcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgTmF2aWdhdGVUbyhzZWxlY3RlZE9wdGlvbjogSU1lbnVPcHRpb25TZWxlY3RlZCkge1xyXG4gICAgICAgIGxldCB1cmwgPSBgJHtzZWxlY3RlZE9wdGlvbi5wYXRofWA7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uLnF1ZXJ5UGFyYW1zLmxlbmd0aCA+IDApIHVybCArPSBgPyR7c2VsZWN0ZWRPcHRpb24ucXVlcnlQYXJhbXN9YDtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG5cclxuICAgICAgICAvL1NldCBhY3RpdmUgbGlua1xyXG4gICAgICAgIHRoaXMuU2V0QWN0aXZlTGluayhzZWxlY3RlZE9wdGlvbik7XHJcblxyXG4gICAgICAgIC8vQ2xvc2UgTWVudVxyXG4gICAgICAgIGlmKHNlbGVjdGVkT3B0aW9uLmxldmVsID09IDEpIHtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IG1lbnVMdjEgb2YgdGhpcy5tZW51TGlzdCgpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVudUx2MiBvZiBtZW51THYxLm1lbnVMaXN0LnRvQXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnVMdjIuQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG1lbnVMdjEuQ2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgU2V0QWN0aXZlTGluayhzZWxlY3RlZE9wdGlvbjogSU1lbnVPcHRpb25TZWxlY3RlZCB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24gPSBUb29scy5CcmVha1JlZmVyZW5jZShzZWxlY3RlZE9wdGlvbik7XHJcbiAgICAgICAgICAgIE1lbnUuU2V0U2VsZWN0ZWRPcHRpb24oc2VsZWN0ZWRPcHRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb246IEVsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbi5jb25jYXQoQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdtYXQtZHJhd2VyLWNvbnRhaW5lciBzcGFuLmljb24tY29udGFpbmVyJykpKTtcclxuICAgICAgICAgICAgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uY29uY2F0KEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbWF0LWRyYXdlci1jb250YWluZXIgc3Bhbi5sYWJlbC1jb250YWluZXInKSkpO1xyXG5cclxuICAgICAgICAgICAgLy9SZW1vdmUgYWN0aXZlLWxpbmtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IGVsZW1lbnQgb2YgY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZS1saW5rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1saW5rJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQWRkIGFjdGl2ZS1saW5rXHJcbiAgICAgICAgICAgIGNvbnN0IGxldmVscyA9IHNlbGVjdGVkT3B0aW9uLnRyZWUubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBlbGVtZW50IG9mIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZGVudGl0eUNsYXNzID0gdGhpcy5HZXRJZGVudGl0eUNsYXNzKHNlbGVjdGVkT3B0aW9uLnRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhpZGVudGl0eUNsYXNzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1saW5rJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLnRyZWUucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIE9wZW4oZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IElNZW51IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5zaWRlbmF2KCkub3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgQ2xvc2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zaWRlbmF2KCkuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIFRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNpZGVuYXYoKS50b2dnbGUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgTWVudVNlbGVjdGVkKHNlbGVjdGVkTWVudTogSU1lbnVTZWxlY3RlZCkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE1lbnUubGV2ZWwgPT0gMSkge1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgbWVudUx2MSBvZiB0aGlzLm1lbnVMaXN0KCkpIHtcclxuICAgICAgICAgICAgICAgIGlmKG1lbnVMdjEuaXRlbS5sYWJlbCAhPSBzZWxlY3RlZE1lbnUubGFiZWwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IG1lbnVMdjIgb2YgbWVudUx2MS5tZW51TGlzdC50b0FycmF5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudUx2Mi5DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWVudUx2MS5DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBJc01lbnUgPSAoaXRlbTogSU1lbnUpOiBib29sZWFuID0+IGl0ZW0uaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgJiYgVG9vbHMuSXNOb3RPbmx5V2hpdGVTcGFjZShpdGVtLml0ZW1zKTtcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0SWNvbiA9IChpdGVtOiBJTWVudSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaWNvbicpICYmIGl0ZW0uaWNvbiEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5pY29uIVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuSXNNZW51KGl0ZW0pXHJcbiAgICAgICAgICAgID8gJ2ZhLXNvbGlkIGZhLWJhcnMnXHJcbiAgICAgICAgICAgIDogJ2JpIGJpLXJlY29yZC1maWxsJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgU2V0SWRlbnRpdHlDbGFzcyA9IChsYWJlbDogU3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgaWRlbnRpdHkgPSBgbHYxJHtsYWJlbH1gO1xyXG4gICAgICAgIGlmKGlkZW50aXR5LmluY2x1ZGVzKCcgJykpIGlkZW50aXR5ID0gaWRlbnRpdHkucmVwbGFjZUFsbCgnICcsICcnKTtcclxuICAgICAgICByZXR1cm4gaWRlbnRpdHkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldElkZW50aXR5Q2xhc3ModHJlZTogSU1lbnVbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGlkZW50aXR5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWRlbnRpdHkgKz0gYGx2JHtpICsgMX0ke3RyZWVbaV0ubGFiZWx9LWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihpZGVudGl0eS5lbmRzV2l0aCgnLScpKSBpZGVudGl0eSA9IGlkZW50aXR5LnNsaWNlKDAsIC0xKTtcclxuICAgICAgICBpZihpZGVudGl0eS5pbmNsdWRlcygnICcpKSBpZGVudGl0eSA9IGlkZW50aXR5LnJlcGxhY2VBbGwoJyAnLCAnJyk7XHJcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBCYWNrQnV0dG9uQnJvd3NlcigpIHtcclxuICAgICAgICBjb25zdCBRVUVSWV9TRUxFQ1RPUiA9ICdjb2VyLW1lbnUtb3B0aW9uW25nLXJlZmxlY3QtcGF0aD1cIltwYXRoXVwiXSBtYXQtbmF2LWxpc3QuY29lci1tZW51LW9wdGlvbic7XHJcblxyXG4gICAgICAgIFNjcmVlbi5CYWNrQnV0dG9uQnJvd3Nlci5zdWJzY3JpYmUodG9QYXRoID0+IHtcclxuICAgICAgICAgICAgaWYgKHRvUGF0aC5pbmNsdWRlcygnLyMvJykpIHRvUGF0aCA9IHRvUGF0aC5zcGxpdCgnLyMnKVsxXTtcclxuICAgICAgICAgICAgaWYgKHRvUGF0aC5pbmNsdWRlcygnPycpKSB0b1BhdGggPSB0b1BhdGguc3BsaXQoJz8nKVswXTtcclxuXHJcbiAgICAgICAgICAgIC8vVmFsaWRhdGUgcGF0aFxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBuYXZpZ2F0aW9uU0lHTkFMKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGUuaXRlbXMpIGZvciAoY29uc3Qgc3ViTW9kdWxlIG9mIG1vZHVsZS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vTGV2ZWwgVGhyZWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTW9kdWxlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHN1Yk1vZHVsZS5pdGVtcykgaWYgKGl0ZW0ucGF0aCA9PT0gdG9QYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihRVUVSWV9TRUxFQ1RPUi5yZXBsYWNlKCdbcGF0aF0nLCB0b1BhdGgpKSBhcyBhbnkpPy5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0xldmVsIFR3b1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1Yk1vZHVsZS5wYXRoID09PSB0b1BhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoUVVFUllfU0VMRUNUT1IucmVwbGFjZSgnW3BhdGhdJywgdG9QYXRoKSkgYXMgYW55KT8uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL0xldmVsIE9uZVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kdWxlLnBhdGggPT09IHRvUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFFVRVJZX1NFTEVDVE9SLnJlcGxhY2UoJ1twYXRoXScsIHRvUGF0aCkpIGFzIGFueSk/LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCcmVhZGNydW1icy5SZW1vdmUodG9QYXRoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsIjxtYXQtZHJhd2VyLWNvbnRhaW5lciBbaGFzQmFja2Ryb3BdPVwiYmFja2Ryb3BcIj5cclxuICAgIDxtYXQtZHJhd2VyXHJcbiAgICAgICAgI21hdFNpZGVuYXZcclxuICAgICAgICBbb3BlbmVkXT1cImlzT3BlbigpXCJcclxuICAgICAgICAob3BlbmVkKT1cImlzT3Blbi5zZXQodHJ1ZSlcIlxyXG4gICAgICAgIChjbG9zZWQpPVwiaXNPcGVuLnNldChmYWxzZSlcIlxyXG4gICAgICAgIFttb2RlXT1cIm1vZGVcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9uYXZpZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSXNNZW51KGl0ZW0pOyBlbHNlIE9wdGlvbk1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxjb2VyLXRyZWUtYWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrTWVudU9wdGlvbik9XCJOYXZpZ2F0ZVRvKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGlja01lbnUpPVwiTWVudVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvY29lci10cmVlLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE9wdGlvbiBNZW51IC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI09wdGlvbk1lbnU+XHJcbiAgICAgICAgICAgICAgICA8Y29lci1tZW51LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtPy5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGF0aF09XCJpdGVtPy5wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tNZW51T3B0aW9uKT1cIk5hdmlnYXRlVG8oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9jb2VyLW1lbnUtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2JhY2tkcm9wJzogX2lzTW9kYWxPcGVuKCkgfVwiPjwvZGl2PlxyXG4gICAgPC9tYXQtZHJhd2VyPlxyXG5cclxuICAgIDwhLS0gTWFpbiBTY3JlZW4gLS0+XHJcbiAgICA8bWF0LWRyYXdlci1jb250ZW50IFtuZ0NsYXNzXT1cInsgJ21hcmdpbi1sZWZ0LTQwcHgnOiAoIWlzT3BlbigpICYmIHNob3dBc2lkZU1lbnUpIH1cIj5cclxuICAgICAgICA8YXNpZGUgW25nQ2xhc3NdPVwieyAnc2lkZS1uYXYnOiB0cnVlLCAnZC1ub25lJzogIXNob3dBc2lkZU1lbnUgfVwiIChjbGljayk9XCJPcGVuKCRldmVudClcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfbmF2aWdhdGlvbigpXCIgKGNsaWNrKT1cIk9wZW4oJGV2ZW50LCBpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidpY29uLWNvbnRhaW5lciAnICsgU2V0SWRlbnRpdHlDbGFzcyhpdGVtLmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJHZXRJY29uKGl0ZW0pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnYmFja2Ryb3AnOiBfaXNNb2RhbE9wZW4oKSB9XCI+PC9kaXY+XHJcbiAgICAgICAgPC9hc2lkZT5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9tYXQtZHJhd2VyLWNvbnRlbnQ+XHJcbjwvbWF0LWRyYXdlci1jb250YWluZXI+Il19
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1zaWRlbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1zaWRlbmF2L2NvZXItc2lkZW5hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItc2lkZW5hdi9jb2VyLXNpZGVuYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQU96QyxNQUFNLE9BQU8sV0FBVztJQWVwQixRQUFRO0lBQ1IsSUFBYyxRQUFRO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFFBQVE7SUFDUixJQUFjLElBQUk7UUFDZCxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFD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RUFBRSxDQUFDO29CQUM3QixRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7b0JBQ25GLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7WUFFRCxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F0TlEsV0FBVzttR0FBWCxXQUFXLHlMQWFjLGlCQUFpQixnRUMxQnZELDJpRkFrRXVCOzs0RkRyRFYsV0FBVztrQkFMdkIsU0FBUzsrQkFDSSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBXcml0YWJsZVNpZ25hbCwgaW5qZWN0LCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJTWVudSwgSU1lbnVTZWxlY3RlZCwgSU1lbnVPcHRpb25TZWxlY3RlZCwgSVNjcmVlblNpemUgfSBmcm9tICdjb2VyLWVsZW1lbnRzL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2VyVHJlZUFjY29yZGlvbiB9IGZyb20gJy4vY29lci10cmVlLWFjY29yZGlvbi9jb2VyLXRyZWUtYWNjb3JkaW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGJyZWFrcG9pbnRTSUdOQUwsIGlzTW9kYWxPcGVuU0lHTkFMLCBpc01lbnVPcGVuU0lHTkFMLCBuYXZpZ2F0aW9uU0lHTkFMLCBpc0xvYWRpbmdTSUdOQUwgfSBmcm9tICdjb2VyLWVsZW1lbnRzL3NpZ25hbHMnO1xyXG5pbXBvcnQgeyBUb29scywgQnJlYWRjcnVtYnMsIE1lbnUsIFNjcmVlbiB9IGZyb20gJ2NvZXItZWxlbWVudHMvdG9vbHMnO1xyXG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb2VyLXNpZGVuYXYnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvZXItc2lkZW5hdi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybDogJy4vY29lci1zaWRlbmF2LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29lclNpZGVuYXYge1xyXG5cclxuICAgIC8vSW5qZWN0aW9uc1xyXG4gICAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gICAgLy9zaWduYWxzXHJcbiAgICBwcm90ZWN0ZWQgaXNPcGVuOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IGlzTWVudU9wZW5TSUdOQUw7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTW9kYWxPcGVuOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IGlzTW9kYWxPcGVuU0lHTkFMO1xyXG4gICAgcHJvdGVjdGVkIF9uYXZpZ2F0aW9uOiBXcml0YWJsZVNpZ25hbDxJTWVudVtdPiA9IG5hdmlnYXRpb25TSUdOQUw7XHJcbiAgICBwcm90ZWN0ZWQgX2lzTG9hZGluZzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBpc0xvYWRpbmdTSUdOQUw7XHJcblxyXG4gICAgLy9FbGVtZW50c1xyXG4gICAgcHJvdGVjdGVkIHNpZGVuYXYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0RHJhd2VyPignbWF0U2lkZW5hdicpO1xyXG4gICAgcHJvdGVjdGVkIG1lbnVMaXN0ID0gdmlld0NoaWxkcmVuKENvZXJUcmVlQWNjb3JkaW9uKTtcclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBiYWNrZHJvcCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gWyd4cycsICdzbScsICdtZCddLmluY2x1ZGVzKGJyZWFrcG9pbnRTSUdOQUwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9nZXR0ZXJcclxuICAgIHByb3RlY3RlZCBnZXQgbW9kZSgpOiAnb3ZlcicgfCAncHVzaCcge1xyXG4gICAgICAgIHJldHVybiBbJ3hzJywgJ3NtJywgJ21kJ10uaW5jbHVkZXMoYnJlYWtwb2ludFNJR05BTCgpKSA/ICdvdmVyJyA6ICdwdXNoJztcclxuICAgIH1cclxuXHJcbiAgICAvL2dldHRlclxyXG4gICAgcHJvdGVjdGVkIGdldCBzaG93QXNpZGVNZW51KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBbJ3hsJywgJ3h4bCddLmluY2x1ZGVzKGJyZWFrcG9pbnRTSUdOQUwoKSkgJiYgIXRoaXMuaXNPcGVuKClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLkJhY2tCdXR0b25Ccm93c2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNPcGVuLnNldChbJ3h4bCddLmluY2x1ZGVzKFNjcmVlbi5CUkVBS1BPSU5UKSk7XHJcblxyXG4gICAgICAgIFNjcmVlbi5SZXNpemUuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHsgYnJlYWtwb2luIH06IElTY3JlZW5TaXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBicmVha3BvaW50U0lHTkFMLnNldChicmVha3BvaW4pO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5iYWNrZHJvcCkgdGhpcy5DbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7IFxyXG4gICAgfSBcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgTmF2aWdhdGVUbyhzZWxlY3RlZE9wdGlvbjogSU1lbnVPcHRpb25TZWxlY3RlZCkge1xyXG4gICAgICAgIGxldCB1cmwgPSBgJHtzZWxlY3RlZE9wdGlvbi5wYXRofWA7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uLnF1ZXJ5UGFyYW1zLmxlbmd0aCA+IDApIHVybCArPSBgPyR7c2VsZWN0ZWRPcHRpb24ucXVlcnlQYXJhbXN9YDtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG5cclxuICAgICAgICAvL1NldCBhY3RpdmUgbGlua1xyXG4gICAgICAgIHRoaXMuU2V0QWN0aXZlTGluayhzZWxlY3RlZE9wdGlvbik7XHJcblxyXG4gICAgICAgIC8vQ2xvc2UgTWVudVxyXG4gICAgICAgIGlmKHNlbGVjdGVkT3B0aW9uLmxldmVsID09IDEpIHtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IG1lbnVMdjEgb2YgdGhpcy5tZW51TGlzdCgpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgbWVudUx2MiBvZiBtZW51THYxLm1lbnVMaXN0LnRvQXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnVMdjIuQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG1lbnVMdjEuQ2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgU2V0QWN0aXZlTGluayhzZWxlY3RlZE9wdGlvbjogSU1lbnVPcHRpb25TZWxlY3RlZCB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24gPSBUb29scy5CcmVha1JlZmVyZW5jZShzZWxlY3RlZE9wdGlvbik7XHJcbiAgICAgICAgICAgIE1lbnUuU2V0U2VsZWN0ZWRPcHRpb24oc2VsZWN0ZWRPcHRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb246IEVsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbi5jb25jYXQoQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdtYXQtZHJhd2VyLWNvbnRhaW5lciBzcGFuLmljb24tY29udGFpbmVyJykpKTtcclxuICAgICAgICAgICAgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uY29uY2F0KEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbWF0LWRyYXdlci1jb250YWluZXIgc3Bhbi5sYWJlbC1jb250YWluZXInKSkpO1xyXG5cclxuICAgICAgICAgICAgLy9SZW1vdmUgYWN0aXZlLWxpbmtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IGVsZW1lbnQgb2YgY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZS1saW5rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1saW5rJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vQWRkIGFjdGl2ZS1saW5rXHJcbiAgICAgICAgICAgIGNvbnN0IGxldmVscyA9IHNlbGVjdGVkT3B0aW9uLnRyZWUubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBlbGVtZW50IG9mIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZGVudGl0eUNsYXNzID0gdGhpcy5HZXRJZGVudGl0eUNsYXNzKHNlbGVjdGVkT3B0aW9uLnRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhpZGVudGl0eUNsYXNzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZS1saW5rJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLnRyZWUucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIE9wZW4oZXZlbnQ6IE1vdXNlRXZlbnQsIGl0ZW06IElNZW51IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5zaWRlbmF2KCkub3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgQ2xvc2UoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zaWRlbmF2KCkuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIFRvZ2dsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNpZGVuYXYoKS50b2dnbGUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgTWVudVNlbGVjdGVkKHNlbGVjdGVkTWVudTogSU1lbnVTZWxlY3RlZCkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE1lbnUubGV2ZWwgPT0gMSkge1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgbWVudUx2MSBvZiB0aGlzLm1lbnVMaXN0KCkpIHtcclxuICAgICAgICAgICAgICAgIGlmKG1lbnVMdjEuaXRlbS5sYWJlbCAhPSBzZWxlY3RlZE1lbnUubGFiZWwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IG1lbnVMdjIgb2YgbWVudUx2MS5tZW51TGlzdC50b0FycmF5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudUx2Mi5DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWVudUx2MS5DbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBJc01lbnUgPSAoaXRlbTogSU1lbnUpOiBib29sZWFuID0+IGl0ZW0uaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgJiYgVG9vbHMuSXNOb3RPbmx5V2hpdGVTcGFjZShpdGVtLml0ZW1zKTtcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgR2V0SWNvbiA9IChpdGVtOiBJTWVudSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaWNvbicpICYmIGl0ZW0uaWNvbiEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5pY29uIVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuSXNNZW51KGl0ZW0pXHJcbiAgICAgICAgICAgID8gJ2ZhLXNvbGlkIGZhLWJhcnMnXHJcbiAgICAgICAgICAgIDogJ2JpIGJpLXJlY29yZC1maWxsJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgU2V0SWRlbnRpdHlDbGFzcyA9IChsYWJlbDogU3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICBsZXQgaWRlbnRpdHkgPSBgbHYxJHtsYWJlbH1gO1xyXG4gICAgICAgIGlmKGlkZW50aXR5LmluY2x1ZGVzKCcgJykpIGlkZW50aXR5ID0gaWRlbnRpdHkucmVwbGFjZUFsbCgnICcsICcnKTtcclxuICAgICAgICByZXR1cm4gaWRlbnRpdHkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldElkZW50aXR5Q2xhc3ModHJlZTogSU1lbnVbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGlkZW50aXR5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWRlbnRpdHkgKz0gYGx2JHtpICsgMX0ke3RyZWVbaV0ubGFiZWx9LWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihpZGVudGl0eS5lbmRzV2l0aCgnLScpKSBpZGVudGl0eSA9IGlkZW50aXR5LnNsaWNlKDAsIC0xKTtcclxuICAgICAgICBpZihpZGVudGl0eS5pbmNsdWRlcygnICcpKSBpZGVudGl0eSA9IGlkZW50aXR5LnJlcGxhY2VBbGwoJyAnLCAnJyk7XHJcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBCYWNrQnV0dG9uQnJvd3NlcigpIHtcclxuICAgICAgICBjb25zdCBRVUVSWV9TRUxFQ1RPUiA9ICdjb2VyLW1lbnUtb3B0aW9uW25nLXJlZmxlY3QtcGF0aD1cIltwYXRoXVwiXSBtYXQtbmF2LWxpc3QuY29lci1tZW51LW9wdGlvbic7XHJcblxyXG4gICAgICAgIFNjcmVlbi5CYWNrQnV0dG9uQnJvd3Nlci5zdWJzY3JpYmUodG9QYXRoID0+IHtcclxuICAgICAgICAgICAgaWYgKHRvUGF0aC5pbmNsdWRlcygnLyMvJykpIHRvUGF0aCA9IHRvUGF0aC5zcGxpdCgnLyMnKVsxXTtcclxuICAgICAgICAgICAgaWYgKHRvUGF0aC5pbmNsdWRlcygnPycpKSB0b1BhdGggPSB0b1BhdGguc3BsaXQoJz8nKVswXTtcclxuXHJcbiAgICAgICAgICAgIC8vVmFsaWRhdGUgcGF0aFxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBuYXZpZ2F0aW9uU0lHTkFMKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGUuaXRlbXMpIGZvciAoY29uc3Qgc3ViTW9kdWxlIG9mIG1vZHVsZS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vTGV2ZWwgVGhyZWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTW9kdWxlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBpdGVtIG9mIHN1Yk1vZHVsZS5pdGVtcykgaWYgKGl0ZW0ucGF0aCA9PT0gdG9QYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihRVUVSWV9TRUxFQ1RPUi5yZXBsYWNlKCdbcGF0aF0nLCB0b1BhdGgpKSBhcyBhbnkpPy5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0xldmVsIFR3b1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN1Yk1vZHVsZS5wYXRoID09PSB0b1BhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoUVVFUllfU0VMRUNUT1IucmVwbGFjZSgnW3BhdGhdJywgdG9QYXRoKSkgYXMgYW55KT8uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL0xldmVsIE9uZVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kdWxlLnBhdGggPT09IHRvUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFFVRVJZX1NFTEVDVE9SLnJlcGxhY2UoJ1twYXRoXScsIHRvUGF0aCkpIGFzIGFueSk/LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCcmVhZGNydW1icy5SZW1vdmUodG9QYXRoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsIjxtYXQtZHJhd2VyLWNvbnRhaW5lciBbaGFzQmFja2Ryb3BdPVwiYmFja2Ryb3BcIj5cclxuICAgIDxtYXQtZHJhd2VyXHJcbiAgICAgICAgI21hdFNpZGVuYXZcclxuICAgICAgICBbb3BlbmVkXT1cImlzT3BlbigpXCJcclxuICAgICAgICAob3BlbmVkKT1cImlzT3Blbi5zZXQodHJ1ZSlcIlxyXG4gICAgICAgIChjbG9zZWQpPVwiaXNPcGVuLnNldChmYWxzZSlcIlxyXG4gICAgICAgIFttb2RlXT1cIm1vZGVcIj5cclxuXHJcbiAgICAgICAgQGlmKCFfaXNMb2FkaW5nKCkpIHtcclxuICAgICAgICAgICAgQGlmKF9uYXZpZ2F0aW9uKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfbmF2aWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc01lbnUoaXRlbSk7IGVsc2UgT3B0aW9uTWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29lci10cmVlLWFjY29yZGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tNZW51T3B0aW9uKT1cIk5hdmlnYXRlVG8oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tNZW51KT1cIk1lbnVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvY29lci10cmVlLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbiBNZW51IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjT3B0aW9uTWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZXItbWVudS1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpdGVtLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIml0ZW0/Lmljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhdPVwiaXRlbT8ucGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tNZW51T3B0aW9uKT1cIk5hdmlnYXRlVG8oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2NvZXItbWVudS1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPGNvZXItbWVudS1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkVtcHR5XCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEtc29saWQgZmEtZmFjZS1tZWhcIlxyXG4gICAgICAgICAgICAgICAgPjwvY29lci1tZW51LW9wdGlvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICA8Y29lci1tZW51LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJMT0FESU5HXCJcclxuICAgICAgICAgICAgICAgIGljb249XCJmYS1zb2xpZCBmYS1zeW5jIGZhLXNwaW5cIlxyXG4gICAgICAgICAgICA+PC9jb2VyLW1lbnUtb3B0aW9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdiYWNrZHJvcCc6IF9pc01vZGFsT3BlbigpIH1cIj48L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuXHJcbiAgICA8IS0tIE1haW4gU2NyZWVuIC0tPlxyXG4gICAgPG1hdC1kcmF3ZXItY29udGVudCBbbmdDbGFzc109XCJ7ICdtYXJnaW4tbGVmdC00MHB4JzogKCFpc09wZW4oKSAmJiBzaG93QXNpZGVNZW51KSB9XCI+XHJcbiAgICAgICAgPGFzaWRlIFtuZ0NsYXNzXT1cInsgJ3NpZGUtbmF2JzogdHJ1ZSwgJ2Qtbm9uZSc6ICFzaG93QXNpZGVNZW51IH1cIiAoY2xpY2spPVwiT3BlbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX25hdmlnYXRpb24oKVwiIChjbGljayk9XCJPcGVuKCRldmVudCwgaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInaWNvbi1jb250YWluZXIgJyArIFNldElkZW50aXR5Q2xhc3MoaXRlbS5sYWJlbClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiR2V0SWNvbihpdGVtKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2JhY2tkcm9wJzogX2lzTW9kYWxPcGVuKCkgfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvYXNpZGU+XHJcblxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvbWF0LWRyYXdlci1jb250ZW50PlxyXG48L21hdC1kcmF3ZXItY29udGFpbmVyPiJdfQ==
|