valtech-components 2.0.393 → 2.0.395
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/components/molecules/multi-select-simple/multi-select-simple.component.mjs +88 -131
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +83 -116
- package/esm2022/lib/components/organisms/form/form.component.mjs +117 -78
- package/fesm2022/valtech-components.mjs +284 -321
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/multi-select-simple/multi-select-simple.component.d.ts +9 -7
- package/lib/components/molecules/select-search/select-search.component.d.ts +9 -6
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/lib/components/organisms/form/form.component.d.ts +14 -1
- package/package.json +1 -1
package/esm2022/lib/components/molecules/multi-select-simple/multi-select-simple.component.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, forwardRef, inject, Input, ViewChild
|
|
2
|
+
import { ChangeDetectorRef, Component, forwardRef, inject, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { IonicModule } from '@ionic/angular';
|
|
5
5
|
import { LangService } from '../../../services/lang-provider/lang-provider.service';
|
|
@@ -15,48 +15,13 @@ export class MultiSelectSimpleComponent {
|
|
|
15
15
|
this.valueProperty = 'id';
|
|
16
16
|
this.placeholder = '';
|
|
17
17
|
this.langService = inject(LangService);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
this.displayValue = computed(() => {
|
|
26
|
-
const selected = this.selectedValues();
|
|
27
|
-
if (selected.length === 0) {
|
|
28
|
-
return '';
|
|
29
|
-
}
|
|
30
|
-
if (selected.length === 1) {
|
|
31
|
-
const option = this.getOptionByValue(selected[0]);
|
|
32
|
-
return option ? option[this.labelProperty] : '';
|
|
33
|
-
}
|
|
34
|
-
return `${selected.length} elementos seleccionados`;
|
|
35
|
-
});
|
|
36
|
-
this.filteredOptions = computed(() => {
|
|
37
|
-
// Use signal instead of props directly
|
|
38
|
-
const options = this.optionsSignal();
|
|
39
|
-
const search = this.searchTerm().toLowerCase();
|
|
40
|
-
// Debug
|
|
41
|
-
console.log('[MultiSelectSimple] filteredOptions computed:', {
|
|
42
|
-
optionsCount: options.length,
|
|
43
|
-
searchTerm: search,
|
|
44
|
-
options: options.slice(0, 3) // Primeras 3 opciones
|
|
45
|
-
});
|
|
46
|
-
if (!search) {
|
|
47
|
-
return options;
|
|
48
|
-
}
|
|
49
|
-
return options.filter(option => {
|
|
50
|
-
const label = option[this.labelProperty]
|
|
51
|
-
? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())
|
|
52
|
-
: '';
|
|
53
|
-
const value = option[this.valueProperty]
|
|
54
|
-
? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())
|
|
55
|
-
: '';
|
|
56
|
-
const searchTerm = replaceSpecialChars(search);
|
|
57
|
-
return label.includes(searchTerm) || value.includes(searchTerm);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
18
|
+
this.changeDetector = inject(ChangeDetectorRef);
|
|
19
|
+
// Classic Angular properties
|
|
20
|
+
this.isOpen = false;
|
|
21
|
+
this.searchTerm = '';
|
|
22
|
+
this.selectedValues = [];
|
|
23
|
+
this.displayValue = '';
|
|
24
|
+
this.filteredOptions = [];
|
|
60
25
|
this.searchPlaceholder = '';
|
|
61
26
|
// ControlValueAccessor
|
|
62
27
|
this.onChange = (_value) => { };
|
|
@@ -65,52 +30,29 @@ export class MultiSelectSimpleComponent {
|
|
|
65
30
|
this.searchPlaceholder = this.langService.getText('_global', 'search', 'Buscar');
|
|
66
31
|
// Close dropdown when clicking outside
|
|
67
32
|
document.addEventListener('click', this.handleClickOutside.bind(this));
|
|
68
|
-
// Debug effect to track when filteredOptions changes
|
|
69
|
-
effect(() => {
|
|
70
|
-
const options = this.filteredOptions();
|
|
71
|
-
console.log('[MultiSelectSimple] EFFECT - filteredOptions changed:', {
|
|
72
|
-
optionsCount: options.length,
|
|
73
|
-
options: options,
|
|
74
|
-
timestamp: new Date().toLocaleTimeString()
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
33
|
}
|
|
78
34
|
ngOnInit() {
|
|
79
|
-
console.log('[MultiSelectSimple] ngOnInit:', {
|
|
80
|
-
props: !!this.props,
|
|
81
|
-
options: this.props?.options?.length || 0,
|
|
82
|
-
control: !!this.props?.control
|
|
83
|
-
});
|
|
84
|
-
// Update options signal
|
|
85
|
-
if (this.props?.options) {
|
|
86
|
-
this.optionsSignal.set(this.props.options);
|
|
87
|
-
}
|
|
88
35
|
this.applyDefaultValue();
|
|
36
|
+
this.initializeOptions();
|
|
89
37
|
this.syncSelectedValues();
|
|
38
|
+
this.updateDisplayValue();
|
|
90
39
|
}
|
|
91
40
|
ngOnDestroy() {
|
|
92
41
|
document.removeEventListener('click', this.handleClickOutside.bind(this));
|
|
93
42
|
}
|
|
94
43
|
ngOnChanges(changes) {
|
|
95
|
-
console.log('[MultiSelectSimple] ngOnChanges:', {
|
|
96
|
-
hasPropsChange: !!changes['props'],
|
|
97
|
-
props: !!this.props,
|
|
98
|
-
options: this.props?.options?.length || 0,
|
|
99
|
-
propsOptions: this.props?.options
|
|
100
|
-
});
|
|
101
44
|
if (changes['props'] && this.props) {
|
|
102
|
-
|
|
103
|
-
if (this.props.options) {
|
|
104
|
-
console.log('[MultiSelectSimple] Updating optionsSignal with:', this.props.options);
|
|
105
|
-
this.optionsSignal.set(this.props.options);
|
|
106
|
-
}
|
|
45
|
+
this.initializeOptions();
|
|
107
46
|
this.syncSelectedValues();
|
|
47
|
+
this.updateDisplayValue();
|
|
48
|
+
this.changeDetector.detectChanges();
|
|
108
49
|
}
|
|
109
50
|
}
|
|
110
51
|
// ControlValueAccessor implementation
|
|
111
52
|
writeValue(value) {
|
|
112
53
|
const valueArray = this.parseValue(value);
|
|
113
|
-
this.selectedValues
|
|
54
|
+
this.selectedValues = valueArray;
|
|
55
|
+
this.updateDisplayValue();
|
|
114
56
|
}
|
|
115
57
|
registerOnChange(fn) {
|
|
116
58
|
this.onChange = fn;
|
|
@@ -124,8 +66,8 @@ export class MultiSelectSimpleComponent {
|
|
|
124
66
|
// Component methods
|
|
125
67
|
toggleDropdown(event) {
|
|
126
68
|
event.stopPropagation();
|
|
127
|
-
this.isOpen
|
|
128
|
-
if (this.isOpen
|
|
69
|
+
this.isOpen = !this.isOpen;
|
|
70
|
+
if (this.isOpen) {
|
|
129
71
|
this.onTouched();
|
|
130
72
|
// Focus search bar when opening
|
|
131
73
|
setTimeout(() => {
|
|
@@ -137,45 +79,48 @@ export class MultiSelectSimpleComponent {
|
|
|
137
79
|
}
|
|
138
80
|
}
|
|
139
81
|
onSearch(event) {
|
|
140
|
-
this.searchTerm
|
|
82
|
+
this.searchTerm = event.detail.value || '';
|
|
83
|
+
this.filterOptions();
|
|
141
84
|
}
|
|
142
85
|
toggleOption(option) {
|
|
143
|
-
const value = String(option[this.valueProperty]);
|
|
144
|
-
const currentSelected = this.selectedValues();
|
|
86
|
+
const value = String(option[this.valueProperty]);
|
|
145
87
|
if (this.isSelected(option)) {
|
|
146
88
|
// Remove from selection
|
|
147
|
-
this.selectedValues.
|
|
89
|
+
this.selectedValues = this.selectedValues.filter(v => v !== value);
|
|
148
90
|
}
|
|
149
91
|
else {
|
|
150
92
|
// Add to selection
|
|
151
|
-
this.selectedValues
|
|
93
|
+
this.selectedValues = [...this.selectedValues, value];
|
|
152
94
|
}
|
|
95
|
+
this.updateDisplayValue();
|
|
153
96
|
this.emitValue();
|
|
154
97
|
}
|
|
155
98
|
selectAll() {
|
|
156
|
-
const allValues = this.filteredOptions
|
|
157
|
-
const currentSelected = this.selectedValues();
|
|
99
|
+
const allValues = this.filteredOptions.map(option => String(option[this.valueProperty]));
|
|
158
100
|
// Add only new values to avoid duplicates
|
|
159
|
-
const newValues = allValues.filter(value => !
|
|
160
|
-
this.selectedValues
|
|
101
|
+
const newValues = allValues.filter(value => !this.selectedValues.includes(value));
|
|
102
|
+
this.selectedValues = [...this.selectedValues, ...newValues];
|
|
103
|
+
this.updateDisplayValue();
|
|
161
104
|
this.emitValue();
|
|
162
105
|
}
|
|
163
106
|
clearAll() {
|
|
164
|
-
this.selectedValues
|
|
107
|
+
this.selectedValues = [];
|
|
108
|
+
this.updateDisplayValue();
|
|
165
109
|
this.emitValue();
|
|
166
110
|
}
|
|
167
111
|
isSelected(option) {
|
|
168
|
-
return this.selectedValues
|
|
112
|
+
return this.selectedValues.includes(String(option[this.valueProperty]));
|
|
169
113
|
}
|
|
170
114
|
trackByFn(_index, option) {
|
|
171
115
|
return option[this.valueProperty];
|
|
172
116
|
}
|
|
173
117
|
handleClickOutside(event) {
|
|
174
|
-
if (this.isOpen
|
|
118
|
+
if (this.isOpen &&
|
|
175
119
|
!this.mainInputRef?.nativeElement?.contains(event.target) &&
|
|
176
120
|
!this.dropdownRef?.nativeElement?.contains(event.target)) {
|
|
177
|
-
this.isOpen
|
|
178
|
-
this.searchTerm
|
|
121
|
+
this.isOpen = false;
|
|
122
|
+
this.searchTerm = '';
|
|
123
|
+
this.initializeOptions();
|
|
179
124
|
}
|
|
180
125
|
}
|
|
181
126
|
parseValue(value) {
|
|
@@ -189,7 +134,7 @@ export class MultiSelectSimpleComponent {
|
|
|
189
134
|
return [String(value)];
|
|
190
135
|
}
|
|
191
136
|
emitValue() {
|
|
192
|
-
const value = this.selectedValues
|
|
137
|
+
const value = this.selectedValues.join(',');
|
|
193
138
|
this.onChange(value);
|
|
194
139
|
if (this.props?.control) {
|
|
195
140
|
this.props.control.setValue(value);
|
|
@@ -198,27 +143,49 @@ export class MultiSelectSimpleComponent {
|
|
|
198
143
|
}
|
|
199
144
|
}
|
|
200
145
|
getOptionByValue(value) {
|
|
201
|
-
return this.
|
|
146
|
+
return this.filteredOptions.find(option => String(option[this.valueProperty]) === String(value));
|
|
202
147
|
}
|
|
203
148
|
applyDefaultValue() {
|
|
204
149
|
if (this.props) {
|
|
205
150
|
applyDefaultValueToControl(this.props);
|
|
206
151
|
}
|
|
207
152
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
153
|
+
initializeOptions() {
|
|
154
|
+
this.filteredOptions = this.props?.options || [];
|
|
155
|
+
}
|
|
156
|
+
filterOptions() {
|
|
157
|
+
if (!this.searchTerm) {
|
|
158
|
+
this.initializeOptions();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const search = replaceSpecialChars(this.searchTerm.toLowerCase());
|
|
162
|
+
this.filteredOptions = (this.props?.options || []).filter(option => {
|
|
163
|
+
const label = option[this.labelProperty]
|
|
164
|
+
? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())
|
|
165
|
+
: '';
|
|
166
|
+
const value = option[this.valueProperty]
|
|
167
|
+
? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())
|
|
168
|
+
: '';
|
|
169
|
+
return label.includes(search) || value.includes(search);
|
|
216
170
|
});
|
|
217
171
|
}
|
|
172
|
+
updateDisplayValue() {
|
|
173
|
+
if (this.selectedValues.length === 0) {
|
|
174
|
+
this.displayValue = '';
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (this.selectedValues.length === 1) {
|
|
178
|
+
const option = this.getOptionByValue(this.selectedValues[0]);
|
|
179
|
+
this.displayValue = option ? option[this.labelProperty] : '';
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this.displayValue = `${this.selectedValues.length} elementos seleccionados`;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
218
185
|
syncSelectedValues() {
|
|
219
186
|
if (this.props?.control?.value) {
|
|
220
187
|
const valueArray = this.parseValue(this.props.control.value);
|
|
221
|
-
this.selectedValues
|
|
188
|
+
this.selectedValues = valueArray;
|
|
222
189
|
}
|
|
223
190
|
}
|
|
224
191
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiSelectSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -234,18 +201,18 @@ export class MultiSelectSimpleComponent {
|
|
|
234
201
|
<ion-input
|
|
235
202
|
#mainInput
|
|
236
203
|
type="text"
|
|
237
|
-
[value]="displayValue
|
|
204
|
+
[value]="displayValue"
|
|
238
205
|
[placeholder]="props?.placeholder || placeholder"
|
|
239
206
|
readonly
|
|
240
207
|
class="main-input"
|
|
241
|
-
[class.is-open]="isOpen
|
|
208
|
+
[class.is-open]="isOpen"
|
|
242
209
|
/>
|
|
243
210
|
|
|
244
211
|
<!-- Dropdown icon -->
|
|
245
212
|
<ion-icon
|
|
246
213
|
name="chevron-down-outline"
|
|
247
214
|
class="dropdown-icon"
|
|
248
|
-
[class.rotated]="isOpen
|
|
215
|
+
[class.rotated]="isOpen"
|
|
249
216
|
></ion-icon>
|
|
250
217
|
|
|
251
218
|
<!-- Hidden input for form control -->
|
|
@@ -259,7 +226,7 @@ export class MultiSelectSimpleComponent {
|
|
|
259
226
|
<!-- Dropdown overlay -->
|
|
260
227
|
<div
|
|
261
228
|
class="dropdown-overlay"
|
|
262
|
-
[class.visible]="isOpen
|
|
229
|
+
[class.visible]="isOpen"
|
|
263
230
|
#dropdown
|
|
264
231
|
>
|
|
265
232
|
<!-- Search bar -->
|
|
@@ -268,7 +235,7 @@ export class MultiSelectSimpleComponent {
|
|
|
268
235
|
#searchbar
|
|
269
236
|
[placeholder]="searchPlaceholder"
|
|
270
237
|
(ionInput)="onSearch($event)"
|
|
271
|
-
[value]="searchTerm
|
|
238
|
+
[value]="searchTerm"
|
|
272
239
|
show-clear-button="focus"
|
|
273
240
|
></ion-searchbar>
|
|
274
241
|
</div>
|
|
@@ -279,7 +246,7 @@ export class MultiSelectSimpleComponent {
|
|
|
279
246
|
fill="clear"
|
|
280
247
|
size="small"
|
|
281
248
|
(click)="selectAll()"
|
|
282
|
-
[disabled]="filteredOptions
|
|
249
|
+
[disabled]="filteredOptions.length === 0"
|
|
283
250
|
>
|
|
284
251
|
Seleccionar todos
|
|
285
252
|
</ion-button>
|
|
@@ -288,22 +255,17 @@ export class MultiSelectSimpleComponent {
|
|
|
288
255
|
size="small"
|
|
289
256
|
color="medium"
|
|
290
257
|
(click)="clearAll()"
|
|
291
|
-
[disabled]="selectedValues
|
|
258
|
+
[disabled]="selectedValues.length === 0"
|
|
292
259
|
>
|
|
293
260
|
Limpiar
|
|
294
261
|
</ion-button>
|
|
295
262
|
</div>
|
|
296
263
|
|
|
297
|
-
<!-- Debug button -->
|
|
298
|
-
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
299
|
-
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
300
|
-
</div>
|
|
301
|
-
|
|
302
264
|
<!-- Options list -->
|
|
303
265
|
<div class="options-container">
|
|
304
266
|
<ion-list class="options-list">
|
|
305
267
|
<ion-item
|
|
306
|
-
*ngFor="let option of filteredOptions
|
|
268
|
+
*ngFor="let option of filteredOptions; trackBy: trackByFn"
|
|
307
269
|
button
|
|
308
270
|
(click)="toggleOption(option)"
|
|
309
271
|
class="option-item"
|
|
@@ -316,9 +278,9 @@ export class MultiSelectSimpleComponent {
|
|
|
316
278
|
</ion-item>
|
|
317
279
|
|
|
318
280
|
<!-- No results message -->
|
|
319
|
-
<ion-item *ngIf="filteredOptions
|
|
281
|
+
<ion-item *ngIf="filteredOptions.length === 0" class="no-results">
|
|
320
282
|
<ion-label color="medium">
|
|
321
|
-
{{ searchTerm
|
|
283
|
+
{{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
322
284
|
</ion-label>
|
|
323
285
|
</ion-item>
|
|
324
286
|
</ion-list>
|
|
@@ -340,18 +302,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
340
302
|
<ion-input
|
|
341
303
|
#mainInput
|
|
342
304
|
type="text"
|
|
343
|
-
[value]="displayValue
|
|
305
|
+
[value]="displayValue"
|
|
344
306
|
[placeholder]="props?.placeholder || placeholder"
|
|
345
307
|
readonly
|
|
346
308
|
class="main-input"
|
|
347
|
-
[class.is-open]="isOpen
|
|
309
|
+
[class.is-open]="isOpen"
|
|
348
310
|
/>
|
|
349
311
|
|
|
350
312
|
<!-- Dropdown icon -->
|
|
351
313
|
<ion-icon
|
|
352
314
|
name="chevron-down-outline"
|
|
353
315
|
class="dropdown-icon"
|
|
354
|
-
[class.rotated]="isOpen
|
|
316
|
+
[class.rotated]="isOpen"
|
|
355
317
|
></ion-icon>
|
|
356
318
|
|
|
357
319
|
<!-- Hidden input for form control -->
|
|
@@ -365,7 +327,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
365
327
|
<!-- Dropdown overlay -->
|
|
366
328
|
<div
|
|
367
329
|
class="dropdown-overlay"
|
|
368
|
-
[class.visible]="isOpen
|
|
330
|
+
[class.visible]="isOpen"
|
|
369
331
|
#dropdown
|
|
370
332
|
>
|
|
371
333
|
<!-- Search bar -->
|
|
@@ -374,7 +336,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
374
336
|
#searchbar
|
|
375
337
|
[placeholder]="searchPlaceholder"
|
|
376
338
|
(ionInput)="onSearch($event)"
|
|
377
|
-
[value]="searchTerm
|
|
339
|
+
[value]="searchTerm"
|
|
378
340
|
show-clear-button="focus"
|
|
379
341
|
></ion-searchbar>
|
|
380
342
|
</div>
|
|
@@ -385,7 +347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
385
347
|
fill="clear"
|
|
386
348
|
size="small"
|
|
387
349
|
(click)="selectAll()"
|
|
388
|
-
[disabled]="filteredOptions
|
|
350
|
+
[disabled]="filteredOptions.length === 0"
|
|
389
351
|
>
|
|
390
352
|
Seleccionar todos
|
|
391
353
|
</ion-button>
|
|
@@ -394,22 +356,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
394
356
|
size="small"
|
|
395
357
|
color="medium"
|
|
396
358
|
(click)="clearAll()"
|
|
397
|
-
[disabled]="selectedValues
|
|
359
|
+
[disabled]="selectedValues.length === 0"
|
|
398
360
|
>
|
|
399
361
|
Limpiar
|
|
400
362
|
</ion-button>
|
|
401
363
|
</div>
|
|
402
364
|
|
|
403
|
-
<!-- Debug button -->
|
|
404
|
-
<div class="search-container" style="background: red; color: white; padding: 4px;">
|
|
405
|
-
<button (click)="debugOptions()">DEBUG: {{ filteredOptions().length }} opciones</button>
|
|
406
|
-
</div>
|
|
407
|
-
|
|
408
365
|
<!-- Options list -->
|
|
409
366
|
<div class="options-container">
|
|
410
367
|
<ion-list class="options-list">
|
|
411
368
|
<ion-item
|
|
412
|
-
*ngFor="let option of filteredOptions
|
|
369
|
+
*ngFor="let option of filteredOptions; trackBy: trackByFn"
|
|
413
370
|
button
|
|
414
371
|
(click)="toggleOption(option)"
|
|
415
372
|
class="option-item"
|
|
@@ -422,9 +379,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
422
379
|
</ion-item>
|
|
423
380
|
|
|
424
381
|
<!-- No results message -->
|
|
425
|
-
<ion-item *ngIf="filteredOptions
|
|
382
|
+
<ion-item *ngIf="filteredOptions.length === 0" class="no-results">
|
|
426
383
|
<ion-label color="medium">
|
|
427
|
-
{{ searchTerm
|
|
384
|
+
{{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}
|
|
428
385
|
</ion-label>
|
|
429
386
|
</ion-item>
|
|
430
387
|
</ion-list>
|
|
@@ -446,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
446
403
|
}], placeholder: [{
|
|
447
404
|
type: Input
|
|
448
405
|
}] } });
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LXNpbXBsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2ltcGxlL211bHRpLXNlbGVjdC1zaW1wbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUtMLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBaUhqRSxNQUFNLE9BQU8sMEJBQTBCO0lBa0VyQztRQTdEUyxrQkFBYSxHQUFXLE1BQU0sQ0FBQztRQUMvQixrQkFBYSxHQUFXLElBQUksQ0FBQztRQUM3QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDeEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixlQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLG1CQUFj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QkFFYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwbHlEZWZhdWx0VmFsdWVUb0NvbnRyb2wgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZm9ybS1kZWZhdWx0cyc7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3RleHQnO1xuaW1wb3J0IHsgSW5wdXRNZXRhZGF0YSwgSW5wdXRPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1tdWx0aS1zZWxlY3Qtc2ltcGxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uaWNNb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVNlbGVjdFNpbXBsZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibXVsdGktc2VsZWN0LWNvbnRhaW5lclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCI+XG4gICAgICA8IS0tIE1haW4gaW5wdXQgZGlzcGxheSAtLT5cbiAgICAgIDxpb24taW5wdXRcbiAgICAgICAgI21haW5JbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWUoKVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGxhY2Vob2xkZXJcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICBjbGFzcz1cIm1haW4taW5wdXRcIlxuICAgICAgICBbY2xhc3MuaXMtb3Blbl09XCJpc09wZW4oKVwiXG4gICAgICAvPlxuICAgICAgXG4gICAgICA8IS0tIERyb3Bkb3duIGljb24gLS0+XG4gICAgICA8aW9uLWljb24gXG4gICAgICAgIG5hbWU9XCJjaGV2cm9uLWRvd24tb3V0bGluZVwiIFxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWljb25cIiBcbiAgICAgICAgW2NsYXNzLnJvdGF0ZWRdPVwiaXNPcGVuKClcIlxuICAgICAgPjwvaW9uLWljb24+XG4gICAgICBcbiAgICAgIDwhLS0gSGlkZGVuIGlucHV0IGZvciBmb3JtIGNvbnRyb2wgLS0+XG4gICAgICA8aW9uLWlucHV0IFxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgb3BhY2l0eTogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7XCIgXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJwcm9wcz8uY29udHJvbFwiIFxuICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERyb3Bkb3duIG92ZXJsYXkgLS0+XG4gICAgPGRpdiBcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tb3ZlcmxheVwiIFxuICAgICAgW2NsYXNzLnZpc2libGVdPVwiaXNPcGVuKClcIlxuICAgICAgI2Ryb3Bkb3duXG4gICAgPlxuICAgICAgPCEtLSBTZWFyY2ggYmFyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAjc2VhcmNoYmFyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAoaW9uSW5wdXQpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgc2hvdy1jbGVhci1idXR0b249XCJmb2N1c1wiXG4gICAgICAgID48L2lvbi1zZWFyY2hiYXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPCEtLSBBY3Rpb24gYnV0dG9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBcbiAgICAgICAgICBmaWxsPVwiY2xlYXJcIiBcbiAgICAgICAgICBzaXplPVwic21hbGxcIiBcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgU2VsZWNjaW9uYXIgdG9kb3NcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8aW9uLWJ1dHRvbiBcbiAgICAgICAgICBmaWxsPVwiY2xlYXJcIiBcbiAgICAgICAgICBzaXplPVwic21hbGxcIiBcbiAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiIFxuICAgICAgICAgIChjbGljayk9XCJjbGVhckFsbCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRWYWx1ZXMoKS5sZW5ndGggPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgTGltcGlhclxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPCEtLSBEZWJ1ZyBidXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiIHN0eWxlPVwiYmFja2dyb3VuZDogcmVkOyBjb2xvcjogd2hpdGU7IHBhZGRpbmc6IDRweDtcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGVidWdPcHRpb25zKClcIj5ERUJVRzoge3sgZmlsdGVyZWRPcHRpb25zKCkubGVuZ3RoIH19IG9wY2lvbmVzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1saXN0IGNsYXNzPVwib3B0aW9ucy1saXN0XCI+XG4gICAgICAgICAgPGlvbi1pdGVtIFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCIgXG4gICAgICAgICAgICBidXR0b24gXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taXRlbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAgICAgICBzbG90PVwic3RhcnRcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgPGlvbi1sYWJlbD57eyBvcHRpb25bbGFiZWxQcm9wZXJ0eV0gfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgIDxpb24taXRlbSAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hUZXJtKCkgPyAnTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcycgOiAnTm8gaGF5IG9wY2lvbmVzIGRpc3BvbmlibGVzJyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3Qtc2ltcGxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RTaW1wbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtYWluSW5wdXQnKSBtYWluSW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIHByb3BzITogSW5wdXRNZXRhZGF0YTtcbiAgQElucHV0KCkgbGFiZWxQcm9wZXJ0eTogc3RyaW5nID0gJ25hbWUnO1xuICBASW5wdXQoKSB2YWx1ZVByb3BlcnR5OiBzdHJpbmcgPSAnaWQnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG4gIFxuICAvLyBTaWduYWxzIGZvciByZWFjdGl2ZSBzdGF0ZSBtYW5hZ2VtZW50XG4gIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHNlYXJjaFRlcm0gPSBzaWduYWwoJycpO1xuICBzZWxlY3RlZFZhbHVlcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICBcbiAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSByZWFjdGl2ZVxuICBvcHRpb25zU2lnbmFsID0gc2lnbmFsPElucHV0T3B0aW9uW10+KFtdKTtcbiAgXG4gIC8vIENvbXB1dGVkIHNpZ25hbHNcbiAgZGlzcGxheVZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFZhbHVlcygpO1xuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25CeVZhbHVlKHNlbGVjdGVkWzBdKTtcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bdGhpcy5sYWJlbFByb3BlcnR5XSA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQubGVuZ3RofSBlbGVtZW50b3Mgc2VsZWNjaW9uYWRvc2A7XG4gIH0pO1xuXG4gIGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyBVc2Ugc2lnbmFsIGluc3RlYWQgb2YgcHJvcHMgZGlyZWN0bHlcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zU2lnbmFsKCk7XG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hUZXJtKCkudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBEZWJ1Z1xuICAgIGNvbnNvbGUubG9nKCdbTXVsdGlTZWxlY3RTaW1wbGVdIGZpbHRlcmVkT3B0aW9ucyBjb21wdXRlZDonLCB7XG4gICAgICBvcHRpb25zQ291bnQ6IG9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2VhcmNoVGVybTogc2VhcmNoLFxuICAgICAgb3B0aW9uczogb3B0aW9ucy5zbGljZSgwLCAzKSAvLyBQcmltZXJhcyAzIG9wY2lvbmVzXG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gb3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV1cbiAgICAgICAgPyByZXBsYWNlU3BlY2lhbENoYXJzKFN0cmluZyhvcHRpb25bdGhpcy5sYWJlbFByb3BlcnR5XSkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV1cbiAgICAgICAgPyByZXBsYWNlU3BlY2lhbENoYXJzKFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSByZXBsYWNlU3BlY2lhbENoYXJzKHNlYXJjaCk7XG4gICAgICByZXR1cm4gbGFiZWwuaW5jbHVkZXMoc2VhcmNoVGVybSkgfHwgdmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKF92YWx1ZTogYW55KSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgJ3NlbGVjdE9wdGlvbnMnLCAnU2VsZWNjaW9uZSBvcGNpb25lcycpO1xuICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXIgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ19nbG9iYWwnLCAnc2VhcmNoJywgJ0J1c2NhcicpO1xuICAgIFxuICAgIC8vIENsb3NlIGRyb3Bkb3duIHdoZW4gY2xpY2tpbmcgb3V0c2lkZVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKSk7XG4gICAgXG4gICAgLy8gRGVidWcgZWZmZWN0IHRvIHRyYWNrIHdoZW4gZmlsdGVyZWRPcHRpb25zIGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zKCk7XG4gICAgICBjb25zb2xlLmxvZygnW011bHRpU2VsZWN0U2ltcGxlXSBFRkZFQ1QgLSBmaWx0ZXJlZE9wdGlvbnMgY2hhbmdlZDonLCB7XG4gICAgICAgIG9wdGlvbnNDb3VudDogb3B0aW9ucy5sZW5ndGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygnW011bHRpU2VsZWN0U2ltcGxlXSBuZ09uSW5pdDonLCB7XG4gICAgICBwcm9wczogISF0aGlzLnByb3BzLFxuICAgICAgb3B0aW9uczogdGhpcy5wcm9wcz8ub3B0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgICBjb250cm9sOiAhIXRoaXMucHJvcHM/LmNvbnRyb2xcbiAgICB9KTtcbiAgICBcbiAgICAvLyBVcGRhdGUgb3B0aW9ucyBzaWduYWxcbiAgICBpZiAodGhpcy5wcm9wcz8ub3B0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zU2lnbmFsLnNldCh0aGlzLnByb3BzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbHVlKCk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc29sZS5sb2coJ1tNdWx0aVNlbGVjdFNpbXBsZV0gbmdPbkNoYW5nZXM6Jywge1xuICAgICAgaGFzUHJvcHNDaGFuZ2U6ICEhY2hhbmdlc1sncHJvcHMnXSxcbiAgICAgIHByb3BzOiAhIXRoaXMucHJvcHMsXG4gICAgICBvcHRpb25zOiB0aGlzLnByb3BzPy5vcHRpb25zPy5sZW5ndGggfHwgMCxcbiAgICAgIHByb3BzT3B0aW9uczogdGhpcy5wcm9wcz8ub3B0aW9uc1xuICAgIH0pO1xuICAgIFxuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddICYmIHRoaXMucHJvcHMpIHtcbiAgICAgIC8vIFVwZGF0ZSBvcHRpb25zIHNpZ25hbCB3aGVuIHByb3BzIGNoYW5nZVxuICAgICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZygnW011bHRpU2VsZWN0U2ltcGxlXSBVcGRhdGluZyBvcHRpb25zU2lnbmFsIHdpdGg6JywgdGhpcy5wcm9wcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5vcHRpb25zU2lnbmFsLnNldCh0aGlzLnByb3BzLm9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZUFycmF5ID0gdGhpcy5wYXJzZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnNldCh2YWx1ZUFycmF5KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShfaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBkaXNhYmxlZCBzdGF0ZSBpZiBuZWVkZWRcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBtZXRob2RzXG4gIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNPcGVuLnVwZGF0ZSh2YWx1ZSA9PiAhdmFsdWUpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgLy8gRm9jdXMgc2VhcmNoIGJhciB3aGVuIG9wZW5pbmdcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2hiYXIgPSB0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpb24tc2VhcmNoYmFyJyk7XG4gICAgICAgIGlmIChzZWFyY2hiYXIpIHtcbiAgICAgICAgICBzZWFyY2hiYXIuc2V0Rm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldChldmVudC5kZXRhaWwudmFsdWUgfHwgJycpO1xuICB9XG5cbiAgdG9nZ2xlT3B0aW9uKG9wdGlvbjogSW5wdXRPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSk7IC8vIENvbnZlcnRpciBhIHN0cmluZ1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5zZXQoY3VycmVudFNlbGVjdGVkLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2V0KFsuLi5jdXJyZW50U2VsZWN0ZWQsIHZhbHVlXSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5tYXAob3B0aW9uID0+IFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkpO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICBcbiAgICAvLyBBZGQgb25seSBuZXcgdmFsdWVzIHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBhbGxWYWx1ZXMuZmlsdGVyKHZhbHVlID0+ICFjdXJyZW50U2VsZWN0ZWQuaW5jbHVkZXModmFsdWUpKTtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnNldChbLi4uY3VycmVudFNlbGVjdGVkLCAuLi5uZXdWYWx1ZXNdKTtcbiAgICBcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5zZXQoW10pO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICBpc1NlbGVjdGVkKG9wdGlvbjogSW5wdXRPcHRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlcygpLmluY2x1ZGVzKFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBvcHRpb246IElucHV0T3B0aW9uKTogYW55IHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc09wZW4oKSAmJiBcbiAgICAgICAgIXRoaXMubWFpbklucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICF0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IFN0cmluZyh2KSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpKS5maWx0ZXIodiA9PiB2ICE9PSAnJyk7XG4gICAgfVxuICAgIHJldHVybiBbU3RyaW5nKHZhbHVlKV07XG4gIH1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMoKS5qb2luKCcsJyk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgXG4gICAgaWYgKHRoaXMucHJvcHM/LmNvbnRyb2wpIHtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMucHJvcHMuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25CeVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBJbnB1dE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1NpZ25hbCgpLmZpbmQob3B0aW9uID0+IFxuICAgICAgU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKSA9PT0gU3RyaW5nKHZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGVmYXVsdFZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBkZWJ1Z09wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1tNdWx0aVNlbGVjdFNpbXBsZV0gREVCVUcgQ0xJQ0s6Jywge1xuICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICBmaWx0ZXJlZE9wdGlvbnM6IHRoaXMuZmlsdGVyZWRPcHRpb25zKCksXG4gICAgICBzZWFyY2hUZXJtOiB0aGlzLnNlYXJjaFRlcm0oKSxcbiAgICAgIHByb3BzT3B0aW9uczogdGhpcy5wcm9wcz8ub3B0aW9ucyxcbiAgICAgIG9wdGlvbnNTaWduYWw6IHRoaXMub3B0aW9uc1NpZ25hbCgpLFxuICAgICAgY29tcHV0ZWQ6IHRoaXMuZmlsdGVyZWRPcHRpb25zKClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlbGVjdGVkVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzPy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgY29uc3QgdmFsdWVBcnJheSA9IHRoaXMucGFyc2VWYWx1ZSh0aGlzLnByb3BzLmNvbnRyb2wudmFsdWUpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5zZXQodmFsdWVBcnJheSk7XG4gICAgfVxuICB9XG59Il19
|
|
406
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LXNpbXBsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2ltcGxlL211bHRpLXNlbGVjdC1zaW1wbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFLTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQTRHakUsTUFBTSxPQUFPLDBCQUEwQjtJQXdCckM7UUFuQlMsa0JBQWEsR0FBVyxNQUFNLENBQUM7UUFDL0Isa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFMUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVuRCw2QkFBNkI7UUFDN0IsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsbUJBQWMsR0FB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LHNJQUFFLG1CQUFtQjs7NEZBc0cxRCwwQkFBMEI7a0JBekd0QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxhQUMzRDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzs0QkFDekQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJGVDt3REFJc0IsV0FBVztzQkFBakMsU0FBUzt1QkFBQyxVQUFVO2dCQUNHLFlBQVk7c0JBQW5DLFNBQVM7dUJBQUMsV0FBVztnQkFFYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9mb3JtLWRlZmF1bHRzJztcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvdGV4dCc7XG5pbXBvcnQgeyBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW11bHRpLXNlbGVjdC1zaW1wbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpU2VsZWN0U2ltcGxlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJtdWx0aS1zZWxlY3QtY29udGFpbmVyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCRldmVudClcIj5cbiAgICAgIDwhLS0gTWFpbiBpbnB1dCBkaXNwbGF5IC0tPlxuICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAjbWFpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcz8ucGxhY2Vob2xkZXIgfHwgcGxhY2Vob2xkZXJcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICBjbGFzcz1cIm1haW4taW5wdXRcIlxuICAgICAgICBbY2xhc3MuaXMtb3Blbl09XCJpc09wZW5cIlxuICAgICAgLz5cbiAgICAgIFxuICAgICAgPCEtLSBEcm9wZG93biBpY29uIC0tPlxuICAgICAgPGlvbi1pY29uIFxuICAgICAgICBuYW1lPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIiBcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgXG4gICAgICAgIFtjbGFzcy5yb3RhdGVkXT1cImlzT3BlblwiXG4gICAgICA+PC9pb24taWNvbj5cbiAgICAgIFxuICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgZm9yIGZvcm0gY29udHJvbCAtLT5cbiAgICAgIDxpb24taW5wdXQgXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTtcIiBcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb3BzPy5jb250cm9sXCIgXG4gICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRHJvcGRvd24gb3ZlcmxheSAtLT5cbiAgICA8ZGl2IFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1vdmVybGF5XCIgXG4gICAgICBbY2xhc3MudmlzaWJsZV09XCJpc09wZW5cIlxuICAgICAgI2Ryb3Bkb3duXG4gICAgPlxuICAgICAgPCEtLSBTZWFyY2ggYmFyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAjc2VhcmNoYmFyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAoaW9uSW5wdXQpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgIHNob3ctY2xlYXItYnV0dG9uPVwiZm9jdXNcIlxuICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gQWN0aW9uIGJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1idXR0b24gXG4gICAgICAgICAgZmlsbD1cImNsZWFyXCIgXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCIgXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICBTZWxlY2Npb25hciB0b2Rvc1xuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDxpb24tYnV0dG9uIFxuICAgICAgICAgIGZpbGw9XCJjbGVhclwiIFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiIFxuICAgICAgICAgIGNvbG9yPVwibWVkaXVtXCIgXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgTGltcGlhclxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1saXN0IGNsYXNzPVwib3B0aW9ucy1saXN0XCI+XG4gICAgICAgICAgPGlvbi1pdGVtIFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxuICAgICAgICAgICAgYnV0dG9uIFxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWl0ZW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24tY2hlY2tib3hcbiAgICAgICAgICAgICAgc2xvdD1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgID48L2lvbi1jaGVja2JveD5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgb3B0aW9uW2xhYmVsUHJvcGVydHldIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICA8aW9uLWl0ZW0gKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgIHt7IHNlYXJjaFRlcm0gPyAnTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcycgOiAnTm8gaGF5IG9wY2lvbmVzIGRpc3BvbmlibGVzJyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3Qtc2ltcGxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RTaW1wbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtYWluSW5wdXQnKSBtYWluSW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIHByb3BzITogSW5wdXRNZXRhZGF0YTtcbiAgQElucHV0KCkgbGFiZWxQcm9wZXJ0eTogc3RyaW5nID0gJ25hbWUnO1xuICBASW5wdXQoKSB2YWx1ZVByb3BlcnR5OiBzdHJpbmcgPSAnaWQnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG4gIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBcbiAgLy8gQ2xhc3NpYyBBbmd1bGFyIHByb3BlcnRpZXNcbiAgaXNPcGVuID0gZmFsc2U7XG4gIHNlYXJjaFRlcm0gPSAnJztcbiAgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGRpc3BsYXlWYWx1ZSA9ICcnO1xuICBmaWx0ZXJlZE9wdGlvbnM6IElucHV0T3B0aW9uW10gPSBbXTtcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoX3ZhbHVlOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ19nbG9iYWwnLCAnc2VsZWN0T3B0aW9ucycsICdTZWxlY2Npb25lIG9wY2lvbmVzJyk7XG4gICAgdGhpcy5zZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnX2dsb2JhbCcsICdzZWFyY2gnLCAnQnVzY2FyJyk7XG4gICAgXG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBvdXRzaWRlXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsdWUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zKCk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSAmJiB0aGlzLnByb3BzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zKCk7XG4gICAgICB0aGlzLnN5bmNTZWxlY3RlZFZhbHVlcygpO1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VmFsdWUoKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlQXJyYXkgPSB0aGlzLnBhcnNlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZUFycmF5O1xuICAgIHRoaXMudXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoX2lzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgZGlzYWJsZWQgc3RhdGUgaWYgbmVlZGVkXG4gIH1cblxuICAvLyBDb21wb25lbnQgbWV0aG9kc1xuICB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICBcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAvLyBGb2N1cyBzZWFyY2ggYmFyIHdoZW4gb3BlbmluZ1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGJhciA9IHRoaXMuZHJvcGRvd25SZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1zZWFyY2hiYXInKTtcbiAgICAgICAgaWYgKHNlYXJjaGJhcikge1xuICAgICAgICAgIHNlYXJjaGJhci5zZXRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBldmVudC5kZXRhaWwudmFsdWUgfHwgJyc7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gIH1cblxuICB0b2dnbGVPcHRpb24ob3B0aW9uOiBJbnB1dE9wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKTtcbiAgICBcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKG9wdGlvbikpIHtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdiAhPT0gdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgdG8gc2VsZWN0aW9uXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gWy4uLnRoaXMuc2VsZWN0ZWRWYWx1ZXMsIHZhbHVlXTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5VmFsdWUoKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbFZhbHVlcyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLm1hcChvcHRpb24gPT4gU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gICAgXG4gICAgLy8gQWRkIG9ubHkgbmV3IHZhbHVlcyB0byBhdm9pZCBkdXBsaWNhdGVzXG4gICAgY29uc3QgbmV3VmFsdWVzID0gYWxsVmFsdWVzLmZpbHRlcih2YWx1ZSA9PiAhdGhpcy5zZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RlZFZhbHVlcywgLi4ubmV3VmFsdWVzXTtcbiAgICBcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5VmFsdWUoKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChvcHRpb246IElucHV0T3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5jbHVkZXMoU3RyaW5nKG9wdGlvblt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gIH1cblxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIG9wdGlvbjogSW5wdXRPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJiBcbiAgICAgICAgIXRoaXMubWFpbklucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICF0aGlzLmRyb3Bkb3duUmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IFN0cmluZyh2KSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHYudHJpbSgpKS5maWx0ZXIodiA9PiB2ICE9PSAnJyk7XG4gICAgfVxuICAgIHJldHVybiBbU3RyaW5nKHZhbHVlKV07XG4gIH1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuam9pbignLCcpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIFxuICAgIGlmICh0aGlzLnByb3BzPy5jb250cm9sKSB7XG4gICAgICB0aGlzLnByb3BzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy5wcm9wcy5jb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLnByb3BzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogSW5wdXRPcHRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKG9wdGlvbiA9PiBcbiAgICAgIFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkgPT09IFN0cmluZyh2YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgYXBwbHlEZWZhdWx0VmFsdWVUb0NvbnRyb2wodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMucHJvcHM/Lm9wdGlvbnMgfHwgW107XG4gIH1cbiAgXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZWFyY2ggPSByZXBsYWNlU3BlY2lhbENoYXJzKHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9ICh0aGlzLnByb3BzPy5vcHRpb25zIHx8IFtdKS5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gb3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV1cbiAgICAgICAgPyByZXBsYWNlU3BlY2lhbENoYXJzKFN0cmluZyhvcHRpb25bdGhpcy5sYWJlbFByb3BlcnR5XSkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uW3RoaXMudmFsdWVQcm9wZXJ0eV1cbiAgICAgICAgPyByZXBsYWNlU3BlY2lhbENoYXJzKFN0cmluZyhvcHRpb25bdGhpcy52YWx1ZVByb3BlcnR5XSkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgOiAnJztcbiAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhzZWFyY2gpIHx8IHZhbHVlLmluY2x1ZGVzKHNlYXJjaCk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgdXBkYXRlRGlzcGxheVZhbHVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uQnlWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWVzWzBdKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gb3B0aW9uID8gb3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0gOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBgJHt0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0gZWxlbWVudG9zIHNlbGVjY2lvbmFkb3NgO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3luY1NlbGVjdGVkVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzPy5jb250cm9sPy52YWx1ZSkge1xuICAgICAgY29uc3QgdmFsdWVBcnJheSA9IHRoaXMucGFyc2VWYWx1ZSh0aGlzLnByb3BzLmNvbnRyb2wudmFsdWUpO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHZhbHVlQXJyYXk7XG4gICAgfVxuICB9XG59Il19
|