nira-falcon 1.0.21 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core-date-picker/core-date-picker.component.mjs +1 -1
- package/esm2022/lib/core-input/core-input.component.mjs +13 -13
- package/esm2022/lib/core-table/core-table/core-table.component.mjs +4 -4
- package/esm2022/lib/core-table/core-table/core-table.type.mjs +1 -1
- package/esm2022/lib/core-table/core-table-column-manager/core-table-column-manager.component.mjs +14 -13
- package/esm2022/lib/core-table/core-table-pre-column/core-table-pre-column.component.mjs +55 -0
- package/esm2022/lib/falcon-lib.module.mjs +4 -1
- package/esm2022/lib/falconTypes.mjs +2 -1
- package/fesm2022/nira-falcon.mjs +67 -18
- package/fesm2022/nira-falcon.mjs.map +1 -1
- package/lib/core-input/core-input.component.d.ts +3 -4
- package/lib/core-table/core-table/core-table.type.d.ts +14 -1
- package/lib/core-table/core-table-pre-column/core-table-pre-column.component.d.ts +16 -0
- package/lib/falcon-lib.module.d.ts +45 -44
- package/lib/falconTypes.d.ts +1 -0
- package/package.json +3 -2
|
@@ -46,7 +46,7 @@ export class CoreDatePickerComponent {
|
|
|
46
46
|
this._inputFormControl.setValue(todayDate);
|
|
47
47
|
}
|
|
48
48
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreDatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: { canSelectToday: "canSelectToday", defaultDate: "defaultDate", label: "label", inputFormControl: "inputFormControl", size: "size" }, ngImport: i0, template: "<div class=\"relative\">\r\n <core-input\r\n [placeholder]=\"label\"\r\n (input)=\"onInput($event)\"\r\n [inputFormControl]=\"_inputFormControl\"\r\n >\r\n </core-input>\r\n <calendar-today-icon\r\n class=\"icon-date-picker\"\r\n (click)=\"isOpenCalendar = true\"\r\n ></calendar-today-icon>\r\n</div>\r\n<lib-nira-date-picker\r\n [(isOpenCalendar)]=\"isOpenCalendar\"\r\n [defaultDate]=\"date ? date : defaultDate\"\r\n (datePickerResult)=\"onDatePickerResult($event)\"\r\n [selectToday]=\"canSelectToday\"\r\n (todayDate)=\"onTodayDate($event)\"\r\n>\r\n</lib-nira-date-picker>\r\n", styles: [".icon-date-picker{position:absolute;cursor:pointer;left:8px;top:6px;width:24px;height:24px;fill:#383838}\n"], dependencies: [{ kind: "component", type: i1.NiraDatePickerComponent, selector: "lib-nira-date-picker", inputs: ["selectToday", "disable", "changableYears", "theme", "defaultDate", "isOpenCalendar"], outputs: ["isOpenCalendarChange", "todayDate", "datePickerResult"] }, { kind: "component", type: i2.CoreInputComponent, selector: "core-input", inputs: ["type", "canShowWordifyFa", "
|
|
49
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: { canSelectToday: "canSelectToday", defaultDate: "defaultDate", label: "label", inputFormControl: "inputFormControl", size: "size" }, ngImport: i0, template: "<div class=\"relative\">\r\n <core-input\r\n [placeholder]=\"label\"\r\n (input)=\"onInput($event)\"\r\n [inputFormControl]=\"_inputFormControl\"\r\n >\r\n </core-input>\r\n <calendar-today-icon\r\n class=\"icon-date-picker\"\r\n (click)=\"isOpenCalendar = true\"\r\n ></calendar-today-icon>\r\n</div>\r\n<lib-nira-date-picker\r\n [(isOpenCalendar)]=\"isOpenCalendar\"\r\n [defaultDate]=\"date ? date : defaultDate\"\r\n (datePickerResult)=\"onDatePickerResult($event)\"\r\n [selectToday]=\"canSelectToday\"\r\n (todayDate)=\"onTodayDate($event)\"\r\n>\r\n</lib-nira-date-picker>\r\n", styles: [".icon-date-picker{position:absolute;cursor:pointer;left:8px;top:6px;width:24px;height:24px;fill:#383838}\n"], dependencies: [{ kind: "component", type: i1.NiraDatePickerComponent, selector: "lib-nira-date-picker", inputs: ["selectToday", "disable", "changableYears", "theme", "defaultDate", "isOpenCalendar"], outputs: ["isOpenCalendarChange", "todayDate", "datePickerResult"] }, { kind: "component", type: i2.CoreInputComponent, selector: "core-input", inputs: ["type", "canShowWordifyFa", "canHighlightBackground", "maxLength", "size", "inputFormControl", "disable", "placeholder", "errorMessages"], outputs: ["onChange", "onBlurEmit"] }, { kind: "component", type: i3.CalendarTodayIconComponent, selector: "calendar-today-icon" }] }); }
|
|
50
50
|
}
|
|
51
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreDatePickerComponent, decorators: [{
|
|
52
52
|
type: Component,
|
|
@@ -10,9 +10,8 @@ export class CoreInputComponent {
|
|
|
10
10
|
this.isDisable = false;
|
|
11
11
|
this.lastValue = '';
|
|
12
12
|
this.canShowWordifyFa = false;
|
|
13
|
-
this.canSplitNumber = false;
|
|
14
13
|
this.canHighlightBackground = false;
|
|
15
|
-
this.maxLength =
|
|
14
|
+
this.maxLength = 20000;
|
|
16
15
|
this.size = '';
|
|
17
16
|
this.inputFormControl = new FormControl('', []);
|
|
18
17
|
this.placeholder = '';
|
|
@@ -56,7 +55,9 @@ export class CoreInputComponent {
|
|
|
56
55
|
}
|
|
57
56
|
ngOnInit() {
|
|
58
57
|
this.inputFormControl.valueChanges.subscribe((change) => {
|
|
59
|
-
if (this.lastValue !== change
|
|
58
|
+
if (this.lastValue !== change &&
|
|
59
|
+
change !== undefined &&
|
|
60
|
+
change !== null) {
|
|
60
61
|
this.formatPrice(change.toString());
|
|
61
62
|
}
|
|
62
63
|
});
|
|
@@ -75,7 +76,7 @@ export class CoreInputComponent {
|
|
|
75
76
|
this.inputFormControl.markAsTouched();
|
|
76
77
|
this.inputFormControl.setValue(value);
|
|
77
78
|
this.lastValue = value;
|
|
78
|
-
if (this.inputType === '
|
|
79
|
+
if (this.inputType === 'price') {
|
|
79
80
|
this.onChange.emit(value.replaceAll(',', ''));
|
|
80
81
|
}
|
|
81
82
|
else {
|
|
@@ -86,7 +87,7 @@ export class CoreInputComponent {
|
|
|
86
87
|
}, 10);
|
|
87
88
|
}
|
|
88
89
|
onBlur() {
|
|
89
|
-
if (this.inputType === '
|
|
90
|
+
if (this.inputType === 'price') {
|
|
90
91
|
this.onChange.emit(this.inputFormControl.value.replaceAll(',', ''));
|
|
91
92
|
}
|
|
92
93
|
else {
|
|
@@ -96,8 +97,9 @@ export class CoreInputComponent {
|
|
|
96
97
|
}
|
|
97
98
|
this.onBlurEmit.emit(this.inputFormControl.value);
|
|
98
99
|
}
|
|
99
|
-
onKeyPress() {
|
|
100
|
-
if (this.inputFormControl.value.toString().length == this.maxLength
|
|
100
|
+
onKeyPress(event) {
|
|
101
|
+
if (this.inputFormControl.value.toString().length == this.maxLength ||
|
|
102
|
+
(this.inputType === 'price' && !/^[0-9]$/.test(event.key))) {
|
|
101
103
|
return false;
|
|
102
104
|
}
|
|
103
105
|
else {
|
|
@@ -105,7 +107,7 @@ export class CoreInputComponent {
|
|
|
105
107
|
}
|
|
106
108
|
}
|
|
107
109
|
formatPrice(event) {
|
|
108
|
-
if (this.inputType === '
|
|
110
|
+
if (this.inputType === 'price') {
|
|
109
111
|
setTimeout(() => {
|
|
110
112
|
let value = event;
|
|
111
113
|
value = Number(value.replaceAll(',', ''));
|
|
@@ -166,17 +168,15 @@ export class CoreInputComponent {
|
|
|
166
168
|
}
|
|
167
169
|
}
|
|
168
170
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreInputComponent, selector: "core-input", inputs: { type: "type", canShowWordifyFa: "canShowWordifyFa",
|
|
171
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreInputComponent, selector: "core-input", inputs: { type: "type", canShowWordifyFa: "canShowWordifyFa", canHighlightBackground: "canHighlightBackground", maxLength: "maxLength", size: "size", inputFormControl: "inputFormControl", disable: "disable", placeholder: "placeholder", errorMessages: "errorMessages" }, outputs: { onChange: "onChange", onBlurEmit: "onBlurEmit" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div tabindex=\"0\" (focusin)=\"setInputFocus()\">\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors,\r\n }\"\r\n >\r\n <input\r\n #inputElement\r\n type=\"inputType === 'price' ? 'text' : inputType\"\r\n class=\"a-input-style\"\r\n [formControl]=\"inputFormControl\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"change($event)\"\r\n (paste)=\"onPaste($event)\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value.toString().length > 0,\r\n 'highlight-background':\r\n canHighlightBackground &&\r\n inputFormControl.value.toString().length === 0 &&\r\n !(\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n ),\r\n 'disable-input': isDisable,\r\n }\"\r\n (keypress)=\"onKeyPress($event)\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n class=\"label-number\"\r\n *ngIf=\"\r\n canShowWordifyFa &&\r\n inputFormControl.value.toString().length > 0 &&\r\n (inputType === 'number' || inputType === 'price')\r\n \"\r\n ><app-core-number\r\n [canShowWordInToolTip]=\"false\"\r\n [type]=\"'word'\"\r\n [number]=\"inputFormControl.value\"\r\n ></app-core-number\r\n ></span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n \"\r\n >\r\n {{ errorMassage?.message }}\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input{border:1px solid #ced4da;border-radius:.25rem}.highlight-background{background-color:#dcf6ff!important}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:2px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:#c2c2c2b3}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:red;font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.label-number{color:#6a6a6a}.error input{border:1px solid #fe5f5f}.container-input{background:#fff;position:relative}.container-input .disable-input{background-color:#f7f7f7;border:1px dashed #ced4da;pointer-events:none}.container-input label{position:absolute;right:20px;top:12px;color:gray;font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.CoreNumberComponent, selector: "app-core-number", inputs: ["number", "type", "canSplitNumbers", "canShowWordInToolTip", "canShowTomanInToolTip", "enDigitsToFa", "canShowIRR"] }] }); }
|
|
170
172
|
}
|
|
171
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreInputComponent, decorators: [{
|
|
172
174
|
type: Component,
|
|
173
|
-
args: [{ selector: 'core-input', template: "<div tabindex=\"0\" (focusin)=\"setInputFocus()\">\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors,\r\n }\"\r\n >\r\n <input\r\n #inputElement\r\n
|
|
175
|
+
args: [{ selector: 'core-input', template: "<div tabindex=\"0\" (focusin)=\"setInputFocus()\">\r\n <div\r\n class=\"container-input\"\r\n [ngClass]=\"{\r\n error:\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors,\r\n }\"\r\n >\r\n <input\r\n #inputElement\r\n type=\"inputType === 'price' ? 'text' : inputType\"\r\n class=\"a-input-style\"\r\n [formControl]=\"inputFormControl\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"change($event)\"\r\n (paste)=\"onPaste($event)\"\r\n [ngClass]=\"{\r\n 'have-value': inputFormControl.value.toString().length > 0,\r\n 'highlight-background':\r\n canHighlightBackground &&\r\n inputFormControl.value.toString().length === 0 &&\r\n !(\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n ),\r\n 'disable-input': isDisable,\r\n }\"\r\n (keypress)=\"onKeyPress($event)\"\r\n />\r\n <label *ngIf=\"placeholder.length > 0\">{{ placeholder }} </label>\r\n <div class=\"label-error overflow-hidden\">\r\n <span\r\n class=\"label-number\"\r\n *ngIf=\"\r\n canShowWordifyFa &&\r\n inputFormControl.value.toString().length > 0 &&\r\n (inputType === 'number' || inputType === 'price')\r\n \"\r\n ><app-core-number\r\n [canShowWordInToolTip]=\"false\"\r\n [type]=\"'word'\"\r\n [number]=\"inputFormControl.value\"\r\n ></app-core-number\r\n ></span>\r\n <span\r\n *ngIf=\"\r\n (inputFormControl.touched || inputFormControl.dirty) &&\r\n inputFormControl.errors\r\n \"\r\n >\r\n {{ errorMassage?.message }}\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".container{position:relative}input{border:1px solid #ced4da;border-radius:.25rem}.highlight-background{background-color:#dcf6ff!important}.icon-style{position:absolute;right:16px;top:16px;cursor:pointer;font-size:16px}.icon-style-email{position:absolute;right:16px;top:16px}.a-input-style{height:42px;width:100%;padding:16px;outline:none;caret-color:#020202b3;background-color:#f2f4f726;color:#000000b3;box-sizing:border-box}.a-input-style:focus{background-color:#f2f4f70d;border-radius:3px;border:2px solid rgba(19,92,175,.397)}.a-input-style::placeholder{height:15px;font-style:normal;font-weight:400;font-size:12px;line-height:15px;letter-spacing:-.03em;color:#c2c2c2b3}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:rgba(255,255,255,0)}input:-webkit-autofill.have-value,input:-webkit-autofill:hover.have-value,input:-webkit-autofill:focus.have-value{-webkit-text-fill-color:#181818!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.label-error{color:red;font-size:13px;margin-block-start:4px;min-height:21px;width:100%;display:inline-block!important;text-align:start}.label-number{color:#6a6a6a}.error input{border:1px solid #fe5f5f}.container-input{background:#fff;position:relative}.container-input .disable-input{background-color:#f7f7f7;border:1px dashed #ced4da;pointer-events:none}.container-input label{position:absolute;right:20px;top:12px;color:gray;font-size:12px;padding:0 8px;border-radius:15px;pointer-events:none;transition:.2s}.container-input input:focus+label,.container-input input.have-value+label{top:-10px;font-size:10px;z-index:3}.container-input input:focus+label:after,.container-input input.have-value+label:after{content:\"\";display:block;background:#fff;position:absolute;width:100%;height:1px;top:10px;right:0;transition:.3s;z-index:-1}\n"] }]
|
|
174
176
|
}], propDecorators: { type: [{
|
|
175
177
|
type: Input
|
|
176
178
|
}], canShowWordifyFa: [{
|
|
177
179
|
type: Input
|
|
178
|
-
}], canSplitNumber: [{
|
|
179
|
-
type: Input
|
|
180
180
|
}], canHighlightBackground: [{
|
|
181
181
|
type: Input
|
|
182
182
|
}], maxLength: [{
|
|
@@ -199,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
199
199
|
type: ViewChild,
|
|
200
200
|
args: ['inputElement']
|
|
201
201
|
}] } });
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mYWxjb24tbGliL3NyYy9saWIvY29yZS1pbnB1dC9jb3JlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZhbGNvbi1saWIvc3JjL2xpYi9jb3JlLWlucHV0L2NvcmUtaW5wdXQtZmFsY29uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBWTdELE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFPRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFJTixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLHFCQUFnQixHQUFnQixJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFTeEQsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtoRSxtQkFBYyxHQUFtQjtZQUMvQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO1lBQ2xELEVBQUUsSUFBSSxFQUFF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YyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbnR5cGUgSW5wdXRUeXBlID0gJ251bWJlcicgfCAncGFzc3dvcmQnIHwgJ3RleHQnIHwgJ2NvbG9yJztcclxuaW50ZXJmYWNlIEVycm9yTWFzc2FnZSB7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBwYXR0ZXJuPzogc3RyaW5nO1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtaW5wdXQnICsgZW52aXJvbm1lbnQudGVtcE5hbWUsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1pbnB1dCcgKyBlbnZpcm9ubWVudC5zdHlsZU5hbWVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZUlucHV0Q29tcG9uZW50IHtcclxuICBpbnB1dFR5cGUhOiBJbnB1dFR5cGU7XHJcbiAgaXNEaXNhYmxlID0gZmFsc2U7XHJcbiAgbGFzdFZhbHVlID0gJyc7XHJcbiAgQElucHV0KCkgc2V0IHR5cGUodmFsdWU6IElucHV0VHlwZSkge1xyXG4gICAgdGhpcy5pbnB1dFR5cGUgPSB2YWx1ZTtcclxuICB9XHJcbiAgQElucHV0KCkgY2FuU2hvd1dvcmRpZnlGYSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhblNwbGl0TnVtYmVyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FuSGlnaGxpZ2h0QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aCA9IDIwMDA7XHJcbiAgQElucHV0KCkgc2l6ZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGlucHV0Rm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXSk7XHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNEaXNhYmxlID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJsdXJFbWl0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzZXQgZXJyb3JNZXNzYWdlcyh2YWx1ZTogRXJyb3JNYXNzYWdlW10pIHtcclxuICAgIHRoaXMuX2Vycm9yTWVzc2FnZXMgPSB0aGlzLl9lcnJvck1lc3NhZ2VzLmNvbmNhdCh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcpIGlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgX2Vycm9yTWVzc2FnZXM6IEVycm9yTWFzc2FnZVtdID0gW1xyXG4gICAgeyB0eXBlOiAncmVxdWlyZWQnLCBtZXNzYWdlOiAn2KfbjNmGINmB24zZhNivINiu2KfZhNuMINin2LPYqicgfSxcclxuICAgIHsgdHlwZTogJ3ByZVBheW1lbnQnLCBtZXNzYWdlOiAn2YXYqNmE2Log2LXYrduM2K0g2YbbjNiz2KonIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtaW5sZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiAnJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtYXhsZW5ndGgnLFxyXG4gICAgICBtZXNzYWdlOiAnJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdlbWFpbCcsXHJcbiAgICAgIG1lc3NhZ2U6ICfYp9uM2YXbjNmEINix2Kcg2KjZhyDYr9ix2LPYqiDZiNin2LHYryDZhtmF2KfbjNuM2K8nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ21vYmlsZVBob25lJyxcclxuICAgICAgbWVzc2FnZTogJ9i02YXYp9ix2Ycg2YfZhdix2KfZhyDYp9i02KrYqNin2Ycg2YfYs9iqJyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgaWYgKHRoaXMubGFzdFZhbHVlICE9PSBjaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLmZvcm1hdFByaWNlKGNoYW5nZS50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmZvcm1hdFByaWNlKGV2ZW50LnNyY0VsZW1lbnQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5wdXRGb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xyXG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblBhc3RlKGV2ZW50OiBhbnkpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnNyY0VsZW1lbnQudmFsdWU7XHJcbiAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PT0gJ251bWJlcicgJiYgdGhpcy5jYW5TcGxpdE51bWJlcikge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5wdXRGb3JtQ29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT09ICdudW1iZXInICYmIHRoaXMuY2FuU3BsaXROdW1iZXIpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQmx1ckVtaXQuZW1pdCh0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25LZXlQcmVzcygpIHtcclxuICAgIGlmICh0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT0gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRQcmljZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT09ICdudW1iZXInICYmIHRoaXMuY2FuU3BsaXROdW1iZXIpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQ7XHJcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSk7XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gdmFsdWVcclxuICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XHJcbiAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUoZm9ybWF0VmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSBmb3JtYXRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlLnJlcGxhY2VBbGwoJywnLCAnJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1hc3NhZ2UoKTogRXJyb3JNYXNzYWdlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzKS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykuZmlsdGVyKChrZXkpID0+IHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuX2Vycm9yTWVzc2FnZXMuZmluZChcclxuICAgICAgICAgICAgKGVycm9yKSA9PiBlcnJvci50eXBlID09PSBrZXksXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UgJiYga2V5ID09PSAnbWlubGVuZ3RoJykge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UubWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgJyDYrdiv2KfZgtmEINqp2KfYsdqp2KrYsSDZhdis2KfYsiAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2w/LmVycm9ycz8uWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aCArXHJcbiAgICAgICAgICAgICAgJyDZhduMINio2KfYtNivICAnO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UgJiYga2V5ID09PSAnbWF4bGVuZ3RoJykge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UubWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgJyDYrdiv2Kfaqdir2LEg2qnYp9ix2qnYqtixINmF2KzYp9iyICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2w/LmVycm9ycz8uWydtYXhsZW5ndGgnXS5yZXF1aXJlZExlbmd0aCArXHJcbiAgICAgICAgICAgICAgJyDZhduMINio2KfYtNivICAnO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYXR0ZXJuJykge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLl9lcnJvck1lc3NhZ2VzLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGVycm9yKSA9PlxyXG4gICAgICAgICAgICAgICAgZXJyb3IudHlwZSA9PT0ga2V5ICYmXHJcbiAgICAgICAgICAgICAgICBlcnJvci5wYXR0ZXJuID09PVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2w/LmVycm9ycz8uWydwYXR0ZXJuJ10/LnJlcXVpcmVkUGF0dGVybixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgdGFiaW5kZXg9XCIwXCIgKGZvY3VzaW4pPVwic2V0SW5wdXRGb2N1cygpXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJjb250YWluZXItaW5wdXRcIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICBlcnJvcjpcclxuICAgICAgICAoaW5wdXRGb3JtQ29udHJvbC50b3VjaGVkIHx8IGlucHV0Rm9ybUNvbnRyb2wuZGlydHkpICYmXHJcbiAgICAgICAgaW5wdXRGb3JtQ29udHJvbC5lcnJvcnMsXHJcbiAgICB9XCJcclxuICA+XHJcbiAgICA8aW5wdXRcclxuICAgICAgI2lucHV0RWxlbWVudFxyXG4gICAgICBbdHlwZV09XCJpbnB1dFR5cGVcIlxyXG4gICAgICBjbGFzcz1cImEtaW5wdXQtc3R5bGVcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiaW5wdXRGb3JtQ29udHJvbFwiXHJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgKGtleXVwKT1cImNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnaGF2ZS12YWx1ZSc6IGlucHV0Rm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiAwLFxyXG4gICAgICAgICdoaWdobGlnaHQtYmFja2dyb3VuZCc6XHJcbiAgICAgICAgICBjYW5IaWdobGlnaHRCYWNrZ3JvdW5kICYmXHJcbiAgICAgICAgICBpbnB1dEZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAoaW5wdXRGb3JtQ29udHJvbC50b3VjaGVkIHx8IGlucHV0Rm9ybUNvbnRyb2wuZGlydHkpICYmXHJcbiAgICAgICAgICAgIGlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICdkaXNhYmxlLWlucHV0JzogaXNEaXNhYmxlLFxyXG4gICAgICB9XCJcclxuICAgICAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoKVwiXHJcbiAgICAvPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXIubGVuZ3RoID4gMFwiPnt7IHBsYWNlaG9sZGVyIH19IDwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGFiZWwtZXJyb3Igb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgY2xhc3M9XCJsYWJlbC1udW1iZXJcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjYW5TaG93V29yZGlmeUZhICYmXHJcbiAgICAgICAgICBpbnB1dEZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgaW5wdXRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPjxhcHAtY29yZS1udW1iZXJcclxuICAgICAgICAgIFtjYW5TaG93V29yZEluVG9vbFRpcF09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbdHlwZV09XCInd29yZCdcIlxyXG4gICAgICAgICAgW251bWJlcl09XCJpbnB1dEZvcm1Db250cm9sLnZhbHVlXCJcclxuICAgICAgICA+PC9hcHAtY29yZS1udW1iZXJcclxuICAgICAgPjwvc3Bhbj5cclxuICAgICAgPHNwYW5cclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgKGlucHV0Rm9ybUNvbnRyb2wudG91Y2hlZCB8fCBpbnB1dEZvcm1Db250cm9sLmRpcnR5KSAmJlxyXG4gICAgICAgICAgaW5wdXRGb3JtQ29udHJvbC5lcnJvcnNcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZXJyb3JNYXNzYWdlPy5tZXNzYWdlIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mYWxjb24tbGliL3NyYy9saWIvY29yZS1pbnB1dC9jb3JlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZhbGNvbi1saWIvc3JjL2xpYi9jb3JlLWlucHV0L2NvcmUtaW5wdXQtZmFsY29uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBWTdELE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFPRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFJTixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLHFCQUFnQixHQUFnQixJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFTeEQsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtoRSxtQkFBYyxHQUFtQjtZQUMvQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO1lBQ2xELEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsZ0JBQWdC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O2dCQUdxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG50eXBlIElucHV0VHlwZSA9ICdudW1iZXInIHwgJ3Bhc3N3b3JkJyB8ICd0ZXh0JyB8ICdjb2xvcicgfCAncHJpY2UnO1xyXG5pbnRlcmZhY2UgRXJyb3JNYXNzYWdlIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHBhdHRlcm4/OiBzdHJpbmc7XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1pbnB1dCcgKyBlbnZpcm9ubWVudC50ZW1wTmFtZSxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWlucHV0JyArIGVudmlyb25tZW50LnN0eWxlTmFtZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlSW5wdXRDb21wb25lbnQge1xyXG4gIGlucHV0VHlwZSE6IElucHV0VHlwZTtcclxuICBpc0Rpc2FibGUgPSBmYWxzZTtcclxuICBsYXN0VmFsdWUgPSAnJztcclxuICBASW5wdXQoKSBzZXQgdHlwZSh2YWx1ZTogSW5wdXRUeXBlKSB7XHJcbiAgICB0aGlzLmlucHV0VHlwZSA9IHZhbHVlO1xyXG4gIH1cclxuICBASW5wdXQoKSBjYW5TaG93V29yZGlmeUZhID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2FuSGlnaGxpZ2h0QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1heExlbmd0aCA9IDIwMDAwO1xyXG4gIEBJbnB1dCgpIHNpemUgPSAnJztcclxuICBASW5wdXQoKSBpbnB1dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgW10pO1xyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25CbHVyRW1pdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgc2V0IGVycm9yTWVzc2FnZXModmFsdWU6IEVycm9yTWFzc2FnZVtdKSB7XHJcbiAgICB0aGlzLl9lcnJvck1lc3NhZ2VzID0gdGhpcy5fZXJyb3JNZXNzYWdlcy5jb25jYXQodmFsdWUpO1xyXG4gIH1cclxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIF9lcnJvck1lc3NhZ2VzOiBFcnJvck1hc3NhZ2VbXSA9IFtcclxuICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ9in24zZhiDZgduM2YTYryDYrtin2YTbjCDYp9iz2KonIH0sXHJcbiAgICB7IHR5cGU6ICdwcmVQYXltZW50JywgbWVzc2FnZTogJ9mF2KjZhNi6INi12K3bjNitINmG24zYs9iqJyB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAnbWlubGVuZ3RoJyxcclxuICAgICAgbWVzc2FnZTogJycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAnbWF4bGVuZ3RoJyxcclxuICAgICAgbWVzc2FnZTogJycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiAnZW1haWwnLFxyXG4gICAgICBtZXNzYWdlOiAn2KfbjNmF24zZhCDYsdinINio2Ycg2K/Ysdiz2Kog2YjYp9ix2K8g2YbZhdin24zbjNivJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdtb2JpbGVQaG9uZScsXHJcbiAgICAgIG1lc3NhZ2U6ICfYtNmF2KfYsdmHINmH2YXYsdin2Ycg2KfYtNiq2KjYp9mHINmH2LPYqicsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmxhc3RWYWx1ZSAhPT0gY2hhbmdlICYmXHJcbiAgICAgICAgY2hhbmdlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBjaGFuZ2UgIT09IG51bGxcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtYXRQcmljZShjaGFuZ2UudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtYXRQcmljZShldmVudC5zcmNFbGVtZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNldElucHV0Rm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25QYXN0ZShldmVudDogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5zcmNFbGVtZW50LnZhbHVlO1xyXG4gICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT09ICdwcmljZScpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAncHJpY2UnKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUucmVwbGFjZUFsbCgnLCcsICcnKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMuaW5wdXRGb3JtQ29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbkJsdXJFbWl0LmVtaXQodGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uS2V5UHJlc3MoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT0gdGhpcy5tYXhMZW5ndGggfHxcclxuICAgICAgKHRoaXMuaW5wdXRUeXBlID09PSAncHJpY2UnICYmICEvXlswLTldJC8udGVzdChldmVudC5rZXkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0UHJpY2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAncHJpY2UnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50O1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2VBbGwoJywnLCAnJykpO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpO1xyXG4gICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKGZvcm1hdFZhbHVlKTtcclxuICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gZm9ybWF0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykge1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZS5yZXBsYWNlQWxsKCcsJywgJycpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLmlucHV0Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZXJyb3JNYXNzYWdlKCk6IEVycm9yTWFzc2FnZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykge1xyXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5pbnB1dEZvcm1Db250cm9sLmVycm9ycykubGVuZ3RoICE9IDApIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaW5wdXRGb3JtQ29udHJvbC5lcnJvcnMpLmZpbHRlcigoa2V5KSA9PiB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLl9lcnJvck1lc3NhZ2VzLmZpbmQoXHJcbiAgICAgICAgICAgIChlcnJvcikgPT4gZXJyb3IudHlwZSA9PT0ga2V5LFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlICYmIGtleSA9PT0gJ21pbmxlbmd0aCcpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlLm1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICcg2K3Yr9in2YLZhCDaqdin2LHaqdiq2LEg2YXYrNin2LIgJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sPy5lcnJvcnM/LlsnbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggK1xyXG4gICAgICAgICAgICAgICcg2YXbjCDYqNin2LTYryAgJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JNZXNzYWdlICYmIGtleSA9PT0gJ21heGxlbmd0aCcpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlLm1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICcg2K3Yr9in2qnYq9ixINqp2KfYsdqp2KrYsSDZhdis2KfYsiAgJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sPy5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggK1xyXG4gICAgICAgICAgICAgICcg2YXbjCDYqNin2LTYryAgJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncGF0dGVybicpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdGhpcy5fZXJyb3JNZXNzYWdlcy5maW5kKFxyXG4gICAgICAgICAgICAgIChlcnJvcikgPT5cclxuICAgICAgICAgICAgICAgIGVycm9yLnR5cGUgPT09IGtleSAmJlxyXG4gICAgICAgICAgICAgICAgZXJyb3IucGF0dGVybiA9PT1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sPy5lcnJvcnM/LlsncGF0dGVybiddPy5yZXF1aXJlZFBhdHRlcm4sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IHRhYmluZGV4PVwiMFwiIChmb2N1c2luKT1cInNldElucHV0Rm9jdXMoKVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29udGFpbmVyLWlucHV0XCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgZXJyb3I6XHJcbiAgICAgICAgKGlucHV0Rm9ybUNvbnRyb2wudG91Y2hlZCB8fCBpbnB1dEZvcm1Db250cm9sLmRpcnR5KSAmJlxyXG4gICAgICAgIGlucHV0Rm9ybUNvbnRyb2wuZXJyb3JzLFxyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgPGlucHV0XHJcbiAgICAgICNpbnB1dEVsZW1lbnRcclxuICAgICAgdHlwZT1cImlucHV0VHlwZSA9PT0gJ3ByaWNlJyA/ICd0ZXh0JyA6IGlucHV0VHlwZVwiXHJcbiAgICAgIGNsYXNzPVwiYS1pbnB1dC1zdHlsZVwiXHJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCJcclxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAoa2V5dXApPVwiY2hhbmdlKCRldmVudClcIlxyXG4gICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdoYXZlLXZhbHVlJzogaW5wdXRGb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgJ2hpZ2hsaWdodC1iYWNrZ3JvdW5kJzpcclxuICAgICAgICAgIGNhbkhpZ2hsaWdodEJhY2tncm91bmQgJiZcclxuICAgICAgICAgIGlucHV0Rm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgICEoXHJcbiAgICAgICAgICAgIChpbnB1dEZvcm1Db250cm9sLnRvdWNoZWQgfHwgaW5wdXRGb3JtQ29udHJvbC5kaXJ0eSkgJiZcclxuICAgICAgICAgICAgaW5wdXRGb3JtQ29udHJvbC5lcnJvcnNcclxuICAgICAgICAgICksXHJcbiAgICAgICAgJ2Rpc2FibGUtaW5wdXQnOiBpc0Rpc2FibGUsXHJcbiAgICAgIH1cIlxyXG4gICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCJwbGFjZWhvbGRlci5sZW5ndGggPiAwXCI+e3sgcGxhY2Vob2xkZXIgfX0gPC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1lcnJvciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzcz1cImxhYmVsLW51bWJlclwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNhblNob3dXb3JkaWZ5RmEgJiZcclxuICAgICAgICAgIGlucHV0Rm9ybUNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAoaW5wdXRUeXBlID09PSAnbnVtYmVyJyB8fCBpbnB1dFR5cGUgPT09ICdwcmljZScpXHJcbiAgICAgICAgXCJcclxuICAgICAgICA+PGFwcC1jb3JlLW51bWJlclxyXG4gICAgICAgICAgW2NhblNob3dXb3JkSW5Ub29sVGlwXT1cImZhbHNlXCJcclxuICAgICAgICAgIFt0eXBlXT1cIid3b3JkJ1wiXHJcbiAgICAgICAgICBbbnVtYmVyXT1cImlucHV0Rm9ybUNvbnRyb2wudmFsdWVcIlxyXG4gICAgICAgID48L2FwcC1jb3JlLW51bWJlclxyXG4gICAgICA+PC9zcGFuPlxyXG4gICAgICA8c3BhblxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAoaW5wdXRGb3JtQ29udHJvbC50b3VjaGVkIHx8IGlucHV0Rm9ybUNvbnRyb2wuZGlydHkpICYmXHJcbiAgICAgICAgICBpbnB1dEZvcm1Db250cm9sLmVycm9yc1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBlcnJvck1hc3NhZ2U/Lm1lc3NhZ2UgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -245,7 +245,7 @@ export class CoreTableComponent {
|
|
|
245
245
|
.toLowerCase()
|
|
246
246
|
.includes(columnSchema.columnFilter.toString().toLowerCase());
|
|
247
247
|
}
|
|
248
|
-
else if (columnSchema.type === this.columnsTypes.
|
|
248
|
+
else if (columnSchema.type === this.columnsTypes.DATE) {
|
|
249
249
|
if (columnSchema.columnFilter === '') {
|
|
250
250
|
result = true;
|
|
251
251
|
}
|
|
@@ -287,11 +287,11 @@ export class CoreTableComponent {
|
|
|
287
287
|
.substring(2, 2 + length);
|
|
288
288
|
}
|
|
289
289
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreTableComponent, deps: [{ token: i1.NgxIndexedDBService }, { token: i0.ViewContainerRef }, { token: i2.Overlay }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
290
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreTableComponent, selector: "core-table", inputs: { key: "key", columnsSchema: "columnsSchema", columnsSchemaRightClick: "columnsSchemaRightClick", tableData: "tableData", responsive: "responsive", canSelectFirstItem: "canSelectFirstItem", loading: "loading", canFilter: "canFilter", styleFilter: "styleFilter", rowSelector: "rowSelector" }, outputs: { onItemRightClick: "onItemRightClick", onColumnClicked: "onColumnClicked", onColumnValueChanged: "onColumnValueChanged", onItemSelected: "onItemSelected" }, host: { listeners: { "document:keydown": "handleEnter($event)" } }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "userMenu", first: true, predicate: ["userMenu"], descendants: true }], ngImport: i0, template: "<div class=\"p-2 overflow-x-auto relative\">\r\n <table\r\n #table\r\n tabindex=\"0\"\r\n *ngIf=\"!isRunningOnSmallScreen || !responsive; else smallDeviceCard\"\r\n >\r\n <tr>\r\n <th\r\n class=\"cursor-pointer text-center\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [ngStyle]=\"{ width: column?.width + 'px' }\"\r\n >\r\n <div\r\n class=\"grid\"\r\n [ngClass]=\"[canFilter ? 'grid-rows-2' : 'grid-rows-1']\"\r\n >\r\n <span\r\n class=\"p-2 relative\"\r\n (click)=\"sortByHeader(column)\"\r\n [ngStyle]=\"{\r\n minWidth:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? column.data.length * 30 + 'px'\r\n : '',\r\n display:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'inline-block'\r\n : '',\r\n }\"\r\n >{{ column.label }}\r\n <app-sort-down-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'asc'\r\n \"\r\n ></app-sort-down-icon>\r\n <app-sort-up-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'desc'\r\n \"\r\n ></app-sort-up-icon>\r\n <app-sort-solid-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"sortDetail?.key !== column.key\"\r\n ></app-sort-solid-icon>\r\n </span>\r\n <core-column-date-picker\r\n *ngIf=\"canFilter && column.type == columnsTypes.SHAMSI_DATE\"\r\n [canSelectToday]=\"true\"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n >\r\n </core-column-date-picker>\r\n <core-column-input\r\n *ngIf=\"\r\n canFilter &&\r\n column.type !== columnsTypes.ACTION &&\r\n column.type !== columnsTypes.COLOR &&\r\n column.type !== columnsTypes.STATUS &&\r\n column.type !== columnsTypes.SHAMSI_DATE &&\r\n column.type !== columnsTypes.ROW_SELECTOR &&\r\n column.type !== columnsTypes.STATUS_ACTIVE &&\r\n column.type !== columnsTypes.ACTION_BUTTONS\r\n \"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n ></core-column-input>\r\n <core-column-selector\r\n *ngIf=\"\r\n (canFilter && column.type == columnsTypes.STATUS) ||\r\n (canFilter && column.type == columnsTypes.STATUS_ACTIVE)\r\n \"\r\n [titleKey]=\"'title'\"\r\n [valueKey]=\"'value'\"\r\n [items]=\"\r\n column.type == columnsTypes.STATUS\r\n ? ACTIVE_OPTIONS\r\n : YES_NO_OPTIONS\r\n \"\r\n (onItemSelected)=\"tableDataFiltered($event, column)\"\r\n ></core-column-selector>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr\r\n *ngFor=\"let data of sortedTableData; let i = index\"\r\n class=\"cursor-pointer\"\r\n [id]=\"'tableRow_' + salt + '_' + i\"\r\n [ngClass]=\"{ 'select-item': data.id === selectedItem?.id }\"\r\n (click)=\"onItemSelect(data, i, $event)\"\r\n (contextmenu)=\"onRightClick($event, data); $event.preventDefault()\"\r\n >\r\n <td\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"styleFilter ? styleFilter(data) : ''\"\r\n >\r\n <app-core-table-column-manager\r\n *ngIf=\"column.type != columnsTypes.MULTI_COLUMN; else elseBlock\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n (onColumnValueChanged)=\"columnValueChanged($event)\"\r\n [allTableData]=\"sortedTableData\"\r\n [data]=\"data\"\r\n [column]=\"column\"\r\n ></app-core-table-column-manager>\r\n <ng-template #elseBlock>\r\n <app-core-table-column-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-column-manager>\r\n </ng-template>\r\n </td>\r\n <ng-template #userMenu style=\"position: fixed\">\r\n <section class=\"user-menu\">\r\n <div\r\n class=\"w-96 text-right\"\r\n *ngFor=\"let item of columnsSchemaRightClick\"\r\n (click)=\"onRightItemClick(data, item)\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n </section>\r\n </ng-template>\r\n </tr>\r\n </table>\r\n <ng-template #smallDeviceCard>\r\n <div>\r\n <core-card\r\n *ngFor=\"let data of sortedTableData\"\r\n [cardClass]=\"'background-card m-4 p-4 relative'\"\r\n >\r\n <div\r\n class=\"leading-8\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'actionButtons'\r\n : column.type === columnsTypes.ROW_SELECTOR\r\n ? 'selectRow'\r\n : ''\r\n \"\r\n >\r\n <span\r\n *ngIf=\"\r\n column.type !== columnsTypes.ACTION_BUTTONS &&\r\n column.type !== columnsTypes.ROW_SELECTOR\r\n \"\r\n class=\"secondary-text-color\"\r\n >\r\n {{ column.label }} :\r\n </span>\r\n <span class=\"primary-text-color font-semibold\">\r\n <app-core-table-card-manager\r\n *ngIf=\"\r\n column.type != columnsTypes.MULTI_COLUMN;\r\n else cardManagerElseBlock\r\n \"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"column\"\r\n >\r\n </app-core-table-card-manager>\r\n\r\n <ng-template #cardManagerElseBlock>\r\n <app-core-table-card-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-card-manager>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </core-card>\r\n </div>\r\n </ng-template>\r\n <core-table-no-content\r\n *ngIf=\"!loading\"\r\n [tableData]=\"sortedTableData\"\r\n [loading]=\"loading\"\r\n ></core-table-no-content>\r\n</div>\r\n", styles: ["table{border-collapse:collapse;width:100%;text-align:start}table:focus{outline:none}.select-item{background-color:#e3f2fd!important}.user-menu{background-color:#fafafa;font-size:10pt;z-index:1000;box-shadow:0 0 12pt #00000040;border-radius:4pt;padding:.5em 0;animation:fadeIn .1s ease-out;opacity:1;display:block}.user-menu div{cursor:pointer;text-decoration:none;color:#333;padding-inline:1.5em;padding-block:.5em;max-width:18em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-menu div:hover{background-color:#cccbcb48}table td,table th{padding-top:12px;padding-bottom:12px;padding-inline-start:8px}table td{font-size:small;color:var(--default-table-td-text-color)}table tr:nth-child(2n){background-color:var(--default-table-tr-child-background-color)}table tr:hover{background-color:var(--default-table-tr-hover-background-color)}table th{background-color:var(--default-table-th-background-color);text-align:start;color:#1d1d1d}.actionButtons{position:absolute;bottom:0;background:var(--default-table-action-buttons-background-color);left:0;right:0;text-align:left;border-radius:.5rem;border-top-right-radius:0;border-top-left-radius:0;padding-top:4px;padding-left:16px}.selectRow{position:absolute;left:0;top:18px}.desc-sort-icon{transform:rotate(180deg)}.sort-icon{fill:var(--default-table-sort-icon-color)}.background-card{background-color:var(--default-table-background-card-color)}.secondary-text-color{color:var(--default-table-secondary-text-color)}.primary-text-color{color:var(--default-table-primary-text-color)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.CoreCardComponent, selector: "core-card", inputs: ["cardClass"] }, { kind: "component", type: i5.CoreColumnDatePickerComponent, selector: "core-column-date-picker", inputs: ["canSelectToday", "defaultDate", "inputFormControl"], outputs: ["onChange"] }, { kind: "component", type: i6.CoreColumnInputComponent, selector: "core-column-input", inputs: ["showRemoveIcon", "placeholder", "value", "type", "isDatePicker", "maxLength"], outputs: ["onChange"] }, { kind: "component", type: i7.CoreColumnSelectorComponent, selector: "core-column-selector", inputs: ["items", "titleKey", "valueKey", "label", "inputFormControl"], outputs: ["onItemSelected"] }, { kind: "component", type: i8.CoreTableCardManagerComponent, selector: "app-core-table-card-manager", inputs: ["data", "column", "allTableData", "rowSelector"], outputs: ["onColumnClicked"] }, { kind: "component", type: i9.CoreTableColumnManagerComponent, selector: "app-core-table-column-manager", inputs: ["data", "column", "allTableData", "rowSelector"], outputs: ["onColumnClicked", "onColumnValueChanged"] }, { kind: "component", type: i10.CoreTableNoContentComponent, selector: "core-table-no-content", inputs: ["tableData", "loading"] }, { kind: "component", type: i11.SortDownIconComponent, selector: "app-sort-down-icon" }, { kind: "component", type: i12.SortSolidIconComponent, selector: "app-sort-solid-icon" }, { kind: "component", type: i13.SortUpIconComponent, selector: "app-sort-up-icon" }] }); }
|
|
290
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CoreTableComponent, selector: "core-table", inputs: { key: "key", columnsSchema: "columnsSchema", columnsSchemaRightClick: "columnsSchemaRightClick", tableData: "tableData", responsive: "responsive", canSelectFirstItem: "canSelectFirstItem", loading: "loading", canFilter: "canFilter", styleFilter: "styleFilter", rowSelector: "rowSelector" }, outputs: { onItemRightClick: "onItemRightClick", onColumnClicked: "onColumnClicked", onColumnValueChanged: "onColumnValueChanged", onItemSelected: "onItemSelected" }, host: { listeners: { "document:keydown": "handleEnter($event)" } }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "userMenu", first: true, predicate: ["userMenu"], descendants: true }], ngImport: i0, template: "<div class=\"p-2 overflow-x-auto relative\">\r\n <table\r\n #table\r\n tabindex=\"0\"\r\n *ngIf=\"!isRunningOnSmallScreen || !responsive; else smallDeviceCard\"\r\n >\r\n <tr>\r\n <th\r\n class=\"cursor-pointer text-center\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [ngStyle]=\"{ width: column?.width + 'px' }\"\r\n >\r\n <div\r\n class=\"grid\"\r\n [ngClass]=\"[canFilter ? 'grid-rows-2' : 'grid-rows-1']\"\r\n >\r\n <span\r\n class=\"p-2 relative\"\r\n (click)=\"sortByHeader(column)\"\r\n [ngStyle]=\"{\r\n minWidth:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? column.data.length * 30 + 'px'\r\n : '',\r\n display:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'inline-block'\r\n : '',\r\n }\"\r\n >{{ column.label }}\r\n <app-sort-down-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'asc'\r\n \"\r\n ></app-sort-down-icon>\r\n <app-sort-up-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'desc'\r\n \"\r\n ></app-sort-up-icon>\r\n <app-sort-solid-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"sortDetail?.key !== column.key\"\r\n ></app-sort-solid-icon>\r\n </span>\r\n <core-column-date-picker\r\n *ngIf=\"\r\n canFilter &&\r\n (column.type == columnsTypes.SHAMSI_DATE ||\r\n column.type == columnsTypes.DATE)\r\n \"\r\n [canSelectToday]=\"true\"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n >\r\n </core-column-date-picker>\r\n <core-column-input\r\n *ngIf=\"\r\n canFilter &&\r\n column.type !== columnsTypes.ACTION &&\r\n column.type !== columnsTypes.COLOR &&\r\n column.type !== columnsTypes.STATUS &&\r\n column.type !== columnsTypes.SHAMSI_DATE &&\r\n column.type !== columnsTypes.ROW_SELECTOR &&\r\n column.type !== columnsTypes.DATE &&\r\n column.type !== columnsTypes.STATUS_ACTIVE &&\r\n column.type !== columnsTypes.ACTION_BUTTONS\r\n \"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n ></core-column-input>\r\n <core-column-selector\r\n *ngIf=\"\r\n (canFilter && column.type == columnsTypes.STATUS) ||\r\n (canFilter && column.type == columnsTypes.STATUS_ACTIVE)\r\n \"\r\n [titleKey]=\"'title'\"\r\n [valueKey]=\"'value'\"\r\n [items]=\"\r\n column.type == columnsTypes.STATUS\r\n ? ACTIVE_OPTIONS\r\n : YES_NO_OPTIONS\r\n \"\r\n (onItemSelected)=\"tableDataFiltered($event, column)\"\r\n ></core-column-selector>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr\r\n *ngFor=\"let data of sortedTableData; let i = index\"\r\n class=\"cursor-pointer\"\r\n [id]=\"'tableRow_' + salt + '_' + i\"\r\n [ngClass]=\"{ 'select-item': data.id === selectedItem?.id }\"\r\n (click)=\"onItemSelect(data, i, $event)\"\r\n (contextmenu)=\"onRightClick($event, data); $event.preventDefault()\"\r\n >\r\n <td\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"styleFilter ? styleFilter(data) : ''\"\r\n >\r\n <app-core-table-column-manager\r\n *ngIf=\"column.type != columnsTypes.MULTI_COLUMN; else elseBlock\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n (onColumnValueChanged)=\"columnValueChanged($event)\"\r\n [allTableData]=\"sortedTableData\"\r\n [data]=\"data\"\r\n [column]=\"column\"\r\n ></app-core-table-column-manager>\r\n <ng-template #elseBlock>\r\n <app-core-table-column-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-column-manager>\r\n </ng-template>\r\n </td>\r\n <ng-template #userMenu style=\"position: fixed\">\r\n <section class=\"user-menu\">\r\n <div\r\n class=\"w-96 text-right\"\r\n *ngFor=\"let item of columnsSchemaRightClick\"\r\n (click)=\"onRightItemClick(data, item)\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n </section>\r\n </ng-template>\r\n </tr>\r\n </table>\r\n <ng-template #smallDeviceCard>\r\n <div>\r\n <core-card\r\n *ngFor=\"let data of sortedTableData\"\r\n [cardClass]=\"'background-card m-4 p-4 relative'\"\r\n >\r\n <div\r\n class=\"leading-8\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'actionButtons'\r\n : column.type === columnsTypes.ROW_SELECTOR\r\n ? 'selectRow'\r\n : ''\r\n \"\r\n >\r\n <span\r\n *ngIf=\"\r\n column.type !== columnsTypes.ACTION_BUTTONS &&\r\n column.type !== columnsTypes.ROW_SELECTOR\r\n \"\r\n class=\"secondary-text-color\"\r\n >\r\n {{ column.label }} :\r\n </span>\r\n <span class=\"primary-text-color font-semibold\">\r\n <app-core-table-card-manager\r\n *ngIf=\"\r\n column.type != columnsTypes.MULTI_COLUMN;\r\n else cardManagerElseBlock\r\n \"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"column\"\r\n >\r\n </app-core-table-card-manager>\r\n\r\n <ng-template #cardManagerElseBlock>\r\n <app-core-table-card-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-card-manager>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </core-card>\r\n </div>\r\n </ng-template>\r\n <core-table-no-content\r\n *ngIf=\"!loading\"\r\n [tableData]=\"sortedTableData\"\r\n [loading]=\"loading\"\r\n ></core-table-no-content>\r\n</div>\r\n", styles: ["table{border-collapse:collapse;width:100%;text-align:start}table:focus{outline:none}.select-item{background-color:#e3f2fd!important}.user-menu{background-color:#fafafa;font-size:10pt;z-index:1000;box-shadow:0 0 12pt #00000040;border-radius:4pt;padding:.5em 0;animation:fadeIn .1s ease-out;opacity:1;display:block}.user-menu div{cursor:pointer;text-decoration:none;color:#333;padding-inline:1.5em;padding-block:.5em;max-width:18em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-menu div:hover{background-color:#cccbcb48}table td,table th{padding-top:12px;padding-bottom:12px;padding-inline-start:8px}table td{font-size:small;color:var(--default-table-td-text-color)}table tr:nth-child(2n){background-color:var(--default-table-tr-child-background-color)}table tr:hover{background-color:var(--default-table-tr-hover-background-color)}table th{background-color:var(--default-table-th-background-color);text-align:start;color:#1d1d1d}.actionButtons{position:absolute;bottom:0;background:var(--default-table-action-buttons-background-color);left:0;right:0;text-align:left;border-radius:.5rem;border-top-right-radius:0;border-top-left-radius:0;padding-top:4px;padding-left:16px}.selectRow{position:absolute;left:0;top:18px}.desc-sort-icon{transform:rotate(180deg)}.sort-icon{fill:var(--default-table-sort-icon-color)}.background-card{background-color:var(--default-table-background-card-color)}.secondary-text-color{color:var(--default-table-secondary-text-color)}.primary-text-color{color:var(--default-table-primary-text-color)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.CoreCardComponent, selector: "core-card", inputs: ["cardClass"] }, { kind: "component", type: i5.CoreColumnDatePickerComponent, selector: "core-column-date-picker", inputs: ["canSelectToday", "defaultDate", "inputFormControl"], outputs: ["onChange"] }, { kind: "component", type: i6.CoreColumnInputComponent, selector: "core-column-input", inputs: ["showRemoveIcon", "placeholder", "value", "type", "isDatePicker", "maxLength"], outputs: ["onChange"] }, { kind: "component", type: i7.CoreColumnSelectorComponent, selector: "core-column-selector", inputs: ["items", "titleKey", "valueKey", "label", "inputFormControl"], outputs: ["onItemSelected"] }, { kind: "component", type: i8.CoreTableCardManagerComponent, selector: "app-core-table-card-manager", inputs: ["data", "column", "allTableData", "rowSelector"], outputs: ["onColumnClicked"] }, { kind: "component", type: i9.CoreTableColumnManagerComponent, selector: "app-core-table-column-manager", inputs: ["data", "column", "allTableData", "rowSelector"], outputs: ["onColumnClicked", "onColumnValueChanged"] }, { kind: "component", type: i10.CoreTableNoContentComponent, selector: "core-table-no-content", inputs: ["tableData", "loading"] }, { kind: "component", type: i11.SortDownIconComponent, selector: "app-sort-down-icon" }, { kind: "component", type: i12.SortSolidIconComponent, selector: "app-sort-solid-icon" }, { kind: "component", type: i13.SortUpIconComponent, selector: "app-sort-up-icon" }] }); }
|
|
291
291
|
}
|
|
292
292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CoreTableComponent, decorators: [{
|
|
293
293
|
type: Component,
|
|
294
|
-
args: [{ selector: 'core-table', template: "<div class=\"p-2 overflow-x-auto relative\">\r\n <table\r\n #table\r\n tabindex=\"0\"\r\n *ngIf=\"!isRunningOnSmallScreen || !responsive; else smallDeviceCard\"\r\n >\r\n <tr>\r\n <th\r\n class=\"cursor-pointer text-center\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [ngStyle]=\"{ width: column?.width + 'px' }\"\r\n >\r\n <div\r\n class=\"grid\"\r\n [ngClass]=\"[canFilter ? 'grid-rows-2' : 'grid-rows-1']\"\r\n >\r\n <span\r\n class=\"p-2 relative\"\r\n (click)=\"sortByHeader(column)\"\r\n [ngStyle]=\"{\r\n minWidth:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? column.data.length * 30 + 'px'\r\n : '',\r\n display:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'inline-block'\r\n : '',\r\n }\"\r\n >{{ column.label }}\r\n <app-sort-down-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'asc'\r\n \"\r\n ></app-sort-down-icon>\r\n <app-sort-up-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'desc'\r\n \"\r\n ></app-sort-up-icon>\r\n <app-sort-solid-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"sortDetail?.key !== column.key\"\r\n ></app-sort-solid-icon>\r\n </span>\r\n <core-column-date-picker\r\n *ngIf=\"canFilter
|
|
294
|
+
args: [{ selector: 'core-table', template: "<div class=\"p-2 overflow-x-auto relative\">\r\n <table\r\n #table\r\n tabindex=\"0\"\r\n *ngIf=\"!isRunningOnSmallScreen || !responsive; else smallDeviceCard\"\r\n >\r\n <tr>\r\n <th\r\n class=\"cursor-pointer text-center\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [ngStyle]=\"{ width: column?.width + 'px' }\"\r\n >\r\n <div\r\n class=\"grid\"\r\n [ngClass]=\"[canFilter ? 'grid-rows-2' : 'grid-rows-1']\"\r\n >\r\n <span\r\n class=\"p-2 relative\"\r\n (click)=\"sortByHeader(column)\"\r\n [ngStyle]=\"{\r\n minWidth:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? column.data.length * 30 + 'px'\r\n : '',\r\n display:\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'inline-block'\r\n : '',\r\n }\"\r\n >{{ column.label }}\r\n <app-sort-down-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'asc'\r\n \"\r\n ></app-sort-down-icon>\r\n <app-sort-up-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"\r\n sortDetail?.key == column.key && sortDetail?.sort === 'desc'\r\n \"\r\n ></app-sort-up-icon>\r\n <app-sort-solid-icon\r\n class=\"sort-icon w-2 h-2 inline-block absolute top-3 right-[-3px]\"\r\n *ngIf=\"sortDetail?.key !== column.key\"\r\n ></app-sort-solid-icon>\r\n </span>\r\n <core-column-date-picker\r\n *ngIf=\"\r\n canFilter &&\r\n (column.type == columnsTypes.SHAMSI_DATE ||\r\n column.type == columnsTypes.DATE)\r\n \"\r\n [canSelectToday]=\"true\"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n >\r\n </core-column-date-picker>\r\n <core-column-input\r\n *ngIf=\"\r\n canFilter &&\r\n column.type !== columnsTypes.ACTION &&\r\n column.type !== columnsTypes.COLOR &&\r\n column.type !== columnsTypes.STATUS &&\r\n column.type !== columnsTypes.SHAMSI_DATE &&\r\n column.type !== columnsTypes.ROW_SELECTOR &&\r\n column.type !== columnsTypes.DATE &&\r\n column.type !== columnsTypes.STATUS_ACTIVE &&\r\n column.type !== columnsTypes.ACTION_BUTTONS\r\n \"\r\n (onChange)=\"tableDataFiltered($event, column)\"\r\n ></core-column-input>\r\n <core-column-selector\r\n *ngIf=\"\r\n (canFilter && column.type == columnsTypes.STATUS) ||\r\n (canFilter && column.type == columnsTypes.STATUS_ACTIVE)\r\n \"\r\n [titleKey]=\"'title'\"\r\n [valueKey]=\"'value'\"\r\n [items]=\"\r\n column.type == columnsTypes.STATUS\r\n ? ACTIVE_OPTIONS\r\n : YES_NO_OPTIONS\r\n \"\r\n (onItemSelected)=\"tableDataFiltered($event, column)\"\r\n ></core-column-selector>\r\n </div>\r\n </th>\r\n </tr>\r\n <tr\r\n *ngFor=\"let data of sortedTableData; let i = index\"\r\n class=\"cursor-pointer\"\r\n [id]=\"'tableRow_' + salt + '_' + i\"\r\n [ngClass]=\"{ 'select-item': data.id === selectedItem?.id }\"\r\n (click)=\"onItemSelect(data, i, $event)\"\r\n (contextmenu)=\"onRightClick($event, data); $event.preventDefault()\"\r\n >\r\n <td\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"styleFilter ? styleFilter(data) : ''\"\r\n >\r\n <app-core-table-column-manager\r\n *ngIf=\"column.type != columnsTypes.MULTI_COLUMN; else elseBlock\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n (onColumnValueChanged)=\"columnValueChanged($event)\"\r\n [allTableData]=\"sortedTableData\"\r\n [data]=\"data\"\r\n [column]=\"column\"\r\n ></app-core-table-column-manager>\r\n <ng-template #elseBlock>\r\n <app-core-table-column-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-column-manager>\r\n </ng-template>\r\n </td>\r\n <ng-template #userMenu style=\"position: fixed\">\r\n <section class=\"user-menu\">\r\n <div\r\n class=\"w-96 text-right\"\r\n *ngFor=\"let item of columnsSchemaRightClick\"\r\n (click)=\"onRightItemClick(data, item)\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n </section>\r\n </ng-template>\r\n </tr>\r\n </table>\r\n <ng-template #smallDeviceCard>\r\n <div>\r\n <core-card\r\n *ngFor=\"let data of sortedTableData\"\r\n [cardClass]=\"'background-card m-4 p-4 relative'\"\r\n >\r\n <div\r\n class=\"leading-8\"\r\n *ngFor=\"let column of activeColumnsSchema()\"\r\n [class]=\"\r\n column.type === columnsTypes.ACTION_BUTTONS\r\n ? 'actionButtons'\r\n : column.type === columnsTypes.ROW_SELECTOR\r\n ? 'selectRow'\r\n : ''\r\n \"\r\n >\r\n <span\r\n *ngIf=\"\r\n column.type !== columnsTypes.ACTION_BUTTONS &&\r\n column.type !== columnsTypes.ROW_SELECTOR\r\n \"\r\n class=\"secondary-text-color\"\r\n >\r\n {{ column.label }} :\r\n </span>\r\n <span class=\"primary-text-color font-semibold\">\r\n <app-core-table-card-manager\r\n *ngIf=\"\r\n column.type != columnsTypes.MULTI_COLUMN;\r\n else cardManagerElseBlock\r\n \"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"column\"\r\n >\r\n </app-core-table-card-manager>\r\n\r\n <ng-template #cardManagerElseBlock>\r\n <app-core-table-card-manager\r\n *ngFor=\"let childColumn of column.columns; let i = index\"\r\n [rowSelector]=\"rowSelector\"\r\n (onColumnClicked)=\"columnClicked($event)\"\r\n [data]=\"data\"\r\n [allTableData]=\"sortedTableData\"\r\n [column]=\"childColumn\"\r\n >\r\n <span *ngIf=\"i > 0\">-</span>\r\n </app-core-table-card-manager>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </core-card>\r\n </div>\r\n </ng-template>\r\n <core-table-no-content\r\n *ngIf=\"!loading\"\r\n [tableData]=\"sortedTableData\"\r\n [loading]=\"loading\"\r\n ></core-table-no-content>\r\n</div>\r\n", styles: ["table{border-collapse:collapse;width:100%;text-align:start}table:focus{outline:none}.select-item{background-color:#e3f2fd!important}.user-menu{background-color:#fafafa;font-size:10pt;z-index:1000;box-shadow:0 0 12pt #00000040;border-radius:4pt;padding:.5em 0;animation:fadeIn .1s ease-out;opacity:1;display:block}.user-menu div{cursor:pointer;text-decoration:none;color:#333;padding-inline:1.5em;padding-block:.5em;max-width:18em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-menu div:hover{background-color:#cccbcb48}table td,table th{padding-top:12px;padding-bottom:12px;padding-inline-start:8px}table td{font-size:small;color:var(--default-table-td-text-color)}table tr:nth-child(2n){background-color:var(--default-table-tr-child-background-color)}table tr:hover{background-color:var(--default-table-tr-hover-background-color)}table th{background-color:var(--default-table-th-background-color);text-align:start;color:#1d1d1d}.actionButtons{position:absolute;bottom:0;background:var(--default-table-action-buttons-background-color);left:0;right:0;text-align:left;border-radius:.5rem;border-top-right-radius:0;border-top-left-radius:0;padding-top:4px;padding-left:16px}.selectRow{position:absolute;left:0;top:18px}.desc-sort-icon{transform:rotate(180deg)}.sort-icon{fill:var(--default-table-sort-icon-color)}.background-card{background-color:var(--default-table-background-card-color)}.secondary-text-color{color:var(--default-table-secondary-text-color)}.primary-text-color{color:var(--default-table-primary-text-color)}\n"] }]
|
|
295
295
|
}], ctorParameters: function () { return [{ type: i1.NgxIndexedDBService }, { type: i0.ViewContainerRef }, { type: i2.Overlay }]; }, propDecorators: { key: [{
|
|
296
296
|
type: Input,
|
|
297
297
|
args: [{ required: false }]
|
|
@@ -339,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
339
339
|
type: HostListener,
|
|
340
340
|
args: ['document:keydown', ['$event']]
|
|
341
341
|
}] } });
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mYWxjb24tbGliL3NyYy9saWIvY29yZS10YWJsZS9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmFsY29uLWxpYi9zcmMvbGliL2NvcmUtdGFibGUvY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RSxPQUFPLEVBQVEsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU9yRCxNQUFNLE9BQU8sa0JBQWtCO0lBNkI3QixJQUFJLFlBQVk7UUFDZCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFDVSxTQUE4QixFQUMvQixnQkFBa0MsRUFDbEMsT0FBZ0I7UUFGZixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUMvQixxQkFB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QVc7c0JBRFYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UgfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IGZpbmQsIG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBBQ1RJVkVfT1BUSU9OUywgWUVTX05PX09QVElPTlMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XHJcbmltcG9ydCB7IENvbHVtbnNTY2hlbWEsIFNjaGVtYVJpZ2h0Q2xpY2sgfSBmcm9tICcuL2NvcmUtdGFibGUudHlwZSc7XHJcbmltcG9ydCB7IENPTFVNTlNfVFlQRVMgfSBmcm9tICcuLi8uLi9mYWxjb25UeXBlcyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlVGFibGVDb21wb25lbnQge1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zU2NoZW1hOiBDb2x1bW5zU2NoZW1hW10gPSBbXTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgY29sdW1uc1NjaGVtYVJpZ2h0Q2xpY2s6IFNjaGVtYVJpZ2h0Q2xpY2tbXSA9IFtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRhYmxlRGF0YTogQmVoYXZpb3JTdWJqZWN0PGFueVtdPiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHJlc3BvbnNpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBjYW5TZWxlY3RGaXJzdEl0ZW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBsb2FkaW5nOiBhbnk7XHJcbiAgQElucHV0KCkgY2FuRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHN0eWxlRmlsdGVyOiAoKGRhdGE6IGFueSkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgcm93U2VsZWN0b3I6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkID1cclxuICAgIHVuZGVmaW5lZDtcclxuICBAT3V0cHV0KCkgb25JdGVtUmlnaHRDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29sdW1uVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25JdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGUhOiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3VzZXJNZW51JykgdXNlck1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEFDVElWRV9PUFRJT05TID0gQUNUSVZFX09QVElPTlM7XHJcbiAgWUVTX05PX09QVElPTlMgPSBZRVNfTk9fT1BUSU9OUztcclxuICBzb3J0RGV0YWlsOiB7IGtleTogc3RyaW5nOyBzb3J0OiAnYXNjJyB8ICdkZXNjJyB9IHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIHNvcnRlZFRhYmxlRGF0YTogYW55W10gPSBbXTtcclxuICBkYlRhYmxlRmlsdGVyOiBhbnk7XHJcbiAgaW5kZXggPSAwO1xyXG4gIHNhbHQgPSB0aGlzLnJhbmRvbVN0cmluZyg1KTtcclxuICBvdmVybGF5UmVmITogT3ZlcmxheVJlZiB8IG51bGw7XHJcbiAgc2VsZWN0ZWRJdGVtSW5kZXggPSAwO1xyXG4gIGdldCBjb2x1bW5zVHlwZXMoKSB7XHJcbiAgICByZXR1cm4gQ09MVU1OU19UWVBFUztcclxuICB9XHJcbiAgZ2V0IGlzUnVubmluZ09uU21hbGxTY3JlZW4oKSB7XHJcbiAgICByZXR1cm4gVXRpbC5pc1J1bm5pbmdPblNtYWxsU2NyZWVuKCk7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYlNlcnZpY2U6IE5neEluZGV4ZWREQlNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5XHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVEYXRhLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zb3J0ZWRUYWJsZURhdGEgPSB2YWw7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNhblNlbGVjdEZpcnN0SXRlbSAmJlxyXG4gICAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5zb3J0ZWRUYWJsZURhdGFbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5rZXkpIHtcclxuICAgICAgdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAuZ2V0QnlJbmRleCgndGFibGVGaWx0ZXInLCAna2V5JywgdGhpcy5rZXkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRiVGFibGVGaWx0ZXIgPSBkYXRhO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGJUYWJsZUZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlRmlsdGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jYW5TZWxlY3RGaXJzdEl0ZW0gJiYgdGhpcy5zb3J0ZWRUYWJsZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydGVkVGFibGVEYXRhWzBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGFibGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnNTY2hlbWEubWFwKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICBKU09OLnBhcnNlKHRoaXMuZGJUYWJsZUZpbHRlci5jb2x1bW5zU2NoZW1hKS5mb3JFYWNoKFxyXG4gICAgICAgIChkYkNvbHVtbnNTY2hlbWE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRiQ29sdW1uc1NjaGVtYS5rZXkgPT09IGNvbHVtbi5rZXkpIHtcclxuICAgICAgICAgICAgY29sdW1uLmFjdGl2ZSA9IGRiQ29sdW1uc1NjaGVtYS5hY3RpdmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gY29sdW1uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5zdWIgJiYgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgc3ViITogU3Vic2NyaXB0aW9uO1xyXG4gIG9uUmlnaHRDbGljayhldmVudDogYW55LCBpdGVtOiBTY2hlbWFSaWdodENsaWNrKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVxyXG4gICAgICAucG9zaXRpb24oKVxyXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh7IHgsIHkgfSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChcclxuICAgICAgbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudXNlck1lbnUsIHRoaXMudmlld0NvbnRhaW5lclJlZiwge1xyXG4gICAgICAgICRpbXBsaWNpdDogaXRlbSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWIgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdjbGljaycpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLm92ZXJsYXlSZWYgJiZcclxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhjbGlja1RhcmdldClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFrZSgxKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcclxuICB9XHJcblxyXG4gIG9uUmlnaHRJdGVtQ2xpY2soZGF0YTogYW55LCBldmVudDogU2NoZW1hUmlnaHRDbGljaykge1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0geyBrZXk6IGV2ZW50LmtleSwgZGF0YTogZGF0YSB9O1xyXG4gICAgdGhpcy5vbkl0ZW1SaWdodENsaWNrLmVtaXQocmVzdWx0KTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xyXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgaWYgKGtleS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPT09IHRoaXMuc29ydGVkVGFibGVEYXRhLmxlbmd0aCAtIDEpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA8IHRoaXMuc29ydGVkVGFibGVEYXRhLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgrKztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5zb3J0ZWRUYWJsZURhdGFbdGhpcy5zZWxlY3RlZEl0ZW1JbmRleF07XHJcbiAgICAgICAgICBkb2N1bWVudFxyXG4gICAgICAgICAgICAuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgICAgICAgJ3RhYmxlUm93XycgKyB0aGlzLnNhbHQgKyAnXycgKyB0aGlzLnNlbGVjdGVkSXRlbUluZGV4XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgPy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmIChrZXkua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleC0tO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNvcnRlZFRhYmxlRGF0YVt0aGlzLnNlbGVjdGVkSXRlbUluZGV4XTtcclxuICAgICAgICAgIGRvY3VtZW50XHJcbiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICAgICAgICAndGFibGVSb3dfJyArIHRoaXMuc2FsdCArICdfJyArIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXhcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleS5hbHRLZXkpIHtcclxuICAgICAgICBjb25zdCBhY3Rpb25CdXR0b25zOiBhbnkgPSB0aGlzLmNvbHVtbnNTY2hlbWEuZmluZChcclxuICAgICAgICAgIChzY2hlbWE6IGFueSkgPT4gc2NoZW1hLnR5cGUgPT09IENPTFVNTlNfVFlQRVMuQUNUSU9OX0JVVFRPTlNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBhY3Rpb25CdXR0b25zLmRhdGEuZm9yRWFjaCgoYWN0aW9uQnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChhY3Rpb25CdXR0b24ua2V5Ym9hcmRTaG9ydGN1dCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgICAgICAgJ14oJyArIGFjdGlvbkJ1dHRvbi5rZXlib2FyZFNob3J0Y3V0ICsgJykkJyxcclxuICAgICAgICAgICAgICAnaSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3Qoa2V5LmtleSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbkNsaWNrZWQoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zZWxlY3RlZEl0ZW0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGFjdGlvbkJ1dHRvbi5rZXksXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uSXRlbVNlbGVjdChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpbmRleDtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gZGF0YTtcclxuICAgIHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgfVxyXG5cclxuICBjb2x1bW5DbGlja2VkKHZhbDogYW55KSB7XHJcbiAgICB0aGlzLm9uQ29sdW1uQ2xpY2tlZC5lbWl0KHZhbCk7XHJcbiAgfVxyXG4gIGNvbHVtblZhbHVlQ2hhbmdlZCh2YWw6IGFueSkge1xyXG4gICAgdGhpcy5vbkNvbHVtblZhbHVlQ2hhbmdlZC5lbWl0KHZhbCk7XHJcbiAgfVxyXG4gIHNvcnRCeUhlYWRlcihjb2x1bW46IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc29ydERldGFpbCAmJiB0aGlzLnNvcnREZXRhaWwua2V5ID09IGNvbHVtbi5rZXkpIHtcclxuICAgICAgaWYgKHRoaXMuc29ydERldGFpbC5zb3J0ID09ICdkZXNjJykge1xyXG4gICAgICAgIHRoaXMuc29ydERldGFpbCA9IHsga2V5OiBjb2x1bW4ua2V5LCBzb3J0OiAnYXNjJyB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc29ydERldGFpbCA9IHsga2V5OiBjb2x1bW4ua2V5LCBzb3J0OiAnZGVzYycgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0RGV0YWlsID0geyBrZXk6IGNvbHVtbi5rZXksIHNvcnQ6ICdhc2MnIH07XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGNvbHVtbi50eXBlID09IENPTFVNTlNfVFlQRVMuVEVYVCB8fFxyXG4gICAgICBjb2x1bW4udHlwZSA9PSBDT0xVTU5TX1RZUEVTLk5VTUJFUlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gb3JkZXJCeShcclxuICAgICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YSxcclxuICAgICAgICBbY29sdW1uLmtleV0sXHJcbiAgICAgICAgW3RoaXMuc29ydERldGFpbC5zb3J0XVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PSBDT0xVTU5TX1RZUEVTLlNFTEVDVE9SKSB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gb3JkZXJCeShcclxuICAgICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YSxcclxuICAgICAgICBbKGMpID0+IGNbY29sdW1uLmtleV1bY29sdW1uLmRhdGEua2V5XV0sXHJcbiAgICAgICAgW3RoaXMuc29ydERldGFpbC5zb3J0XVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PSBDT0xVTU5TX1RZUEVTLlNIQU1TSV9EQVRFKSB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gb3JkZXJCeShcclxuICAgICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YSxcclxuICAgICAgICBbKGMpID0+IG5ldyBEYXRlKGNbY29sdW1uLmtleV0pLmdldFRpbWUoKV0sXHJcbiAgICAgICAgW3RoaXMuc29ydERldGFpbC5zb3J0XVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZlQ29sdW1uc1NjaGVtYSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zU2NoZW1hLmZpbHRlcihcclxuICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uYWN0aXZlID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmFjdGl2ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRhYmxlRGF0YUZpbHRlcmVkKHRleHQ6IFN0cmluZyB8IGJvb2xlYW4sIGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbnNTY2hlbWEubWFwKChjb2x1bW5TY2hlbWE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sdW1uU2NoZW1hLmtleSA9PT0gY29sdW1uLmtleSkge1xyXG4gICAgICAgIGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb2x1bW5TY2hlbWE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudGFibGVEYXRhLnN1YnNjcmliZSgodGFibGVEYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gdGFibGVEYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zU2NoZW1hLmZvckVhY2goKGNvbHVtblNjaGVtYTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbHVtblNjaGVtYS50eXBlID09PSB0aGlzLmNvbHVtbnNUeXBlcy5ST1dfU0VMRUNUT1IgfHxcclxuICAgICAgICAgICAgY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLkFDVElPTiB8fFxyXG4gICAgICAgICAgICBjb2x1bW5TY2hlbWEudHlwZSA9PT0gdGhpcy5jb2x1bW5zVHlwZXMuQUNUSU9OX0JVVFRPTlMgfHxcclxuICAgICAgICAgICAgY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICFyZXN1bHRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLlNFTEVDVE9SKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbY29sdW1uU2NoZW1hLmtleV1bY29sdW1uU2NoZW1hLmRhdGEua2V5XVxyXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLlNIQU1TSV9EQVRFKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5TY2hlbWEuY29sdW1uRmlsdGVyID09PSAnJykge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YVtjb2x1bW5TY2hlbWEua2V5XVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgVXRpbC5zaGFtc2lUb01pbGFkaShcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TY2hlbWEuY29sdW1uRmlsdGVyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJ1lZWVktTU0tREQnXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLk1VTFRJX0NPTFVNTikge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBjb2x1bW5TY2hlbWEuY29sdW1ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGF0YVtpdGVtLmtleV1baXRlbS5kYXRhLmtleV1cclxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlcj8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5TY2hlbWEudHlwZSA9PT0gdGhpcy5jb2x1bW5zVHlwZXMuU1RBVFVTKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5TY2hlbWEuY29sdW1uRmlsdGVyID09PSAnJykge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YVtjb2x1bW5TY2hlbWEua2V5XSA9PT0gY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZGF0YVtjb2x1bW5TY2hlbWEua2V5XVxyXG4gICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAuaW5jbHVkZXMoY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlcj8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJhbmRvbVN0cmluZyhsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKVxyXG4gICAgICAudG9TdHJpbmcoMzYpXHJcbiAgICAgIC5zdWJzdHJpbmcoMiwgMiArIGxlbmd0aCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwLTIgb3ZlcmZsb3cteC1hdXRvIHJlbGF0aXZlXCI+XHJcbiAgPHRhYmxlXHJcbiAgICAjdGFibGVcclxuICAgIHRhYmluZGV4PVwiMFwiXHJcbiAgICAqbmdJZj1cIiFpc1J1bm5pbmdPblNtYWxsU2NyZWVuIHx8ICFyZXNwb25zaXZlOyBlbHNlIHNtYWxsRGV2aWNlQ2FyZFwiXHJcbiAgPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGhcclxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtY2VudGVyXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGFjdGl2ZUNvbHVtbnNTY2hlbWEoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uPy53aWR0aCArICdweCcgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImdyaWRcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW2NhbkZpbHRlciA/ICdncmlkLXJvd3MtMicgOiAnZ3JpZC1yb3dzLTEnXVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJwLTIgcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic29ydEJ5SGVhZGVyKGNvbHVtbilcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgbWluV2lkdGg6XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gY29sdW1uc1R5cGVzLkFDVElPTl9CVVRUT05TXHJcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRhdGEubGVuZ3RoICogMzAgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgZGlzcGxheTpcclxuICAgICAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBjb2x1bW5zVHlwZXMuQUNUSU9OX0JVVFRPTlNcclxuICAgICAgICAgICAgICAgICAgPyAnaW5saW5lLWJsb2NrJ1xyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgPnt7IGNvbHVtbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8YXBwLXNvcnQtZG93bi1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gdy0yIGgtMiBpbmxpbmUtYmxvY2sgYWJzb2x1dGUgdG9wLTMgcmlnaHQtWy0zcHhdXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgc29ydERldGFpbD8ua2V5ID09IGNvbHVtbi5rZXkgJiYgc29ydERldGFpbD8uc29ydCA9PT0gJ2FzYydcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9hcHAtc29ydC1kb3duLWljb24+XHJcbiAgICAgICAgICAgIDxhcHAtc29ydC11cC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gdy0yIGgtMiBpbmxpbmUtYmxvY2sgYWJzb2x1dGUgdG9wLTMgcmlnaHQtWy0zcHhdXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgc29ydERldGFpbD8ua2V5ID09IGNvbHVtbi5rZXkgJiYgc29ydERldGFpbD8uc29ydCA9PT0gJ2Rlc2MnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvYXBwLXNvcnQtdXAtaWNvbj5cclxuICAgICAgICAgICAgPGFwcC1zb3J0LXNvbGlkLWljb25cclxuICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtaWNvbiB3LTIgaC0yIGlubGluZS1ibG9jayBhYnNvbHV0ZSB0b3AtMyByaWdodC1bLTNweF1cIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic29ydERldGFpbD8ua2V5ICE9PSBjb2x1bW4ua2V5XCJcclxuICAgICAgICAgICAgPjwvYXBwLXNvcnQtc29saWQtaWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxjb3JlLWNvbHVtbi1kYXRlLXBpY2tlclxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbkZpbHRlciAmJiBjb2x1bW4udHlwZSA9PSBjb2x1bW5zVHlwZXMuU0hBTVNJX0RBVEVcIlxyXG4gICAgICAgICAgICBbY2FuU2VsZWN0VG9kYXldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJ0YWJsZURhdGFGaWx0ZXJlZCgkZXZlbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9jb3JlLWNvbHVtbi1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgIDxjb3JlLWNvbHVtbi1pbnB1dFxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGNhbkZpbHRlciAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuQUNUSU9OICYmXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5DT0xPUiAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuU1RBVFVTICYmXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5TSEFNU0lfREFURSAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuUk9XX1NFTEVDVE9SICYmXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5TVEFUVVNfQUNUSVZFICYmXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5BQ1RJT05fQlVUVE9OU1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwidGFibGVEYXRhRmlsdGVyZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgID48L2NvcmUtY29sdW1uLWlucHV0PlxyXG4gICAgICAgICAgPGNvcmUtY29sdW1uLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKGNhbkZpbHRlciAmJiBjb2x1bW4udHlwZSA9PSBjb2x1bW5zVHlwZXMuU1RBVFVTKSB8fFxyXG4gICAgICAgICAgICAgIChjYW5GaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT0gY29sdW1uc1R5cGVzLlNUQVRVU19BQ1RJVkUpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFt0aXRsZUtleV09XCIndGl0bGUnXCJcclxuICAgICAgICAgICAgW3ZhbHVlS2V5XT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwiXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgPT0gY29sdW1uc1R5cGVzLlNUQVRVU1xyXG4gICAgICAgICAgICAgICAgPyBBQ1RJVkVfT1BUSU9OU1xyXG4gICAgICAgICAgICAgICAgOiBZRVNfTk9fT1BUSU9OU1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAob25JdGVtU2VsZWN0ZWQpPVwidGFibGVEYXRhRmlsdGVyZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgID48L2NvcmUtY29sdW1uLXNlbGVjdG9yPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICAgIDx0clxyXG4gICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzb3J0ZWRUYWJsZURhdGE7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgW2lkXT1cIid0YWJsZVJvd18nICsgc2FsdCArICdfJyArIGlcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3QtaXRlbSc6IGRhdGEuaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQgfVwiXHJcbiAgICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoZGF0YSwgaSwgJGV2ZW50KVwiXHJcbiAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCBkYXRhKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgPlxyXG4gICAgICA8dGRcclxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGFjdGl2ZUNvbHVtbnNTY2hlbWEoKVwiXHJcbiAgICAgICAgW2NsYXNzXT1cInN0eWxlRmlsdGVyID8gc3R5bGVGaWx0ZXIoZGF0YSkgOiAnJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8YXBwLWNvcmUtdGFibGUtY29sdW1uLW1hbmFnZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgIT0gY29sdW1uc1R5cGVzLk1VTFRJX0NPTFVNTjsgZWxzZSBlbHNlQmxvY2tcIlxyXG4gICAgICAgICAgW3Jvd1NlbGVjdG9yXT1cInJvd1NlbGVjdG9yXCJcclxuICAgICAgICAgIChvbkNvbHVtbkNsaWNrZWQpPVwiY29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgIChvbkNvbHVtblZhbHVlQ2hhbmdlZCk9XCJjb2x1bW5WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbYWxsVGFibGVEYXRhXT1cInNvcnRlZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICA+PC9hcHAtY29yZS10YWJsZS1jb2x1bW4tbWFuYWdlcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cclxuICAgICAgICAgIDxhcHAtY29yZS10YWJsZS1jb2x1bW4tbWFuYWdlclxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbcm93U2VsZWN0b3JdPVwicm93U2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAob25Db2x1bW5DbGlja2VkKT1cImNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICBbYWxsVGFibGVEYXRhXT1cInNvcnRlZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY2hpbGRDb2x1bW5cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPiAwXCI+LTwvc3Bhbj5cclxuICAgICAgICAgIDwvYXBwLWNvcmUtdGFibGUtY29sdW1uLW1hbmFnZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC90ZD5cclxuICAgICAgPG5nLXRlbXBsYXRlICN1c2VyTWVudSBzdHlsZT1cInBvc2l0aW9uOiBmaXhlZFwiPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidXNlci1tZW51XCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwidy05NiB0ZXh0LXJpZ2h0XCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uc1NjaGVtYVJpZ2h0Q2xpY2tcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25SaWdodEl0ZW1DbGljayhkYXRhLCBpdGVtKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdHI+XHJcbiAgPC90YWJsZT5cclxuICA8bmctdGVtcGxhdGUgI3NtYWxsRGV2aWNlQ2FyZD5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxjb3JlLWNhcmRcclxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzb3J0ZWRUYWJsZURhdGFcIlxyXG4gICAgICAgIFtjYXJkQ2xhc3NdPVwiJ2JhY2tncm91bmQtY2FyZCBtLTQgcC00IHJlbGF0aXZlJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImxlYWRpbmctOFwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGFjdGl2ZUNvbHVtbnNTY2hlbWEoKVwiXHJcbiAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSBjb2x1bW5zVHlwZXMuQUNUSU9OX0JVVFRPTlNcclxuICAgICAgICAgICAgICA/ICdhY3Rpb25CdXR0b25zJ1xyXG4gICAgICAgICAgICAgIDogY29sdW1uLnR5cGUgPT09IGNvbHVtbnNUeXBlcy5ST1dfU0VMRUNUT1JcclxuICAgICAgICAgICAgICAgID8gJ3NlbGVjdFJvdydcclxuICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBjb2x1bW4udHlwZSAhPT0gY29sdW1uc1R5cGVzLkFDVElPTl9CVVRUT05TICYmXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5ST1dfU0VMRUNUT1JcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWNvbmRhcnktdGV4dC1jb2xvclwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbi5sYWJlbCB9fSA6XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByaW1hcnktdGV4dC1jb2xvciBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY29yZS10YWJsZS1jYXJkLW1hbmFnZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT0gY29sdW1uc1R5cGVzLk1VTFRJX0NPTFVNTjtcclxuICAgICAgICAgICAgICAgIGVsc2UgY2FyZE1hbmFnZXJFbHNlQmxvY2tcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtyb3dTZWxlY3Rvcl09XCJyb3dTZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgKG9uQ29sdW1uQ2xpY2tlZCk9XCJjb2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgIFthbGxUYWJsZURhdGFdPVwic29ydGVkVGFibGVEYXRhXCJcclxuICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9hcHAtY29yZS10YWJsZS1jYXJkLW1hbmFnZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmRNYW5hZ2VyRWxzZUJsb2NrPlxyXG4gICAgICAgICAgICAgIDxhcHAtY29yZS10YWJsZS1jYXJkLW1hbmFnZXJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBbcm93U2VsZWN0b3JdPVwicm93U2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgKG9uQ29sdW1uQ2xpY2tlZCk9XCJjb2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICAgICBbYWxsVGFibGVEYXRhXT1cInNvcnRlZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNoaWxkQ29sdW1uXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPiAwXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2FwcC1jb3JlLXRhYmxlLWNhcmQtbWFuYWdlcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9jb3JlLWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxjb3JlLXRhYmxlLW5vLWNvbnRlbnRcclxuICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxyXG4gICAgW3RhYmxlRGF0YV09XCJzb3J0ZWRUYWJsZURhdGFcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgPjwvY29yZS10YWJsZS1uby1jb250ZW50PlxyXG48L2Rpdj5cclxuIl19
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mYWxjb24tbGliL3NyYy9saWIvY29yZS10YWJsZS9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmFsY29uLWxpYi9zcmMvbGliL2NvcmUtdGFibGUvY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RSxPQUFPLEVBQVEsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU9yRCxNQUFNLE9BQU8sa0JBQWtCO0lBNkI3QixJQUFJLFlBQVk7UUFDZCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFDVSxTQUE4QixFQUMvQixnQkFBa0MsRUFDbEMsT0FBZ0I7UUFGZixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUMvQixxQkFB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QVc7c0JBRFYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UgfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IGZpbmQsIG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBBQ1RJVkVfT1BUSU9OUywgWUVTX05PX09QVElPTlMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XHJcbmltcG9ydCB7IENvbHVtbnNTY2hlbWEsIFNjaGVtYVJpZ2h0Q2xpY2sgfSBmcm9tICcuL2NvcmUtdGFibGUudHlwZSc7XHJcbmltcG9ydCB7IENPTFVNTlNfVFlQRVMgfSBmcm9tICcuLi8uLi9mYWxjb25UeXBlcyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlVGFibGVDb21wb25lbnQge1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zU2NoZW1hOiBDb2x1bW5zU2NoZW1hW10gPSBbXTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgY29sdW1uc1NjaGVtYVJpZ2h0Q2xpY2s6IFNjaGVtYVJpZ2h0Q2xpY2tbXSA9IFtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRhYmxlRGF0YTogQmVoYXZpb3JTdWJqZWN0PGFueVtdPiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHJlc3BvbnNpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSB9KSBjYW5TZWxlY3RGaXJzdEl0ZW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBsb2FkaW5nOiBhbnk7XHJcbiAgQElucHV0KCkgY2FuRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pIHN0eWxlRmlsdGVyOiAoKGRhdGE6IGFueSkgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoeyByZXF1aXJlZDogZmFsc2UgfSkgcm93U2VsZWN0b3I6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkID1cclxuICAgIHVuZGVmaW5lZDtcclxuICBAT3V0cHV0KCkgb25JdGVtUmlnaHRDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29sdW1uVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25JdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGUhOiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3VzZXJNZW51JykgdXNlck1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEFDVElWRV9PUFRJT05TID0gQUNUSVZFX09QVElPTlM7XHJcbiAgWUVTX05PX09QVElPTlMgPSBZRVNfTk9fT1BUSU9OUztcclxuICBzb3J0RGV0YWlsOiB7IGtleTogc3RyaW5nOyBzb3J0OiAnYXNjJyB8ICdkZXNjJyB9IHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIHNvcnRlZFRhYmxlRGF0YTogYW55W10gPSBbXTtcclxuICBkYlRhYmxlRmlsdGVyOiBhbnk7XHJcbiAgaW5kZXggPSAwO1xyXG4gIHNhbHQgPSB0aGlzLnJhbmRvbVN0cmluZyg1KTtcclxuICBvdmVybGF5UmVmITogT3ZlcmxheVJlZiB8IG51bGw7XHJcbiAgc2VsZWN0ZWRJdGVtSW5kZXggPSAwO1xyXG4gIGdldCBjb2x1bW5zVHlwZXMoKSB7XHJcbiAgICByZXR1cm4gQ09MVU1OU19UWVBFUztcclxuICB9XHJcbiAgZ2V0IGlzUnVubmluZ09uU21hbGxTY3JlZW4oKSB7XHJcbiAgICByZXR1cm4gVXRpbC5pc1J1bm5pbmdPblNtYWxsU2NyZWVuKCk7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYlNlcnZpY2U6IE5neEluZGV4ZWREQlNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5LFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gdmFsO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jYW5TZWxlY3RGaXJzdEl0ZW0gJiZcclxuICAgICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydGVkVGFibGVEYXRhWzBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMua2V5KSB7XHJcbiAgICAgIHRoaXMuZGJTZXJ2aWNlXHJcbiAgICAgICAgLmdldEJ5SW5kZXgoJ3RhYmxlRmlsdGVyJywgJ2tleScsIHRoaXMua2V5KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYlRhYmxlRmlsdGVyID0gZGF0YTtcclxuICAgICAgICAgIGlmICh0aGlzLmRiVGFibGVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUZpbHRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuU2VsZWN0Rmlyc3RJdGVtICYmIHRoaXMuc29ydGVkVGFibGVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNvcnRlZFRhYmxlRGF0YVswXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRhYmxlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zU2NoZW1hLm1hcCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgSlNPTi5wYXJzZSh0aGlzLmRiVGFibGVGaWx0ZXIuY29sdW1uc1NjaGVtYSkuZm9yRWFjaChcclxuICAgICAgICAoZGJDb2x1bW5zU2NoZW1hOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChkYkNvbHVtbnNTY2hlbWEua2V5ID09PSBjb2x1bW4ua2V5KSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5hY3RpdmUgPSBkYkNvbHVtbnNTY2hlbWEuYWN0aXZlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLnN1YiAmJiB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBzdWIhOiBTdWJzY3JpcHRpb247XHJcbiAgb25SaWdodENsaWNrKGV2ZW50OiBhbnksIGl0ZW06IFNjaGVtYVJpZ2h0Q2xpY2spIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcclxuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xyXG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XHJcbiAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHsgeCwgeSB9KVxyXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKFxyXG4gICAgICBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy51c2VyTWVudSwgdGhpcy52aWV3Q29udGFpbmVyUmVmLCB7XHJcbiAgICAgICAgJGltcGxpY2l0OiBpdGVtLFxyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWIgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdjbGljaycpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNsaWNrVGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLm92ZXJsYXlSZWYgJiZcclxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhjbGlja1RhcmdldClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XHJcbiAgfVxyXG5cclxuICBvblJpZ2h0SXRlbUNsaWNrKGRhdGE6IGFueSwgZXZlbnQ6IFNjaGVtYVJpZ2h0Q2xpY2spIHtcclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBldmVudC5rZXksIGRhdGE6IGRhdGEgfTtcclxuICAgIHRoaXMub25JdGVtUmlnaHRDbGljay5lbWl0KHJlc3VsdCk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUVudGVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGlmIChrZXkua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID09PSB0aGlzLnNvcnRlZFRhYmxlRGF0YS5sZW5ndGggLSAxKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPCB0aGlzLnNvcnRlZFRhYmxlRGF0YS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4Kys7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydGVkVGFibGVEYXRhW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdO1xyXG4gICAgICAgICAgZG9jdW1lbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgICAgICAgICd0YWJsZVJvd18nICsgdGhpcy5zYWx0ICsgJ18nICsgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleS5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4LS07XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydGVkVGFibGVEYXRhW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdO1xyXG4gICAgICAgICAgZG9jdW1lbnRcclxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgICAgICAgICd0YWJsZVJvd18nICsgdGhpcy5zYWx0ICsgJ18nICsgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleS5hbHRLZXkpIHtcclxuICAgICAgICBjb25zdCBhY3Rpb25CdXR0b25zOiBhbnkgPSB0aGlzLmNvbHVtbnNTY2hlbWEuZmluZChcclxuICAgICAgICAgIChzY2hlbWE6IGFueSkgPT4gc2NoZW1hLnR5cGUgPT09IENPTFVNTlNfVFlQRVMuQUNUSU9OX0JVVFRPTlMsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgYWN0aW9uQnV0dG9ucy5kYXRhLmZvckVhY2goKGFjdGlvbkJ1dHRvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoYWN0aW9uQnV0dG9uLmtleWJvYXJkU2hvcnRjdXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICAgICAgICdeKCcgKyBhY3Rpb25CdXR0b24ua2V5Ym9hcmRTaG9ydGN1dCArICcpJCcsXHJcbiAgICAgICAgICAgICAgJ2knLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAocmVnZXgudGVzdChrZXkua2V5KSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1uQ2xpY2tlZCh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnNlbGVjdGVkSXRlbSxcclxuICAgICAgICAgICAgICAgIGtleTogYWN0aW9uQnV0dG9uLmtleSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgb25JdGVtU2VsZWN0KGRhdGE6IGFueSwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGluZGV4O1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhO1xyXG4gICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICB9XHJcblxyXG4gIGNvbHVtbkNsaWNrZWQodmFsOiBhbnkpIHtcclxuICAgIHRoaXMub25Db2x1bW5DbGlja2VkLmVtaXQodmFsKTtcclxuICB9XHJcbiAgY29sdW1uVmFsdWVDaGFuZ2VkKHZhbDogYW55KSB7XHJcbiAgICB0aGlzLm9uQ29sdW1uVmFsdWVDaGFuZ2VkLmVtaXQodmFsKTtcclxuICB9XHJcbiAgc29ydEJ5SGVhZGVyKGNvbHVtbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zb3J0RGV0YWlsICYmIHRoaXMuc29ydERldGFpbC5rZXkgPT0gY29sdW1uLmtleSkge1xyXG4gICAgICBpZiAodGhpcy5zb3J0RGV0YWlsLnNvcnQgPT0gJ2Rlc2MnKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGV0YWlsID0geyBrZXk6IGNvbHVtbi5rZXksIHNvcnQ6ICdhc2MnIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zb3J0RGV0YWlsID0geyBrZXk6IGNvbHVtbi5rZXksIHNvcnQ6ICdkZXNjJyB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnREZXRhaWwgPSB7IGtleTogY29sdW1uLmtleSwgc29ydDogJ2FzYycgfTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgY29sdW1uLnR5cGUgPT0gQ09MVU1OU19UWVBFUy5URVhUIHx8XHJcbiAgICAgIGNvbHVtbi50eXBlID09IENPTFVNTlNfVFlQRVMuTlVNQkVSXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zb3J0ZWRUYWJsZURhdGEgPSBvcmRlckJ5KFxyXG4gICAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhLFxyXG4gICAgICAgIFtjb2x1bW4ua2V5XSxcclxuICAgICAgICBbdGhpcy5zb3J0RGV0YWlsLnNvcnRdLFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PSBDT0xVTU5TX1RZUEVTLlNFTEVDVE9SKSB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gb3JkZXJCeShcclxuICAgICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YSxcclxuICAgICAgICBbKGMpID0+IGNbY29sdW1uLmtleV1bY29sdW1uLmRhdGEua2V5XV0sXHJcbiAgICAgICAgW3RoaXMuc29ydERldGFpbC5zb3J0XSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gQ09MVU1OU19UWVBFUy5TSEFNU0lfREFURSkge1xyXG4gICAgICB0aGlzLnNvcnRlZFRhYmxlRGF0YSA9IG9yZGVyQnkoXHJcbiAgICAgICAgdGhpcy5zb3J0ZWRUYWJsZURhdGEsXHJcbiAgICAgICAgWyhjKSA9PiBuZXcgRGF0ZShjW2NvbHVtbi5rZXldKS5nZXRUaW1lKCldLFxyXG4gICAgICAgIFt0aGlzLnNvcnREZXRhaWwuc29ydF0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3RpdmVDb2x1bW5zU2NoZW1hKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnNTY2hlbWEuZmlsdGVyKFxyXG4gICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5hY3RpdmUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4uYWN0aXZlLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRhYmxlRGF0YUZpbHRlcmVkKHRleHQ6IFN0cmluZyB8IGJvb2xlYW4sIGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbnNTY2hlbWEubWFwKChjb2x1bW5TY2hlbWE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sdW1uU2NoZW1hLmtleSA9PT0gY29sdW1uLmtleSkge1xyXG4gICAgICAgIGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb2x1bW5TY2hlbWE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudGFibGVEYXRhLnN1YnNjcmliZSgodGFibGVEYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuc29ydGVkVGFibGVEYXRhID0gdGFibGVEYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zU2NoZW1hLmZvckVhY2goKGNvbHVtblNjaGVtYTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbHVtblNjaGVtYS50eXBlID09PSB0aGlzLmNvbHVtbnNUeXBlcy5ST1dfU0VMRUNUT1IgfHxcclxuICAgICAgICAgICAgY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLkFDVElPTiB8fFxyXG4gICAgICAgICAgICBjb2x1bW5TY2hlbWEudHlwZSA9PT0gdGhpcy5jb2x1bW5zVHlwZXMuQUNUSU9OX0JVVFRPTlMgfHxcclxuICAgICAgICAgICAgY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICFyZXN1bHRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLlNFTEVDVE9SKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbY29sdW1uU2NoZW1hLmtleV1bY29sdW1uU2NoZW1hLmRhdGEua2V5XVxyXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLkRBVEUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSBkYXRhW2NvbHVtblNjaGVtYS5rZXldXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICBVdGlsLnNoYW1zaVRvTWlsYWRpKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAnWVlZWS1NTS1ERCcsXHJcbiAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtblNjaGVtYS50eXBlID09PSB0aGlzLmNvbHVtbnNUeXBlcy5NVUxUSV9DT0xVTU4pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gY29sdW1uU2NoZW1hLmNvbHVtbnMuc29tZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbaXRlbS5rZXldW2l0ZW0uZGF0YS5rZXldXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXI/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uU2NoZW1hLnR5cGUgPT09IHRoaXMuY29sdW1uc1R5cGVzLlNUQVRVUykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uU2NoZW1hLmNvbHVtbkZpbHRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbY29sdW1uU2NoZW1hLmtleV0gPT09IGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbY29sdW1uU2NoZW1hLmtleV1cclxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGNvbHVtblNjaGVtYS5jb2x1bW5GaWx0ZXI/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByYW5kb21TdHJpbmcobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKClcclxuICAgICAgLnRvU3RyaW5nKDM2KVxyXG4gICAgICAuc3Vic3RyaW5nKDIsIDIgKyBsZW5ndGgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicC0yIG92ZXJmbG93LXgtYXV0byByZWxhdGl2ZVwiPlxyXG4gIDx0YWJsZVxyXG4gICAgI3RhYmxlXHJcbiAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgKm5nSWY9XCIhaXNSdW5uaW5nT25TbWFsbFNjcmVlbiB8fCAhcmVzcG9uc2l2ZTsgZWxzZSBzbWFsbERldmljZUNhcmRcIlxyXG4gID5cclxuICAgIDx0cj5cclxuICAgICAgPHRoXHJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWNlbnRlclwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhY3RpdmVDb2x1bW5zU2NoZW1hKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGNvbHVtbj8ud2lkdGggKyAncHgnIH1cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJncmlkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltjYW5GaWx0ZXIgPyAnZ3JpZC1yb3dzLTInIDogJ2dyaWQtcm93cy0xJ11cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC0yIHJlbGF0aXZlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRCeUhlYWRlcihjb2x1bW4pXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgIG1pbldpZHRoOlxyXG4gICAgICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09IGNvbHVtbnNUeXBlcy5BQ1RJT05fQlVUVE9OU1xyXG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi5kYXRhLmxlbmd0aCAqIDMwICsgJ3B4J1xyXG4gICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gY29sdW1uc1R5cGVzLkFDVElPTl9CVVRUT05TXHJcbiAgICAgICAgICAgICAgICAgID8gJ2lubGluZS1ibG9jaydcclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgID57eyBjb2x1bW4ubGFiZWwgfX1cclxuICAgICAgICAgICAgPGFwcC1zb3J0LWRvd24taWNvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uIHctMiBoLTIgaW5saW5lLWJsb2NrIGFic29sdXRlIHRvcC0zIHJpZ2h0LVstM3B4XVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHNvcnREZXRhaWw/LmtleSA9PSBjb2x1bW4ua2V5ICYmIHNvcnREZXRhaWw/LnNvcnQgPT09ICdhc2MnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvYXBwLXNvcnQtZG93bi1pY29uPlxyXG4gICAgICAgICAgICA8YXBwLXNvcnQtdXAtaWNvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uIHctMiBoLTIgaW5saW5lLWJsb2NrIGFic29sdXRlIHRvcC0zIHJpZ2h0LVstM3B4XVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHNvcnREZXRhaWw/LmtleSA9PSBjb2x1bW4ua2V5ICYmIHNvcnREZXRhaWw/LnNvcnQgPT09ICdkZXNjJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L2FwcC1zb3J0LXVwLWljb24+XHJcbiAgICAgICAgICAgIDxhcHAtc29ydC1zb2xpZC1pY29uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gdy0yIGgtMiBpbmxpbmUtYmxvY2sgYWJzb2x1dGUgdG9wLTMgcmlnaHQtWy0zcHhdXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInNvcnREZXRhaWw/LmtleSAhPT0gY29sdW1uLmtleVwiXHJcbiAgICAgICAgICAgID48L2FwcC1zb3J0LXNvbGlkLWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8Y29yZS1jb2x1bW4tZGF0ZS1waWNrZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBjYW5GaWx0ZXIgJiZcclxuICAgICAgICAgICAgICAoY29sdW1uLnR5cGUgPT0gY29sdW1uc1R5cGVzLlNIQU1TSV9EQVRFIHx8XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4udHlwZSA9PSBjb2x1bW5zVHlwZXMuREFURSlcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW2NhblNlbGVjdFRvZGF5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwidGFibGVEYXRhRmlsdGVyZWQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvY29yZS1jb2x1bW4tZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICA8Y29yZS1jb2x1bW4taW5wdXRcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBjYW5GaWx0ZXIgJiZcclxuICAgICAgICAgICAgICBjb2x1bW4udHlwZSAhPT0gY29sdW1uc1R5cGVzLkFDVElPTiAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuQ09MT1IgJiZcclxuICAgICAgICAgICAgICBjb2x1bW4udHlwZSAhPT0gY29sdW1uc1R5cGVzLlNUQVRVUyAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuU0hBTVNJX0RBVEUgJiZcclxuICAgICAgICAgICAgICBjb2x1bW4udHlwZSAhPT0gY29sdW1uc1R5cGVzLlJPV19TRUxFQ1RPUiAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuREFURSAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuU1RBVFVTX0FDVElWRSAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuQUNUSU9OX0JVVFRPTlNcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInRhYmxlRGF0YUZpbHRlcmVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICA+PC9jb3JlLWNvbHVtbi1pbnB1dD5cclxuICAgICAgICAgIDxjb3JlLWNvbHVtbi1zZWxlY3RvclxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIChjYW5GaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT0gY29sdW1uc1R5cGVzLlNUQVRVUykgfHxcclxuICAgICAgICAgICAgICAoY2FuRmlsdGVyICYmIGNvbHVtbi50eXBlID09IGNvbHVtbnNUeXBlcy5TVEFUVVNfQUNUSVZFKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbdGl0bGVLZXldPVwiJ3RpdGxlJ1wiXHJcbiAgICAgICAgICAgIFt2YWx1ZUtleV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgW2l0ZW1zXT1cIlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlID09IGNvbHVtbnNUeXBlcy5TVEFUVVNcclxuICAgICAgICAgICAgICAgID8gQUNUSVZFX09QVElPTlNcclxuICAgICAgICAgICAgICAgIDogWUVTX05PX09QVElPTlNcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKG9uSXRlbVNlbGVjdGVkKT1cInRhYmxlRGF0YUZpbHRlcmVkKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICA+PC9jb3JlLWNvbHVtbi1zZWxlY3Rvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc29ydGVkVGFibGVEYXRhOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgIFtpZF09XCIndGFibGVSb3dfJyArIHNhbHQgKyAnXycgKyBpXCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0LWl0ZW0nOiBkYXRhLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkIH1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtU2VsZWN0KGRhdGEsIGksICRldmVudClcIlxyXG4gICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCRldmVudCwgZGF0YSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgID5cclxuICAgICAgPHRkXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhY3RpdmVDb2x1bW5zU2NoZW1hKClcIlxyXG4gICAgICAgIFtjbGFzc109XCJzdHlsZUZpbHRlciA/IHN0eWxlRmlsdGVyKGRhdGEpIDogJydcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGFwcC1jb3JlLXRhYmxlLWNvbHVtbi1tYW5hZ2VyXHJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlICE9IGNvbHVtbnNUeXBlcy5NVUxUSV9DT0xVTU47IGVsc2UgZWxzZUJsb2NrXCJcclxuICAgICAgICAgIFtyb3dTZWxlY3Rvcl09XCJyb3dTZWxlY3RvclwiXHJcbiAgICAgICAgICAob25Db2x1bW5DbGlja2VkKT1cImNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAob25Db2x1bW5WYWx1ZUNoYW5nZWQpPVwiY29sdW1uVmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgW2FsbFRhYmxlRGF0YV09XCJzb3J0ZWRUYWJsZURhdGFcIlxyXG4gICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgPjwvYXBwLWNvcmUtdGFibGUtY29sdW1uLW1hbmFnZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XHJcbiAgICAgICAgICA8YXBwLWNvcmUtdGFibGUtY29sdW1uLW1hbmFnZXJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgW3Jvd1NlbGVjdG9yXT1cInJvd1NlbGVjdG9yXCJcclxuICAgICAgICAgICAgKG9uQ29sdW1uQ2xpY2tlZCk9XCJjb2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgW2FsbFRhYmxlRGF0YV09XCJzb3J0ZWRUYWJsZURhdGFcIlxyXG4gICAgICAgICAgICBbY29sdW1uXT1cImNoaWxkQ29sdW1uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID4gMFwiPi08L3NwYW4+XHJcbiAgICAgICAgICA8L2FwcC1jb3JlLXRhYmxlLWNvbHVtbi1tYW5hZ2VyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXNlck1lbnUgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWRcIj5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInVzZXItbWVudVwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInctOTYgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbHVtbnNTY2hlbWFSaWdodENsaWNrXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmlnaHRJdGVtQ2xpY2soZGF0YSwgaXRlbSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPG5nLXRlbXBsYXRlICNzbWFsbERldmljZUNhcmQ+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8Y29yZS1jYXJkXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc29ydGVkVGFibGVEYXRhXCJcclxuICAgICAgICBbY2FyZENsYXNzXT1cIidiYWNrZ3JvdW5kLWNhcmQgbS00IHAtNCByZWxhdGl2ZSdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJsZWFkaW5nLThcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBhY3RpdmVDb2x1bW5zU2NoZW1hKClcIlxyXG4gICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gY29sdW1uc1R5cGVzLkFDVElPTl9CVVRUT05TXHJcbiAgICAgICAgICAgICAgPyAnYWN0aW9uQnV0dG9ucydcclxuICAgICAgICAgICAgICA6IGNvbHVtbi50eXBlID09PSBjb2x1bW5zVHlwZXMuUk9XX1NFTEVDVE9SXHJcbiAgICAgICAgICAgICAgICA/ICdzZWxlY3RSb3cnXHJcbiAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgIT09IGNvbHVtbnNUeXBlcy5BQ1RJT05fQlVUVE9OUyAmJlxyXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9PSBjb2x1bW5zVHlwZXMuUk9XX1NFTEVDVE9SXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2Vjb25kYXJ5LXRleHQtY29sb3JcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX0gOlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmltYXJ5LXRleHQtY29sb3IgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICA8YXBwLWNvcmUtdGFibGUtY2FyZC1tYW5hZ2VyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbHVtbi50eXBlICE9IGNvbHVtbnNUeXBlcy5NVUxUSV9DT0xVTU47XHJcbiAgICAgICAgICAgICAgICBlbHNlIGNhcmRNYW5hZ2VyRWxzZUJsb2NrXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbcm93U2VsZWN0b3JdPVwicm93U2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgIChvbkNvbHVtbkNsaWNrZWQpPVwiY29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICBbYWxsVGFibGVEYXRhXT1cInNvcnRlZFRhYmxlRGF0YVwiXHJcbiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvYXBwLWNvcmUtdGFibGUtY2FyZC1tYW5hZ2VyPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkTWFuYWdlckVsc2VCbG9jaz5cclxuICAgICAgICAgICAgICA8YXBwLWNvcmUtdGFibGUtY2FyZC1tYW5hZ2VyXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgW3Jvd1NlbGVjdG9yXT1cInJvd1NlbGVjdG9yXCJcclxuICAgICAgICAgICAgICAgIChvbkNvbHVtbkNsaWNrZWQpPVwiY29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgW2FsbFRhYmxlRGF0YV09XCJzb3J0ZWRUYWJsZURhdGFcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjaGlsZENvbHVtblwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID4gMFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9hcHAtY29yZS10YWJsZS1jYXJkLW1hbmFnZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvY29yZS1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8Y29yZS10YWJsZS1uby1jb250ZW50XHJcbiAgICAqbmdJZj1cIiFsb2FkaW5nXCJcclxuICAgIFt0YWJsZURhdGFdPVwic29ydGVkVGFibGVEYXRhXCJcclxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gID48L2NvcmUtdGFibGUtbm8tY29udGVudD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmFsY29uLWxpYi9zcmMvbGliL2NvcmUtdGFibGUvY29yZS10YWJsZS9jb3JlLXRhYmxlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDT0xVTU5TX1RZUEVTIH0gZnJvbSAnLi4vLi4vZmFsY29uVHlwZXMnO1xyXG5cclxudHlwZSBDb2x1bW5UeXBlVGV4dCA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLlRFWFQ7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBjb3B5VG9DbGlwYm9hcmQ/OiBib29sZWFuO1xyXG4gIGVkaXRhYmxlPzogYm9vbGVhbjtcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIGRhdGE/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmFsY29uLWxpYi9zcmMvbGliL2NvcmUtdGFibGUvY29yZS10YWJsZS9jb3JlLXRhYmxlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDT0xVTU5TX1RZUEVTIH0gZnJvbSAnLi4vLi4vZmFsY29uVHlwZXMnO1xyXG5cclxudHlwZSBDb2x1bW5UeXBlVGV4dCA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLlRFWFQ7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBjb3B5VG9DbGlwYm9hcmQ/OiBib29sZWFuO1xyXG4gIGVkaXRhYmxlPzogYm9vbGVhbjtcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIGRhdGE/OiB7XHJcbiAgICAvKiogZGVmYXVsdCB2YWx1ZSBpcyAgdHJ1ZSBhbmQgbnVtYmVycyB0dXJuIHRvIHBlcnNpYW4gRGlnaXRzICovXHJcbiAgICBlbkRpZ2l0c1RvRmE6IGJvb2xlYW47XHJcbiAgfTtcclxufTtcclxudHlwZSBDb2x1bW5UeXBlUHJlID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuUFJFO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgY29weVRvQ2xpcGJvYXJkPzogYm9vbGVhbjtcclxuICBlZGl0YWJsZT86IGJvb2xlYW47XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBkYXRhPzoge1xyXG4gICAgLyoqIGRlZmF1bHQgdmFsdWUgaXMgIHRydWUgYW5kIG51bWJlcnMgdHVybiB0byBwZXJzaWFuIERpZ2l0cyAqL1xyXG4gICAgZW5EaWdpdHNUb0ZhOiBib29sZWFuO1xyXG4gIH07XHJcbn07XHJcbnR5cGUgQ29sdW1uVHlwZVNoYW1zaURhdGUgPSB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdHlwZTogQ09MVU1OU19UWVBFUy5TSEFNU0lfREFURTtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XHJcbiAgZWRpdGFibGU/OiBib29sZWFuO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgZGF0YT86IHtcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcclxuICB9O1xyXG59O1xyXG50eXBlIENvbHVtblR5cGVEYXRlID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuREFURTtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XHJcbiAgZWRpdGFibGU/OiBib29sZWFuO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgZGF0YT86IHtcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcclxuICB9O1xyXG59O1xyXG50eXBlIENvbHVtblR5cGVTZWxlY3RvciA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLlNFTEVDVE9SO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBkYXRhOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICB9O1xyXG4gIGNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XHJcbiAgZWRpdGFibGU/OiBmYWxzZTtcclxufTtcclxudHlwZSBDb2x1bW5UeXBlU2VsZWN0b3JFZGl0YWJsZSA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLlNFTEVDVE9SO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBkYXRhOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgICBlZGl0YWJsZURhdGE6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIH07XHJcbiAgY29weVRvQ2xpcGJvYXJkPzogYm9vbGVhbjtcclxuICBlZGl0YWJsZTogdHJ1ZTtcclxufTtcclxudHlwZSBDb2x1bW5UeXBlU3RhdHVzID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuU1RBVFVTIHwgQ09MVU1OU19UWVBFUy5TVEFUVVNfQUNUSVZFO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBlZGl0YWJsZT86IGJvb2xlYW47XHJcbn07XHJcbnR5cGUgQ29sdW1uVHlwZUNvbG9yID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuQ09MT1I7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIGVkaXRhYmxlPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZUFjdGlvbiA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLkFDVElPTjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgdGl0bGU6IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbHVtblR5cGVBY3Rpb25CdXR0b25zID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuQUNUSU9OX0JVVFRPTlM7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIHdpZHRoPzogbnVtYmVyO1xyXG4gIGRhdGE6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGZpbHRlcj86IGFueTtcclxuICAgIGNvbXBvbmVudDogYW55O1xyXG4gICAga2V5Ym9hcmRTaG9ydGN1dD86IHN0cmluZztcclxuICAgIGNoYW5nZUljb24/OiB7XHJcbiAgICAgIGNvbXBvbmVudDogYW55O1xyXG4gICAgICBrZXk6IHN0cmluZztcclxuICAgIH07XHJcbiAgfVtdO1xyXG59O1xyXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlTnVtYmVyID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuTlVNQkVSO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgY29weVRvQ2xpcGJvYXJkPzogYm9vbGVhbjtcclxuICBlZGl0YWJsZT86IGJvb2xlYW47XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBjYW5Db2xvcmZ1bE51bWJlcj86IGJvb2xlYW47XHJcbiAgZGF0YT86IHtcclxuICAgIC8qKiBkZWZhdWx0IHZhbHVlIGlzICB0cnVlIGFuZCBudW1iZXJzIHR1cm4gdG8gcGVyc2lhbiBEaWdpdHMgKi9cclxuICAgIGVuRGlnaXRzVG9GYT86IGJvb2xlYW47XHJcbiAgICAvKiogZGVmYXVsdCB2YWx1ZSBpcyAgdHJ1ZSAgICovXHJcbiAgICBjYW5TaG93VG9tYW5JblRvb2xUaXA/OiBib29sZWFuO1xyXG4gICAgLyoqIGRlZmF1bHQgdmFsdWUgaXMgIGZhbHNlICAqL1xyXG4gICAgY2FuU2hvd0lSUj86IGJvb2xlYW47XHJcbiAgICAvKiogZGVmYXVsdCB2YWx1ZSBpcyAgdHJ1ZSAgICovXHJcbiAgICBjYW5TcGxpdE51bWJlcnM/OiBib29sZWFuO1xyXG4gICAgLyoqIGRlZmF1bHQgdmFsdWUgaXMgIHRydWUgICAqL1xyXG4gICAgY2FuU2hvd1dvcmRJblRvb2xUaXA/OiBib29sZWFuO1xyXG4gIH07XHJcbn07XHJcbmV4cG9ydCB0eXBlIENvbHVtblR5cGVQZWxhayA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLlBFTEFLO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZURldGFpbFZpZXdlckZvclJlcG9ydCA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB0eXBlOiBDT0xVTU5TX1RZUEVTLk5VTUJFUjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgZGF0YT86IHtcclxuICAgIGRldGFpbFZpZXdlcnM6IHN0cmluZ1tdO1xyXG4gICAga2V5VHlwZTogc3RyaW5nO1xyXG4gICAgb25DbGljazogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZVJvd1NlbGVjdG9yID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuUk9XX1NFTEVDVE9SO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBkYXRhOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZU11bHRpQ29sdW1uID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIHR5cGU6IENPTFVNTlNfVFlQRVMuTVVMVElfQ09MVU1OO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgYWN0aXZlPzogYm9vbGVhbjtcclxuICBjb2x1bW5zOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHR5cGU6IENPTFVNTlNfVFlQRVMuU0VMRUNUT1I7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgZGF0YToge1xyXG4gICAgICBrZXk6IHN0cmluZztcclxuICAgIH07XHJcbiAgfVtdO1xyXG59O1xyXG5leHBvcnQgdHlwZSBDb2x1bW5zU2NoZW1hID1cclxuICB8IENvbHVtblR5cGVUZXh0XHJcbiAgfCBDb2x1bW5UeXBlUHJlXHJcbiAgfCBDb2x1bW5UeXBlU2VsZWN0b3JcclxuICB8IENvbHVtblR5cGVTZWxlY3RvckVkaXRhYmxlXHJcbiAgfCBDb2x1bW5UeXBlU3RhdHVzXHJcbiAgfCBDb2x1bW5UeXBlQ29sb3JcclxuICB8IENvbHVtblR5cGVBY3Rpb25cclxuICB8IENvbHVtblR5cGVBY3Rpb25CdXR0b25zXHJcbiAgfCBDb2x1bW5UeXBlTnVtYmVyXHJcbiAgfCBDb2x1bW5UeXBlUm93U2VsZWN0b3JcclxuICB8IENvbHVtblR5cGVNdWx0aUNvbHVtblxyXG4gIHwgQ29sdW1uVHlwZVBlbGFrXHJcbiAgfCBDb2x1bW5UeXBlU2hhbXNpRGF0ZVxyXG4gIHwgQ29sdW1uVHlwZURhdGU7XHJcblxyXG5leHBvcnQgdHlwZSBTY2hlbWFSaWdodENsaWNrID0ge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbn07XHJcbiJdfQ==
|