@libs-ui/components-inputs-valid 0.2.28 → 0.2.30-6.1
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/interfaces/valid.interface.mjs +1 -1
- package/esm2022/valid.component.mjs +30 -26
- package/fesm2022/libs-ui-components-inputs-valid.mjs +30 -26
- package/fesm2022/libs-ui-components-inputs-valid.mjs.map +1 -1
- package/interfaces/valid.interface.d.ts +5 -8
- package/package.json +12 -3
- package/valid.component.d.ts +16 -14
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvaW50ZXJmYWNlcy92YWxpZC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IElNZXNzYWdlVHJhbnNsYXRlIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRSZXF1aXJlZCBleHRlbmRzIElNZXNzYWdlVHJhbnNsYXRlIHtcbiAgaXNSZXF1aXJlZDogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkUGF0dGVybiBleHRlbmRzIElNZXNzYWdlVHJhbnNsYXRlIHtcbiAgcGF0dGVybjogYW55O1xuICB2YWx1ZVBhdHRlcm5TaG93RXJyb3I/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZExlbmd0aCBleHRlbmRzIElNZXNzYWdlVHJhbnNsYXRlIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlucHV0VmFsaWRVbml0Q29uZmlnIHtcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkQ29uZmlybVBhc3N3b3JkIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBpc05vdE1hdGNoPzogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dFVuaXQge1xuICB0eXBlPzogYW55O1xuICBsYWJlbD86IHN0cmluZztcbiAgdmFsdWVUeXBlPzogc3RyaW5nO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNsYXNzTGVmdD86IHN0cmluZztcbiAgY2xhc3NSaWdodD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVFlQRV9GVU5DVElPTl9JTlBVVF9WQUxJRCA9ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPElNZXNzYWdlVHJhbnNsYXRlPjsiXX0=
|
|
@@ -5,18 +5,19 @@ import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs
|
|
|
5
5
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
6
6
|
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
7
7
|
import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
|
|
8
|
-
import { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID,
|
|
8
|
+
import { ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, get, isNil, set, viewDataNumberByLanguage } from '@libs-ui/utils';
|
|
9
9
|
import { TranslateModule } from '@ngx-translate/core';
|
|
10
|
+
import { LibsUiPipesGetValueOfObjectPipe } from '@libs-ui/pipes-get-value-of-object';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
import * as i1 from "@ngx-translate/core";
|
|
12
13
|
export class LibsUiComponentsInputsValidComponent {
|
|
13
|
-
|
|
14
|
+
// #region PROPERTY
|
|
14
15
|
singleError = signal({ message: undefined, interpolateParams: undefined });
|
|
15
16
|
rectLeft = signal(undefined);
|
|
16
17
|
timer = signal(0);
|
|
17
18
|
timerValueChange = signal(0);
|
|
18
19
|
functionControlInput;
|
|
19
|
-
|
|
20
|
+
// #region INPUT
|
|
20
21
|
item = model.required({});
|
|
21
22
|
labelConfig = input();
|
|
22
23
|
emitEmptyInDataTypeNumber = input();
|
|
@@ -28,9 +29,10 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
28
29
|
disableComponentSelectItem = input();
|
|
29
30
|
tagInput = input();
|
|
30
31
|
dataType = input();
|
|
32
|
+
typeInput = input();
|
|
33
|
+
modeInput = input();
|
|
31
34
|
resetAutoCompletePassword = input();
|
|
32
35
|
textAreaEnterNotNewLine = input();
|
|
33
|
-
hiddenContent = input(); // sử dụng để set type cho input dạng text hay password
|
|
34
36
|
fixedFloat = input();
|
|
35
37
|
acceptNegativeValue = input();
|
|
36
38
|
valueUpDownNumber = input();
|
|
@@ -66,6 +68,11 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
66
68
|
configUnitRight = input({
|
|
67
69
|
fieldKey: 'id',
|
|
68
70
|
fieldLabel: 'label',
|
|
71
|
+
}, {
|
|
72
|
+
transform: value => value ?? {
|
|
73
|
+
fieldKey: 'id',
|
|
74
|
+
fieldLabel: 'label',
|
|
75
|
+
}
|
|
69
76
|
});
|
|
70
77
|
keySelectedUnitRight = input();
|
|
71
78
|
maxValueNumber = input();
|
|
@@ -73,7 +80,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
73
80
|
ignoreContentLeft = input();
|
|
74
81
|
ignoreContentRight = input();
|
|
75
82
|
isBaselineStyle = input(); // align-items-baseline dùng khi căn input thẳng hàng với tất cả các phần khác dù có validate hay bất cứ 1 cái gì
|
|
76
|
-
valuePatternShowError = input(); // mặc định khi test pattern trả
|
|
83
|
+
valuePatternShowError = input(false, { transform: value => value ?? false }); // mặc định khi test pattern trả về giá trị bằng false sẽ báo lỗi
|
|
77
84
|
validPattern = input();
|
|
78
85
|
validRequired = input();
|
|
79
86
|
validMinLength = input();
|
|
@@ -95,7 +102,8 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
95
102
|
ignoreUnitRightClassReadOnly = input();
|
|
96
103
|
paddingRightCustomSpecific = input(); // fix paddingRight count ko auto tính #52185
|
|
97
104
|
focusTimeOut = input();
|
|
98
|
-
|
|
105
|
+
debounceTimeValidate = input(0, { transform: value => value ?? 0 });
|
|
106
|
+
// #region OUTPUT
|
|
99
107
|
outValueChange = output();
|
|
100
108
|
outSelect = output();
|
|
101
109
|
outIconLeft = output();
|
|
@@ -128,7 +136,8 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
128
136
|
resetValue: async () => await this.functionControlInput?.resetValue(),
|
|
129
137
|
currentStateIsValid: this.currentStateIsValid.bind(this),
|
|
130
138
|
getElementValue: this.getElementValue.bind(this),
|
|
131
|
-
checkAndDisableUpDownButton: async (value) => await this.functionControlInput?.checkAndDisableUpDownButton(value)
|
|
139
|
+
checkAndDisableUpDownButton: async (value) => await this.functionControlInput?.checkAndDisableUpDownButton(value),
|
|
140
|
+
selectAllContent: async () => await this.functionControlInput?.selectAllContent()
|
|
132
141
|
});
|
|
133
142
|
}
|
|
134
143
|
/* FUNCTIONS */
|
|
@@ -142,19 +151,13 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
142
151
|
this.outSelect.emit(value);
|
|
143
152
|
}
|
|
144
153
|
handlerValueChange(value) {
|
|
145
|
-
this.item.
|
|
146
|
-
|
|
147
|
-
});
|
|
148
|
-
if (!this.functionValid()) {
|
|
149
|
-
this.validate(value);
|
|
150
|
-
this.outValueChange.emit(value);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
154
|
+
set(this.item(), this.fieldNameBind(), value);
|
|
155
|
+
// Support trường hợp call API hoặc validate cần xử lý check tốn nhiều thời gian thì cần debound time để tránh call liên tục
|
|
153
156
|
clearTimeout(this.timerValueChange());
|
|
154
157
|
this.timerValueChange.set(setTimeout(() => {
|
|
155
158
|
this.validate(value);
|
|
156
159
|
this.outValueChange.emit(value);
|
|
157
|
-
},
|
|
160
|
+
}, this.debounceTimeValidate()));
|
|
158
161
|
}
|
|
159
162
|
handlerEventIconLeft(eventName) {
|
|
160
163
|
this.outIconLeft.emit(eventName);
|
|
@@ -184,7 +187,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
184
187
|
this.singleError.set({ message: (this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID), interpolateParams: (this.validRequired()?.interpolateParams || {}) });
|
|
185
188
|
return;
|
|
186
189
|
}
|
|
187
|
-
if (typeof value === 'string' && this.validMinLength()?.message && this.validMinLength?.length > value.length) {
|
|
190
|
+
if (typeof value === 'string' && this.validMinLength()?.message && (this.validMinLength()?.length || 0) > value.length) {
|
|
188
191
|
this.singleError.set({ message: (this.validMinLength()?.message || ERROR_MESSAGE_MIN_LENGTH), interpolateParams: (this.validMinLength()?.interpolateParams || {}) });
|
|
189
192
|
return;
|
|
190
193
|
}
|
|
@@ -200,17 +203,17 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
200
203
|
}
|
|
201
204
|
const patternStr = pattern.substring(1, indexOfSlash);
|
|
202
205
|
const patternFlag = pattern.substring(indexOfSlash + 1, pattern.length);
|
|
203
|
-
if (new RegExp(patternStr, patternFlag).test(value) === (valid.valuePatternShowError ?? this.valuePatternShowError)) {
|
|
206
|
+
if (new RegExp(patternStr, patternFlag).test(value) === (valid.valuePatternShowError ?? this.valuePatternShowError())) {
|
|
204
207
|
this.singleError.set({ message: (valid.message || ERROR_MESSAGE_PATTEN_VALID), interpolateParams: (valid.interpolateParams || {}) });
|
|
205
208
|
return;
|
|
206
209
|
}
|
|
207
210
|
}
|
|
208
211
|
}
|
|
209
|
-
if (this.validMinValue() && typeof value === 'number' && typeof this.minValueNumber() === 'number' && value < (this.minValueNumber()
|
|
212
|
+
if (this.validMinValue() && typeof value === 'number' && typeof this.minValueNumber() === 'number' && value < (this.minValueNumber() ?? Number.MIN_SAFE_INTEGER)) {
|
|
210
213
|
this.singleError.set({ message: (this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID), interpolateParams: (this.validMinValue()?.interpolateParams || { value: this.minValueNumber() }) });
|
|
211
214
|
return;
|
|
212
215
|
}
|
|
213
|
-
if ((this.ignoreBlockInputMaxValue() || this.validMaxValue()?.message) && typeof value === 'number' && typeof this.maxValueNumber() === 'number' && value > (this.maxValueNumber()
|
|
216
|
+
if ((this.ignoreBlockInputMaxValue() || this.validMaxValue()?.message) && typeof value === 'number' && typeof this.maxValueNumber() === 'number' && value > (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {
|
|
214
217
|
this.singleError.set({ message: (this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID), interpolateParams: (this.validMaxValue()?.interpolateParams || { value: this.maxValueNumber() }) });
|
|
215
218
|
return;
|
|
216
219
|
}
|
|
@@ -232,7 +235,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
232
235
|
}
|
|
233
236
|
}
|
|
234
237
|
if (this.maxLength && typeof value === 'string' && (this.maxLength() || Number.MAX_SAFE_INTEGER) < value.length) {
|
|
235
|
-
this.singleError.set({ message: (this.validMaxLength()?.message || ERROR_MESSAGE_MAX_LENGTH), interpolateParams: (this.validMaxLength()?.interpolateParams || { number: this.maxLength }) });
|
|
238
|
+
this.singleError.set({ message: (this.validMaxLength()?.message || ERROR_MESSAGE_MAX_LENGTH), interpolateParams: (this.validMaxLength()?.interpolateParams || { number: this.maxLength() }) });
|
|
236
239
|
return;
|
|
237
240
|
}
|
|
238
241
|
if (!this.functionValid()) {
|
|
@@ -250,7 +253,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
250
253
|
return true;
|
|
251
254
|
}
|
|
252
255
|
clearTimeout(this.timerValueChange());
|
|
253
|
-
await this.validate(this.item
|
|
256
|
+
await this.validate(get(this.item, this.fieldNameBind()));
|
|
254
257
|
return this.singleError().message ? false : true;
|
|
255
258
|
}
|
|
256
259
|
async setMessageError(message) {
|
|
@@ -277,7 +280,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
277
280
|
clearTimeout(this.timerValueChange());
|
|
278
281
|
}
|
|
279
282
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsValidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
280
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsValidComponent, isStandalone: true, selector: "libs_ui-components-inputs-valid", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, fieldNameBind: { classPropertyName: "fieldNameBind", publicName: "fieldNameBind", isSignal: true, isRequired: true, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, typeComponentSelectItem: { classPropertyName: "typeComponentSelectItem", publicName: "typeComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, valueComponentSelectItem: { classPropertyName: "valueComponentSelectItem", publicName: "valueComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, disableComponentSelectItem: { classPropertyName: "disableComponentSelectItem", publicName: "disableComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, hiddenContent: { classPropertyName: "hiddenContent", publicName: "hiddenContent", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, classIncludeInput: { classPropertyName: "classIncludeInput", publicName: "classIncludeInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowError: { classPropertyName: "ignoreShowError", publicName: "ignoreShowError", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, unitsLeft: { classPropertyName: "unitsLeft", publicName: "unitsLeft", isSignal: true, isRequired: false, transformFunction: null }, configUnitLeft: { classPropertyName: "configUnitLeft", publicName: "configUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitLeft: { classPropertyName: "keySelectedUnitLeft", publicName: "keySelectedUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, unitsRight: { classPropertyName: "unitsRight", publicName: "unitsRight", isSignal: true, isRequired: false, transformFunction: null }, configUnitRight: { classPropertyName: "configUnitRight", publicName: "configUnitRight", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitRight: { classPropertyName: "keySelectedUnitRight", publicName: "keySelectedUnitRight", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentLeft: { classPropertyName: "ignoreContentLeft", publicName: "ignoreContentLeft", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentRight: { classPropertyName: "ignoreContentRight", publicName: "ignoreContentRight", isSignal: true, isRequired: false, transformFunction: null }, isBaselineStyle: { classPropertyName: "isBaselineStyle", publicName: "isBaselineStyle", isSignal: true, isRequired: false, transformFunction: null }, valuePatternShowError: { classPropertyName: "valuePatternShowError", publicName: "valuePatternShowError", isSignal: true, isRequired: false, transformFunction: null }, validPattern: { classPropertyName: "validPattern", publicName: "validPattern", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, validMinValue: { classPropertyName: "validMinValue", publicName: "validMinValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxValue: { classPropertyName: "validMaxValue", publicName: "validMaxValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, functionValid: { classPropertyName: "functionValid", publicName: "functionValid", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, positionMessageErrorStartInput: { classPropertyName: "positionMessageErrorStartInput", publicName: "positionMessageErrorStartInput", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, classMessageErrorInclude: { classPropertyName: "classMessageErrorInclude", publicName: "classMessageErrorInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreUnitRightClassReadOnly: { classPropertyName: "ignoreUnitRightClassReadOnly", publicName: "ignoreUnitRightClassReadOnly", isSignal: true, isRequired: false, transformFunction: null }, paddingRightCustomSpecific: { classPropertyName: "paddingRightCustomSpecific", publicName: "paddingRightCustomSpecific", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outValueChange: "outValueChange", outSelect: "outSelect", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outClickButtonLabel: "outClickButtonLabel", outSwitchEventLabel: "outSwitchEventLabel", outLabelRightClick: "outLabelRightClick", outEnterInputEvent: "outEnterInputEvent", outHeightAreaChange: "outHeightAreaChange", outFunctionsControl: "outFunctionsControl", outFocusAndBlur: "outFocusAndBlur", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "elementLeftRef", first: true, predicate: ["elementLeftRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"item[fieldNameBind()]?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n\n <div [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem ==='checkbox') {\n <libs_ui-components-checkbox-single [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem ==='radio') {\n <libs_ui-components-radio-single [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitLeft().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n </div>\n }\n <libs_ui-components-inputs-input [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '')+(unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none':'')+(unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none':'')\"\n [hiddenContent]=\"hiddenContent() || false\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() :(validMaxValue()?.message ? true : false)\"\n [value]=\"item[fieldNameBind()]\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n @if (!ignoreContentRight()) {\n <div class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitRight().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n\n </div>\n @if (!!singleError().message && !ignoreShowError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]='rectLeft()?.width'\n [innerHtml]=\"(singleError().message || ' ')| translate:singleError().interpolateParams\">\n </span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #E6E7EA}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "hiddenContent", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabe", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
283
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsValidComponent, isStandalone: true, selector: "libs_ui-components-inputs-valid", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, emitEmptyInDataTypeNumber: { classPropertyName: "emitEmptyInDataTypeNumber", publicName: "emitEmptyInDataTypeNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreBlockInputMaxValue: { classPropertyName: "ignoreBlockInputMaxValue", publicName: "ignoreBlockInputMaxValue", isSignal: true, isRequired: false, transformFunction: null }, fieldNameBind: { classPropertyName: "fieldNameBind", publicName: "fieldNameBind", isSignal: true, isRequired: true, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, typeComponentSelectItem: { classPropertyName: "typeComponentSelectItem", publicName: "typeComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, valueComponentSelectItem: { classPropertyName: "valueComponentSelectItem", publicName: "valueComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, disableComponentSelectItem: { classPropertyName: "disableComponentSelectItem", publicName: "disableComponentSelectItem", isSignal: true, isRequired: false, transformFunction: null }, tagInput: { classPropertyName: "tagInput", publicName: "tagInput", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, typeInput: { classPropertyName: "typeInput", publicName: "typeInput", isSignal: true, isRequired: false, transformFunction: null }, modeInput: { classPropertyName: "modeInput", publicName: "modeInput", isSignal: true, isRequired: false, transformFunction: null }, resetAutoCompletePassword: { classPropertyName: "resetAutoCompletePassword", publicName: "resetAutoCompletePassword", isSignal: true, isRequired: false, transformFunction: null }, textAreaEnterNotNewLine: { classPropertyName: "textAreaEnterNotNewLine", publicName: "textAreaEnterNotNewLine", isSignal: true, isRequired: false, transformFunction: null }, fixedFloat: { classPropertyName: "fixedFloat", publicName: "fixedFloat", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreWidthInput100: { classPropertyName: "ignoreWidthInput100", publicName: "ignoreWidthInput100", isSignal: true, isRequired: false, transformFunction: null }, classIncludeInput: { classPropertyName: "classIncludeInput", publicName: "classIncludeInput", isSignal: true, isRequired: false, transformFunction: null }, classContainerInput: { classPropertyName: "classContainerInput", publicName: "classContainerInput", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, noBorder: { classPropertyName: "noBorder", publicName: "noBorder", isSignal: true, isRequired: false, transformFunction: null }, backgroundNone: { classPropertyName: "backgroundNone", publicName: "backgroundNone", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, keepPlaceholderOnly: { classPropertyName: "keepPlaceholderOnly", publicName: "keepPlaceholderOnly", isSignal: true, isRequired: false, transformFunction: null }, classContainerBottomInput: { classPropertyName: "classContainerBottomInput", publicName: "classContainerBottomInput", isSignal: true, isRequired: false, transformFunction: null }, autoRemoveEmoji: { classPropertyName: "autoRemoveEmoji", publicName: "autoRemoveEmoji", isSignal: true, isRequired: false, transformFunction: null }, defaultHeight: { classPropertyName: "defaultHeight", publicName: "defaultHeight", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTextArea: { classPropertyName: "maxHeightTextArea", publicName: "maxHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, minHeightTextArea: { classPropertyName: "minHeightTextArea", publicName: "minHeightTextArea", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowError: { classPropertyName: "ignoreShowError", publicName: "ignoreShowError", isSignal: true, isRequired: false, transformFunction: null }, borderError: { classPropertyName: "borderError", publicName: "borderError", isSignal: true, isRequired: false, transformFunction: null }, iconLeftClass: { classPropertyName: "iconLeftClass", publicName: "iconLeftClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconLeft: { classPropertyName: "popoverContentIconLeft", publicName: "popoverContentIconLeft", isSignal: true, isRequired: false, transformFunction: null }, iconRightClass: { classPropertyName: "iconRightClass", publicName: "iconRightClass", isSignal: true, isRequired: false, transformFunction: null }, popoverContentIconRight: { classPropertyName: "popoverContentIconRight", publicName: "popoverContentIconRight", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopoverContent: { classPropertyName: "zIndexPopoverContent", publicName: "zIndexPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, unitsLeft: { classPropertyName: "unitsLeft", publicName: "unitsLeft", isSignal: true, isRequired: false, transformFunction: null }, configUnitLeft: { classPropertyName: "configUnitLeft", publicName: "configUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitLeft: { classPropertyName: "keySelectedUnitLeft", publicName: "keySelectedUnitLeft", isSignal: true, isRequired: false, transformFunction: null }, unitsRight: { classPropertyName: "unitsRight", publicName: "unitsRight", isSignal: true, isRequired: false, transformFunction: null }, configUnitRight: { classPropertyName: "configUnitRight", publicName: "configUnitRight", isSignal: true, isRequired: false, transformFunction: null }, keySelectedUnitRight: { classPropertyName: "keySelectedUnitRight", publicName: "keySelectedUnitRight", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, minValueNumber: { classPropertyName: "minValueNumber", publicName: "minValueNumber", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentLeft: { classPropertyName: "ignoreContentLeft", publicName: "ignoreContentLeft", isSignal: true, isRequired: false, transformFunction: null }, ignoreContentRight: { classPropertyName: "ignoreContentRight", publicName: "ignoreContentRight", isSignal: true, isRequired: false, transformFunction: null }, isBaselineStyle: { classPropertyName: "isBaselineStyle", publicName: "isBaselineStyle", isSignal: true, isRequired: false, transformFunction: null }, valuePatternShowError: { classPropertyName: "valuePatternShowError", publicName: "valuePatternShowError", isSignal: true, isRequired: false, transformFunction: null }, validPattern: { classPropertyName: "validPattern", publicName: "validPattern", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, validMinValue: { classPropertyName: "validMinValue", publicName: "validMinValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxValue: { classPropertyName: "validMaxValue", publicName: "validMaxValue", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, functionValid: { classPropertyName: "functionValid", publicName: "functionValid", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, positionMessageErrorStartInput: { classPropertyName: "positionMessageErrorStartInput", publicName: "positionMessageErrorStartInput", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, templateLeftBottomInput: { classPropertyName: "templateLeftBottomInput", publicName: "templateLeftBottomInput", isSignal: true, isRequired: false, transformFunction: null }, templateRightBottomInput: { classPropertyName: "templateRightBottomInput", publicName: "templateRightBottomInput", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, autoAddZeroLessThan10InTypeInt: { classPropertyName: "autoAddZeroLessThan10InTypeInt", publicName: "autoAddZeroLessThan10InTypeInt", isSignal: true, isRequired: false, transformFunction: null }, maxLengthNumberCount: { classPropertyName: "maxLengthNumberCount", publicName: "maxLengthNumberCount", isSignal: true, isRequired: false, transformFunction: null }, classMessageErrorInclude: { classPropertyName: "classMessageErrorInclude", publicName: "classMessageErrorInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreUnitRightClassReadOnly: { classPropertyName: "ignoreUnitRightClassReadOnly", publicName: "ignoreUnitRightClassReadOnly", isSignal: true, isRequired: false, transformFunction: null }, paddingRightCustomSpecific: { classPropertyName: "paddingRightCustomSpecific", publicName: "paddingRightCustomSpecific", isSignal: true, isRequired: false, transformFunction: null }, focusTimeOut: { classPropertyName: "focusTimeOut", publicName: "focusTimeOut", isSignal: true, isRequired: false, transformFunction: null }, debounceTimeValidate: { classPropertyName: "debounceTimeValidate", publicName: "debounceTimeValidate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outValueChange: "outValueChange", outSelect: "outSelect", outIconLeft: "outIconLeft", outIconRight: "outIconRight", outClickButtonLabel: "outClickButtonLabel", outSwitchEventLabel: "outSwitchEventLabel", outLabelRightClick: "outLabelRightClick", outEnterInputEvent: "outEnterInputEvent", outHeightAreaChange: "outHeightAreaChange", outFunctionsControl: "outFunctionsControl", outFocusAndBlur: "outFocusAndBlur", outChangeValueByButtonUpDown: "outChangeValueByButtonUpDown" }, viewQueries: [{ propertyName: "elementLeftRef", first: true, predicate: ["elementLeftRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"(item | LibsUiPipesGetValueOfObjectPipe:fieldNameBind())?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n\n <div [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem ==='checkbox') {\n <libs_ui-components-checkbox-single [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem ==='radio') {\n <libs_ui-components-radio-single [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitLeft().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n </div>\n }\n <libs_ui-components-inputs-input [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '')+(unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none':'')+(unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none':'')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() :(validMaxValue()?.message ? true : false)\"\n [value]=\"item | LibsUiPipesGetValueOfObjectPipe:fieldNameBind()\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n @if (!ignoreContentRight()) {\n <div class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitRight().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n\n </div>\n @if (!!singleError().message && !ignoreShowError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]='rectLeft()?.width'\n [innerHtml]=\"(singleError().message || ' ')| translate:singleError().interpolateParams\">\n </span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #E6E7EA}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder", "dataComponentOutlet", "componentOutlet"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon", "dataComponentOutlet", "componentOutlet"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "pipe", type: LibsUiPipesGetValueOfObjectPipe, name: "LibsUiPipesGetValueOfObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
281
284
|
}
|
|
282
285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsValidComponent, decorators: [{
|
|
283
286
|
type: Component,
|
|
@@ -287,7 +290,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
287
290
|
LibsUiComponentsLabelComponent,
|
|
288
291
|
LibsUiComponentsCheckboxSingleComponent,
|
|
289
292
|
LibsUiComponentsRadioSingleComponent,
|
|
290
|
-
LibsUiComponentsPopoverComponent
|
|
291
|
-
|
|
293
|
+
LibsUiComponentsPopoverComponent,
|
|
294
|
+
LibsUiPipesGetValueOfObjectPipe
|
|
295
|
+
], template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"disable() || labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"disable() || labelConfig.disableButtonsRight\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"disable() || labelConfig.toggleDisable\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"(item | LibsUiPipesGetValueOfObjectPipe:fieldNameBind())?.length\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n\n <div [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div #elementLeftRef\n class=\"libs-ui-input-valid-left\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (typeComponentSelectItem(); as typeComponentSelectItem) {\n <div class=\"mr-[8px]\">\n @if (typeComponentSelectItem ==='checkbox') {\n <libs_ui-components-checkbox-single [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem ==='radio') {\n <libs_ui-components-radio-single [active]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.active)\" />\n }\n </div>\n }\n\n <ng-content select=\".libs-ui-input-valid-left-content-custom\" />\n @for (unit of unitsLeft(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-left !rounded-tr-none !rounded-br-none libs-ui-font-h5r {{ configUnitLeft().classInclude || '' }}\"\n [class.!flex]=\"unit[configUnitLeft().fieldKey] === keySelectedUnitLeft()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [class.libs-ui-disable]=\"disable() || false\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitLeft().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n </div>\n }\n <libs_ui-components-inputs-input [tagInput]=\"tagInput()\"\n [dataType]=\"dataType() || 'string'\"\n [typeInput]=\"typeInput()\"\n [modeInput]=\"modeInput()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [textAreaEnterNotNewLine]=\"textAreaEnterNotNewLine() || false\"\n [classInclude]=\"(classIncludeInput() || '')+(unitsLeft() && unitsLeft()?.length ? ' !rounded-tl-none !rounded-bl-none':'')+(unitsRight()?.length ? ' !rounded-tr-none !rounded-br-none':'')\"\n [maxValueNumber]=\"maxValueNumber()\"\n [minValueNumber]=\"minValueNumber()\"\n [fixedFloat]=\"fixedFloat() ?? 1\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxLength]=\"maxLength()\"\n [showCount]=\"showCount()\"\n [readonly]=\"readonly()\"\n [disable]=\"disable()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [placeholder]=\"placeholder() || ''\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [maxHeightTextArea]=\"maxHeightTextArea() || 250\"\n [minHeightTextArea]=\"minHeightTextArea()\"\n [borderError]=\"borderError() || (!!singleError().message && !ignoreShowError())\"\n [iconLeftClass]=\"iconLeftClass()\"\n [popoverContentIconLeft]=\"popoverContentIconLeft()\"\n [popoverContentIconRight]=\"popoverContentIconRight()\"\n [iconRightClass]=\"iconRightClass()\"\n [zIndexPopoverContent]=\"zIndexPopoverContent()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [ignoreBlockInputMaxValue]=\"!!ignoreBlockInputMaxValue() ? ignoreBlockInputMaxValue() :(validMaxValue()?.message ? true : false)\"\n [value]=\"item | LibsUiPipesGetValueOfObjectPipe:fieldNameBind()\"\n [classContainerInput]=\"classContainerInput()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [resize]=\"resize()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [templateLeftBottomInput]=\"templateLeftBottomInput()\"\n [templateRightBottomInput]=\"templateRightBottomInput()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (valueChange)=\"handlerValueChange($event)\"\n (outEnterEvent)=\"handlerEnterInput($event)\"\n (outIconLeft)=\"handlerEventIconLeft($event)\"\n (outIconRight)=\"handlerEventIconRight($event)\"\n (outHeightAreaChange)=\"handlerHeightAreaChange($event)\"\n (outFunctionsControl)=\"handlerControlFunctionInput($event)\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event)\"\n (outChangeValueByButtonUpDown)=\"handlerChangeValueByButtonUpDown()\" />\n @if (!ignoreContentRight()) {\n <div class=\"libs-ui-input-valid-right\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @for (unit of unitsRight(); track unit) {\n <div\n class=\"libs-ui-input-valid-unit libs-ui-input-valid-unit-right !rounded-tl-none !rounded-bl-none libs-ui-font-h5r {{ configUnitRight().classInclude || 'libs-ui-border-general' }}\"\n [class.!flex]=\"unit[configUnitRight().fieldKey] === keySelectedUnitRight()\"\n [class.libs-ui-readonly]=\"!ignoreUnitRightClassReadOnly() && (readonly() || false)\">\n <libs_ui-components-popover type=\"text\"\n [config]=\"{maxWidth:250,direction:'bottom', zIndex: zIndexPopoverContent()}\"\n [innerHtml]=\"(unit[configUnitRight().fieldLabel || 'label']|| ' ') | translate\" />\n </div>\n }\n <ng-content select=\".libs-ui-input-valid-right-content-custom\"></ng-content>\n </div>\n }\n\n </div>\n @if (!!singleError().message && !ignoreShowError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n <span class=\"libs-ui-message-error libs-ui-font-h7r libs-ui-text-error\"\n [style.marginLeft.px]='rectLeft()?.width'\n [innerHtml]=\"(singleError().message || ' ')| translate:singleError().interpolateParams\">\n </span>\n </div>\n }\n}\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host .libs-ui-input-valid{position:relative;display:flex;align-items:center}:host .libs-ui-input-valid .libs-ui-input-valid-unit{height:32px;max-width:200px;overflow:hidden;text-align:center;border-radius:4px;background-color:#e6e7ea;display:none;align-items:center;padding:0 8px;border:1px solid #E6E7EA}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-left{border-bottom-left-radius:0;border-top-left-radius:0;border-left:none}:host .libs-ui-input-valid .libs-ui-input-valid-unit .libs-ui-input-unit-right{border-bottom-right-radius:0;border-top-right-radius:0;border-right:none}:host .libs-ui-input-valid .libs-ui-input-valid-left{display:flex;align-items:center;justify-content:flex-start}:host .libs-ui-input-valid .libs-ui-input-valid-right{display:flex;align-items:center;justify-content:flex-end}:host .libs-ui-input-valid-error{display:flex;align-items:center;margin-top:8px}\n"] }]
|
|
292
296
|
}], ctorParameters: () => [] });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQThDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBa0Qsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4SSxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd4RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5TyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQW1CdEQsTUFBTSxPQUFPLG9DQUFvQztJQUMvQyxjQUFjO0lBQ0osV0FBVyxHQUFHLE1BQU0sQ0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLENBQUMs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bkJBQ3ZDLG9DQUFvQyxnZkFDcEMsZ0NBQWdDOzs0RkFFdkIsb0NBQW9DO2tCQWZoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZixvQ0FBb0M7d0JBQ3BDLDhCQUE4Qjt3QkFDOUIsdUNBQXVDO3dCQUN2QyxvQ0FBb0M7d0JBQ3BDLGdDQUFnQztxQkFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtY2hlY2tib3gtc2luZ2xlJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUmFkaW9TaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXJhZGlvLXNpbmdsZSc7XG5pbXBvcnQgeyBJU3dpdGNoRXZlbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0LCBJRXZlbnQsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCwgY2xvbmVEZWVwLCBpc05pbCwgc2V0LCB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRVbml0Q29uZmlnLCBJVmFsaWQsIElWYWxpZExlbmd0aCwgSVZhbGlkUGF0dGVybiwgSVZhbGlkUmVxdWlyZWQsIFRZUEVfRlVOQ1RJT05fSU5QVVRfVkFMSUQgfSBmcm9tICcuL2ludGVyZmFjZXMvdmFsaWQuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi92YWxpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZhbGlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgc2luZ2xlRXJyb3IgPSBzaWduYWw8SVZhbGlkPih7IG1lc3NhZ2U6IHVuZGVmaW5lZCwgaW50ZXJwb2xhdGVQYXJhbXM6IHVuZGVmaW5lZCB9KTtcbiAgcHJvdGVjdGVkIHJlY3RMZWZ0ID0gc2lnbmFsPElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZXIgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB0aW1lclZhbHVlQ2hhbmdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sSW5wdXQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbC5yZXF1aXJlZDxSZWNvcmQ8c3RyaW5nLCBhbnk+Pih7fSk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZmllbGROYW1lQmluZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2hvd0NvdW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PCdyYWRpbycgfCAnY2hlY2tib3gnIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSB2YWx1ZUNvbXBvbmVudFNlbGVjdEl0ZW0gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgdGFnSW5wdXQgPSBpbnB1dDwnaW5wdXQnIHwgJ3RleHRhcmVhJyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZGF0YVR5cGUgPSBpbnB1dDwnc3RyaW5nJyB8ICdpbnQnIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGV4dEFyZWFFbnRlck5vdE5ld0xpbmUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBoaWRkZW5Db250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8gc+G7rSBk4bulbmcgxJHhu4Mgc2V0IHR5cGUgY2hvIGlucHV0IGThuqFuZyB0ZXh0IGhheSBwYXNzd29yZFxuICByZWFkb25seSBmaXhlZEZsb2F0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVdpZHRoSW5wdXQxMDAgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVJbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbm9Cb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBiYWNrZ3JvdW5kTm9uZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHVzZUNvbG9yTW9kZUV4aXN0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGtlZXBQbGFjZWhvbGRlck9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyQm90dG9tSW5wdXQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGF1dG9SZW1vdmVFbW9qaSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRlZmF1bHRIZWlnaHQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1heEhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5IZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IGljb25MZWZ0Q2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGljb25SaWdodENsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBwb3BvdmVyQ29udGVudEljb25SaWdodCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgekluZGV4UG9wb3ZlckNvbnRlbnQgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgcmVhZG9ubHkgdW5pdHNMZWZ0ID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnVW5pdExlZnQgPSBpbnB1dDxJSW5wdXRWYWxpZFVuaXRDb25maWc+KHtcbiAgICBmaWVsZEtleTogJ2lkJyxcbiAgICBmaWVsZExhYmVsOiAnbGFiZWwnLFxuICB9KTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWRVbml0TGVmdCA9IGlucHV0PGFueT4oKTtcblxuICByZWFkb25seSB1bml0c1JpZ2h0ID0gaW5wdXQ8QXJyYXk8YW55Pj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnVW5pdFJpZ2h0ID0gaW5wdXQ8SUlucHV0VmFsaWRVbml0Q29uZmlnPih7XG4gICAgZmllbGRLZXk6ICdpZCcsXG4gICAgZmllbGRMYWJlbDogJ2xhYmVsJyxcbiAgfSk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkVW5pdFJpZ2h0ID0gaW5wdXQ8YW55PigpO1xuXG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtaW5WYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcblxuICByZWFkb25seSBpZ25vcmVDb250ZW50TGVmdCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNvbnRlbnRSaWdodCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlzQmFzZWxpbmVTdHlsZSA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGFsaWduLWl0ZW1zLWJhc2VsaW5lIGTDuW5nIGtoaSBjxINuIGlucHV0IHRo4bqzbmcgaMOgbmcgduG7m2kgdOG6pXQgY+G6oyBjw6FjIHBo4bqnbiBraMOhYyBkw7kgY8OzIHZhbGlkYXRlIGhheSBi4bqldCBj4bupIDEgY8OhaSBnw6xcblxuICByZWFkb25seSB2YWx1ZVBhdHRlcm5TaG93RXJyb3IgPSBpbnB1dDxib29sZWFuPigpOyAvLyBt4bq3YyDEkeG7i25oIGtoaSB0ZXN0IHBhdHRlcm4gdHLhuqMgdOG7gSBnacOhIHRy4buLIGLhurFuZyBmYWxzZSBz4bq9IGLDoW8gbOG7l2lcbiAgcmVhZG9ubHkgdmFsaWRQYXR0ZXJuID0gaW5wdXQ8QXJyYXk8SVZhbGlkUGF0dGVybj4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWluVmFsdWUgPSBpbnB1dDxJVmFsaWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4VmFsdWUgPSBpbnB1dDxJVmFsaWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4TGVuZ3RoID0gaW5wdXQ8SVZhbGlkPigpO1xuICByZWFkb25seSBmdW5jdGlvblZhbGlkID0gaW5wdXQ8VFlQRV9GVU5DVElPTl9JTlBVVF9WQUxJRD4oKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBwb3NpdGlvbk1lc3NhZ2VFcnJvclN0YXJ0SW5wdXQgPSBpbnB1dDxib29sZWFuPigpOyAvLyBraGkgY8OzIHRlbXBsYXRlIGxlZnQgdsOgIHJpZ2h0IG3DoCBtdeG7kW4gbWVzYWdlIGVycm9yIHh14bqldCBoaeG7h24gYuG6r3QgxJHhuqd1IHThu6sgw7QgaW5wdXQgdGhheSB2w6wgYuG6r3QgxJHhuqd1IHThu6sgdGVtcGxhdGUgIHRyw6FpXG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcmVzaXplID0gaW5wdXQ8J2F1dG8nIHwgJ25vbmUnPigpO1xuICByZWFkb25seSB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG1heExlbmd0aE51bWJlckNvdW50ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjbGFzc01lc3NhZ2VFcnJvckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlVW5pdFJpZ2h0Q2xhc3NSZWFkT25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHBhZGRpbmdSaWdodEN1c3RvbVNwZWNpZmljID0gaW5wdXQ8bnVtYmVyPigpOyAvLyBmaXggcGFkZGluZ1JpZ2h0IGNvdW50IGtvIGF1dG8gdMOtbmggIzUyMTg1XG4gIHJlYWRvbmx5IGZvY3VzVGltZU91dCA9IGlucHV0PG51bWJlcj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0VmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBvdXRTZWxlY3QgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvbkxlZnQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRJY29uUmlnaHQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbkxhYmVsID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFN3aXRjaEV2ZW50TGFiZWwgPSBvdXRwdXQ8SVN3aXRjaEV2ZW50PigpO1xuICByZWFkb25seSBvdXRMYWJlbFJpZ2h0Q2xpY2sgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RW50ZXJJbnB1dEV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SGVpZ2h0QXJlYUNoYW5nZSA9IG91dHB1dDx7IGlzQ2hhbmdlOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXNBbmRCbHVyID0gb3V0cHV0PElGb2N1c0FuZEJsdXJFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93biA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcmVhZG9ubHkgZWxlbWVudExlZnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRMZWZ0UmVmJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pdGVtKCkgfHwgdHlwZW9mIHRoaXMuaXRlbSgpICE9PSAnb2JqZWN0JyB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIEFycmF5IHx8IHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgTWFwICYmIHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgV2Vha01hcCB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIFNldCB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXRSZWN0TGVmdCgpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMuY2hlY2tJc1ZhbGlkLmJpbmQodGhpcyksXG4gICAgICBzZXRNZXNzYWdlRXJyb3I6IHRoaXMuc2V0TWVzc2FnZUVycm9yLmJpbmQodGhpcyksXG4gICAgICBibHVyOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5ibHVyKCksXG4gICAgICBmb2N1czogYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uZm9jdXMoKSxcbiAgICAgIGluc2VydENvbnRlbnQ6IGFzeW5jIChkYXRhOiBzdHJpbmcgfCBudW1iZXIpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/Lmluc2VydENvbnRlbnQoZGF0YSksXG4gICAgICByZXNldFZhbHVlOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5yZXNldFZhbHVlKCksXG4gICAgICBjdXJyZW50U3RhdGVJc1ZhbGlkOiB0aGlzLmN1cnJlbnRTdGF0ZUlzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogYXN5bmMgKHZhbHVlKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWUpXG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSBhc3luYyBjdXJyZW50U3RhdGVJc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZUVycm9yKCkubWVzc2FnZSA/IGZhbHNlIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5nZXRFbGVtZW50VmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdXRTZWxlY3QuZW1pdCh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5pdGVtLnVwZGF0ZShpdGVtID0+IHtcbiAgICAgIHJldHVybiBzZXQoY2xvbmVEZWVwKGl0ZW0pLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIGlmICghdGhpcy5mdW5jdGlvblZhbGlkKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGUodmFsdWUpO1xuICAgICAgdGhpcy5vdXRWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyVmFsdWVDaGFuZ2UoKSk7XG4gICAgdGhpcy50aW1lclZhbHVlQ2hhbmdlLnNldChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGUodmFsdWUpO1xuICAgICAgdGhpcy5vdXRWYWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9LCAxMDAwKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbkxhYmVsLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU3dpdGNoTGFiZWwodG9nZ2xlRXZlbnQ6IElTd2l0Y2hFdmVudCkge1xuICAgIHRoaXMub3V0U3dpdGNoRXZlbnRMYWJlbC5lbWl0KHRvZ2dsZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKSB7XG4gICAgdGhpcy5vdXRMYWJlbFJpZ2h0Q2xpY2suZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRW50ZXJJbnB1dChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm91dEVudGVySW5wdXRFdmVudC5lbWl0KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKGV2ZW50OiB7IGlzQ2hhbmdlOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLmdldFJlY3RMZWZ0KCk7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUob2JqID0+ICh7IC4uLm9iaiwgbWVzc2FnZTogdW5kZWZpbmVkIH0pKTtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCkgJiYgdGhpcy52YWxpZFJlcXVpcmVkKCk/LmlzUmVxdWlyZWQgJiYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS50cmltKCkpIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIGlzTmlsKHZhbHVlKSkpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSAmJiB0aGlzLnZhbGlkTWluTGVuZ3RoPy5sZW5ndGggPiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgpLCBpbnRlcnBvbGF0ZVBhcmFtczogKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRQYXR0ZXJuKCkgJiYgdGhpcy52YWxpZFBhdHRlcm4oKT8ubGVuZ3RoICYmIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZCBvZiB0aGlzLnZhbGlkUGF0dGVybigpIHx8IFtdKSB7XG4gICAgICAgIGlmICghdmFsaWQucGF0dGVybikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBgJHt2YWxpZC5wYXR0ZXJufWA7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTbGFzaCA9IHBhdHRlcm4ubGFzdEluZGV4T2YoJy8nKTtcblxuICAgICAgICBpZiAoIWluZGV4T2ZTbGFzaCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm5TdHIgPSBwYXR0ZXJuLnN1YnN0cmluZygxLCBpbmRleE9mU2xhc2gpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuRmxhZyA9IHBhdHRlcm4uc3Vic3RyaW5nKGluZGV4T2ZTbGFzaCArIDEsIHBhdHRlcm4ubGVuZ3RoKTtcblxuICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXR0ZXJuU3RyLCBwYXR0ZXJuRmxhZykudGVzdCh2YWx1ZSkgPT09ICh2YWxpZC52YWx1ZVBhdHRlcm5TaG93RXJyb3IgPz8gdGhpcy52YWx1ZVBhdHRlcm5TaG93RXJyb3IpKSB7XG4gICAgICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiAodmFsaWQubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCksIGludGVycG9sYXRlUGFyYW1zOiAodmFsaWQuaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy52YWxpZE1pblZhbHVlKCkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5taW5WYWx1ZU51bWJlcigpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA8ICh0aGlzLm1pblZhbHVlTnVtYmVyKCkgfHwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkTWluVmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9WQUxJRCksIGludGVycG9sYXRlUGFyYW1zOiAodGhpcy52YWxpZE1pblZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHRoaXMubWluVmFsdWVOdW1iZXIoKSB9KSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKHRoaXMuaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgfHwgdGhpcy52YWxpZE1heFZhbHVlKCk/Lm1lc3NhZ2UpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMubWF4VmFsdWVOdW1iZXIoKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiAodGhpcy52YWxpZE1heFZhbHVlKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NQVhfVkFMSUQpLCBpbnRlcnBvbGF0ZVBhcmFtczogKHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB0aGlzLm1heFZhbHVlTnVtYmVyKCkgfSkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWF4TWluVmFsdWUgPSBCaWdJbnQoOTIyKSAqIEJpZ0ludCgxMCkgKiogQmlnSW50KDE4KSAvIEJpZ0ludCgxMDApO1xuICAgICAgY29uc3QgW2ludCwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgICAgbGV0IHZhbHVlRGl2aWRlZCA9IEJpZ0ludCgxKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAoZGVjaW1hbD8ubGVuZ3RoIHx8IDApOyBpbmRleCsrKSB7XG4gICAgICAgIHZhbHVlRGl2aWRlZCAqPSBCaWdJbnQoMTApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUNvbXBhcmUgPSBCaWdJbnQoYCR7aW50fSR7ZGVjaW1hbCB8fCAnJ31gKSAqIChCaWdJbnQoMTAwMDApIC8gdmFsdWVEaXZpZGVkKTtcblxuICAgICAgaWYgKHZhbHVlQ29tcGFyZSA8IC1tYXhNaW5WYWx1ZSkge1xuICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkTWluVmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9WQUxJRCksIGludGVycG9sYXRlUGFyYW1zOiAodGhpcy52YWxpZE1pblZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgLSR7bWF4TWluVmFsdWUgLyBCaWdJbnQoMTAwMDApfWAsIHRydWUsIDQsIHRydWUsIHRydWUpIH0pIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZUNvbXBhcmUgPiBtYXhNaW5WYWx1ZSkge1xuICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCksIGludGVycG9sYXRlUGFyYW1zOiAodGhpcy52YWxpZE1heFZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSkgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAodGhpcy5tYXhMZW5ndGgoKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNYXhMZW5ndGgoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgpLCBpbnRlcnBvbGF0ZVBhcmFtczogKHRoaXMudmFsaWRNYXhMZW5ndGgoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyBudW1iZXI6IHRoaXMubWF4TGVuZ3RoIH0pIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZ1bmN0aW9uVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5mdW5jdGlvblZhbGlkKCk/Lih2YWx1ZSk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC50aGVuKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCgoYXdhaXQgcmVzdWx0KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaW5nbGVFcnJvci5zZXQocmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJc1ZhbGlkKCkge1xuICAgIGlmICh0aGlzLml0ZW0oKSAmJiAodGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyVmFsdWVDaGFuZ2UoKSk7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSh0aGlzLml0ZW0oKVt0aGlzLmZpZWxkTmFtZUJpbmQoKV0pO1xuXG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlRXJyb3IoKS5tZXNzYWdlID8gZmFsc2UgOiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRNZXNzYWdlRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUob2JqID0+ICh7IC4uLm9iaiwgbWVzc2FnZSB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNvbnRyb2xGdW5jdGlvbklucHV0KGV2ZW50OiBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQgPSBldmVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRm9jdXNBbmRCbHVyKGV2ZW50OiBJRm9jdXNBbmRCbHVyRXZlbnQpIHtcbiAgICB0aGlzLm91dEZvY3VzQW5kQmx1ci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjdExlZnQoKSB7XG4gICAgaWYgKCF0aGlzLnJlY3RMZWZ0KCkgfHwgdGhpcy5wb3NpdGlvbk1lc3NhZ2VFcnJvclN0YXJ0SW5wdXQoKSkge1xuICAgICAgdGhpcy50aW1lci5zZXQoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjdExlZnQuc2V0KHRoaXMuZWxlbWVudExlZnRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKCkge1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bi5lbWl0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcigpKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKCkpO1xuICB9XG59XG4iLCJAaWYgKGZpZWxkTmFtZUJpbmQoKSAmJiBpdGVtKCk7IGFzIGl0ZW0pIHtcbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWwgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZCBcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnRcIlxuICAgICAgW2J1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwiZGlzYWJsZSgpIHx8IGxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHRcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGVcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwiaXRlbVtmaWVsZE5hbWVCaW5kKCldPy5sZW5ndGhcIlxuICAgICAgKG91dENsaWNrQnV0dG9uKT1cImhhbmRsZXJDbGlja0J1dHRvbkxhYmVsKCRldmVudClcIlxuICAgICAgKG91dFN3aXRjaEV2ZW50KT1cImhhbmRsZXJTd2l0Y2hMYWJlbCgkZXZlbnQpXCJcbiAgICAgIChvdXRMYWJlbFJpZ2h0Q2xpY2spPVwiaGFuZGxlckV2ZW50TGFiZWxSaWdodExhYmVsKClcIiAvPlxuICB9XG5cbiAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQtdmFsaWQgdy1mdWxsICcgKyAoY2xhc3NJbmNsdWRlKCkgPz8gJycpXCJcbiAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICBAaWYgKCFpZ25vcmVDb250ZW50TGVmdCgpKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50TGVmdFJlZlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtbGVmdFwiXG4gICAgICAgIFtjbGFzcy5pdGVtcy1iYXNlbGluZV09XCJpc0Jhc2VsaW5lU3R5bGUoKVwiPlxuICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtKCk7IGFzIHR5cGVDb21wb25lbnRTZWxlY3RJdGVtKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdXCI+XG4gICAgICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID09PSdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2NoZWNrZWRdPVwidmFsdWVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBkaXNhYmxlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJTZWxlY3QoJGV2ZW50LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAodHlwZUNvbXBvbmVudFNlbGVjdEl0ZW0gPT09J3JhZGlvJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXJhZGlvLXNpbmdsZSBbYWN0aXZlXT1cInZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgZGlzYWJsZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5hY3RpdmUpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5saWJzLXVpLWlucHV0LXZhbGlkLWxlZnQtY29udGVudC1jdXN0b21cIiAvPlxuICAgICAgICBAZm9yICh1bml0IG9mIHVuaXRzTGVmdCgpOyB0cmFjayB1bml0KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQgbGlicy11aS1pbnB1dC12YWxpZC11bml0LWxlZnQgIXJvdW5kZWQtdHItbm9uZSAhcm91bmRlZC1ici1ub25lIGxpYnMtdWktZm9udC1oNXIge3sgY29uZmlnVW5pdExlZnQoKS5jbGFzc0luY2x1ZGUgfHwgJycgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLiFmbGV4XT1cInVuaXRbY29uZmlnVW5pdExlZnQoKS5maWVsZEtleV0gPT09IGtleVNlbGVjdGVkVW5pdExlZnQoKVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGZhbHNlXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoyNTAsZGlyZWN0aW9uOidib3R0b20nLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCl9XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCIodW5pdFtjb25maWdVbml0TGVmdCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ118fCAnICcpIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFt0YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgIFtkYXRhVHlwZV09XCJkYXRhVHlwZSgpIHx8ICdzdHJpbmcnXCJcbiAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWlnbm9yZVdpZHRoSW5wdXQxMDAoKVwiXG4gICAgICBbaWdub3JlV2lkdGhJbnB1dDEwMF09XCJpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW3RleHRBcmVhRW50ZXJOb3ROZXdMaW5lXT1cInRleHRBcmVhRW50ZXJOb3ROZXdMaW5lKCkgfHwgZmFsc2VcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCIoY2xhc3NJbmNsdWRlSW5wdXQoKSB8fCAnJykrKHVuaXRzTGVmdCgpICYmIHVuaXRzTGVmdCgpPy5sZW5ndGggPyAnICFyb3VuZGVkLXRsLW5vbmUgIXJvdW5kZWQtYmwtbm9uZSc6JycpKyh1bml0c1JpZ2h0KCk/Lmxlbmd0aCA/ICcgIXJvdW5kZWQtdHItbm9uZSAhcm91bmRlZC1ici1ub25lJzonJylcIlxuICAgICAgW2hpZGRlbkNvbnRlbnRdPVwiaGlkZGVuQ29udGVudCgpIHx8IGZhbHNlXCJcbiAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJtYXhWYWx1ZU51bWJlcigpXCJcbiAgICAgIFttaW5WYWx1ZU51bWJlcl09XCJtaW5WYWx1ZU51bWJlcigpXCJcbiAgICAgIFtmaXhlZEZsb2F0XT1cImZpeGVkRmxvYXQoKSA/PyAxXCJcbiAgICAgIFthY2NlcHROZWdhdGl2ZVZhbHVlXT1cImFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICBbb25seUFjY2VwdE5lZ2F0aXZlVmFsdWVdPVwib25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKVwiXG4gICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpXCJcbiAgICAgIFtzaG93Q291bnRdPVwic2hvd0NvdW50KClcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwiYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50KClcIlxuICAgICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2JhY2tncm91bmROb25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW3VzZUNvbG9yTW9kZUV4aXN0XT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfHwgJydcIlxuICAgICAgW2tlZXBQbGFjZWhvbGRlck9ubHldPVwia2VlcFBsYWNlaG9sZGVyT25seSgpXCJcbiAgICAgIFthdXRvUmVtb3ZlRW1vamldPVwiYXV0b1JlbW92ZUVtb2ppKClcIlxuICAgICAgW2RlZmF1bHRIZWlnaHRdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFttYXhIZWlnaHRUZXh0QXJlYV09XCJtYXhIZWlnaHRUZXh0QXJlYSgpIHx8IDI1MFwiXG4gICAgICBbbWluSGVpZ2h0VGV4dEFyZWFdPVwibWluSGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbYm9yZGVyRXJyb3JdPVwiYm9yZGVyRXJyb3IoKSB8fCAoISFzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIWlnbm9yZVNob3dFcnJvcigpKVwiXG4gICAgICBbaWNvbkxlZnRDbGFzc109XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgW3BvcG92ZXJDb250ZW50SWNvbkxlZnRdPVwicG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpXCJcbiAgICAgIFtwb3BvdmVyQ29udGVudEljb25SaWdodF09XCJwb3BvdmVyQ29udGVudEljb25SaWdodCgpXCJcbiAgICAgIFtpY29uUmlnaHRDbGFzc109XCJpY29uUmlnaHRDbGFzcygpXCJcbiAgICAgIFt6SW5kZXhQb3BvdmVyQ29udGVudF09XCJ6SW5kZXhQb3BvdmVyQ29udGVudCgpXCJcbiAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cImVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKVwiXG4gICAgICBbaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlXT1cIiEhaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgPyBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSA6KHZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSA/IHRydWUgOiBmYWxzZSlcIlxuICAgICAgW3ZhbHVlXT1cIml0ZW1bZmllbGROYW1lQmluZCgpXVwiXG4gICAgICBbY2xhc3NDb250YWluZXJJbnB1dF09XCJjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICAgICAgW3Jlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmRdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpXCJcbiAgICAgIFtyZXNpemVdPVwicmVzaXplKClcIlxuICAgICAgW2NsYXNzQ29udGFpbmVyQm90dG9tSW5wdXRdPVwiY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCgpXCJcbiAgICAgIFt0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dF09XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpXCJcbiAgICAgIFt0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXRdPVwidGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KClcIlxuICAgICAgW21heExlbmd0aE51bWJlckNvdW50XT1cIm1heExlbmd0aE51bWJlckNvdW50KClcIlxuICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgICAgW2ZvY3VzVGltZU91dF09XCJmb2N1c1RpbWVPdXQoKVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dEVudGVyRXZlbnQpPVwiaGFuZGxlckVudGVySW5wdXQoJGV2ZW50KVwiXG4gICAgICAob3V0SWNvbkxlZnQpPVwiaGFuZGxlckV2ZW50SWNvbkxlZnQoJGV2ZW50KVwiXG4gICAgICAob3V0SWNvblJpZ2h0KT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQpXCJcbiAgICAgIChvdXRIZWlnaHRBcmVhQ2hhbmdlKT1cImhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckNvbnRyb2xGdW5jdGlvbklucHV0KCRldmVudClcIlxuICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50KVwiXG4gICAgICAob3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bik9XCJoYW5kbGVyQ2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bigpXCIgLz5cbiAgICBAaWYgKCFpZ25vcmVDb250ZW50UmlnaHQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtcmlnaHRcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICAgICAgQGZvciAodW5pdCBvZiB1bml0c1JpZ2h0KCk7IHRyYWNrIHVuaXQpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdCBsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQtcmlnaHQgIXJvdW5kZWQtdGwtbm9uZSAhcm91bmRlZC1ibC1ub25lIGxpYnMtdWktZm9udC1oNXIge3sgY29uZmlnVW5pdFJpZ2h0KCkuY2xhc3NJbmNsdWRlIHx8ICdsaWJzLXVpLWJvcmRlci1nZW5lcmFsJyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuIWZsZXhdPVwidW5pdFtjb25maWdVbml0UmlnaHQoKS5maWVsZEtleV0gPT09IGtleVNlbGVjdGVkVW5pdFJpZ2h0KClcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwiIWlnbm9yZVVuaXRSaWdodENsYXNzUmVhZE9ubHkoKSAmJiAocmVhZG9ubHkoKSB8fCBmYWxzZSlcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwie21heFdpZHRoOjI1MCxkaXJlY3Rpb246J2JvdHRvbScsIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKX1cIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIih1bml0W2NvbmZpZ1VuaXRSaWdodCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ118fCAnICcpIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubGlicy11aS1pbnB1dC12YWxpZC1yaWdodC1jb250ZW50LWN1c3RvbVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICA8L2Rpdj5cbiAgQGlmICghIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlU2hvd0Vycm9yKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC1lcnJvciB7eyBjbGFzc01lc3NhZ2VFcnJvckluY2x1ZGUoKSB8fCAnJyB9fVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLW1lc3NhZ2UtZXJyb3IgbGlicy11aS1mb250LWg3ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09J3JlY3RMZWZ0KCk/LndpZHRoJ1xuICAgICAgICBbaW5uZXJIdG1sXT1cIihzaW5nbGVFcnJvcigpLm1lc3NhZ2UgfHwgJyAnKXwgdHJhbnNsYXRlOnNpbmdsZUVycm9yKCkuaW50ZXJwb2xhdGVQYXJhbXNcIj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQThDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBa0Qsb0NBQW9DLEVBQTZGLE1BQU0sa0NBQWtDLENBQUM7QUFDbk8sT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeE8sT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFrQnJGLE1BQU0sT0FBTyxvQ0FBb0M7SUFDL0MsbUJBQW1CO0lBQ1QsV0FBVyxHQUFHLE1BQU0sQ0FBb0IsRUFB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eEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBN1RVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLDg0WENoQ2pELDg3UEFtSkEsNC9CRDVISSxlQUFlLDRGQUNmLG9DQUFvQyx3aERBQ3BDLDhCQUE4Qiw0cUJBQzlCLHVDQUF1QywwcEJBQ3ZDLG9DQUFvQywyaEJBQ3BDLGdDQUFnQywrZkFDaEMsK0JBQStCOzs0RkFHdEIsb0NBQW9DO2tCQWpCaEQsU0FBUzsrQkFFRSxpQ0FBaUMsY0FHL0IsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2Ysb0NBQW9DO3dCQUNwQyw4QkFBOEI7d0JBQzlCLHVDQUF1Qzt3QkFDdkMsb0NBQW9DO3dCQUNwQyxnQ0FBZ0M7d0JBQ2hDLCtCQUErQjtxQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBJRm9jdXNBbmRCbHVyRXZlbnQsIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQsIFRZUEVfREFUQV9UWVBFX0lOUFVULCBUWVBFX0lOUFVULCBUWVBFX0lOUFVUX1JFU0laRV9NT0RFLCBUWVBFX01PREVfSU5QVVQsIFRZUEVfVEFHX0lOUFVUIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtaW5wdXQnO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcmFkaW8tc2luZ2xlJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCwgSU1lc3NhZ2VUcmFuc2xhdGUsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCwgZ2V0LCBpc05pbCwgc2V0LCB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRVbml0Q29uZmlnLCBJVmFsaWRMZW5ndGgsIElWYWxpZFBhdHRlcm4sIElWYWxpZFJlcXVpcmVkLCBUWVBFX0ZVTkNUSU9OX0lOUFVUX1ZBTElEIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtZ2V0LXZhbHVlLW9mLW9iamVjdCc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZhbGlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmFsaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHNpbmdsZUVycm9yID0gc2lnbmFsPElNZXNzYWdlVHJhbnNsYXRlPih7IG1lc3NhZ2U6IHVuZGVmaW5lZCwgaW50ZXJwb2xhdGVQYXJhbXM6IHVuZGVmaW5lZCB9KTtcbiAgcHJvdGVjdGVkIHJlY3RMZWZ0ID0gc2lnbmFsPElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZXIgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB0aW1lclZhbHVlQ2hhbmdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sSW5wdXQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaXRlbSA9IG1vZGVsLnJlcXVpcmVkPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8J3JhZGlvJyB8ICdjaGVja2JveCcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PFRZUEVfVEFHX0lOUFVUPigpO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PFRZUEVfREFUQV9UWVBFX0lOUFVUPigpO1xuICByZWFkb25seSB0eXBlSW5wdXQgPSBpbnB1dDxUWVBFX0lOUFVUPigpO1xuICByZWFkb25seSBtb2RlSW5wdXQgPSBpbnB1dDxUWVBFX01PREVfSU5QVVQ+KCk7XG4gIHJlYWRvbmx5IHJlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZpeGVkRmxvYXQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaWdub3JlV2lkdGhJbnB1dDEwMCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUlucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lcklucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub0JvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmROb25lID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkga2VlcFBsYWNlaG9sZGVyT25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYXV0b1JlbW92ZUVtb2ppID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpZ25vcmVTaG93RXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBib3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uTGVmdCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWNvblJpZ2h0Q2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvblJpZ2h0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB6SW5kZXhQb3BvdmVyQ29udGVudCA9IGlucHV0PG51bWJlcj4oKTtcblxuICByZWFkb25seSB1bml0c0xlZnQgPSBpbnB1dDxBcnJheTxhbnk+PigpO1xuICByZWFkb25seSBjb25maWdVbml0TGVmdCA9IGlucHV0PElJbnB1dFZhbGlkVW5pdENvbmZpZz4oe1xuICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgIGZpZWxkTGFiZWw6ICdsYWJlbCcsXG4gIH0pO1xuICByZWFkb25seSBrZXlTZWxlY3RlZFVuaXRMZWZ0ID0gaW5wdXQ8YW55PigpO1xuXG4gIHJlYWRvbmx5IHVuaXRzUmlnaHQgPSBpbnB1dDxBcnJheTxhbnk+PigpO1xuICByZWFkb25seSBjb25maWdVbml0UmlnaHQgPSBpbnB1dDxJSW5wdXRWYWxpZFVuaXRDb25maWcsIElJbnB1dFZhbGlkVW5pdENvbmZpZyB8IHVuZGVmaW5lZD4oe1xuICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgIGZpZWxkTGFiZWw6ICdsYWJlbCcsXG4gIH0sIHtcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IHtcbiAgICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgICAgZmllbGRMYWJlbDogJ2xhYmVsJyxcbiAgICB9XG4gIH0pO1xuICByZWFkb25seSBrZXlTZWxlY3RlZFVuaXRSaWdodCA9IGlucHV0PGFueT4oKTtcblxuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWluVmFsdWVOdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgcmVhZG9ubHkgaWdub3JlQ29udGVudExlZnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb250ZW50UmlnaHQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpc0Jhc2VsaW5lU3R5bGUgPSBpbnB1dDxib29sZWFuPigpOyAvLyBhbGlnbi1pdGVtcy1iYXNlbGluZSBkw7luZyBraGkgY8SDbiBpbnB1dCB0aOG6s25nIGjDoG5nIHbhu5tpIHThuqV0IGPhuqMgY8OhYyBwaOG6p24ga2jDoWMgZMO5IGPDsyB2YWxpZGF0ZSBoYXkgYuG6pXQgY+G7qSAxIGPDoWkgZ8OsXG5cbiAgcmVhZG9ubHkgdmFsdWVQYXR0ZXJuU2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTsgLy8gbeG6t2MgxJHhu4tuaCBraGkgdGVzdCBwYXR0ZXJuIHRy4bqjIHbhu4EgZ2nDoSB0cuG7iyBi4bqxbmcgZmFsc2Ugc+G6vSBiw6FvIGzhu5dpXG4gIHJlYWRvbmx5IHZhbGlkUGF0dGVybiA9IGlucHV0PEFycmF5PElWYWxpZFBhdHRlcm4+PigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkUmVxdWlyZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWluTGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSB2YWxpZE1pblZhbHVlID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGU+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4VmFsdWUgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhMZW5ndGggPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgZnVuY3Rpb25WYWxpZCA9IGlucHV0PFRZUEVfRlVOQ1RJT05fSU5QVVRfVkFMSUQ+KCk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgcG9zaXRpb25NZXNzYWdlRXJyb3JTdGFydElucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8ga2hpIGPDsyB0ZW1wbGF0ZSBsZWZ0IHbDoCByaWdodCBtw6AgbXXhu5FuIG1lc2FnZSBlcnJvciB4deG6pXQgaGnhu4duIGLhuq90IMSR4bqndSB04burIMO0IGlucHV0IHRoYXkgdsOsIGLhuq90IMSR4bqndSB04burIHRlbXBsYXRlICB0csOhaVxuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PFRZUEVfSU5QVVRfUkVTSVpFX01PREU+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IG9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoTnVtYmVyQ291bnQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTWVzc2FnZUVycm9ySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVVbml0UmlnaHRDbGFzc1JlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGFkZGluZ1JpZ2h0Q3VzdG9tU3BlY2lmaWMgPSBpbnB1dDxudW1iZXI+KCk7IC8vIGZpeCBwYWRkaW5nUmlnaHQgY291bnQga28gYXV0byB0w61uaCAjNTIxODVcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBkZWJvdW5jZVRpbWVWYWxpZGF0ZSAgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMCwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IDAgfSk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0VmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBvdXRTZWxlY3QgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvbkxlZnQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRJY29uUmlnaHQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbkxhYmVsID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFN3aXRjaEV2ZW50TGFiZWwgPSBvdXRwdXQ8SVN3aXRjaEV2ZW50PigpO1xuICByZWFkb25seSBvdXRMYWJlbFJpZ2h0Q2xpY2sgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RW50ZXJJbnB1dEV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SGVpZ2h0QXJlYUNoYW5nZSA9IG91dHB1dDx7IGlzQ2hhbmdlOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXNBbmRCbHVyID0gb3V0cHV0PElGb2N1c0FuZEJsdXJFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93biA9IG91dHB1dDx2b2lkPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcmVhZG9ubHkgZWxlbWVudExlZnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRMZWZ0UmVmJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pdGVtKCkgfHwgdHlwZW9mIHRoaXMuaXRlbSgpICE9PSAnb2JqZWN0JyB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIEFycmF5IHx8IHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgTWFwICYmIHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgV2Vha01hcCB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIFNldCB8fCB0aGlzLml0ZW0oKSBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5nZXRSZWN0TGVmdCgpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMuY2hlY2tJc1ZhbGlkLmJpbmQodGhpcyksXG4gICAgICBzZXRNZXNzYWdlRXJyb3I6IHRoaXMuc2V0TWVzc2FnZUVycm9yLmJpbmQodGhpcyksXG4gICAgICBibHVyOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5ibHVyKCksXG4gICAgICBmb2N1czogYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uZm9jdXMoKSxcbiAgICAgIGluc2VydENvbnRlbnQ6IGFzeW5jIChkYXRhOiBzdHJpbmcgfCBudW1iZXIpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/Lmluc2VydENvbnRlbnQoZGF0YSksXG4gICAgICByZXNldFZhbHVlOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5yZXNldFZhbHVlKCksXG4gICAgICBjdXJyZW50U3RhdGVJc1ZhbGlkOiB0aGlzLmN1cnJlbnRTdGF0ZUlzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogYXN5bmMgKHZhbHVlKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWUpLFxuICAgICAgc2VsZWN0QWxsQ29udGVudDogYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uc2VsZWN0QWxsQ29udGVudCgpXG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSBhc3luYyBjdXJyZW50U3RhdGVJc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZUVycm9yKCkubWVzc2FnZSA/IGZhbHNlIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5nZXRFbGVtZW50VmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdXRTZWxlY3QuZW1pdCh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgc2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgdmFsdWUpO1xuXG4gICAgLy8gU3VwcG9ydCB0csaw4budbmcgaOG7o3AgY2FsbCBBUEkgaG/hurdjIHZhbGlkYXRlIGPhuqduIHjhu60gbMO9IGNoZWNrIHThu5FuIG5oaeG7gXUgdGjhu51pIGdpYW4gdGjDrCBj4bqnbiBkZWJvdW5kIHRpbWUgxJHhu4MgdHLDoW5oIGNhbGwgbGnDqm4gdOG7pWNcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKCkpO1xuICAgIHRoaXMudGltZXJWYWx1ZUNoYW5nZS5zZXQoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMub3V0VmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfSwgdGhpcy5kZWJvdW5jZVRpbWVWYWxpZGF0ZSgpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbkxhYmVsLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU3dpdGNoTGFiZWwodG9nZ2xlRXZlbnQ6IElTd2l0Y2hFdmVudCkge1xuICAgIHRoaXMub3V0U3dpdGNoRXZlbnRMYWJlbC5lbWl0KHRvZ2dsZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKSB7XG4gICAgdGhpcy5vdXRMYWJlbFJpZ2h0Q2xpY2suZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRW50ZXJJbnB1dChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm91dEVudGVySW5wdXRFdmVudC5lbWl0KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKGV2ZW50OiB7IGlzQ2hhbmdlOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLmdldFJlY3RMZWZ0KCk7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUob2JqID0+ICh7IC4uLm9iaiwgbWVzc2FnZTogdW5kZWZpbmVkIH0pKTtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCkgJiYgdGhpcy52YWxpZFJlcXVpcmVkKCk/LmlzUmVxdWlyZWQgJiYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS50cmltKCkpIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIGlzTmlsKHZhbHVlKSkpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSAmJiAodGhpcy52YWxpZE1pbkxlbmd0aCgpPy5sZW5ndGggfHwgMCkgPiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgpLCBpbnRlcnBvbGF0ZVBhcmFtczogKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRQYXR0ZXJuKCkgJiYgdGhpcy52YWxpZFBhdHRlcm4oKT8ubGVuZ3RoICYmIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZCBvZiB0aGlzLnZhbGlkUGF0dGVybigpIHx8IFtdKSB7XG4gICAgICAgIGlmICghdmFsaWQucGF0dGVybikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBgJHt2YWxpZC5wYXR0ZXJufWA7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTbGFzaCA9IHBhdHRlcm4ubGFzdEluZGV4T2YoJy8nKTtcblxuICAgICAgICBpZiAoIWluZGV4T2ZTbGFzaCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm5TdHIgPSBwYXR0ZXJuLnN1YnN0cmluZygxLCBpbmRleE9mU2xhc2gpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuRmxhZyA9IHBhdHRlcm4uc3Vic3RyaW5nKGluZGV4T2ZTbGFzaCArIDEsIHBhdHRlcm4ubGVuZ3RoKTtcblxuICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXR0ZXJuU3RyLCBwYXR0ZXJuRmxhZykudGVzdCh2YWx1ZSkgPT09ICh2YWxpZC52YWx1ZVBhdHRlcm5TaG93RXJyb3IgPz8gdGhpcy52YWx1ZVBhdHRlcm5TaG93RXJyb3IoKSkpIHtcbiAgICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh2YWxpZC5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfUEFUVEVOX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh2YWxpZC5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSkgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbGlkTWluVmFsdWUoKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHR5cGVvZiB0aGlzLm1pblZhbHVlTnVtYmVyKCkgPT09ICdudW1iZXInICYmIHZhbHVlIDwgKHRoaXMubWluVmFsdWVOdW1iZXIoKSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUikpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh0aGlzLnZhbGlkTWluVmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdGhpcy5taW5WYWx1ZU51bWJlcigpIH0pIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgodGhpcy5pZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSB8fCB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5tYXhWYWx1ZU51bWJlcigpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6ICh0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCksIGludGVycG9sYXRlUGFyYW1zOiAodGhpcy52YWxpZE1heFZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHRoaXMubWF4VmFsdWVOdW1iZXIoKSB9KSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXhNaW5WYWx1ZSA9IEJpZ0ludCg5MjIpICogQmlnSW50KDEwKSAqKiBCaWdJbnQoMTgpIC8gQmlnSW50KDEwMCk7XG4gICAgICBjb25zdCBbaW50LCBkZWNpbWFsXSA9IHZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICBsZXQgdmFsdWVEaXZpZGVkID0gQmlnSW50KDEpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IChkZWNpbWFsPy5sZW5ndGggfHwgMCk7IGluZGV4KyspIHtcbiAgICAgICAgdmFsdWVEaXZpZGVkICo9IEJpZ0ludCgxMCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlQ29tcGFyZSA9IEJpZ0ludChgJHtpbnR9JHtkZWNpbWFsIHx8ICcnfWApICogKEJpZ0ludCgxMDAwMCkgLyB2YWx1ZURpdmlkZWQpO1xuXG4gICAgICBpZiAodmFsdWVDb21wYXJlIDwgLW1heE1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh0aGlzLnZhbGlkTWluVmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAtJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSkgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlQ29tcGFyZSA+IG1heE1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogKHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX1ZBTElEKSwgaW50ZXJwb2xhdGVQYXJhbXM6ICh0aGlzLnZhbGlkTWF4VmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAke21heE1pblZhbHVlIC8gQmlnSW50KDEwMDAwKX1gLCB0cnVlLCA0LCB0cnVlLCB0cnVlKSB9KSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1heExlbmd0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICh0aGlzLm1heExlbmd0aCgpIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiAodGhpcy52YWxpZE1heExlbmd0aCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCksIGludGVycG9sYXRlUGFyYW1zOiAodGhpcy52YWxpZE1heExlbmd0aCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IG51bWJlcjogdGhpcy5tYXhMZW5ndGgoKSB9KSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mdW5jdGlvblZhbGlkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuZnVuY3Rpb25WYWxpZCgpPy4odmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbikge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoKGF3YWl0IHJlc3VsdCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSXNWYWxpZCgpIHtcbiAgICBpZiAodGhpcy5pdGVtKCkgJiYgKHRoaXMucmVhZG9ubHkoKSB8fCB0aGlzLmRpc2FibGUoKSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lclZhbHVlQ2hhbmdlKCkpO1xuICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoZ2V0KHRoaXMuaXRlbSwgdGhpcy5maWVsZE5hbWVCaW5kKCkpKTtcblxuICAgIHJldHVybiB0aGlzLnNpbmdsZUVycm9yKCkubWVzc2FnZSA/IGZhbHNlIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0TWVzc2FnZUVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuc2luZ2xlRXJyb3IudXBkYXRlKG9iaiA9PiAoeyAuLi5vYmosIG1lc3NhZ2UgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb250cm9sRnVuY3Rpb25JbnB1dChldmVudDogSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0ID0gZXZlbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1cihldmVudDogSUZvY3VzQW5kQmx1ckV2ZW50KSB7XG4gICAgdGhpcy5vdXRGb2N1c0FuZEJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RMZWZ0KCkge1xuICAgIGlmICghdGhpcy5yZWN0TGVmdCgpIHx8IHRoaXMucG9zaXRpb25NZXNzYWdlRXJyb3JTdGFydElucHV0KCkpIHtcbiAgICAgIHRoaXMudGltZXIuc2V0KHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlY3RMZWZ0LnNldCh0aGlzLmVsZW1lbnRMZWZ0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bigpIHtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24uZW1pdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIoKSk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJWYWx1ZUNoYW5nZSgpKTtcbiAgfVxufVxuIiwiQGlmIChmaWVsZE5hbWVCaW5kKCkgJiYgaXRlbSgpOyBhcyBpdGVtKSB7XG4gIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICBbZGVzY3JpcHRpb25DbGFzc109XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvbkNsYXNzXCJcbiAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJkaXNhYmxlKCkgfHwgbGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlXCJcbiAgICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKVwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgW2NvdW50XT1cIihpdGVtIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTpmaWVsZE5hbWVCaW5kKCkpPy5sZW5ndGhcIlxuICAgICAgKG91dENsaWNrQnV0dG9uKT1cImhhbmRsZXJDbGlja0J1dHRvbkxhYmVsKCRldmVudClcIlxuICAgICAgKG91dFN3aXRjaEV2ZW50KT1cImhhbmRsZXJTd2l0Y2hMYWJlbCgkZXZlbnQpXCJcbiAgICAgIChvdXRMYWJlbFJpZ2h0Q2xpY2spPVwiaGFuZGxlckV2ZW50TGFiZWxSaWdodExhYmVsKClcIiAvPlxuICB9XG5cbiAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQtdmFsaWQgdy1mdWxsICcgKyAoY2xhc3NJbmNsdWRlKCkgPz8gJycpXCJcbiAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICBAaWYgKCFpZ25vcmVDb250ZW50TGVmdCgpKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50TGVmdFJlZlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtbGVmdFwiXG4gICAgICAgIFtjbGFzcy5pdGVtcy1iYXNlbGluZV09XCJpc0Jhc2VsaW5lU3R5bGUoKVwiPlxuICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtKCk7IGFzIHR5cGVDb21wb25lbnRTZWxlY3RJdGVtKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVs4cHhdXCI+XG4gICAgICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID09PSdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2NoZWNrZWRdPVwidmFsdWVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCBkaXNhYmxlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJTZWxlY3QoJGV2ZW50LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAodHlwZUNvbXBvbmVudFNlbGVjdEl0ZW0gPT09J3JhZGlvJykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXJhZGlvLXNpbmdsZSBbYWN0aXZlXT1cInZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgZGlzYWJsZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5hY3RpdmUpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5saWJzLXVpLWlucHV0LXZhbGlkLWxlZnQtY29udGVudC1jdXN0b21cIiAvPlxuICAgICAgICBAZm9yICh1bml0IG9mIHVuaXRzTGVmdCgpOyB0cmFjayB1bml0KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQgbGlicy11aS1pbnB1dC12YWxpZC11bml0LWxlZnQgIXJvdW5kZWQtdHItbm9uZSAhcm91bmRlZC1ici1ub25lIGxpYnMtdWktZm9udC1oNXIge3sgY29uZmlnVW5pdExlZnQoKS5jbGFzc0luY2x1ZGUgfHwgJycgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLiFmbGV4XT1cInVuaXRbY29uZmlnVW5pdExlZnQoKS5maWVsZEtleV0gPT09IGtleVNlbGVjdGVkVW5pdExlZnQoKVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGZhbHNlXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoyNTAsZGlyZWN0aW9uOidib3R0b20nLCB6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCl9XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCIodW5pdFtjb25maWdVbml0TGVmdCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ118fCAnICcpIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFt0YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgIFtkYXRhVHlwZV09XCJkYXRhVHlwZSgpIHx8ICdzdHJpbmcnXCJcbiAgICAgIFt0eXBlSW5wdXRdPVwidHlwZUlucHV0KClcIlxuICAgICAgW21vZGVJbnB1dF09XCJtb2RlSW5wdXQoKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2lnbm9yZVdpZHRoSW5wdXQxMDBdPVwiaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgIFt0ZXh0QXJlYUVudGVyTm90TmV3TGluZV09XCJ0ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpIHx8IGZhbHNlXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGNsYXNzSW5jbHVkZUlucHV0KCkgfHwgJycpKyh1bml0c0xlZnQoKSAmJiB1bml0c0xlZnQoKT8ubGVuZ3RoID8gJyAhcm91bmRlZC10bC1ub25lICFyb3VuZGVkLWJsLW5vbmUnOicnKSsodW5pdHNSaWdodCgpPy5sZW5ndGggPyAnICFyb3VuZGVkLXRyLW5vbmUgIXJvdW5kZWQtYnItbm9uZSc6JycpXCJcbiAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJtYXhWYWx1ZU51bWJlcigpXCJcbiAgICAgIFttaW5WYWx1ZU51bWJlcl09XCJtaW5WYWx1ZU51bWJlcigpXCJcbiAgICAgIFtmaXhlZEZsb2F0XT1cImZpeGVkRmxvYXQoKSA/PyAxXCJcbiAgICAgIFthY2NlcHROZWdhdGl2ZVZhbHVlXT1cImFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICBbb25seUFjY2VwdE5lZ2F0aXZlVmFsdWVdPVwib25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKVwiXG4gICAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aCgpXCJcbiAgICAgIFtzaG93Q291bnRdPVwic2hvd0NvdW50KClcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwiYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50KClcIlxuICAgICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyKClcIlxuICAgICAgW2JhY2tncm91bmROb25lXT1cImJhY2tncm91bmROb25lKClcIlxuICAgICAgW3VzZUNvbG9yTW9kZUV4aXN0XT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfHwgJydcIlxuICAgICAgW2tlZXBQbGFjZWhvbGRlck9ubHldPVwia2VlcFBsYWNlaG9sZGVyT25seSgpXCJcbiAgICAgIFthdXRvUmVtb3ZlRW1vamldPVwiYXV0b1JlbW92ZUVtb2ppKClcIlxuICAgICAgW2RlZmF1bHRIZWlnaHRdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFttYXhIZWlnaHRUZXh0QXJlYV09XCJtYXhIZWlnaHRUZXh0QXJlYSgpIHx8IDI1MFwiXG4gICAgICBbbWluSGVpZ2h0VGV4dEFyZWFdPVwibWluSGVpZ2h0VGV4dEFyZWEoKVwiXG4gICAgICBbYm9yZGVyRXJyb3JdPVwiYm9yZGVyRXJyb3IoKSB8fCAoISFzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIWlnbm9yZVNob3dFcnJvcigpKVwiXG4gICAgICBbaWNvbkxlZnRDbGFzc109XCJpY29uTGVmdENsYXNzKClcIlxuICAgICAgW3BvcG92ZXJDb250ZW50SWNvbkxlZnRdPVwicG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpXCJcbiAgICAgIFtwb3BvdmVyQ29udGVudEljb25SaWdodF09XCJwb3BvdmVyQ29udGVudEljb25SaWdodCgpXCJcbiAgICAgIFtpY29uUmlnaHRDbGFzc109XCJpY29uUmlnaHRDbGFzcygpXCJcbiAgICAgIFt6SW5kZXhQb3BvdmVyQ29udGVudF09XCJ6SW5kZXhQb3BvdmVyQ29udGVudCgpXCJcbiAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cImVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKVwiXG4gICAgICBbaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlXT1cIiEhaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgPyBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSA6KHZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSA/IHRydWUgOiBmYWxzZSlcIlxuICAgICAgW3ZhbHVlXT1cIml0ZW0gfCBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOmZpZWxkTmFtZUJpbmQoKVwiXG4gICAgICBbY2xhc3NDb250YWluZXJJbnB1dF09XCJjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICAgICAgW3Jlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmRdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpXCJcbiAgICAgIFtyZXNpemVdPVwicmVzaXplKClcIlxuICAgICAgW2NsYXNzQ29udGFpbmVyQm90dG9tSW5wdXRdPVwiY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCgpXCJcbiAgICAgIFt0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dF09XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpXCJcbiAgICAgIFt0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXRdPVwidGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KClcIlxuICAgICAgW21heExlbmd0aE51bWJlckNvdW50XT1cIm1heExlbmd0aE51bWJlckNvdW50KClcIlxuICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgICAgW2ZvY3VzVGltZU91dF09XCJmb2N1c1RpbWVPdXQoKVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dEVudGVyRXZlbnQpPVwiaGFuZGxlckVudGVySW5wdXQoJGV2ZW50KVwiXG4gICAgICAob3V0SWNvbkxlZnQpPVwiaGFuZGxlckV2ZW50SWNvbkxlZnQoJGV2ZW50KVwiXG4gICAgICAob3V0SWNvblJpZ2h0KT1cImhhbmRsZXJFdmVudEljb25SaWdodCgkZXZlbnQpXCJcbiAgICAgIChvdXRIZWlnaHRBcmVhQ2hhbmdlKT1cImhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckNvbnRyb2xGdW5jdGlvbklucHV0KCRldmVudClcIlxuICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50KVwiXG4gICAgICAob3V0Q2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bik9XCJoYW5kbGVyQ2hhbmdlVmFsdWVCeUJ1dHRvblVwRG93bigpXCIgLz5cbiAgICBAaWYgKCFpZ25vcmVDb250ZW50UmlnaHQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtcmlnaHRcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICAgICAgQGZvciAodW5pdCBvZiB1bml0c1JpZ2h0KCk7IHRyYWNrIHVuaXQpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdCBsaWJzLXVpLWlucHV0LXZhbGlkLXVuaXQtcmlnaHQgIXJvdW5kZWQtdGwtbm9uZSAhcm91bmRlZC1ibC1ub25lIGxpYnMtdWktZm9udC1oNXIge3sgY29uZmlnVW5pdFJpZ2h0KCkuY2xhc3NJbmNsdWRlIHx8ICdsaWJzLXVpLWJvcmRlci1nZW5lcmFsJyB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuIWZsZXhdPVwidW5pdFtjb25maWdVbml0UmlnaHQoKS5maWVsZEtleV0gPT09IGtleVNlbGVjdGVkVW5pdFJpZ2h0KClcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwiIWlnbm9yZVVuaXRSaWdodENsYXNzUmVhZE9ubHkoKSAmJiAocmVhZG9ubHkoKSB8fCBmYWxzZSlcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwie21heFdpZHRoOjI1MCxkaXJlY3Rpb246J2JvdHRvbScsIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKX1cIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIih1bml0W2NvbmZpZ1VuaXRSaWdodCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ118fCAnICcpIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubGlicy11aS1pbnB1dC12YWxpZC1yaWdodC1jb250ZW50LWN1c3RvbVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICA8L2Rpdj5cbiAgQGlmICghIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlU2hvd0Vycm9yKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC1lcnJvciB7eyBjbGFzc01lc3NhZ2VFcnJvckluY2x1ZGUoKSB8fCAnJyB9fVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLW1lc3NhZ2UtZXJyb3IgbGlicy11aS1mb250LWg3ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgICBbc3R5bGUubWFyZ2luTGVmdC5weF09J3JlY3RMZWZ0KCk/LndpZHRoJ1xuICAgICAgICBbaW5uZXJIdG1sXT1cIihzaW5nbGVFcnJvcigpLm1lc3NhZ2UgfHwgJyAnKXwgdHJhbnNsYXRlOnNpbmdsZUVycm9yKCkuaW50ZXJwb2xhdGVQYXJhbXNcIj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuIl19
|