master-control 0.3.45 → 0.3.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/textbox/textbox.component.mjs +59 -213
- package/fesm2022/master-control.mjs +59 -213
- package/fesm2022/master-control.mjs.map +1 -1
- package/lib/textbox/textbox.component.d.ts +14 -26
- package/master-control-0.3.46.tgz +0 -0
- package/package.json +1 -1
- package/master-control-0.3.45.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, input, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { MatInputModule } from '@angular/material/input';
|
|
3
3
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
@@ -11,252 +11,98 @@ import * as i4 from "@angular/common";
|
|
|
11
11
|
import * as i5 from "@angular/forms";
|
|
12
12
|
export class TextboxComponent {
|
|
13
13
|
masterService;
|
|
14
|
-
|
|
15
|
-
constructor(masterService, kvDiffers) {
|
|
14
|
+
constructor(masterService) {
|
|
16
15
|
this.masterService = masterService;
|
|
17
|
-
this.kvDiffers = kvDiffers;
|
|
18
|
-
effect(() => {
|
|
19
|
-
const f = this.field();
|
|
20
|
-
if (!f)
|
|
21
|
-
return;
|
|
22
|
-
if (f.isInputMasked == null)
|
|
23
|
-
f.isInputMasked = false;
|
|
24
|
-
this.syncUIFromRaw();
|
|
25
|
-
});
|
|
26
16
|
}
|
|
17
|
+
inputValue = null;
|
|
27
18
|
field = input.required();
|
|
28
19
|
reactiveFormControlobject = input();
|
|
29
|
-
_onChange = () => { };
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
fieldDiffer;
|
|
35
|
-
cfgDiffer;
|
|
36
|
-
styleDiffer;
|
|
37
|
-
validatorsDiffer;
|
|
20
|
+
_onChange = (inputValue) => { };
|
|
21
|
+
_unTouched = () => { };
|
|
22
|
+
maskEnabled = true;
|
|
23
|
+
inputValueDeepCopy = null;
|
|
24
|
+
// Declare Output event emitter here (class level)
|
|
38
25
|
blur = new EventEmitter();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return;
|
|
43
|
-
if (!this.fieldDiffer)
|
|
44
|
-
this.fieldDiffer = this.kvDiffers.find(f).create();
|
|
45
|
-
let changed = !!this.fieldDiffer.diff(f);
|
|
46
|
-
if (f.configData) {
|
|
47
|
-
if (!this.cfgDiffer)
|
|
48
|
-
this.cfgDiffer = this.kvDiffers.find(f.configData).create();
|
|
49
|
-
if (this.cfgDiffer.diff(f.configData))
|
|
50
|
-
changed = true;
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
if (!this.field().isInputMasked) {
|
|
28
|
+
this.field().isInputMasked = false;
|
|
51
29
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (this.styleDiffer.diff(f.controlStyle))
|
|
56
|
-
changed = true;
|
|
57
|
-
}
|
|
58
|
-
if (f.validators) {
|
|
59
|
-
if (!this.validatorsDiffer)
|
|
60
|
-
this.validatorsDiffer = this.kvDiffers.find(f.validators).create();
|
|
61
|
-
if (this.validatorsDiffer.diff(f.validators))
|
|
62
|
-
changed = true;
|
|
63
|
-
}
|
|
64
|
-
if (changed) {
|
|
65
|
-
this.onFieldConfigChanged();
|
|
30
|
+
if (this.field()?.configData?.isTextCapitalized && this.field().isInputMasked) {
|
|
31
|
+
this.inputValue = this.field()?.configData?.isTextCapitalized;
|
|
32
|
+
this.checkinputMasked();
|
|
66
33
|
}
|
|
67
34
|
}
|
|
68
|
-
onFieldConfigChanged() {
|
|
69
|
-
const oldRaw = this.inputValueDeepCopy ?? '';
|
|
70
|
-
const newRaw = this.applyCapitalization(oldRaw);
|
|
71
|
-
if (newRaw !== oldRaw) {
|
|
72
|
-
this.inputValueDeepCopy = newRaw;
|
|
73
|
-
const maskEnabled = !!this.field?.().isInputMasked;
|
|
74
|
-
const hasReactive = !!this.reactiveFormControlobject?.();
|
|
75
|
-
if (hasReactive && !maskEnabled) {
|
|
76
|
-
try {
|
|
77
|
-
this.reactiveFormControlobject().setValue(newRaw, { emitEvent: true });
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
this._onChange(newRaw);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this._onChange(newRaw);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
this.syncUIFromRaw();
|
|
88
|
-
}
|
|
89
35
|
writeValue(obj) {
|
|
90
|
-
|
|
91
|
-
const capitalized = this.applyCapitalization(raw);
|
|
92
|
-
this.inputValueDeepCopy = capitalized;
|
|
93
|
-
this.syncUIFromRaw();
|
|
36
|
+
this.inputValue = !this.masterService.checkIfValueIsEmpty(obj) ? obj : '';
|
|
94
37
|
}
|
|
38
|
+
;
|
|
95
39
|
registerOnChange(fn) {
|
|
96
40
|
this._onChange = fn;
|
|
97
41
|
}
|
|
42
|
+
;
|
|
98
43
|
registerOnTouched(fn) {
|
|
99
|
-
this.
|
|
100
|
-
}
|
|
101
|
-
setDisabledState(isDisabled) {
|
|
102
|
-
const f = this.field?.();
|
|
103
|
-
if (f)
|
|
104
|
-
f.isDisable = !!isDisabled;
|
|
105
|
-
}
|
|
106
|
-
onBeforeInput(event) {
|
|
107
|
-
const target = event.target;
|
|
108
|
-
const start = target?.selectionStart ?? 0;
|
|
109
|
-
const end = target?.selectionEnd ?? start;
|
|
110
|
-
this.lastBeforeInput = {
|
|
111
|
-
type: event.inputType,
|
|
112
|
-
data: event.data,
|
|
113
|
-
start,
|
|
114
|
-
end,
|
|
115
|
-
};
|
|
44
|
+
this._unTouched = fn;
|
|
116
45
|
}
|
|
46
|
+
;
|
|
47
|
+
setDisabledState(isDisabled) { }
|
|
48
|
+
;
|
|
117
49
|
onInputChange(event) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
start: target.selectionStart ?? this.inputValueDeepCopy.length,
|
|
125
|
-
end: target.selectionEnd ?? target.selectionStart ?? this.inputValueDeepCopy.length,
|
|
126
|
-
};
|
|
127
|
-
let newVal = this.applyIntentToRaw(this.inputValueDeepCopy, intent);
|
|
128
|
-
newVal = this.applyCapitalization(newVal);
|
|
129
|
-
if (cfg?.inputType === 'number') {
|
|
130
|
-
const min = this.normalizeNumber(cfg?.minValue);
|
|
131
|
-
const max = this.normalizeNumber(cfg?.maxValue);
|
|
132
|
-
const num = Number(newVal);
|
|
133
|
-
if (!Number.isNaN(num)) {
|
|
134
|
-
if (min !== null && num < min)
|
|
135
|
-
newVal = String(min);
|
|
136
|
-
if (max !== null && num > max)
|
|
137
|
-
newVal = String(max);
|
|
138
|
-
}
|
|
50
|
+
let min = null;
|
|
51
|
+
let max = null;
|
|
52
|
+
let value = event.target.value;
|
|
53
|
+
if (!this.masterService.checkIfValueIsEmpty(this.field()?.configData) && !this.masterService.checkIfValueIsEmpty(this.field()?.configData?.minValue) && !this.masterService.checkIfValueIsEmpty(this.field()?.configData?.maxValue)) {
|
|
54
|
+
min = parseInt(this.field()?.configData?.minValue);
|
|
55
|
+
max = parseInt(this.field()?.configData?.maxValue);
|
|
139
56
|
}
|
|
140
|
-
this.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (hasReactive && !maskEnabled) {
|
|
144
|
-
try {
|
|
145
|
-
this.reactiveFormControlobject().setValue(newVal, { emitEvent: true });
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
this._onChange(newVal);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this._onChange(newVal);
|
|
153
|
-
}
|
|
154
|
-
const display = maskEnabled ? this.maskInput(newVal) : newVal;
|
|
155
|
-
this.inputValue = display;
|
|
156
|
-
const nextCaret = this.computeNextCaret(intent, newVal.length);
|
|
157
|
-
if (target.value !== display) {
|
|
158
|
-
target.value = display;
|
|
159
|
-
try {
|
|
160
|
-
target.setSelectionRange(nextCaret, nextCaret);
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
console.log(this.inputValue);
|
|
57
|
+
if (!this.masterService.checkIfValueIsEmpty(this.field()?.configData?.inputType) && this.field()?.configData?.inputType === 'number' && !this.masterService.checkIfValueIsEmpty(max) && !this.masterService.checkIfValueIsEmpty(min)) {
|
|
58
|
+
if (parseInt(value) < min || parseInt(value) > max) {
|
|
59
|
+
event.target.value = parseInt(event.target.value.toString().slice(0, -1));
|
|
164
60
|
}
|
|
165
61
|
}
|
|
166
|
-
this.
|
|
62
|
+
this.inputValue = this.field()?.configData?.isTextCapitalized ? (event.target.value).toUpperCase() : event.target.value;
|
|
63
|
+
this.inputValueDeepCopy = JSON.parse(JSON.stringify(this.inputValue));
|
|
64
|
+
this._onChange(this.inputValue);
|
|
167
65
|
}
|
|
168
66
|
onInputBlur(event) {
|
|
169
|
-
this.
|
|
67
|
+
this._unTouched();
|
|
170
68
|
this.blur.emit(event);
|
|
69
|
+
this.checkinputMasked();
|
|
171
70
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const f = this.field?.();
|
|
176
|
-
const maskEnabled = !!f?.isInputMasked;
|
|
177
|
-
const raw = this.inputValueDeepCopy ?? '';
|
|
178
|
-
this.inputValue = maskEnabled ? this.maskInput(raw) : raw;
|
|
179
|
-
}
|
|
180
|
-
applyCapitalization(v) {
|
|
181
|
-
const f = this.field?.();
|
|
182
|
-
return f?.configData?.isTextCapitalized ? v.toUpperCase() : v;
|
|
183
|
-
}
|
|
184
|
-
normalizeNumber(v) {
|
|
185
|
-
if (this.masterService.checkIfValueIsEmpty(v))
|
|
186
|
-
return null;
|
|
187
|
-
const n = Number(v);
|
|
188
|
-
return Number.isNaN(n) ? null : n;
|
|
189
|
-
}
|
|
190
|
-
maskInput(value) {
|
|
191
|
-
if (!value || value.length < 3)
|
|
192
|
-
return value || '';
|
|
193
|
-
return value[0] + 'X'.repeat(value.length - 2) + value[value.length - 1];
|
|
194
|
-
}
|
|
195
|
-
applyIntentToRaw(raw, intent) {
|
|
196
|
-
const { type, data, start, end } = intent;
|
|
197
|
-
const s = Math.max(0, Math.min(start, raw.length));
|
|
198
|
-
const e = Math.max(s, Math.min(end, raw.length));
|
|
199
|
-
switch (type) {
|
|
200
|
-
case 'insertText': {
|
|
201
|
-
const insert = data ?? '';
|
|
202
|
-
return raw.slice(0, s) + insert + raw.slice(e);
|
|
203
|
-
}
|
|
204
|
-
case 'insertFromPaste': {
|
|
205
|
-
const paste = data ?? '';
|
|
206
|
-
return raw.slice(0, s) + paste + raw.slice(e);
|
|
207
|
-
}
|
|
208
|
-
case 'deleteContentBackward': {
|
|
209
|
-
if (s !== e)
|
|
210
|
-
return raw.slice(0, s) + raw.slice(e);
|
|
211
|
-
const idx = Math.max(0, s - 1);
|
|
212
|
-
return raw.slice(0, idx) + raw.slice(e);
|
|
213
|
-
}
|
|
214
|
-
case 'deleteContentForward': {
|
|
215
|
-
if (s !== e)
|
|
216
|
-
return raw.slice(0, s) + raw.slice(e);
|
|
217
|
-
return raw.slice(0, s) + raw.slice(Math.min(e + 1, raw.length));
|
|
218
|
-
}
|
|
219
|
-
case 'deleteByCut': {
|
|
220
|
-
return raw.slice(0, s) + raw.slice(e);
|
|
221
|
-
}
|
|
222
|
-
default:
|
|
223
|
-
return raw;
|
|
71
|
+
checkinputMasked() {
|
|
72
|
+
if (!this.field().isInputMasked) {
|
|
73
|
+
this.inputValue = this.inputValueDeepCopy;
|
|
224
74
|
}
|
|
75
|
+
return this.field().isInputMasked ? this.maskInput(this.inputValue) : this.inputValue;
|
|
225
76
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
case 'insertText':
|
|
230
|
-
case 'insertFromPaste':
|
|
231
|
-
return start + (data?.length ?? 0);
|
|
232
|
-
case 'deleteContentBackward':
|
|
233
|
-
return Math.max(0, start - (start === end ? 1 : 0));
|
|
234
|
-
case 'deleteContentForward':
|
|
235
|
-
case 'deleteByCut':
|
|
236
|
-
return start;
|
|
237
|
-
default:
|
|
238
|
-
return Math.max(0, Math.min(start, newLen));
|
|
77
|
+
maskInput(value) {
|
|
78
|
+
if (value.length > 3) {
|
|
79
|
+
this.inputValue = value[0] + 'X'.repeat(value.length - 2) + value[value.length - 1];
|
|
239
80
|
}
|
|
240
81
|
}
|
|
241
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.MasterControlService }
|
|
82
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.MasterControlService }], target: i0.ɵɵFactoryTarget.Component });
|
|
242
83
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TextboxComponent, isStandalone: true, selector: "lib-textbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, reactiveFormControlobject: { classPropertyName: "reactiveFormControlobject", publicName: "reactiveFormControlobject", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { blur: "blur" }, providers: [
|
|
243
84
|
{
|
|
244
85
|
provide: NG_VALUE_ACCESSOR,
|
|
245
|
-
useExisting:
|
|
246
|
-
multi: true
|
|
247
|
-
}
|
|
248
|
-
], ngImport: i0, template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n
|
|
86
|
+
useExisting: TextboxComponent,
|
|
87
|
+
multi: true
|
|
88
|
+
}
|
|
89
|
+
], ngImport: i0, template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n >{{ field()?.label\r\n }}<span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\"\r\n >*</span\r\n ></label\r\n>\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n'--custom-border-color': field()?.controlStyle?.borderColor ,\r\n'--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n'--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n'--custom-bg-color': field()?.controlStyle?.background ,\r\n'--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n'--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n'--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n'--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n'--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n'--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n'--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n'--custom-font-size': field()?.controlStyle?.fontSize ,\r\n'--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n'--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n'--custom-font-color': field()?.controlStyle?.color ,\r\n'--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n'--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n'--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n'--custom-width': field()?.controlStyle?.width ,\r\n}\"\r\n>\r\n @if(reactiveFormControlobject()) {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n }@else {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{field()?.configData?.helperText}}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}\r\n </mat-error>\r\n <!-- <mat-error *ngIf=\"field()?.configData?.isInvalidPattern && !masterService.checkIfValueIsEmpty(field()?.validators?.patternMessage)\">\r\n {{ field()?.validators?.patternMessage }}\r\n </mat-error> -->\r\n</mat-form-field>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>\r\n", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
249
90
|
}
|
|
250
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, decorators: [{
|
|
251
92
|
type: Component,
|
|
252
|
-
args: [{ selector: 'lib-textbox', standalone: true, imports: [
|
|
93
|
+
args: [{ selector: 'lib-textbox', standalone: true, imports: [
|
|
94
|
+
MatInputModule,
|
|
95
|
+
MatFormFieldModule,
|
|
96
|
+
CommonModule,
|
|
97
|
+
ReactiveFormsModule
|
|
98
|
+
], providers: [
|
|
253
99
|
{
|
|
254
100
|
provide: NG_VALUE_ACCESSOR,
|
|
255
|
-
useExisting:
|
|
256
|
-
multi: true
|
|
257
|
-
}
|
|
258
|
-
], template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n
|
|
259
|
-
}], ctorParameters: () => [{ type: i1.MasterControlService }
|
|
101
|
+
useExisting: TextboxComponent,
|
|
102
|
+
multi: true
|
|
103
|
+
}
|
|
104
|
+
], template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n >{{ field()?.label\r\n }}<span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\"\r\n >*</span\r\n ></label\r\n>\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n'--custom-border-color': field()?.controlStyle?.borderColor ,\r\n'--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n'--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n'--custom-bg-color': field()?.controlStyle?.background ,\r\n'--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n'--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n'--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n'--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n'--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n'--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n'--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n'--custom-font-size': field()?.controlStyle?.fontSize ,\r\n'--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n'--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n'--custom-font-color': field()?.controlStyle?.color ,\r\n'--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n'--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n'--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n'--custom-width': field()?.controlStyle?.width ,\r\n}\"\r\n>\r\n @if(reactiveFormControlobject()) {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n }@else {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{field()?.configData?.helperText}}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}\r\n </mat-error>\r\n <!-- <mat-error *ngIf=\"field()?.configData?.isInvalidPattern && !masterService.checkIfValueIsEmpty(field()?.validators?.patternMessage)\">\r\n {{ field()?.validators?.patternMessage }}\r\n </mat-error> -->\r\n</mat-form-field>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>\r\n", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"] }]
|
|
105
|
+
}], ctorParameters: () => [{ type: i1.MasterControlService }], propDecorators: { blur: [{
|
|
260
106
|
type: Output
|
|
261
107
|
}] } });
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUF1QjlGLE1BQU0sT0FBTyxnQkFBZ0I7SUFFbEI7SUFDQztJQUZWLFlBQ1MsYUFBbUMsRUFDbEMsU0FBMEI7UUFEM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRWxDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTztZQUVmLElBQUksQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJO2dCQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRXJELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFL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QUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO3dHQXJQVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiw0WUFSaEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDcENILDR6SEF5Rk0sNjdHRDlETSxjQUFjLDB1QkFBRSxrQkFBa0IsOEJBQUUsWUFBWSx1TkFBRSxtQkFBbUI7OzRGQVdwRSxnQkFBZ0I7a0JBZDVCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsYUFHckU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7NEJBQy9DLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3VIQWdDUyxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIGlucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZWZmZWN0LFxyXG4gIERvQ2hlY2ssXHJcbiAgS2V5VmFsdWVEaWZmZXJzLFxyXG4gIEtleVZhbHVlRGlmZmVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbnR5cGUgQmVmb3JlSW5wdXRJbmZvID0ge1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBkYXRhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHN0YXJ0OiBudW1iZXI7XHJcbiAgZW5kOiBudW1iZXI7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0Ym94JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtNYXRJbnB1dE1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90ZXh0Ym94LmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRib3hDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjayB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbWFzdGVyU2VydmljZTogTWFzdGVyQ29udHJvbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGt2RGlmZmVyczogS2V5VmFsdWVEaWZmZXJzXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmID0gdGhpcy5maWVsZCgpO1xyXG4gICAgICBpZiAoIWYpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChmLmlzSW5wdXRNYXNrZWQgPT0gbnVsbCkgZi5pc0lucHV0TWFza2VkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnN5bmNVSUZyb21SYXcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICByZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0OiBhbnkgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgaW5wdXRWYWx1ZURlZXBDb3B5OiBzdHJpbmcgPSAnJzsgXHJcbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7ICAgICAgICBcclxuICBwcml2YXRlIGxhc3RCZWZvcmVJbnB1dDogQmVmb3JlSW5wdXRJbmZvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZmllbGREaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcbiAgcHJpdmF0ZSBjZmdEaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcbiAgcHJpdmF0ZSBzdHlsZURpZmZlcj86IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PjtcclxuICBwcml2YXRlIHZhbGlkYXRvcnNEaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGlmICghZikgcmV0dXJuO1xyXG5cclxuICAgIGlmICghdGhpcy5maWVsZERpZmZlcikgdGhpcy5maWVsZERpZmZlciA9IHRoaXMua3ZEaWZmZXJzLmZpbmQoZikuY3JlYXRlKCk7XHJcbiAgICBsZXQgY2hhbmdlZCA9ICEhdGhpcy5maWVsZERpZmZlci5kaWZmKGYpO1xyXG5cclxuICAgIGlmIChmLmNvbmZpZ0RhdGEpIHtcclxuICAgICAgaWYgKCF0aGlzLmNmZ0RpZmZlcikgdGhpcy5jZmdEaWZmZXIgPSB0aGlzLmt2RGlmZmVycy5maW5kKGYuY29uZmlnRGF0YSkuY3JlYXRlKCk7XHJcbiAgICAgIGlmICh0aGlzLmNmZ0RpZmZlci5kaWZmKGYuY29uZmlnRGF0YSkpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmLmNvbnRyb2xTdHlsZSkge1xyXG4gICAgICBpZiAoIXRoaXMuc3R5bGVEaWZmZXIpIHRoaXMuc3R5bGVEaWZmZXIgPSB0aGlzLmt2RGlmZmVycy5maW5kKGYuY29udHJvbFN0eWxlKS5jcmVhdGUoKTtcclxuICAgICAgaWYgKHRoaXMuc3R5bGVEaWZmZXIuZGlmZihmLmNvbnRyb2xTdHlsZSkpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmLnZhbGlkYXRvcnMpIHtcclxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvcnNEaWZmZXIpIHRoaXMudmFsaWRhdG9yc0RpZmZlciA9IHRoaXMua3ZEaWZmZXJzLmZpbmQoZi52YWxpZGF0b3JzKS5jcmVhdGUoKTtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdG9yc0RpZmZlci5kaWZmKGYudmFsaWRhdG9ycykpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMub25GaWVsZENvbmZpZ0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWVsZENvbmZpZ0NoYW5nZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvbGRSYXcgPSB0aGlzLmlucHV0VmFsdWVEZWVwQ29weSA/PyAnJztcclxuICAgIGNvbnN0IG5ld1JhdyA9IHRoaXMuYXBwbHlDYXBpdGFsaXphdGlvbihvbGRSYXcpO1xyXG5cclxuICAgIGlmIChuZXdSYXcgIT09IG9sZFJhdykge1xyXG4gICAgICB0aGlzLmlucHV0VmFsdWVEZWVwQ29weSA9IG5ld1JhdztcclxuXHJcbiAgICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISF0aGlzLmZpZWxkPy4oKS5pc0lucHV0TWFza2VkO1xyXG4gICAgICBjb25zdCBoYXNSZWFjdGl2ZSA9ICEhdGhpcy5yZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0Py4oKTtcclxuICAgICAgaWYgKGhhc1JlYWN0aXZlICYmICFtYXNrRW5hYmxlZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnJlYWN0aXZlRm9ybUNvbnRyb2xvYmplY3QoKS5zZXRWYWx1ZShuZXdSYXcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgdGhpcy5fb25DaGFuZ2UobmV3UmF3KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UobmV3UmF3KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zeW5jVUlGcm9tUmF3KCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCByYXcgPSAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkob2JqKSA/IFN0cmluZyhvYmopIDogJyc7XHJcbiAgICBjb25zdCBjYXBpdGFsaXplZCA9IHRoaXMuYXBwbHlDYXBpdGFsaXphdGlvbihyYXcpO1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlRGVlcENvcHkgPSBjYXBpdGFsaXplZDtcclxuICAgIHRoaXMuc3luY1VJRnJvbVJhdygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGlmIChmKSBmLmlzRGlzYWJsZSA9ICEhaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG5cclxuICBvbkJlZm9yZUlucHV0KGV2ZW50OiBJbnB1dEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XHJcbiAgICBjb25zdCBzdGFydCA9IHRhcmdldD8uc2VsZWN0aW9uU3RhcnQgPz8gMDtcclxuICAgIGNvbnN0IGVuZCA9IHRhcmdldD8uc2VsZWN0aW9uRW5kID8/IHN0YXJ0O1xyXG4gICAgdGhpcy5sYXN0QmVmb3JlSW5wdXQgPSB7XHJcbiAgICAgIHR5cGU6IGV2ZW50LmlucHV0VHlwZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YSxcclxuICAgICAgc3RhcnQsXHJcbiAgICAgIGVuZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBmID0gdGhpcy5maWVsZD8uKCk7XHJcbiAgICBjb25zdCBjZmcgPSBmPy5jb25maWdEYXRhO1xyXG5cclxuICAgIGNvbnN0IGludGVudCA9IHRoaXMubGFzdEJlZm9yZUlucHV0ID8/IHtcclxuICAgICAgdHlwZTogJ2luc2VydFRleHQnLFxyXG4gICAgICBkYXRhOiBudWxsLFxyXG4gICAgICBzdGFydDogdGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID8/IHRoaXMuaW5wdXRWYWx1ZURlZXBDb3B5Lmxlbmd0aCxcclxuICAgICAgZW5kOiB0YXJnZXQuc2VsZWN0aW9uRW5kID8/IHRhcmdldC5zZWxlY3Rpb25TdGFydCA/PyB0aGlzLmlucHV0VmFsdWVEZWVwQ29weS5sZW5ndGgsXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBuZXdWYWwgPSB0aGlzLmFwcGx5SW50ZW50VG9SYXcodGhpcy5pbnB1dFZhbHVlRGVlcENvcHksIGludGVudCk7XHJcblxyXG4gICAgbmV3VmFsID0gdGhpcy5hcHBseUNhcGl0YWxpemF0aW9uKG5ld1ZhbCk7XHJcblxyXG4gICAgaWYgKGNmZz8uaW5wdXRUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zdCBtaW4gPSB0aGlzLm5vcm1hbGl6ZU51bWJlcihjZmc/Lm1pblZhbHVlKTtcclxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5ub3JtYWxpemVOdW1iZXIoY2ZnPy5tYXhWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcihuZXdWYWwpO1xyXG4gICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBudW0gPCBtaW4pIG5ld1ZhbCA9IFN0cmluZyhtaW4pO1xyXG4gICAgICAgIGlmIChtYXggIT09IG51bGwgJiYgbnVtID4gbWF4KSBuZXdWYWwgPSBTdHJpbmcobWF4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5wdXRWYWx1ZURlZXBDb3B5ID0gbmV3VmFsO1xyXG5cclxuICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISFmPy5pc0lucHV0TWFza2VkO1xyXG4gICAgY29uc3QgaGFzUmVhY3RpdmUgPSAhIXRoaXMucmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdD8uKCk7XHJcblxyXG4gICAgaWYgKGhhc1JlYWN0aXZlICYmICFtYXNrRW5hYmxlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMucmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpLnNldFZhbHVlKG5ld1ZhbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKG5ld1ZhbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29uQ2hhbmdlKG5ld1ZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlzcGxheSA9IG1hc2tFbmFibGVkID8gdGhpcy5tYXNrSW5wdXQobmV3VmFsKSA6IG5ld1ZhbDtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGRpc3BsYXk7XHJcblxyXG4gICAgY29uc3QgbmV4dENhcmV0ID0gdGhpcy5jb21wdXRlTmV4dENhcmV0KGludGVudCwgbmV3VmFsLmxlbmd0aCk7XHJcbiAgICBpZiAodGFyZ2V0LnZhbHVlICE9PSBkaXNwbGF5KSB7XHJcbiAgICAgIHRhcmdldC52YWx1ZSA9IGRpc3BsYXk7XHJcbiAgICAgIHRyeSB7IHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShuZXh0Q2FyZXQsIG5leHRDYXJldCk7IH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuaW5wdXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RCZWZvcmVJbnB1dCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBvbklucHV0Qmx1cihldmVudD86IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRGb2N1cygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1VJRnJvbVJhdygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISFmPy5pc0lucHV0TWFza2VkO1xyXG4gICAgY29uc3QgcmF3ID0gdGhpcy5pbnB1dFZhbHVlRGVlcENvcHkgPz8gJyc7XHJcbiAgICB0aGlzLmlucHV0VmFsdWUgPSBtYXNrRW5hYmxlZCA/IHRoaXMubWFza0lucHV0KHJhdykgOiByYXc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q2FwaXRhbGl6YXRpb24odjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIHJldHVybiBmPy5jb25maWdEYXRhPy5pc1RleHRDYXBpdGFsaXplZCA/IHYudG9VcHBlckNhc2UoKSA6IHY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZU51bWJlcih2OiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLm1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eSh2KSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBuID0gTnVtYmVyKHYpO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IG51bGwgOiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXNrSW5wdXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8IDMpIHJldHVybiB2YWx1ZSB8fCAnJztcclxuICAgIHJldHVybiB2YWx1ZVswXSArICdYJy5yZXBlYXQodmFsdWUubGVuZ3RoIC0gMikgKyB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlJbnRlbnRUb1JhdyhyYXc6IHN0cmluZywgaW50ZW50OiBCZWZvcmVJbnB1dEluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyB0eXBlLCBkYXRhLCBzdGFydCwgZW5kIH0gPSBpbnRlbnQ7XHJcbiAgICBjb25zdCBzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc3RhcnQsIHJhdy5sZW5ndGgpKTtcclxuICAgIGNvbnN0IGUgPSBNYXRoLm1heChzLCBNYXRoLm1pbihlbmQsIHJhdy5sZW5ndGgpKTtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaW5zZXJ0VGV4dCc6IHtcclxuICAgICAgICBjb25zdCBpbnNlcnQgPSBkYXRhID8/ICcnO1xyXG4gICAgICAgIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyBpbnNlcnQgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW5zZXJ0RnJvbVBhc3RlJzoge1xyXG4gICAgICAgIGNvbnN0IHBhc3RlID0gZGF0YSA/PyAnJztcclxuICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDAsIHMpICsgcGFzdGUgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJzoge1xyXG4gICAgICAgIGlmIChzICE9PSBlKSByZXR1cm4gcmF3LnNsaWNlKDAsIHMpICsgcmF3LnNsaWNlKGUpO1xyXG4gICAgICAgIGNvbnN0IGlkeCA9IE1hdGgubWF4KDAsIHMgLSAxKTtcclxuICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDAsIGlkeCkgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEZvcndhcmQnOiB7XHJcbiAgICAgICAgaWYgKHMgIT09IGUpIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgICAgcmV0dXJuIHJhdy5zbGljZSgwLCBzKSArIHJhdy5zbGljZShNYXRoLm1pbihlICsgMSwgcmF3Lmxlbmd0aCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZUJ5Q3V0Jzoge1xyXG4gICAgICAgIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcmF3O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlTmV4dENhcmV0KGludGVudDogQmVmb3JlSW5wdXRJbmZvLCBuZXdMZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IHR5cGUsIGRhdGEsIHN0YXJ0LCBlbmQgfSA9IGludGVudDtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpbnNlcnRUZXh0JzpcclxuICAgICAgY2FzZSAnaW5zZXJ0RnJvbVBhc3RlJzpcclxuICAgICAgICByZXR1cm4gc3RhcnQgKyAoZGF0YT8ubGVuZ3RoID8/IDApO1xyXG4gICAgICBjYXNlICdkZWxldGVDb250ZW50QmFja3dhcmQnOlxyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBzdGFydCAtIChzdGFydCA9PT0gZW5kID8gMSA6IDApKTtcclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEZvcndhcmQnOlxyXG4gICAgICBjYXNlICdkZWxldGVCeUN1dCc6XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihzdGFydCwgbmV3TGVuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiPGxhYmVsXHJcbiAgY2xhc3M9XCJmaWVsZC1sYWJsZVwiXHJcbiAgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LmlzVmlzaWJsZSAmJiBmaWVsZCgpLmlzU2hvd0xhYmVsXCJcclxuPlxyXG4gIHt7IGZpZWxkKCk/LmxhYmVsIH19XHJcbiAgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkXCIgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRcIj4qPC9zcGFuPlxyXG48L2xhYmVsPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkXHJcbiAgY2xhc3M9XCJ3LTEwMFwiXHJcbiAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICpuZ0lmPVwiZmllbGQoKSAmJiBmaWVsZCgpPy5pc1Zpc2libGVcIlxyXG4gIFtuZ1N0eWxlXT1cIntcclxuICAgICctLWN1c3RvbS1ib3JkZXItY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlckNvbG9yICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItd2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlcldpZHRoICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItcmFkaXVzJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ib3JkZXJSYWRpdXMgLFxyXG4gICAgJy0tY3VzdG9tLWJnLWNvbG9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5iYWNrZ3JvdW5kICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQm9yZGVyQ29sb3IgLFxyXG4gICAgJy0tY3VzdG9tLWJvcmRlci13aWR0aC1mb2N1cyc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9jdXNCb3JkZXJXaWR0aCAsXHJcbiAgICAnLS1jdXN0b20tYmctY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQmFja2dyb3VuZCAsXHJcbiAgICAnLS1jdXN0b20tYm9yZGVyLWNvbG9yLWhvdmVyJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ob3ZlckJvcmRlckNvbG9yICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItd2lkdGgtaG92ZXInOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmhvdmVyQm9yZGVyV2lkdGggLFxyXG4gICAgJy0tY3VzdG9tLWJvcmRlci1jb2xvci1lcnJvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZXJyb3JCb3JkZXJDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tYm9yZGVyLXdpZHRoLWVycm9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5lcnJvckJvcmRlcldpZHRoICxcclxuICAgICctLWN1c3RvbS1mb250LXNpemUnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRTaXplICxcclxuICAgICctLWN1c3RvbS1mb250LXdlaWdodCc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9udFdlaWdodCAsXHJcbiAgICAnLS1jdXN0b20tZm9udC1mYW1pbHknOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRGYW1pbHkgLFxyXG4gICAgJy0tY3VzdG9tLWZvbnQtY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmNvbG9yICxcclxuICAgICctLWN1c3RvbS1jYXJldC1jb2xvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uY2FyZXRDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tZm9udC1jb2xvci1kaXNhYmxlZCcgOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmRpc2FibGVDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tYmctY29sb3ItZGlzYWJsZWQnIDogZmllbGQoKT8uY29udHJvbFN0eWxlPy5kaXNhYmxlQmFja2dyb3VuZCAsXHJcbiAgICAnLS1jdXN0b20td2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LndpZHRoXHJcbiAgfVwiXHJcbj5cclxuXHJcbiAgQGlmIChyZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0KCkgJiYgIWZpZWxkKCk/LmlzSW5wdXRNYXNrZWQpIHtcclxuICAgIDxpbnB1dFxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgICBbaWRdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgICBbbWluTGVuZ3RoXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/Lm1pbkxlbmd0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5cIlxyXG4gICAgICAoYmVmb3JlaW5wdXQpPVwib25CZWZvcmVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xdPVwicmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpXCJcclxuICAgIC8+XHJcbiAgfSBAZWxzZSB7XHJcblxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgICBbaWRdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgICBbbWluTGVuZ3RoXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/Lm1pbkxlbmd0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5cIlxyXG4gICAgICAoYmVmb3JlaW5wdXQpPVwib25CZWZvcmVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxyXG4gICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXHJcbiAgICAvPlxyXG4gIH1cclxuXHJcbiAgPG1hdC1oaW50ICpuZ0lmPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaGVscGVyVGV4dFwiPnt7IGZpZWxkKCk/LmNvbmZpZ0RhdGE/LmhlbHBlclRleHQgfX08L21hdC1oaW50PlxyXG5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LnJlcXVpcmVkTWVzc2FnZSB8fCAnVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHknIH19XHJcbiAgPC9tYXQtZXJyb3I+XHJcblxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZhbHNlXCI+XHJcbiAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucmVxdWlyZWRNZXNzYWdlIH19LlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZhbHNlXCI+XHJcbiAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVybk1lc3NhZ2UgfX0uXHJcbjwvZGl2PiJdfQ==
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBcUI5RixNQUFNLE9BQU8sZ0JBQWdCO0lBQ1I7SUFBbkIsWUFBbUIsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO0lBQUUsQ0FBQztJQUMxRCxVQUFVLEdBQVEsSUFBSSxDQUFDO0lBQ3ZCLEtBQUssR0FBUyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDcEMseUJBQXlCLEdBQVMsS0FBSyxFQUFPLENBQUM7SUFFL0MsU0FBUyxHQUFRLENBQUMsVUFBYyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDeEMsVUFBVSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUMzQixXQUFXLEdBQVEsSUFBSSxDQUFDO0lBQ3hCLGtCQUFrQixHQUFPLElBQUksQ0FBQztJQUU3QixrREFBa0Q7SUFDekMsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFF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S0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7d0dBdkVVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDRZQVJoQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxnQkFBZ0I7Z0JBQzdCLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkN4QkgsMHJIQXFGQSw2N0dEMUVJLGNBQWMsMHVCQUNkLGtCQUFrQiw4QkFDbEIsWUFBWSx1TkFDWixtQkFBbUI7OzRGQVlWLGdCQUFnQjtrQkFuQjVCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixtQkFBbUI7cUJBQ3BCLGFBR1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxrQkFBa0I7NEJBQzdCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3lGQWNTLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRleHRib3gnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUgLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXh0Ym94LmNvbXBvbmVudC5jc3MnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGJveENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWFzdGVyU2VydmljZSA6IE1hc3RlckNvbnRyb2xTZXJ2aWNlKXt9XHJcbiAgaW5wdXRWYWx1ZTogYW55ID0gbnVsbDtcclxuICBmaWVsZCA6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICByZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0IDogYW55ID0gaW5wdXQ8YW55PigpO1xyXG5cclxuICBfb25DaGFuZ2U6IGFueSA9IChpbnB1dFZhbHVlOmFueSkgPT4ge307XHJcbiAgX3VuVG91Y2hlZDogYW55ID0gKCkgPT4ge307XHJcbiAgbWFza0VuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgaW5wdXRWYWx1ZURlZXBDb3B5OmFueSA9IG51bGw7XHJcblxyXG4gICAvLyBEZWNsYXJlIE91dHB1dCBldmVudCBlbWl0dGVyIGhlcmUgKGNsYXNzIGxldmVsKVxyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICBuZ09uSW5pdCgpIHtcclxuICAgIGlmKCF0aGlzLmZpZWxkKCkuaXNJbnB1dE1hc2tlZCl7XHJcbiAgICAgIHRoaXMuZmllbGQoKS5pc0lucHV0TWFza2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGE/LmlzVGV4dENhcGl0YWxpemVkICYmIHRoaXMuZmllbGQoKS5pc0lucHV0TWFza2VkKXtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5pc1RleHRDYXBpdGFsaXplZDtcclxuICAgICAgdGhpcy5jaGVja2lucHV0TWFza2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZHtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZT0hdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkob2JqKSA/IG9iaiA6ICcnO1xyXG4gIH07XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfTtcclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZHtcclxuICAgIHRoaXMuX3VuVG91Y2hlZCA9IGZuO1xyXG4gIH07XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWR7fTtcclxuXHJcbiAgb25JbnB1dENoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgbWluIDogYW55ID0gbnVsbDtcclxuICAgIGxldCBtYXggOiBhbnk9IG51bGw7XHJcbiAgICBsZXQgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBpZighdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhKSAmJiAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5taW5WYWx1ZSkgJiYgIXRoaXMubWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8ubWF4VmFsdWUpKSB7XHJcbiAgICAgIG1pbiA9IHBhcnNlSW50KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8ubWluVmFsdWUpO1xyXG4gICAgICBtYXggPSBwYXJzZUludCh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGE/Lm1heFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlKSAmJiB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGE/LmlucHV0VHlwZSA9PT0gJ251bWJlcicgJiYgIXRoaXMubWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KG1heCkgJiYgIXRoaXMubWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KG1pbikpIHtcclxuICAgICAgaWYocGFyc2VJbnQodmFsdWUpIDwgbWluIHx8IHBhcnNlSW50KHZhbHVlKSA+IG1heCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZS50b1N0cmluZygpLnNsaWNlKDAsIC0xKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8uaXNUZXh0Q2FwaXRhbGl6ZWQgPyAoZXZlbnQudGFyZ2V0LnZhbHVlKS50b1VwcGVyQ2FzZSgpIDogZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlRGVlcENvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW5wdXRWYWx1ZSkpO1xyXG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5pbnB1dFZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRCbHVyKGV2ZW50PzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl91blRvdWNoZWQoKTtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcclxuICAgIHRoaXMuY2hlY2tpbnB1dE1hc2tlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tpbnB1dE1hc2tlZCgpIHtcclxuICAgIGlmKCF0aGlzLmZpZWxkKCkuaXNJbnB1dE1hc2tlZCl7XHJcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZURlZXBDb3B5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQoKS5pc0lucHV0TWFza2VkID8gdGhpcy5tYXNrSW5wdXQodGhpcy5pbnB1dFZhbHVlKSA6IHRoaXMuaW5wdXRWYWx1ZTtcclxuICB9XHJcblxyXG4gIG1hc2tJbnB1dCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMyl7XHJcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICB2YWx1ZVswXSArICdYJy5yZXBlYXQodmFsdWUubGVuZ3RoIC0gMikgKyB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGxhYmVsXHJcbiAgY2xhc3M9XCJmaWVsZC1sYWJsZVwiXHJcbiAgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LmlzVmlzaWJsZSAmJiBmaWVsZCgpLmlzU2hvd0xhYmVsXCJcclxuICA+e3sgZmllbGQoKT8ubGFiZWxcclxuICB9fTxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZFwiICpuZ0lmPVwiZmllbGQoKSAmJiBmaWVsZCgpPy52YWxpZGF0b3JzPy5pc1JlcXVpcmVkXCJcclxuICAgID4qPC9zcGFuXHJcbiAgPjwvbGFiZWxcclxuPlxyXG48bWF0LWZvcm0tZmllbGRcclxuICBjbGFzcz1cInctMTAwXCJcclxuICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LmlzVmlzaWJsZVwiXHJcbiAgW25nU3R5bGVdPVwie1xyXG4nLS1jdXN0b20tYm9yZGVyLWNvbG9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ib3JkZXJDb2xvciAsXHJcbictLWN1c3RvbS1ib3JkZXItd2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlcldpZHRoICxcclxuJy0tY3VzdG9tLWJvcmRlci1yYWRpdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlclJhZGl1cyAsXHJcbictLWN1c3RvbS1iZy1jb2xvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uYmFja2dyb3VuZCAsXHJcbictLWN1c3RvbS1ib3JkZXItY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQm9yZGVyQ29sb3IgLFxyXG4nLS1jdXN0b20tYm9yZGVyLXdpZHRoLWZvY3VzJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5mb2N1c0JvcmRlcldpZHRoICxcclxuJy0tY3VzdG9tLWJnLWNvbG9yLWZvY3VzJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5mb2N1c0JhY2tncm91bmQgLFxyXG4nLS1jdXN0b20tYm9yZGVyLWNvbG9yLWhvdmVyJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ob3ZlckJvcmRlckNvbG9yICxcclxuJy0tY3VzdG9tLWJvcmRlci13aWR0aC1ob3Zlcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uaG92ZXJCb3JkZXJXaWR0aCAsXHJcbictLWN1c3RvbS1ib3JkZXItY29sb3ItZXJyb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmVycm9yQm9yZGVyQ29sb3IgLFxyXG4nLS1jdXN0b20tYm9yZGVyLXdpZHRoLWVycm9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5lcnJvckJvcmRlcldpZHRoICxcclxuJy0tY3VzdG9tLWZvbnQtc2l6ZSc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9udFNpemUgLFxyXG4nLS1jdXN0b20tZm9udC13ZWlnaHQnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRXZWlnaHQgLFxyXG4nLS1jdXN0b20tZm9udC1mYW1pbHknOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRGYW1pbHkgLFxyXG4nLS1jdXN0b20tZm9udC1jb2xvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uY29sb3IgLFxyXG4nLS1jdXN0b20tY2FyZXQtY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmNhcmV0Q29sb3IgLFxyXG4nLS1jdXN0b20tZm9udC1jb2xvci1kaXNhYmxlZCcgOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmRpc2FibGVDb2xvciAsXHJcbictLWN1c3RvbS1iZy1jb2xvci1kaXNhYmxlZCcgOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmRpc2FibGVCYWNrZ3JvdW5kICxcclxuJy0tY3VzdG9tLXdpZHRoJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy53aWR0aCAsXHJcbn1cIlxyXG4+XHJcbiAgQGlmKHJlYWN0aXZlRm9ybUNvbnRyb2xvYmplY3QoKSkge1xyXG4gIDxpbnB1dFxyXG4gICAgbWF0SW5wdXRcclxuICAgIGF1dG9jb21wbGV0ZT1cIm5vbmVcIlxyXG4gICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgW25hbWVdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgIFtpZF09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgIFttYXhMZW5ndGhdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ubWF4TGVuZ3RoXCJcclxuICAgIFttaW5MZW5ndGhdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ubWluTGVuZ3RoXCJcclxuICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgW3JlcXVpcmVkXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRcIlxyXG4gICAgW3BhdHRlcm5dPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVyblwiXHJcbiAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxyXG4gICAgW2Zvcm1Db250cm9sXT1cInJlYWN0aXZlRm9ybUNvbnRyb2xvYmplY3QoKVwiXHJcbiAgLz5cclxuICB9QGVsc2Uge1xyXG4gIDxpbnB1dFxyXG4gICAgbWF0SW5wdXRcclxuICAgIGF1dG9jb21wbGV0ZT1cIm5vbmVcIlxyXG4gICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgW25hbWVdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgIFtpZF09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgIFttYXhMZW5ndGhdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ubWF4TGVuZ3RoXCJcclxuICAgIFttaW5MZW5ndGhdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ubWluTGVuZ3RoXCJcclxuICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgW3JlcXVpcmVkXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRcIlxyXG4gICAgW3BhdHRlcm5dPVwiZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVyblwiXHJcbiAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxyXG4gIC8+XHJcbiAgfVxyXG4gICAgPG1hdC1oaW50ICpuZ0lmPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaGVscGVyVGV4dFwiPnt7ZmllbGQoKT8uY29uZmlnRGF0YT8uaGVscGVyVGV4dH19PC9tYXQtaGludD5cclxuXHJcbiAgPG1hdC1lcnJvciAqbmdJZj1cImZhbHNlXCI+XHJcbiAgICB7eyBmaWVsZCgpPy52YWxpZGF0b3JzPy5pc1JlcXVpcmVkTWVzc2FnZSB9fVxyXG4gIDwvbWF0LWVycm9yPlxyXG4gIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cImZpZWxkKCk/LmNvbmZpZ0RhdGE/LmlzSW52YWxpZFBhdHRlcm4gJiYgIW1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWVsZCgpPy52YWxpZGF0b3JzPy5wYXR0ZXJuTWVzc2FnZSlcIj5cclxuICAgIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5NZXNzYWdlIH19XHJcbiAgPC9tYXQtZXJyb3I+IC0tPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG48ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiZmFsc2VcIj5cclxuICB7eyBmaWVsZCgpPy52YWxpZGF0b3JzPy5pc1JlcXVpcmVkTWVzc2FnZSB9fS5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJmYWxzZVwiPlxyXG4gIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5NZXNzYWdlIH19LlxyXG48L2Rpdj5cclxuIl19
|