@libs-ui/components-inputs-valid 0.2.306-3 → 0.2.306-5
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/index.mjs +3 -3
- package/esm2022/interfaces/function-control-event.interface.mjs +1 -1
- package/esm2022/interfaces/valid.interface.mjs +1 -1
- package/esm2022/valid.component.mjs +33 -32
- package/fesm2022/libs-ui-components-inputs-valid.mjs +32 -31
- package/fesm2022/libs-ui-components-inputs-valid.mjs.map +1 -1
- package/index.d.ts +2 -2
- package/interfaces/function-control-event.interface.d.ts +1 -1
- package/interfaces/valid.interface.d.ts +1 -1
- package/package.json +10 -10
- package/valid.component.d.ts +1 -0
|
@@ -69,10 +69,10 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
69
69
|
fieldKey: 'id',
|
|
70
70
|
fieldLabel: 'label',
|
|
71
71
|
}, {
|
|
72
|
-
transform: value => value ?? {
|
|
72
|
+
transform: (value) => value ?? {
|
|
73
73
|
fieldKey: 'id',
|
|
74
74
|
fieldLabel: 'label',
|
|
75
|
-
}
|
|
75
|
+
},
|
|
76
76
|
});
|
|
77
77
|
keySelectedUnitRight = input();
|
|
78
78
|
maxValueNumber = input();
|
|
@@ -80,7 +80,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
80
80
|
ignoreContentLeft = input();
|
|
81
81
|
ignoreContentRight = input();
|
|
82
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ì
|
|
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
|
|
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
|
|
84
84
|
validPattern = input();
|
|
85
85
|
validRequired = input();
|
|
86
86
|
validMinLength = input();
|
|
@@ -102,7 +102,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
102
102
|
ignoreUnitRightClassReadOnly = input();
|
|
103
103
|
paddingRightCustomSpecific = input(); // fix paddingRight count ko auto tính #52185
|
|
104
104
|
focusTimeOut = input();
|
|
105
|
-
debounceTimeValidate = input(0, { transform: value => value ?? 0 });
|
|
105
|
+
debounceTimeValidate = input(0, { transform: (value) => value ?? 0 });
|
|
106
106
|
// #region OUTPUT
|
|
107
107
|
outValueChange = output();
|
|
108
108
|
outSelect = output();
|
|
@@ -120,14 +120,18 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
120
120
|
elementLeftRef = viewChild('elementLeftRef');
|
|
121
121
|
constructor() {
|
|
122
122
|
effect(() => {
|
|
123
|
-
if (!this.item() || typeof this.item() !== 'object' || this.item() instanceof Array || this.item() instanceof Map && this.item() instanceof WeakMap || this.item() instanceof Set || this.item() instanceof WeakSet) {
|
|
123
|
+
if (!this.item() || typeof this.item() !== 'object' || this.item() instanceof Array || (this.item() instanceof Map && this.item() instanceof WeakMap) || this.item() instanceof Set || this.item() instanceof WeakSet) {
|
|
124
124
|
return;
|
|
125
125
|
}
|
|
126
126
|
this.getRectLeft();
|
|
127
127
|
}, { allowSignalWrites: true });
|
|
128
128
|
}
|
|
129
129
|
ngOnInit() {
|
|
130
|
-
this.outFunctionsControl.emit(
|
|
130
|
+
this.outFunctionsControl.emit(this.FunctionsControl);
|
|
131
|
+
}
|
|
132
|
+
/* FUNCTIONS */
|
|
133
|
+
get FunctionsControl() {
|
|
134
|
+
return {
|
|
131
135
|
checkIsValid: this.checkIsValid.bind(this),
|
|
132
136
|
setMessageError: this.setMessageError.bind(this),
|
|
133
137
|
blur: async () => await this.functionControlInput?.blur(),
|
|
@@ -137,10 +141,9 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
137
141
|
currentStateIsValid: this.currentStateIsValid.bind(this),
|
|
138
142
|
getElementValue: this.getElementValue.bind(this),
|
|
139
143
|
checkAndDisableUpDownButton: async (value) => await this.functionControlInput?.checkAndDisableUpDownButton(value),
|
|
140
|
-
selectAllContent: async () => await this.functionControlInput?.selectAllContent()
|
|
141
|
-
}
|
|
144
|
+
selectAllContent: async () => await this.functionControlInput?.selectAllContent(),
|
|
145
|
+
};
|
|
142
146
|
}
|
|
143
|
-
/* FUNCTIONS */
|
|
144
147
|
async currentStateIsValid() {
|
|
145
148
|
return this.singleError().message ? false : true;
|
|
146
149
|
}
|
|
@@ -182,13 +185,13 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
182
185
|
}
|
|
183
186
|
async validate(value) {
|
|
184
187
|
this.getRectLeft();
|
|
185
|
-
this.singleError.update(obj => ({ ...obj, message: undefined }));
|
|
188
|
+
this.singleError.update((obj) => ({ ...obj, message: undefined }));
|
|
186
189
|
if (this.validRequired() && this.validRequired()?.isRequired && ((typeof value === 'string' && !value.trim()) || (typeof value !== 'string' && isNil(value)))) {
|
|
187
|
-
this.singleError.set({ message:
|
|
190
|
+
this.singleError.set({ message: this.validRequired()?.message || ERROR_MESSAGE_EMPTY_VALID, interpolateParams: this.validRequired()?.interpolateParams || {} });
|
|
188
191
|
return;
|
|
189
192
|
}
|
|
190
193
|
if (typeof value === 'string' && this.validMinLength()?.message && (this.validMinLength()?.length || 0) > value.length) {
|
|
191
|
-
this.singleError.set({ message:
|
|
194
|
+
this.singleError.set({ message: this.validMinLength()?.message || ERROR_MESSAGE_MIN_LENGTH, interpolateParams: this.validMinLength()?.interpolateParams || {} });
|
|
192
195
|
return;
|
|
193
196
|
}
|
|
194
197
|
if (typeof value === 'string' && this.validPattern() && this.validPattern()?.length && value && value.trim()) {
|
|
@@ -204,21 +207,21 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
204
207
|
const patternStr = pattern.substring(1, indexOfSlash);
|
|
205
208
|
const patternFlag = pattern.substring(indexOfSlash + 1, pattern.length);
|
|
206
209
|
if (new RegExp(patternStr, patternFlag).test(value) === (valid.valuePatternShowError ?? this.valuePatternShowError())) {
|
|
207
|
-
this.singleError.set({ message:
|
|
210
|
+
this.singleError.set({ message: valid.message || ERROR_MESSAGE_PATTEN_VALID, interpolateParams: valid.interpolateParams || {} });
|
|
208
211
|
return;
|
|
209
212
|
}
|
|
210
213
|
}
|
|
211
214
|
}
|
|
212
215
|
if (this.validMinValue() && typeof value === 'number' && typeof this.minValueNumber() === 'number' && value < (this.minValueNumber() ?? Number.MIN_SAFE_INTEGER)) {
|
|
213
|
-
this.singleError.set({ message:
|
|
216
|
+
this.singleError.set({ message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID, interpolateParams: this.validMinValue()?.interpolateParams || { value: this.minValueNumber() } });
|
|
214
217
|
return;
|
|
215
218
|
}
|
|
216
219
|
if ((this.ignoreBlockInputMaxValue() || this.validMaxValue()?.message) && typeof value === 'number' && typeof this.maxValueNumber() === 'number' && value > (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {
|
|
217
|
-
this.singleError.set({ message:
|
|
220
|
+
this.singleError.set({ message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: this.validMaxValue()?.interpolateParams || { value: this.maxValueNumber() } });
|
|
218
221
|
return;
|
|
219
222
|
}
|
|
220
223
|
if (this.dataType() === 'bigint' && typeof value === 'string') {
|
|
221
|
-
const maxMinValue = BigInt(922) * BigInt(10) ** BigInt(18) / BigInt(100);
|
|
224
|
+
const maxMinValue = (BigInt(922) * BigInt(10) ** BigInt(18)) / BigInt(100);
|
|
222
225
|
const [int, decimal] = value.split('.');
|
|
223
226
|
let valueDivided = BigInt(1);
|
|
224
227
|
for (let index = 0; index < (decimal?.length || 0); index++) {
|
|
@@ -226,16 +229,22 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
226
229
|
}
|
|
227
230
|
const valueCompare = BigInt(`${int}${decimal || ''}`) * (BigInt(10000) / valueDivided);
|
|
228
231
|
if (valueCompare < -maxMinValue) {
|
|
229
|
-
this.singleError.set({
|
|
232
|
+
this.singleError.set({
|
|
233
|
+
message: this.validMinValue()?.message || ERROR_MESSAGE_MIN_VALID,
|
|
234
|
+
interpolateParams: this.validMinValue()?.interpolateParams || { value: viewDataNumberByLanguage(`-${maxMinValue / BigInt(10000)}`, true, 4, true, true) },
|
|
235
|
+
});
|
|
230
236
|
return;
|
|
231
237
|
}
|
|
232
238
|
if (valueCompare > maxMinValue) {
|
|
233
|
-
this.singleError.set({
|
|
239
|
+
this.singleError.set({
|
|
240
|
+
message: this.validMaxValue()?.message || ERROR_MESSAGE_MAX_VALID,
|
|
241
|
+
interpolateParams: this.validMaxValue()?.interpolateParams || { value: viewDataNumberByLanguage(`${maxMinValue / BigInt(10000)}`, true, 4, true, true) },
|
|
242
|
+
});
|
|
234
243
|
return;
|
|
235
244
|
}
|
|
236
245
|
}
|
|
237
246
|
if (this.maxLength && typeof value === 'string' && (this.maxLength() || Number.MAX_SAFE_INTEGER) < value.length) {
|
|
238
|
-
this.singleError.set({ message:
|
|
247
|
+
this.singleError.set({ message: this.validMaxLength()?.message || ERROR_MESSAGE_MAX_LENGTH, interpolateParams: this.validMaxLength()?.interpolateParams || { number: this.maxLength() } });
|
|
239
248
|
return;
|
|
240
249
|
}
|
|
241
250
|
if (!this.functionValid()) {
|
|
@@ -243,7 +252,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
243
252
|
}
|
|
244
253
|
const result = this.functionValid()?.(value);
|
|
245
254
|
if (result && result.then) {
|
|
246
|
-
this.singleError.set(
|
|
255
|
+
this.singleError.set(await result);
|
|
247
256
|
return;
|
|
248
257
|
}
|
|
249
258
|
this.singleError.set(result);
|
|
@@ -257,7 +266,7 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
257
266
|
return this.singleError().message ? false : true;
|
|
258
267
|
}
|
|
259
268
|
async setMessageError(message) {
|
|
260
|
-
this.singleError.update(obj => ({ ...obj, message }));
|
|
269
|
+
this.singleError.update((obj) => ({ ...obj, message }));
|
|
261
270
|
}
|
|
262
271
|
handlerControlFunctionInput(event) {
|
|
263
272
|
this.functionControlInput = event;
|
|
@@ -280,18 +289,10 @@ export class LibsUiComponentsInputsValidComponent {
|
|
|
280
289
|
clearTimeout(this.timerValueChange());
|
|
281
290
|
}
|
|
282
291
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsValidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
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 });
|
|
292
|
+
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\n [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\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #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\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [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\n 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\n [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\n 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\n 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 </div>\n @if (!!singleError().message && !ignoreShowError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n <span\n 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\"></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 });
|
|
284
293
|
}
|
|
285
294
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsValidComponent, decorators: [{
|
|
286
295
|
type: Component,
|
|
287
|
-
args: [{ selector: 'libs_ui-components-inputs-valid', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
288
|
-
TranslateModule,
|
|
289
|
-
LibsUiComponentsInputsInputComponent,
|
|
290
|
-
LibsUiComponentsLabelComponent,
|
|
291
|
-
LibsUiComponentsCheckboxSingleComponent,
|
|
292
|
-
LibsUiComponentsRadioSingleComponent,
|
|
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"] }]
|
|
296
|
+
args: [{ selector: 'libs_ui-components-inputs-valid', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsInputComponent, LibsUiComponentsLabelComponent, LibsUiComponentsCheckboxSingleComponent, LibsUiComponentsRadioSingleComponent, LibsUiComponentsPopoverComponent, LibsUiPipesGetValueOfObjectPipe], template: "@if (fieldNameBind() && item(); as item) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [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\n [class]=\"'libs-ui-input-valid w-full ' + (classInclude() ?? '')\"\n [class.items-baseline]=\"isBaselineStyle()\">\n @if (!ignoreContentLeft()) {\n <div\n #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\n [checked]=\"valueComponentSelectItem() || false\"\n [disable]=\"disable() || disableComponentSelectItem() || false\"\n (outChange)=\"handlerSelect($event.checked)\" />\n }\n @if (typeComponentSelectItem === 'radio') {\n <libs_ui-components-radio-single\n [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\n 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\n [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\n 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\n 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 </div>\n @if (!!singleError().message && !ignoreShowError()) {\n <div class=\"libs-ui-input-valid-error {{ classMessageErrorInclude() || '' }}\">\n <span\n 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\"></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"] }]
|
|
296
297
|
}], ctorParameters: () => [] });
|
|
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
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy92YWxpZC9zcmMvdmFsaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQThDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBa0Qsb0NBQW9DLEVBQTZGLE1BQU0sa0NBQWtDLENBQUM7QUFDbk8sT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeE8sT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFVckYsTUFBTSxPQUFPLG9DQUFvQztJQUMvQyxtQkFBbUI7SUFDVCxXQUFXLEdBQUcsTUFBTSxDQUFvQixFQUFF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QVc7UUFDVCxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0IsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQzt3R0FsVlUsb0NBQW9DOzRGQUFwQyxvQ0FBb0MsODRYQ3hCakQsc2pRQTJKQSw0L0JEcklZLGVBQWUsNEZBQUUsb0NBQW9DLHdoREFBRSw4QkFBOEIsNHFCQUFFLHVDQUF1QywwcEJBQUUsb0NBQW9DLDJoQkFBRSxnQ0FBZ0MsK2ZBQUUsK0JBQStCOzs0RkFFdE8sb0NBQW9DO2tCQVRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsb0NBQW9DLEVBQUUsOEJBQThCLEVBQUUsdUNBQXVDLEVBQUUsb0NBQW9DLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBJRm9jdXNBbmRCbHVyRXZlbnQsIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQsIFRZUEVfREFUQV9UWVBFX0lOUFVULCBUWVBFX0lOUFVULCBUWVBFX0lOUFVUX1JFU0laRV9NT0RFLCBUWVBFX01PREVfSU5QVVQsIFRZUEVfVEFHX0lOUFVUIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtaW5wdXQnO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcmFkaW8tc2luZ2xlJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCwgSU1lc3NhZ2VUcmFuc2xhdGUsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUFYX1ZBTElELCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELCBFUlJPUl9NRVNTQUdFX1BBVFRFTl9WQUxJRCwgZ2V0LCBpc05pbCwgc2V0LCB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRVbml0Q29uZmlnLCBJVmFsaWRMZW5ndGgsIElWYWxpZFBhdHRlcm4sIElWYWxpZFJlcXVpcmVkLCBUWVBFX0ZVTkNUSU9OX0lOUFVUX1ZBTElEIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtZ2V0LXZhbHVlLW9mLW9iamVjdCc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZhbGlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmFsaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIHNpbmdsZUVycm9yID0gc2lnbmFsPElNZXNzYWdlVHJhbnNsYXRlPih7IG1lc3NhZ2U6IHVuZGVmaW5lZCwgaW50ZXJwb2xhdGVQYXJhbXM6IHVuZGVmaW5lZCB9KTtcbiAgcHJvdGVjdGVkIHJlY3RMZWZ0ID0gc2lnbmFsPElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZXIgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB0aW1lclZhbHVlQ2hhbmdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgZnVuY3Rpb25Db250cm9sSW5wdXQ6IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaXRlbSA9IG1vZGVsLnJlcXVpcmVkPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8J3JhZGlvJyB8ICdjaGVja2JveCcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PFRZUEVfVEFHX0lOUFVUPigpO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PFRZUEVfREFUQV9UWVBFX0lOUFVUPigpO1xuICByZWFkb25seSB0eXBlSW5wdXQgPSBpbnB1dDxUWVBFX0lOUFVUPigpO1xuICByZWFkb25seSBtb2RlSW5wdXQgPSBpbnB1dDxUWVBFX01PREVfSU5QVVQ+KCk7XG4gIHJlYWRvbmx5IHJlc2V0QXV0b0NvbXBsZXRlUGFzc3dvcmQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZpeGVkRmxvYXQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaWdub3JlV2lkdGhJbnB1dDEwMCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUlucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lcklucHV0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub0JvcmRlciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tncm91bmROb25lID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkga2VlcFBsYWNlaG9sZGVyT25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYXV0b1JlbW92ZUVtb2ppID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpZ25vcmVTaG93RXJyb3IgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBib3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uTGVmdCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWNvblJpZ2h0Q2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvblJpZ2h0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB6SW5kZXhQb3BvdmVyQ29udGVudCA9IGlucHV0PG51bWJlcj4oKTtcblxuICByZWFkb25seSB1bml0c0xlZnQgPSBpbnB1dDxBcnJheTxhbnk+PigpO1xuICByZWFkb25seSBjb25maWdVbml0TGVmdCA9IGlucHV0PElJbnB1dFZhbGlkVW5pdENvbmZpZz4oe1xuICAgIGZpZWxkS2V5OiAnaWQnLFxuICAgIGZpZWxkTGFiZWw6ICdsYWJlbCcsXG4gIH0pO1xuICByZWFkb25seSBrZXlTZWxlY3RlZFVuaXRMZWZ0ID0gaW5wdXQ8YW55PigpO1xuXG4gIHJlYWRvbmx5IHVuaXRzUmlnaHQgPSBpbnB1dDxBcnJheTxhbnk+PigpO1xuICByZWFkb25seSBjb25maWdVbml0UmlnaHQgPSBpbnB1dDxJSW5wdXRWYWxpZFVuaXRDb25maWcsIElJbnB1dFZhbGlkVW5pdENvbmZpZyB8IHVuZGVmaW5lZD4oXG4gICAge1xuICAgICAgZmllbGRLZXk6ICdpZCcsXG4gICAgICBmaWVsZExhYmVsOiAnbGFiZWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgdHJhbnNmb3JtOiAodmFsdWUpID0+XG4gICAgICAgIHZhbHVlID8/IHtcbiAgICAgICAgICBmaWVsZEtleTogJ2lkJyxcbiAgICAgICAgICBmaWVsZExhYmVsOiAnbGFiZWwnLFxuICAgICAgICB9LFxuICAgIH1cbiAgKTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWRVbml0UmlnaHQgPSBpbnB1dDxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgbWF4VmFsdWVOdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pblZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuXG4gIHJlYWRvbmx5IGlnbm9yZUNvbnRlbnRMZWZ0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaWdub3JlQ29udGVudFJpZ2h0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaXNCYXNlbGluZVN0eWxlID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8gYWxpZ24taXRlbXMtYmFzZWxpbmUgZMO5bmcga2hpIGPEg24gaW5wdXQgdGjhurNuZyBow6BuZyB24bubaSB04bqldCBj4bqjIGPDoWMgcGjhuqduIGtow6FjIGTDuSBjw7MgdmFsaWRhdGUgaGF5IGLhuqV0IGPhu6kgMSBjw6FpIGfDrFxuXG4gIHJlYWRvbmx5IHZhbHVlUGF0dGVyblNob3dFcnJvciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTsgLy8gbeG6t2MgxJHhu4tuaCBraGkgdGVzdCBwYXR0ZXJuIHRy4bqjIHbhu4EgZ2nDoSB0cuG7iyBi4bqxbmcgZmFsc2Ugc+G6vSBiw6FvIGzhu5dpXG4gIHJlYWRvbmx5IHZhbGlkUGF0dGVybiA9IGlucHV0PEFycmF5PElWYWxpZFBhdHRlcm4+PigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SVZhbGlkUmVxdWlyZWQ+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWluTGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSB2YWxpZE1pblZhbHVlID0gaW5wdXQ8SU1lc3NhZ2VUcmFuc2xhdGU+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4VmFsdWUgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhMZW5ndGggPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZT4oKTtcbiAgcmVhZG9ubHkgZnVuY3Rpb25WYWxpZCA9IGlucHV0PFRZUEVfRlVOQ1RJT05fSU5QVVRfVkFMSUQ+KCk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgcG9zaXRpb25NZXNzYWdlRXJyb3JTdGFydElucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8ga2hpIGPDsyB0ZW1wbGF0ZSBsZWZ0IHbDoCByaWdodCBtw6AgbXXhu5FuIG1lc2FnZSBlcnJvciB4deG6pXQgaGnhu4duIGLhuq90IMSR4bqndSB04burIMO0IGlucHV0IHRoYXkgdsOsIGLhuq90IMSR4bqndSB04burIHRlbXBsYXRlICB0csOhaVxuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PFRZUEVfSU5QVVRfUkVTSVpFX01PREU+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IG9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoTnVtYmVyQ291bnQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNsYXNzTWVzc2FnZUVycm9ySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVVbml0UmlnaHRDbGFzc1JlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGFkZGluZ1JpZ2h0Q3VzdG9tU3BlY2lmaWMgPSBpbnB1dDxudW1iZXI+KCk7IC8vIGZpeCBwYWRkaW5nUmlnaHQgY291bnQga28gYXV0byB0w61uaCAjNTIxODVcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBkZWJvdW5jZVRpbWVWYWxpZGF0ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAwIH0pO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFZhbHVlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEljb25MZWZ0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvblJpZ2h0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tCdXR0b25MYWJlbCA9IG91dHB1dDxJQnV0dG9uPigpO1xuICByZWFkb25seSBvdXRTd2l0Y2hFdmVudExhYmVsID0gb3V0cHV0PElTd2l0Y2hFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0TGFiZWxSaWdodENsaWNrID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEVudGVySW5wdXRFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEhlaWdodEFyZWFDaGFuZ2UgPSBvdXRwdXQ8eyBpc0NoYW5nZTogYm9vbGVhbiB9PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZvY3VzQW5kQmx1ciA9IG91dHB1dDxJRm9jdXNBbmRCbHVyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24gPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHJlYWRvbmx5IGVsZW1lbnRMZWZ0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50TGVmdFJlZicpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW0oKSB8fCB0eXBlb2YgdGhpcy5pdGVtKCkgIT09ICdvYmplY3QnIHx8IHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgQXJyYXkgfHwgKHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgTWFwICYmIHRoaXMuaXRlbSgpIGluc3RhbmNlb2YgV2Vha01hcCkgfHwgdGhpcy5pdGVtKCkgaW5zdGFuY2VvZiBTZXQgfHwgdGhpcy5pdGVtKCkgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0UmVjdExlZnQoKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy5jaGVja0lzVmFsaWQuYmluZCh0aGlzKSxcbiAgICAgIHNldE1lc3NhZ2VFcnJvcjogdGhpcy5zZXRNZXNzYWdlRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIGJsdXI6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmJsdXIoKSxcbiAgICAgIGZvY3VzOiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5mb2N1cygpLFxuICAgICAgaW5zZXJ0Q29udGVudDogYXN5bmMgKGRhdGE6IHN0cmluZyB8IG51bWJlcikgPT4gYXdhaXQgdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uaW5zZXJ0Q29udGVudChkYXRhKSxcbiAgICAgIHJlc2V0VmFsdWU6IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LnJlc2V0VmFsdWUoKSxcbiAgICAgIGN1cnJlbnRTdGF0ZUlzVmFsaWQ6IHRoaXMuY3VycmVudFN0YXRlSXNWYWxpZC5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RWxlbWVudFZhbHVlOiB0aGlzLmdldEVsZW1lbnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgY2hlY2tBbmREaXNhYmxlVXBEb3duQnV0dG9uOiBhc3luYyAodmFsdWUpID0+IGF3YWl0IHRoaXMuZnVuY3Rpb25Db250cm9sSW5wdXQ/LmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZSksXG4gICAgICBzZWxlY3RBbGxDb250ZW50OiBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0Py5zZWxlY3RBbGxDb250ZW50KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3VycmVudFN0YXRlSXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVFcnJvcigpLm1lc3NhZ2UgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbkNvbnRyb2xJbnB1dD8uZ2V0RWxlbWVudFZhbHVlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMub3V0U2VsZWN0LmVtaXQodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHNldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksIHZhbHVlKTtcblxuICAgIC8vIFN1cHBvcnQgdHLGsOG7nW5nIGjhu6NwIGNhbGwgQVBJIGhv4bq3YyB2YWxpZGF0ZSBj4bqnbiB44butIGzDvSBjaGVjayB04buRbiBuaGnhu4F1IHRo4budaSBnaWFuIHRow6wgY+G6p24gZGVib3VuZCB0aW1lIMSR4buDIHRyw6FuaCBjYWxsIGxpw6puIHThu6VjXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJWYWx1ZUNoYW5nZSgpKTtcbiAgICB0aGlzLnRpbWVyVmFsdWVDaGFuZ2Uuc2V0KFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLm91dFZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgfSwgdGhpcy5kZWJvdW5jZVRpbWVWYWxpZGF0ZSgpKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25MZWZ0LmVtaXQoZXZlbnROYW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRJY29uUmlnaHQoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dEljb25SaWdodC5lbWl0KGV2ZW50TmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbkxhYmVsLmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU3dpdGNoTGFiZWwodG9nZ2xlRXZlbnQ6IElTd2l0Y2hFdmVudCkge1xuICAgIHRoaXMub3V0U3dpdGNoRXZlbnRMYWJlbC5lbWl0KHRvZ2dsZUV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKSB7XG4gICAgdGhpcy5vdXRMYWJlbFJpZ2h0Q2xpY2suZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRW50ZXJJbnB1dChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm91dEVudGVySW5wdXRFdmVudC5lbWl0KGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJIZWlnaHRBcmVhQ2hhbmdlKGV2ZW50OiB7IGlzQ2hhbmdlOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLmdldFJlY3RMZWZ0KCk7XG4gICAgdGhpcy5zaW5nbGVFcnJvci51cGRhdGUoKG9iaikgPT4gKHsgLi4ub2JqLCBtZXNzYWdlOiB1bmRlZmluZWQgfSkpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaXNSZXF1aXJlZCAmJiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLnRyaW0oKSkgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgaXNOaWwodmFsdWUpKSkpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdGhpcy52YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLnZhbGlkTWluTGVuZ3RoKCk/Lm1lc3NhZ2UgJiYgKHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubGVuZ3RoIHx8IDApID4gdmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHRoaXMudmFsaWRNaW5MZW5ndGgoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgsIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkTWluTGVuZ3RoKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHt9IH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMudmFsaWRQYXR0ZXJuKCkgJiYgdGhpcy52YWxpZFBhdHRlcm4oKT8ubGVuZ3RoICYmIHZhbHVlICYmIHZhbHVlLnRyaW0oKSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZCBvZiB0aGlzLnZhbGlkUGF0dGVybigpIHx8IFtdKSB7XG4gICAgICAgIGlmICghdmFsaWQucGF0dGVybikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBgJHt2YWxpZC5wYXR0ZXJufWA7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTbGFzaCA9IHBhdHRlcm4ubGFzdEluZGV4T2YoJy8nKTtcblxuICAgICAgICBpZiAoIWluZGV4T2ZTbGFzaCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm5TdHIgPSBwYXR0ZXJuLnN1YnN0cmluZygxLCBpbmRleE9mU2xhc2gpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuRmxhZyA9IHBhdHRlcm4uc3Vic3RyaW5nKGluZGV4T2ZTbGFzaCArIDEsIHBhdHRlcm4ubGVuZ3RoKTtcblxuICAgICAgICBpZiAobmV3IFJlZ0V4cChwYXR0ZXJuU3RyLCBwYXR0ZXJuRmxhZykudGVzdCh2YWx1ZSkgPT09ICh2YWxpZC52YWx1ZVBhdHRlcm5TaG93RXJyb3IgPz8gdGhpcy52YWx1ZVBhdHRlcm5TaG93RXJyb3IoKSkpIHtcbiAgICAgICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHZhbGlkLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9QQVRURU5fVkFMSUQsIGludGVycG9sYXRlUGFyYW1zOiB2YWxpZC5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmFsaWRNaW5WYWx1ZSgpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMubWluVmFsdWVOdW1iZXIoKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPCAodGhpcy5taW5WYWx1ZU51bWJlcigpID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWluVmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB0aGlzLm1pblZhbHVlTnVtYmVyKCkgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKHRoaXMuaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlKCkgfHwgdGhpcy52YWxpZE1heFZhbHVlKCk/Lm1lc3NhZ2UpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHRoaXMubWF4VmFsdWVOdW1iZXIoKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPiAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNYXhWYWx1ZSgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7IHZhbHVlOiB0aGlzLm1heFZhbHVlTnVtYmVyKCkgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBtYXhNaW5WYWx1ZSA9IChCaWdJbnQoOTIyKSAqIEJpZ0ludCgxMCkgKiogQmlnSW50KDE4KSkgLyBCaWdJbnQoMTAwKTtcbiAgICAgIGNvbnN0IFtpbnQsIGRlY2ltYWxdID0gdmFsdWUuc3BsaXQoJy4nKTtcbiAgICAgIGxldCB2YWx1ZURpdmlkZWQgPSBCaWdJbnQoMSk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGRlY2ltYWw/Lmxlbmd0aCB8fCAwKTsgaW5kZXgrKykge1xuICAgICAgICB2YWx1ZURpdmlkZWQgKj0gQmlnSW50KDEwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVDb21wYXJlID0gQmlnSW50KGAke2ludH0ke2RlY2ltYWwgfHwgJyd9YCkgKiAoQmlnSW50KDEwMDAwKSAvIHZhbHVlRGl2aWRlZCk7XG5cbiAgICAgIGlmICh2YWx1ZUNvbXBhcmUgPCAtbWF4TWluVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoe1xuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudmFsaWRNaW5WYWx1ZSgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUlOX1ZBTElELFxuICAgICAgICAgIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkTWluVmFsdWUoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyB2YWx1ZTogdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGAtJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlQ29tcGFyZSA+IG1heE1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnZhbGlkTWF4VmFsdWUoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZE1heFZhbHVlKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHsgdmFsdWU6IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHttYXhNaW5WYWx1ZSAvIEJpZ0ludCgxMDAwMCl9YCwgdHJ1ZSwgNCwgdHJ1ZSwgdHJ1ZSkgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAodGhpcy5tYXhMZW5ndGgoKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdGhpcy52YWxpZE1heExlbmd0aCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCwgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRNYXhMZW5ndGgoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwgeyBudW1iZXI6IHRoaXMubWF4TGVuZ3RoKCkgfSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5mdW5jdGlvblZhbGlkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuZnVuY3Rpb25WYWxpZCgpPy4odmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbikge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoYXdhaXQgcmVzdWx0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNpbmdsZUVycm9yLnNldChyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMuaXRlbSgpICYmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJWYWx1ZUNoYW5nZSgpKTtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKGdldCh0aGlzLml0ZW0sIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG5cbiAgICByZXR1cm4gdGhpcy5zaW5nbGVFcnJvcigpLm1lc3NhZ2UgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldE1lc3NhZ2VFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNpbmdsZUVycm9yLnVwZGF0ZSgob2JqKSA9PiAoeyAuLi5vYmosIG1lc3NhZ2UgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb250cm9sRnVuY3Rpb25JbnB1dChldmVudDogSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmZ1bmN0aW9uQ29udHJvbElucHV0ID0gZXZlbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1cihldmVudDogSUZvY3VzQW5kQmx1ckV2ZW50KSB7XG4gICAgdGhpcy5vdXRGb2N1c0FuZEJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlY3RMZWZ0KCkge1xuICAgIGlmICghdGhpcy5yZWN0TGVmdCgpIHx8IHRoaXMucG9zaXRpb25NZXNzYWdlRXJyb3JTdGFydElucHV0KCkpIHtcbiAgICAgIHRoaXMudGltZXIuc2V0KFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY3RMZWZ0LnNldCh0aGlzLmVsZW1lbnRMZWZ0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZhbHVlQnlCdXR0b25VcERvd24oKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duLmVtaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKCkpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyVmFsdWVDaGFuZ2UoKSk7XG4gIH1cbn1cbiIsIkBpZiAoZmllbGROYW1lQmluZCgpICYmIGl0ZW0oKTsgYXMgaXRlbSkge1xuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbFxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwiZGlzYWJsZSgpIHx8IGxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJkaXNhYmxlKCkgfHwgbGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodFwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZVwiXG4gICAgICBbcG9wb3Zlcl09XCJsYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbiB8fCBkaXNhYmxlKClcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtjb3VudF09XCIoaXRlbSB8IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGU6IGZpZWxkTmFtZUJpbmQoKSk/Lmxlbmd0aFwiXG4gICAgICAob3V0Q2xpY2tCdXR0b24pPVwiaGFuZGxlckNsaWNrQnV0dG9uTGFiZWwoJGV2ZW50KVwiXG4gICAgICAob3V0U3dpdGNoRXZlbnQpPVwiaGFuZGxlclN3aXRjaExhYmVsKCRldmVudClcIlxuICAgICAgKG91dExhYmVsUmlnaHRDbGljayk9XCJoYW5kbGVyRXZlbnRMYWJlbFJpZ2h0TGFiZWwoKVwiIC8+XG4gIH1cblxuICA8ZGl2XG4gICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0LXZhbGlkIHctZnVsbCAnICsgKGNsYXNzSW5jbHVkZSgpID8/ICcnKVwiXG4gICAgW2NsYXNzLml0ZW1zLWJhc2VsaW5lXT1cImlzQmFzZWxpbmVTdHlsZSgpXCI+XG4gICAgQGlmICghaWdub3JlQ29udGVudExlZnQoKSkge1xuICAgICAgPGRpdlxuICAgICAgICAjZWxlbWVudExlZnRSZWZcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWlucHV0LXZhbGlkLWxlZnRcIlxuICAgICAgICBbY2xhc3MuaXRlbXMtYmFzZWxpbmVdPVwiaXNCYXNlbGluZVN0eWxlKClcIj5cbiAgICAgICAgQGlmICh0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSgpOyBhcyB0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1bOHB4XVwiPlxuICAgICAgICAgICAgQGlmICh0eXBlQ29tcG9uZW50U2VsZWN0SXRlbSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZVxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhbHVlQ29tcG9uZW50U2VsZWN0SXRlbSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgZGlzYWJsZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHR5cGVDb21wb25lbnRTZWxlY3RJdGVtID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcmFkaW8tc2luZ2xlXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJ2YWx1ZUNvbXBvbmVudFNlbGVjdEl0ZW0oKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGRpc2FibGVDb21wb25lbnRTZWxlY3RJdGVtKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclNlbGVjdCgkZXZlbnQuYWN0aXZlKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubGlicy11aS1pbnB1dC12YWxpZC1sZWZ0LWNvbnRlbnQtY3VzdG9tXCIgLz5cbiAgICAgICAgQGZvciAodW5pdCBvZiB1bml0c0xlZnQoKTsgdHJhY2sgdW5pdCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC11bml0IGxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdC1sZWZ0ICFyb3VuZGVkLXRyLW5vbmUgIXJvdW5kZWQtYnItbm9uZSBsaWJzLXVpLWZvbnQtaDVyIHt7IGNvbmZpZ1VuaXRMZWZ0KCkuY2xhc3NJbmNsdWRlIHx8ICcnIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy4hZmxleF09XCJ1bml0W2NvbmZpZ1VuaXRMZWZ0KCkuZmllbGRLZXldID09PSBrZXlTZWxlY3RlZFVuaXRMZWZ0KClcIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBmYWxzZVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIGRpcmVjdGlvbjogJ2JvdHRvbScsIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKSB9XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJ1bml0W2NvbmZpZ1VuaXRMZWZ0KCkuZmllbGRMYWJlbCB8fCAnbGFiZWwnXSB8fCAnICcgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgICAgIFt0YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgIFtkYXRhVHlwZV09XCJkYXRhVHlwZSgpIHx8ICdzdHJpbmcnXCJcbiAgICAgIFt0eXBlSW5wdXRdPVwidHlwZUlucHV0KClcIlxuICAgICAgW21vZGVJbnB1dF09XCJtb2RlSW5wdXQoKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2lnbm9yZVdpZHRoSW5wdXQxMDBdPVwiaWdub3JlV2lkdGhJbnB1dDEwMCgpXCJcbiAgICAgIFt0ZXh0QXJlYUVudGVyTm90TmV3TGluZV09XCJ0ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpIHx8IGZhbHNlXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGNsYXNzSW5jbHVkZUlucHV0KCkgfHwgJycpICsgKHVuaXRzTGVmdCgpICYmIHVuaXRzTGVmdCgpPy5sZW5ndGggPyAnICFyb3VuZGVkLXRsLW5vbmUgIXJvdW5kZWQtYmwtbm9uZScgOiAnJykgKyAodW5pdHNSaWdodCgpPy5sZW5ndGggPyAnICFyb3VuZGVkLXRyLW5vbmUgIXJvdW5kZWQtYnItbm9uZScgOiAnJylcIlxuICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgW21pblZhbHVlTnVtYmVyXT1cIm1pblZhbHVlTnVtYmVyKClcIlxuICAgICAgW2ZpeGVkRmxvYXRdPVwiZml4ZWRGbG9hdCgpID8/IDFcIlxuICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgIFtvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZV09XCJvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCJ2YWx1ZVVwRG93bk51bWJlcigpXCJcbiAgICAgIFttYXhMZW5ndGhdPVwibWF4TGVuZ3RoKClcIlxuICAgICAgW3Nob3dDb3VudF09XCJzaG93Q291bnQoKVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJhdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQoKVwiXG4gICAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXIoKVwiXG4gICAgICBbYmFja2dyb3VuZE5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICBbdXNlQ29sb3JNb2RlRXhpc3RdPVwidXNlQ29sb3JNb2RlRXhpc3QoKVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKSB8fCAnJ1wiXG4gICAgICBba2VlcFBsYWNlaG9sZGVyT25seV09XCJrZWVwUGxhY2Vob2xkZXJPbmx5KClcIlxuICAgICAgW2F1dG9SZW1vdmVFbW9qaV09XCJhdXRvUmVtb3ZlRW1vamkoKVwiXG4gICAgICBbZGVmYXVsdEhlaWdodF09XCJkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW21heEhlaWdodFRleHRBcmVhXT1cIm1heEhlaWdodFRleHRBcmVhKCkgfHwgMjUwXCJcbiAgICAgIFttaW5IZWlnaHRUZXh0QXJlYV09XCJtaW5IZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgIFtib3JkZXJFcnJvcl09XCJib3JkZXJFcnJvcigpIHx8ICghIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlU2hvd0Vycm9yKCkpXCJcbiAgICAgIFtpY29uTGVmdENsYXNzXT1cImljb25MZWZ0Q2xhc3MoKVwiXG4gICAgICBbcG9wb3ZlckNvbnRlbnRJY29uTGVmdF09XCJwb3BvdmVyQ29udGVudEljb25MZWZ0KClcIlxuICAgICAgW3BvcG92ZXJDb250ZW50SWNvblJpZ2h0XT1cInBvcG92ZXJDb250ZW50SWNvblJpZ2h0KClcIlxuICAgICAgW2ljb25SaWdodENsYXNzXT1cImljb25SaWdodENsYXNzKClcIlxuICAgICAgW3pJbmRleFBvcG92ZXJDb250ZW50XT1cInpJbmRleFBvcG92ZXJDb250ZW50KClcIlxuICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwiZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpXCJcbiAgICAgIFtpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWVdPVwiISFpZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSA/IGlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSgpIDogdmFsaWRNYXhWYWx1ZSgpPy5tZXNzYWdlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgIFt2YWx1ZV09XCJpdGVtIHwgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZTogZmllbGROYW1lQmluZCgpXCJcbiAgICAgIFtjbGFzc0NvbnRhaW5lcklucHV0XT1cImNsYXNzQ29udGFpbmVySW5wdXQoKVwiXG4gICAgICBbcmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZF09XCJyZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkKClcIlxuICAgICAgW3Jlc2l6ZV09XCJyZXNpemUoKVwiXG4gICAgICBbY2xhc3NDb250YWluZXJCb3R0b21JbnB1dF09XCJjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0KClcIlxuICAgICAgW3RlbXBsYXRlTGVmdEJvdHRvbUlucHV0XT1cInRlbXBsYXRlTGVmdEJvdHRvbUlucHV0KClcIlxuICAgICAgW3RlbXBsYXRlUmlnaHRCb3R0b21JbnB1dF09XCJ0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKVwiXG4gICAgICBbbWF4TGVuZ3RoTnVtYmVyQ291bnRdPVwibWF4TGVuZ3RoTnVtYmVyQ291bnQoKVwiXG4gICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gICAgICBbZm9jdXNUaW1lT3V0XT1cImZvY3VzVGltZU91dCgpXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAob3V0RW50ZXJFdmVudCk9XCJoYW5kbGVyRW50ZXJJbnB1dCgkZXZlbnQpXCJcbiAgICAgIChvdXRJY29uTGVmdCk9XCJoYW5kbGVyRXZlbnRJY29uTGVmdCgkZXZlbnQpXCJcbiAgICAgIChvdXRJY29uUmlnaHQpPVwiaGFuZGxlckV2ZW50SWNvblJpZ2h0KCRldmVudClcIlxuICAgICAgKG91dEhlaWdodEFyZWFDaGFuZ2UpPVwiaGFuZGxlckhlaWdodEFyZWFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyQ29udHJvbEZ1bmN0aW9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1cigkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duKClcIiAvPlxuICAgIEBpZiAoIWlnbm9yZUNvbnRlbnRSaWdodCgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC1yaWdodFwiXG4gICAgICAgIFtjbGFzcy5pdGVtcy1iYXNlbGluZV09XCJpc0Jhc2VsaW5lU3R5bGUoKVwiPlxuICAgICAgICBAZm9yICh1bml0IG9mIHVuaXRzUmlnaHQoKTsgdHJhY2sgdW5pdCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pbnB1dC12YWxpZC11bml0IGxpYnMtdWktaW5wdXQtdmFsaWQtdW5pdC1yaWdodCAhcm91bmRlZC10bC1ub25lICFyb3VuZGVkLWJsLW5vbmUgbGlicy11aS1mb250LWg1ciB7eyBjb25maWdVbml0UmlnaHQoKS5jbGFzc0luY2x1ZGUgfHwgJ2xpYnMtdWktYm9yZGVyLWdlbmVyYWwnIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy4hZmxleF09XCJ1bml0W2NvbmZpZ1VuaXRSaWdodCgpLmZpZWxkS2V5XSA9PT0ga2V5U2VsZWN0ZWRVbml0UmlnaHQoKVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCIhaWdub3JlVW5pdFJpZ2h0Q2xhc3NSZWFkT25seSgpICYmIChyZWFkb25seSgpIHx8IGZhbHNlKVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IG1heFdpZHRoOiAyNTAsIGRpcmVjdGlvbjogJ2JvdHRvbScsIHpJbmRleDogekluZGV4UG9wb3ZlckNvbnRlbnQoKSB9XCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJ1bml0W2NvbmZpZ1VuaXRSaWdodCgpLmZpZWxkTGFiZWwgfHwgJ2xhYmVsJ10gfHwgJyAnIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIubGlicy11aS1pbnB1dC12YWxpZC1yaWdodC1jb250ZW50LWN1c3RvbVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoISFzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIWlnbm9yZVNob3dFcnJvcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaW5wdXQtdmFsaWQtZXJyb3Ige3sgY2xhc3NNZXNzYWdlRXJyb3JJbmNsdWRlKCkgfHwgJycgfX1cIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibGlicy11aS1tZXNzYWdlLWVycm9yIGxpYnMtdWktZm9udC1oN3IgbGlicy11aS10ZXh0LWVycm9yXCJcbiAgICAgICAgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwicmVjdExlZnQoKT8ud2lkdGhcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInNpbmdsZUVycm9yKCkubWVzc2FnZSB8fCAnICcgfCB0cmFuc2xhdGU6IHNpbmdsZUVycm9yKCkuaW50ZXJwb2xhdGVQYXJhbXNcIj48L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbn1cbiJdfQ==
|