@coreui/angular-pro 4.2.17 → 4.2.18
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/esm2020/lib/calendar/calendar/calendar.component.mjs +10 -8
- package/esm2020/lib/calendar/calendar-month/calendar-month.component.mjs +11 -8
- package/esm2020/lib/calendar/calendar.utils.mjs +1 -1
- package/esm2020/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +20 -7
- package/esm2020/lib/dropdown/dropdown/dropdown.component.mjs +3 -3
- package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +152 -102
- package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +11 -8
- package/esm2020/lib/multi-select/multi-select.module.mjs +5 -4
- package/esm2020/lib/smart-table/public_api.mjs +2 -1
- package/esm2020/lib/smart-table/smart-table/smart-table.component.mjs +20 -15
- package/esm2020/lib/smart-table/smart-table-head/smart-table-head.component.mjs +17 -3
- package/esm2020/lib/smart-table/smart-table.module.mjs +3 -3
- package/fesm2015/coreui-angular-pro.mjs +292 -202
- package/fesm2015/coreui-angular-pro.mjs.map +1 -1
- package/fesm2020/coreui-angular-pro.mjs +284 -197
- package/fesm2020/coreui-angular-pro.mjs.map +1 -1
- package/lib/calendar/calendar/calendar.component.d.ts +2 -2
- package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +9 -3
- package/lib/multi-select/multi-select/multi-select.component.d.ts +27 -6
- package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +1 -1
- package/lib/multi-select/multi-select.module.d.ts +2 -1
- package/lib/smart-table/public_api.d.ts +1 -0
- package/lib/smart-table/smart-table/smart-table.component.d.ts +6 -3
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +5 -1
- package/lib/smart-table/smart-table.module.d.ts +1 -1
- package/package.json +4 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Component, ContentChildren, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
2
|
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
3
3
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
4
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
+
import { DropdownComponent, DropdownToggleDirective } from '../../dropdown';
|
|
5
6
|
import { MultiSelectService } from '../multi-select.service';
|
|
6
7
|
import { MultiSelectOptionComponent } from '../multi-select-option/multi-select-option.component';
|
|
7
8
|
import { MultiSelectNativeSelectComponent } from '../multi-select-native-select/multi-select-native-select.component';
|
|
@@ -10,11 +11,31 @@ import * as i1 from "@angular/cdk/a11y";
|
|
|
10
11
|
import * as i2 from "../multi-select.service";
|
|
11
12
|
import * as i3 from "@angular/common";
|
|
12
13
|
import * as i4 from "@angular/forms";
|
|
13
|
-
import * as i5 from "
|
|
14
|
+
import * as i5 from "../../dropdown/dropdown/dropdown.component";
|
|
15
|
+
import * as i6 from "../../dropdown/dropdown-menu/dropdown-menu.directive";
|
|
16
|
+
import * as i7 from "../multi-select-tag/multi-select-tag.component";
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
export const observeReferenceModifier = {
|
|
19
|
+
name: 'observeReferenceModifier', enabled: true, phase: 'main', fn({ state }) { },
|
|
20
|
+
effect: ({ state, instance }) => {
|
|
21
|
+
const RO_PROP = '__popperjsRO__';
|
|
22
|
+
const { reference } = state.elements;
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
reference[RO_PROP] = new ResizeObserver((entries) => {
|
|
25
|
+
instance.update();
|
|
26
|
+
});
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
reference[RO_PROP].observe(reference);
|
|
29
|
+
return () => {
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
reference[RO_PROP].disconnect();
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
delete reference[RO_PROP];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
14
37
|
export class MultiSelectComponent {
|
|
15
|
-
constructor(elementRef, renderer, ngZone, changeDetectorRef, viewContainerRef, focusMonitor, multiSelectService
|
|
16
|
-
// private listenersService: ListenersService
|
|
17
|
-
) {
|
|
38
|
+
constructor(elementRef, renderer, ngZone, changeDetectorRef, viewContainerRef, focusMonitor, multiSelectService, iterableDiffers) {
|
|
18
39
|
this.elementRef = elementRef;
|
|
19
40
|
this.renderer = renderer;
|
|
20
41
|
this.ngZone = ngZone;
|
|
@@ -22,13 +43,13 @@ export class MultiSelectComponent {
|
|
|
22
43
|
this.viewContainerRef = viewContainerRef;
|
|
23
44
|
this.focusMonitor = focusMonitor;
|
|
24
45
|
this.multiSelectService = multiSelectService;
|
|
46
|
+
this.iterableDiffers = iterableDiffers;
|
|
25
47
|
this.onChange = (value) => { };
|
|
26
48
|
this.cleaner = true;
|
|
27
49
|
this._disabled = false;
|
|
28
50
|
this._multiple = false;
|
|
29
51
|
this.nativeName = '';
|
|
30
52
|
this.nativeId = '';
|
|
31
|
-
// @Input() options = [];
|
|
32
53
|
this.optionsMaxHeight = 'auto';
|
|
33
54
|
this.optionsStyle = 'checkbox';
|
|
34
55
|
this.placeholder = 'Select...';
|
|
@@ -43,12 +64,24 @@ export class MultiSelectComponent {
|
|
|
43
64
|
this.valueChange = new EventEmitter();
|
|
44
65
|
this._visible = false;
|
|
45
66
|
this.visibleChange = new EventEmitter();
|
|
67
|
+
/**
|
|
68
|
+
* Optional popper Options object
|
|
69
|
+
* @type Partial<Options>
|
|
70
|
+
*/
|
|
71
|
+
this.popperjsOptions = {
|
|
72
|
+
strategy: 'fixed', modifiers: [observeReferenceModifier, {
|
|
73
|
+
name: 'offset', options: {
|
|
74
|
+
offset: [0, this.selectionType === 'tags' ? 8 : 10]
|
|
75
|
+
}
|
|
76
|
+
}]
|
|
77
|
+
};
|
|
46
78
|
this.isDropdownVisible = false;
|
|
47
79
|
this._selectedOptions = [];
|
|
48
80
|
this._tabIndex = '-1';
|
|
49
81
|
this.visibleOptions = 0;
|
|
50
82
|
this._searchValue = '';
|
|
51
83
|
this._subtreeFocused = this.focusOrigin(null);
|
|
84
|
+
this.differ = this.iterableDiffers.find(this._value).create();
|
|
52
85
|
}
|
|
53
86
|
writeValue(value) {
|
|
54
87
|
if (value !== null) {
|
|
@@ -64,7 +97,10 @@ export class MultiSelectComponent {
|
|
|
64
97
|
this.disabled = isDisabled;
|
|
65
98
|
}
|
|
66
99
|
set disabled(value) {
|
|
67
|
-
this._disabled
|
|
100
|
+
if (this._disabled !== value) {
|
|
101
|
+
this._disabled = coerceBooleanProperty(value);
|
|
102
|
+
this.setFocusMonitor(!value);
|
|
103
|
+
}
|
|
68
104
|
}
|
|
69
105
|
get disabled() {
|
|
70
106
|
return this._disabled;
|
|
@@ -75,13 +111,21 @@ export class MultiSelectComponent {
|
|
|
75
111
|
get multiple() {
|
|
76
112
|
return this._multiple;
|
|
77
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Initial value of multi-select
|
|
116
|
+
*/
|
|
78
117
|
set value(value) {
|
|
79
118
|
const newValue = Array.isArray(value) ? [...value] : [value ?? ''];
|
|
80
|
-
if (this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
119
|
+
if (this.differ) {
|
|
120
|
+
const changes = this.differ.diff(newValue);
|
|
121
|
+
if (changes) {
|
|
122
|
+
this._value = newValue;
|
|
123
|
+
this.onChange(newValue);
|
|
124
|
+
this.selectOptions();
|
|
125
|
+
// not required here:
|
|
126
|
+
// this.selectedOptionsUpdate();
|
|
127
|
+
this.valueChange.emit(this.value);
|
|
128
|
+
}
|
|
85
129
|
}
|
|
86
130
|
}
|
|
87
131
|
get value() {
|
|
@@ -119,9 +163,14 @@ export class MultiSelectComponent {
|
|
|
119
163
|
}
|
|
120
164
|
;
|
|
121
165
|
get hostClasses() {
|
|
166
|
+
return {
|
|
167
|
+
disabled: this.disabled
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
get multiselectClasses() {
|
|
122
171
|
return {
|
|
123
172
|
'form-multi-select': true,
|
|
124
|
-
'form-multi-select-selection-tags': this.selectionType === 'tags',
|
|
173
|
+
'form-multi-select-selection-tags': this.selectionType === 'tags' && this.selectedOptions.length > 0,
|
|
125
174
|
[`form-multi-select-${this.size}`]: !!this.size,
|
|
126
175
|
'form-multi-select-with-cleaner': this.cleaner,
|
|
127
176
|
show: this.visible,
|
|
@@ -145,7 +194,7 @@ export class MultiSelectComponent {
|
|
|
145
194
|
this.setFocus();
|
|
146
195
|
return;
|
|
147
196
|
}
|
|
148
|
-
if (['Enter', ' ', 'ArrowDown'].includes($event.key) && [this.inputElement?.nativeElement
|
|
197
|
+
if (['Enter', ' ', 'ArrowDown'].includes($event.key) && [this.inputElement?.nativeElement, this.elementRef.nativeElement].includes($event.target)) {
|
|
149
198
|
this.visible = true;
|
|
150
199
|
if (!this.search) {
|
|
151
200
|
this.setFocus();
|
|
@@ -173,6 +222,11 @@ export class MultiSelectComponent {
|
|
|
173
222
|
return;
|
|
174
223
|
if (!this.visible) {
|
|
175
224
|
this.visible = true;
|
|
225
|
+
this.setFocus();
|
|
226
|
+
}
|
|
227
|
+
else if ([this.dropdown.nativeElement].includes($event.target)) {
|
|
228
|
+
this.visible = false;
|
|
229
|
+
this.setFocus();
|
|
176
230
|
}
|
|
177
231
|
}
|
|
178
232
|
set searchValue(value) {
|
|
@@ -192,6 +246,8 @@ export class MultiSelectComponent {
|
|
|
192
246
|
this.visible = value === false ? false : this.visible;
|
|
193
247
|
}
|
|
194
248
|
focusOrigin(origin) {
|
|
249
|
+
if (this.disabled)
|
|
250
|
+
return false;
|
|
195
251
|
const focused = !!origin;
|
|
196
252
|
this.searchValue = focused ? this.searchValue : '';
|
|
197
253
|
return focused;
|
|
@@ -201,36 +257,42 @@ export class MultiSelectComponent {
|
|
|
201
257
|
}
|
|
202
258
|
ngOnDestroy() {
|
|
203
259
|
this.multiselectSubscribe(false);
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
260
|
+
this.setFocusMonitor(false);
|
|
261
|
+
}
|
|
262
|
+
ngOnChanges(changes) {
|
|
263
|
+
if (changes['value']) {
|
|
264
|
+
if (changes['value'].currentValue.length === 0) {
|
|
265
|
+
this.clearAllOptions();
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this.multiSelectOptions?.forEach((option, index) => {
|
|
269
|
+
this.selectOption(option, changes['value'].currentValue.includes(option.value));
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
this.selectedOptionsUpdate();
|
|
273
|
+
}
|
|
207
274
|
}
|
|
208
275
|
ngAfterContentInit() {
|
|
209
276
|
this.visibleOptions = this.multiSelectOptions.length;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
this.selectedOptionsUpdate();
|
|
215
|
-
this.inputElementSize();
|
|
277
|
+
}
|
|
278
|
+
ngAfterViewInit() {
|
|
279
|
+
this.selectOptions();
|
|
280
|
+
this.multiselectSubscribe();
|
|
216
281
|
this.listKeyManager = new FocusKeyManager(this.multiSelectOptions).withHomeAndEnd().withTypeAhead();
|
|
217
282
|
this.listKeyManager.skipPredicate(item => (!item.visible || item.disabled));
|
|
218
283
|
this.listKeyManager.setFirstItemActive();
|
|
219
|
-
this.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (!this.disabled) {
|
|
226
|
-
this.subtreeFocused = this.focusOrigin(origin);
|
|
227
|
-
this.changeDetectorRef.markForCheck();
|
|
228
|
-
}
|
|
229
|
-
}));
|
|
230
|
-
this.inputElementSize();
|
|
284
|
+
this.setFocusMonitor(!this.disabled);
|
|
285
|
+
// not required here:
|
|
286
|
+
// this.selectedOptionsUpdate();
|
|
287
|
+
setTimeout(() => {
|
|
288
|
+
this.createNativeSelect();
|
|
289
|
+
});
|
|
231
290
|
}
|
|
232
291
|
multiselectSubscribe(subscribe = true) {
|
|
233
292
|
if (subscribe) {
|
|
293
|
+
this.multiSelectOptionsSubscription = this.multiSelectOptions.changes.subscribe(change => {
|
|
294
|
+
this.selectOptions();
|
|
295
|
+
});
|
|
234
296
|
this.multiselectVisibleSubscription = this.multiSelectService.multiSelectVisible$.subscribe((visible) => {
|
|
235
297
|
this.isDropdownVisible = visible;
|
|
236
298
|
this.visibleChange.emit(visible);
|
|
@@ -243,8 +305,15 @@ export class MultiSelectComponent {
|
|
|
243
305
|
item.selected = false;
|
|
244
306
|
}
|
|
245
307
|
});
|
|
308
|
+
// close dropdown for single select (!multiple)
|
|
309
|
+
this.visible = false;
|
|
310
|
+
this.searchValue = '';
|
|
311
|
+
this.setFocus();
|
|
246
312
|
}
|
|
313
|
+
// todo?
|
|
314
|
+
// if (!!option) {
|
|
247
315
|
this.selectedOptionsUpdate();
|
|
316
|
+
// }
|
|
248
317
|
});
|
|
249
318
|
}
|
|
250
319
|
else {
|
|
@@ -253,73 +322,35 @@ export class MultiSelectComponent {
|
|
|
253
322
|
this.multiselectStateSubscription?.unsubscribe();
|
|
254
323
|
}
|
|
255
324
|
}
|
|
325
|
+
selectOptions() {
|
|
326
|
+
this.multiSelectOptions?.forEach((option, index) => {
|
|
327
|
+
option.optionsStyle = this.optionsStyle;
|
|
328
|
+
option.selected = option.value !== undefined ? this.value.includes(option.value) || option.selected : option.selected;
|
|
329
|
+
});
|
|
330
|
+
}
|
|
256
331
|
clearAllOptions($event) {
|
|
257
332
|
this.selectedOptions.forEach((option) => {
|
|
258
333
|
if (!option._disabled)
|
|
259
334
|
option.selected = false;
|
|
260
335
|
});
|
|
336
|
+
this.selectedOptionsUpdate();
|
|
261
337
|
this.setFocus();
|
|
262
338
|
}
|
|
263
339
|
selectAllOptions() {
|
|
264
340
|
this.multiSelectOptions.forEach((option, index) => {
|
|
265
|
-
if (!option.disabled)
|
|
341
|
+
if (!option.disabled && option.visible)
|
|
266
342
|
option.selected = true;
|
|
267
343
|
});
|
|
344
|
+
this.selectedOptionsUpdate();
|
|
268
345
|
}
|
|
269
|
-
// private setListeners() {
|
|
270
|
-
// if (this.search) {
|
|
271
|
-
// const configForInput: IListenersConfig = {
|
|
272
|
-
// hostElement: this.inputElement ?? this.elementRef,
|
|
273
|
-
// trigger: ['focus', 'click'],
|
|
274
|
-
// callbackOn: () => {
|
|
275
|
-
// console.log('focus input');
|
|
276
|
-
// this.tabIndex = null;
|
|
277
|
-
// // this.visible = true;
|
|
278
|
-
// }
|
|
279
|
-
// };
|
|
280
|
-
// this.listenersService.setListeners(configForInput);
|
|
281
|
-
// }
|
|
282
|
-
//
|
|
283
|
-
// const configForHost: IListenersConfig = {
|
|
284
|
-
// hostElement: this.elementRef,
|
|
285
|
-
// trigger: ['focus'],
|
|
286
|
-
// callbackOn: () => {
|
|
287
|
-
// console.log('focus');
|
|
288
|
-
// if (this.inputElement) {
|
|
289
|
-
// this.setFocus()
|
|
290
|
-
// }
|
|
291
|
-
// // this.inputElement?.nativeElement.focus();
|
|
292
|
-
// },
|
|
293
|
-
// callbackOff: () => {
|
|
294
|
-
// console.log('blur');
|
|
295
|
-
// }
|
|
296
|
-
// };
|
|
297
|
-
// this.listenersService.setListeners(configForHost);
|
|
298
|
-
// }
|
|
299
|
-
// private clearListeners() {
|
|
300
|
-
// this.listenersService.clearListeners();
|
|
301
|
-
// }
|
|
302
346
|
handleTagRemove($event) {
|
|
303
347
|
this.setFocus();
|
|
304
348
|
}
|
|
305
349
|
setFocus() {
|
|
306
350
|
if (this.disabled)
|
|
307
351
|
return;
|
|
308
|
-
this.focusMonitor
|
|
309
|
-
}
|
|
310
|
-
// setFirstSelectedOptionActive() {
|
|
311
|
-
// const firstSelectedOption = this.selectedOptions.find((item) => item.selected) ??
|
|
312
|
-
// this.multiSelectOptions.find((item, index) => index === 0);
|
|
313
|
-
// if (firstSelectedOption && this.isDropdownVisible) {
|
|
314
|
-
// // this.listKeyManager.setFocusOrigin('keyboard');
|
|
315
|
-
// this.listKeyManager.setActiveItem(firstSelectedOption);
|
|
316
|
-
// this.changeDetectorRef.markForCheck();
|
|
317
|
-
// } else {
|
|
318
|
-
// // this.listKeyManager.setFocusOrigin('keyboard');
|
|
319
|
-
// this.listKeyManager.setFirstItemActive();
|
|
320
|
-
// this.changeDetectorRef.markForCheck();
|
|
321
|
-
// }
|
|
322
|
-
// }
|
|
352
|
+
this.focusMonitor?.focusVia(this.inputElement ?? this.elementRef, 'program');
|
|
353
|
+
}
|
|
323
354
|
filterOptions(value) {
|
|
324
355
|
const searchString = value.toLowerCase() ?? '';
|
|
325
356
|
this.multiSelectOptions?.forEach((item, index) => {
|
|
@@ -349,7 +380,7 @@ export class MultiSelectComponent {
|
|
|
349
380
|
this.nativeSelectRef.instance.form = this.nativeId;
|
|
350
381
|
this.nativeSelectRef.instance.options = [...options];
|
|
351
382
|
this.nativeSelectRef.instance.disabled = this.disabled;
|
|
352
|
-
this.nativeSelectRef.instance.changeDetectorRef.
|
|
383
|
+
this.nativeSelectRef.instance.changeDetectorRef.markForCheck();
|
|
353
384
|
}
|
|
354
385
|
inputElementSize() {
|
|
355
386
|
if (this.inputElement) {
|
|
@@ -380,33 +411,43 @@ export class MultiSelectComponent {
|
|
|
380
411
|
}
|
|
381
412
|
selectedOptionsUpdate() {
|
|
382
413
|
setTimeout(() => {
|
|
383
|
-
this.selectedOptions = this.multiSelectOptions
|
|
414
|
+
this.selectedOptions = this.multiSelectOptions?.filter((option) => !!option.selected);
|
|
415
|
+
this.inputElementSize();
|
|
416
|
+
this.updateNativeSelect();
|
|
384
417
|
this.changeDetectorRef.markForCheck();
|
|
385
418
|
});
|
|
386
419
|
}
|
|
420
|
+
setFocusMonitor(monitor) {
|
|
421
|
+
if (monitor && !this.disabled) {
|
|
422
|
+
this.focusMonitorSubscription = this.focusMonitor?.monitor(this.elementRef, true).subscribe((origin) => {
|
|
423
|
+
this.ngZone.run(() => {
|
|
424
|
+
this.subtreeFocused = this.focusOrigin(origin);
|
|
425
|
+
this.changeDetectorRef?.markForCheck();
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
this.focusMonitor?.stopMonitoring(this.elementRef);
|
|
431
|
+
this.focusMonitorSubscription?.unsubscribe();
|
|
432
|
+
}
|
|
433
|
+
}
|
|
387
434
|
}
|
|
388
|
-
MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i1.FocusMonitor }, { token: i2.MultiSelectService }], target: i0.ɵɵFactoryTarget.Component });
|
|
389
|
-
MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: MultiSelectComponent, selector: "c-multi-select", inputs: { cleaner: "cleaner", disabled: "disabled", multiple: "multiple", nativeName: "nativeName", nativeId: "nativeId", optionsMaxHeight: "optionsMaxHeight", optionsStyle: "optionsStyle", placeholder: "placeholder", search: "search", searchNoResultsLabel: "searchNoResultsLabel", selectAll: "selectAll", selectAllLabel: "selectAllLabel", selectionType: "selectionType", selectionTypeCounterText: "selectionTypeCounterText", selectionTypeCounterTextPluralMap: "selectionTypeCounterTextPluralMap", size: "size", value: "value", visible: "visible" }, outputs: { valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)", "click": "onClick($event)" }, properties: { "class": "this.hostClasses", "attr.tabindex": "this.tabIndex" } }, providers: [
|
|
435
|
+
MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i1.FocusMonitor }, { token: i2.MultiSelectService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
436
|
+
MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: MultiSelectComponent, selector: "c-multi-select", inputs: { cleaner: "cleaner", disabled: "disabled", multiple: "multiple", nativeName: "nativeName", nativeId: "nativeId", optionsMaxHeight: "optionsMaxHeight", optionsStyle: "optionsStyle", placeholder: "placeholder", search: "search", searchNoResultsLabel: "searchNoResultsLabel", selectAll: "selectAll", selectAllLabel: "selectAllLabel", selectionType: "selectionType", selectionTypeCounterText: "selectionTypeCounterText", selectionTypeCounterTextPluralMap: "selectionTypeCounterTextPluralMap", size: "size", value: "value", visible: "visible", popperjsOptions: ["popperOptions", "popperjsOptions"] }, outputs: { valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)", "click": "onClick($event)" }, properties: { "class": "this.hostClasses", "attr.tabindex": "this.tabIndex" } }, providers: [
|
|
390
437
|
MultiSelectService,
|
|
391
|
-
// ListenersService,
|
|
392
438
|
{
|
|
393
|
-
provide: NG_VALUE_ACCESSOR,
|
|
394
|
-
useExisting: forwardRef(() => MultiSelectComponent),
|
|
395
|
-
multi: true
|
|
439
|
+
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MultiSelectComponent), multi: true
|
|
396
440
|
}
|
|
397
|
-
], queries: [{ propertyName: "multiSelectOptions", predicate: MultiSelectOptionComponent, descendants: true }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }, { propertyName: "
|
|
441
|
+
], queries: [{ propertyName: "multiSelectOptions", predicate: MultiSelectOptionComponent, descendants: true }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: ["dropdownMenu"], descendants: true }, { propertyName: "dropdownToggle", first: true, predicate: DropdownToggleDirective, descendants: true }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }], exportAs: ["cMultiSelect"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"picker\" [ngClass]=\"multiselectClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\" [disabled]=\"disabled\" cDropdownToggle #dropdownToggle=\"cDropdownToggle\">\n <div class=\"form-multi-select-selection\">\n <ng-template [ngIf]=\"selectionType === 'tags'\">\n <c-multi-select-tag *ngFor=\"let option of selectedOptions; index as i\"\n (remove)=\"handleTagRemove($event)\"\n [option]=\"option\"\n tabindex=\"-1\">\n </c-multi-select-tag>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'text' && !!selectedOptionsText\">\n <span class=\"form-multi-select-search\">{{ selectedOptionsText }}</span>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'counter'\">\n <span *ngIf=\"counterTextType === 'string'; else pluralMap\">{{ counterText }}</span>\n <ng-template #pluralMap>\n <span>{{selectedOptions.length}} {{ selectedOptions.length | i18nPlural: selectionTypeCounterTextPluralMap ?? { other: counterText } }}</span>\n </ng-template>\n </ng-template>\n <!-- <ng-template [ngIf]=\"!search && selectedOptions.length === 0 && selectionType !== 'counter'\">-->\n <!-- <span class=\"form-multi-select-search\">{{ placeholder }}</span>-->\n <!-- </ng-template>-->\n </div>\n\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n [(ngModel)]=\"searchValue\"\n [disabled]=\"disabled || !search\"\n [ngClass]=\"{ 'form-multi-select-search': true, disabled: (disabled || !search) }\"\n [attr.placeholder]=\"selectedOptions.length === 0 && selectionType !== 'counter' ? placeholder : null\"\n autocomplete=\"off\"\n tabindex=\"{{ disabled ? '-1' : '0' }}\"\n type=\"text\"\n >\n\n <button\n (click)=\"clearAllOptions($event)\"\n *ngIf=\"cleaner && selectedOptions.length > 0 && !disabled\"\n [disabled]=\"disabled || !isDropdownVisible\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-selection-cleaner\"\n ></button>\n </div>\n\n <div *ngIf=\"!disabled\" class=\"\" cDropdownMenu #dropdownMenu=\"cDropdownMenu\" [visible]=\"dropdown.visible\">\n <ng-template [ngIfElse]=\"optionsEmpty\" [ngIf]=\"visibleOptions > 0\">\n <button (click)=\"selectAllOptions()\" *ngIf=\"selectAll && multiple\" class=\"form-multi-select-all\">\n {{ selectAllLabel }}\n </button>\n <div #multiselectOptionsDiv\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'maxHeight.px': optionsMaxHeight, overflow: 'scroll' } : {}\"\n class=\"form-multi-select-options\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n <ng-template #optionsEmpty>\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel }}</div>\n </ng-template>\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{color:var(--cui-form-multi-select-focus-color, rgba(44, 56, 74, .95));background-color:var(--cui-form-multi-select-focus-bg, #fff);border-color:var(--cui-form-multi-select-focus-border-color, #6557e4);box-shadow:0 0 0 .25rem #321fdb40}:host:not(.cdk-focused) .form-multi-select:not(.show) input.form-multi-select-search:not([placeholder]){width:.1rem;margin-inline-start:0}:host .form-multi-select-search[size]{display:inline}:host .form-multi-select-selection-tags .form-multi-select-search{height:1.5rem}:host-context(.dark-theme)::ng-deep .form-multi-select-optgroup-label{color:var(--cui-form-multi-select-disabled-color)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: i5.DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: i6.DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { kind: "component", type: i7.MultiSelectTagComponent, selector: "c-multi-select-tag", inputs: ["option"], outputs: ["remove"] }, { kind: "pipe", type: i3.I18nPluralPipe, name: "i18nPlural" }] });
|
|
398
442
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
|
|
399
443
|
type: Component,
|
|
400
444
|
args: [{ selector: 'c-multi-select', exportAs: 'cMultiSelect', providers: [
|
|
401
445
|
MultiSelectService,
|
|
402
|
-
// ListenersService,
|
|
403
446
|
{
|
|
404
|
-
provide: NG_VALUE_ACCESSOR,
|
|
405
|
-
useExisting: forwardRef(() => MultiSelectComponent),
|
|
406
|
-
multi: true
|
|
447
|
+
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MultiSelectComponent), multi: true
|
|
407
448
|
}
|
|
408
|
-
], template: "<div class=\"form-multi-select-selection\">\
|
|
409
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i1.FocusMonitor }, { type: i2.MultiSelectService }]; }, propDecorators: { cleaner: [{
|
|
449
|
+
], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"picker\" [ngClass]=\"multiselectClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\" [disabled]=\"disabled\" cDropdownToggle #dropdownToggle=\"cDropdownToggle\">\n <div class=\"form-multi-select-selection\">\n <ng-template [ngIf]=\"selectionType === 'tags'\">\n <c-multi-select-tag *ngFor=\"let option of selectedOptions; index as i\"\n (remove)=\"handleTagRemove($event)\"\n [option]=\"option\"\n tabindex=\"-1\">\n </c-multi-select-tag>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'text' && !!selectedOptionsText\">\n <span class=\"form-multi-select-search\">{{ selectedOptionsText }}</span>\n </ng-template>\n <ng-template [ngIf]=\"selectionType === 'counter'\">\n <span *ngIf=\"counterTextType === 'string'; else pluralMap\">{{ counterText }}</span>\n <ng-template #pluralMap>\n <span>{{selectedOptions.length}} {{ selectedOptions.length | i18nPlural: selectionTypeCounterTextPluralMap ?? { other: counterText } }}</span>\n </ng-template>\n </ng-template>\n <!-- <ng-template [ngIf]=\"!search && selectedOptions.length === 0 && selectionType !== 'counter'\">-->\n <!-- <span class=\"form-multi-select-search\">{{ placeholder }}</span>-->\n <!-- </ng-template>-->\n </div>\n\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n [(ngModel)]=\"searchValue\"\n [disabled]=\"disabled || !search\"\n [ngClass]=\"{ 'form-multi-select-search': true, disabled: (disabled || !search) }\"\n [attr.placeholder]=\"selectedOptions.length === 0 && selectionType !== 'counter' ? placeholder : null\"\n autocomplete=\"off\"\n tabindex=\"{{ disabled ? '-1' : '0' }}\"\n type=\"text\"\n >\n\n <button\n (click)=\"clearAllOptions($event)\"\n *ngIf=\"cleaner && selectedOptions.length > 0 && !disabled\"\n [disabled]=\"disabled || !isDropdownVisible\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-selection-cleaner\"\n ></button>\n </div>\n\n <div *ngIf=\"!disabled\" class=\"\" cDropdownMenu #dropdownMenu=\"cDropdownMenu\" [visible]=\"dropdown.visible\">\n <ng-template [ngIfElse]=\"optionsEmpty\" [ngIf]=\"visibleOptions > 0\">\n <button (click)=\"selectAllOptions()\" *ngIf=\"selectAll && multiple\" class=\"form-multi-select-all\">\n {{ selectAllLabel }}\n </button>\n <div #multiselectOptionsDiv\n [ngStyle]=\"optionsMaxHeight !== 'auto' ? { 'maxHeight.px': optionsMaxHeight, overflow: 'scroll' } : {}\"\n class=\"form-multi-select-options\"\n >\n <ng-content></ng-content>\n </div>\n </ng-template>\n <ng-template #optionsEmpty>\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel }}</div>\n </ng-template>\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{color:var(--cui-form-multi-select-focus-color, rgba(44, 56, 74, .95));background-color:var(--cui-form-multi-select-focus-bg, #fff);border-color:var(--cui-form-multi-select-focus-border-color, #6557e4);box-shadow:0 0 0 .25rem #321fdb40}:host:not(.cdk-focused) .form-multi-select:not(.show) input.form-multi-select-search:not([placeholder]){width:.1rem;margin-inline-start:0}:host .form-multi-select-search[size]{display:inline}:host .form-multi-select-selection-tags .form-multi-select-search{height:1.5rem}:host-context(.dark-theme)::ng-deep .form-multi-select-optgroup-label{color:var(--cui-form-multi-select-disabled-color)}\n"] }]
|
|
450
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i1.FocusMonitor }, { type: i2.MultiSelectService }, { type: i0.IterableDiffers }]; }, propDecorators: { cleaner: [{
|
|
410
451
|
type: Input
|
|
411
452
|
}], disabled: [{
|
|
412
453
|
type: Input
|
|
@@ -446,15 +487,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
446
487
|
type: Input
|
|
447
488
|
}], visibleChange: [{
|
|
448
489
|
type: Output
|
|
490
|
+
}], popperjsOptions: [{
|
|
491
|
+
type: Input,
|
|
492
|
+
args: ['popperOptions']
|
|
449
493
|
}], multiSelectOptions: [{
|
|
450
494
|
type: ContentChildren,
|
|
451
495
|
args: [MultiSelectOptionComponent, { descendants: true }]
|
|
452
496
|
}], inputElement: [{
|
|
453
497
|
type: ViewChild,
|
|
454
498
|
args: ['inputElement']
|
|
455
|
-
}],
|
|
499
|
+
}], dropdownMenu: [{
|
|
500
|
+
type: ViewChild,
|
|
501
|
+
args: ['dropdownMenu']
|
|
502
|
+
}], dropdownToggle: [{
|
|
503
|
+
type: ViewChild,
|
|
504
|
+
args: [DropdownToggleDirective]
|
|
505
|
+
}], dropdown: [{
|
|
456
506
|
type: ViewChild,
|
|
457
|
-
args: [
|
|
507
|
+
args: [DropdownComponent, { read: ElementRef }]
|
|
458
508
|
}], hostClasses: [{
|
|
459
509
|
type: HostBinding,
|
|
460
510
|
args: ['class']
|
|
@@ -471,4 +521,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
471
521
|
type: HostListener,
|
|
472
522
|
args: ['click', ['$event']]
|
|
473
523
|
}] } });
|
|
474
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9FQUFvRSxDQUFDOzs7Ozs7O0FBb0N0SCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLFlBQ1UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsTUFBYyxFQUNkLGlCQUFvQyxFQUNwQyxnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsa0JBQXNDO0lBQzlDLDZDQUE2Qzs7UUFQckMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FB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QVE7c0JBRG5CLFdBQVc7dUJBQUMsZUFBZTtnQkFXTyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5QkksU0FBUztzQkFBN0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT0EsT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy8gaW1wb3J0IHsgTGlzdGVuZXJzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpc3RlbmVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSU11bHRpU2VsZWN0LCBJT3B0aW9uIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnR5cGUnO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW9wdGlvbi9tdWx0aS1zZWxlY3Qtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QvbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcclxuXHJcbi8vIGNvbnN0IGZsYXR0ZW5BcnJheSA9IChvcHRpb25zOiBJT3B0aW9uW10pOiBJT3B0aW9uW10gPT4ge1xyXG4vLyAgIHJldHVybiBvcHRpb25zLnJlZHVjZSgoYWNjOiBJT3B0aW9uW10sIHZhbDogSU9wdGlvbikgPT4ge1xyXG4vLyAgICAgcmV0dXJuIGFjYy5jb25jYXQoQXJyYXkuaXNBcnJheSh2YWwub3B0aW9ucykgPyBmbGF0dGVuQXJyYXkodmFsLm9wdGlvbnMpIDogdmFsKTtcclxuLy8gICB9LCBbXSk7XHJcbi8vIH07XHJcbi8vXHJcbi8vIGNvbnN0IGdldFNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb25zOiBJT3B0aW9uW10pID0+IHtcclxuLy8gICByZXR1cm4gZmxhdHRlbkFycmF5KG9wdGlvbnMpLmZpbHRlcigob3B0aW9uOiBJT3B0aW9uKSA9PiB7XHJcbi8vICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XHJcbi8vICAgICAgIHJldHVybiBvcHRpb247XHJcbi8vICAgICB9XHJcbi8vICAgICByZXR1cm47XHJcbi8vICAgfSk7XHJcbi8vIH07XHJcblxyXG5pbnRlcmZhY2UgSVBsdXJhbE1hcCB7XHJcbiAgW2s6IHN0cmluZ106IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLW11bHRpLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZXhwb3J0QXM6ICdjTXVsdGlTZWxlY3QnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTXVsdGlTZWxlY3RTZXJ2aWNlLFxyXG4gICAgLy8gTGlzdGVuZXJzU2VydmljZSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpU2VsZWN0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdENvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgSU11bHRpU2VsZWN0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcml2YXRlIG11bHRpU2VsZWN0U2VydmljZTogTXVsdGlTZWxlY3RTZXJ2aWNlXHJcbiAgICAvLyBwcml2YXRlIGxpc3RlbmVyc1NlcnZpY2U6IExpc3RlbmVyc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9tdWx0aXBsZTogQm9vbGVhbklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKHZhbHVlOiBhbnkpID0+IHt9O1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiAoc3RyaW5nIHwgc3RyaW5nW10pKTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY2xlYW5lciA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX211bHRpcGxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBuYXRpdmVOYW1lID0gJyc7XHJcbiAgQElucHV0KCkgbmF0aXZlSWQgPSAnJztcclxuICAvLyBASW5wdXQoKSBvcHRpb25zID0gW107XHJcbiAgQElucHV0KCkgb3B0aW9uc01heEhlaWdodCA9ICdhdXRvJztcclxuICBASW5wdXQoKSBvcHRpb25zU3R5bGU6ICdjaGVja2JveCcgfCAndGV4dCcgPSAnY2hlY2tib3gnO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdC4uLic7XHJcbiAgQElucHV0KCkgc2VhcmNoID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWFyY2hOb1Jlc3VsdHNMYWJlbCA9ICdubyBpdGVtcyc7XHJcbiAgQElucHV0KCkgc2VsZWN0QWxsID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWxlY3RBbGxMYWJlbCA9ICdTZWxlY3QgYWxsIG9wdGlvbnMnO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6ICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0JyA9ICd0YWdzJztcclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlQ291bnRlclRleHQ6IHN0cmluZyA9ICdpdGVtKHMpIHNlbGVjdGVkJztcclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXA/OiBJUGx1cmFsTWFwID0geyAnPTEnOiAnaXRlbSBzZWxlY3RlZCcsICdvdGhlcic6ICdpdGVtcyBzZWxlY3RlZCcgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsIG9yIGxhcmdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ2xnJ1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlID8/ICcnXTtcclxuICAgIGlmICh0aGlzLl92YWx1ZS50b1N0cmluZygpICE9PSBuZXdWYWx1ZS50b1N0cmluZygpKSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gWy4uLnRoaXMuX3ZhbHVlXSA6IHRoaXMuX3ZhbHVlWzBdPy50b1N0cmluZygpID8/ICcnO1xyXG4gIH1cclxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nW10gPSBbJyddO1xyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHN0cmluZ1tdPigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX3Zpc2libGUpIHtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS50b2dnbGVWaXNpYmxlKG5ld1ZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5saXN0S2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdmlzaWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBpc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBzZXQgc2VsZWN0ZWRPcHRpb25zKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcclxuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xyXG4gIH1cclxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkT3B0aW9ucztcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICBnZXQgc2VsZWN0ZWRPcHRpb25zVGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKS5qb2luKCcsICcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvdW50ZXJUZXh0KCkge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0gJHt0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dH1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvdW50ZXJUZXh0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB0eXBlb2YgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHQ7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFN0YXRlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RWaXNpYmxlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgbXVsdGlTZWxlY3RPcHRpb25zU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG11bHRpU2VsZWN0T3B0aW9ucyE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XHJcblxyXG4gIHByaXZhdGUgbGlzdEtleU1hbmFnZXIhOiBGb2N1c0tleU1hbmFnZXI8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKSBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duRWxlbWVudCcpIGRyb3Bkb3duRWxlbWVudCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgaG9zdENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3QnOiB0cnVlLFxyXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICd0YWdzJyxcclxuICAgICAgW2Bmb3JtLW11bHRpLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTogISF0aGlzLnNpemUsXHJcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdC13aXRoLWNsZWFuZXInOiB0aGlzLmNsZWFuZXIsXHJcbiAgICAgIHNob3c6IHRoaXMudmlzaWJsZSxcclxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxyXG4gIHByaXZhdGUgZ2V0IHRhYkluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYkluZGV4O1xyXG4gIH1cclxuICBwcml2YXRlIHNldCB0YWJJbmRleCh2YWx1ZSkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3RhYkluZGV4ID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnNlYXJjaCA/ICctMScgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAnMCc7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGFiSW5kZXg6IHN0cmluZyB8IG51bGwgPSAnLTEnO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pIG9uS2V5VXAoJGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNldEZvY3VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChbJ0VudGVyJywgJyAnLCAnQXJyb3dEb3duJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkgJiYgW3RoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50ID8/IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XS5pbmNsdWRlcygkZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnVGFiJyAmJiAkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxyXG4gICAgaWYgKCRldmVudC50YXJnZXQ9PT10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmxpc3RLZXlNYW5hZ2VyLm9uS2V5ZG93bigkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBvbkNsaWNrKCRldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGlmICghdGhpcy52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmlzaWJsZU9wdGlvbnMgPSAwO1xyXG5cclxuICBzZXQgc2VhcmNoVmFsdWUodmFsdWUpIHtcclxuICAgIHRoaXMuX3NlYXJjaFZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgdGhpcy52aXNpYmxlID0gISF0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCB8fCB0aGlzLnZpc2libGU7XHJcbiAgICB0aGlzLmZpbHRlck9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSk7XHJcbiAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcclxuICB9XHJcbiAgZ2V0IHNlYXJjaFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdldCBzdWJ0cmVlRm9jdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJ0cmVlRm9jdXNlZDtcclxuICB9XHJcbiAgc2V0IHN1YnRyZWVGb2N1c2VkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zdWJ0cmVlRm9jdXNlZCA9IHRoaXMuZGlzYWJsZWQgPyBmYWxzZSA6IHZhbHVlO1xyXG4gICAgdGhpcy52aXNpYmxlID0gdmFsdWUgPT09IGZhbHNlID8gZmFsc2UgOiB0aGlzLnZpc2libGU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N1YnRyZWVGb2N1c2VkID0gdGhpcy5mb2N1c09yaWdpbihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBuYXRpdmVTZWxlY3RSZWYhOiBhbnk7XHJcblxyXG4gIGZvY3VzT3JpZ2luKG9yaWdpbjogRm9jdXNPcmlnaW4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZvY3VzZWQgPSAhIW9yaWdpbjtcclxuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBmb2N1c2VkID8gdGhpcy5zZWFyY2hWYWx1ZSA6ICcnO1xyXG4gICAgcmV0dXJuIGZvY3VzZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGFiSW5kZXggPSAnMCc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubXVsdGlzZWxlY3RTdWJzY3JpYmUoZmFsc2UpO1xyXG4gICAgLy8gdGhpcy5jbGVhckxpc3RlbmVycygpO1xyXG4gICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKTtcclxuICAgIHRoaXMuZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmxlbmd0aDtcclxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcclxuICAgICAgb3B0aW9uLm9wdGlvbnNTdHlsZSA9IHRoaXMub3B0aW9uc1N0eWxlO1xyXG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSBvcHRpb24udmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uLnZhbHVlKSB8fCBvcHRpb24uc2VsZWN0ZWQgOiBvcHRpb24uc2VsZWN0ZWQ7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCk7XHJcbiAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcclxuXHJcbiAgICB0aGlzLmxpc3RLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLm11bHRpU2VsZWN0T3B0aW9ucykud2l0aEhvbWVBbmRFbmQoKS53aXRoVHlwZUFoZWFkKCk7XHJcbiAgICB0aGlzLmxpc3RLZXlNYW5hZ2VyLnNraXBQcmVkaWNhdGUoaXRlbSA9PiAoIWl0ZW0udmlzaWJsZSB8fCBpdGVtLmRpc2FibGVkKSk7XHJcbiAgICB0aGlzLmxpc3RLZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xyXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5jcmVhdGVOYXRpdmVTZWxlY3QoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuc2V0TGlzdGVuZXJzKCk7XHJcbiAgICB0aGlzLmZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5lbGVtZW50UmVmLCB0cnVlKS5zdWJzY3JpYmUoKG9yaWdpbikgPT5cclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RTdWJzY3JpYmUoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHN1YnNjcmliZSkge1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0VmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm11bHRpU2VsZWN0VmlzaWJsZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgICh2aXNpYmxlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdmlzaWJsZTtcclxuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMubXVsdGlzZWxlY3RTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm11bHRpU2VsZWN0U3RhdGUkLnN1YnNjcmliZShcclxuICAgICAgICAob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkID09PSB0cnVlICYmICF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLnRvQXJyYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMucmV2ZXJzZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbSAhPT0gb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tdWx0aXNlbGVjdFZpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0U3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbE9wdGlvbnMoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgaWYgKCFvcHRpb24uX2Rpc2FibGVkKSBvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRGb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsT3B0aW9ucygpIHtcclxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgc2V0TGlzdGVuZXJzKCkge1xyXG4gIC8vICAgaWYgKHRoaXMuc2VhcmNoKSB7XHJcbiAgLy8gICAgIGNvbnN0IGNvbmZpZ0ZvcklucHV0OiBJTGlzdGVuZXJzQ29uZmlnID0ge1xyXG4gIC8vICAgICAgIGhvc3RFbGVtZW50OiB0aGlzLmlucHV0RWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYsXHJcbiAgLy8gICAgICAgdHJpZ2dlcjogWydmb2N1cycsICdjbGljayddLFxyXG4gIC8vICAgICAgIGNhbGxiYWNrT246ICgpID0+IHtcclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKCdmb2N1cyBpbnB1dCcpO1xyXG4gIC8vICAgICAgICAgdGhpcy50YWJJbmRleCA9IG51bGw7XHJcbiAgLy8gICAgICAgICAvLyB0aGlzLnZpc2libGUgPSB0cnVlO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfTtcclxuICAvLyAgICAgdGhpcy5saXN0ZW5lcnNTZXJ2aWNlLnNldExpc3RlbmVycyhjb25maWdGb3JJbnB1dCk7XHJcbiAgLy8gICB9XHJcbiAgLy9cclxuICAvLyAgIGNvbnN0IGNvbmZpZ0Zvckhvc3Q6IElMaXN0ZW5lcnNDb25maWcgPSB7XHJcbiAgLy8gICAgIGhvc3RFbGVtZW50OiB0aGlzLmVsZW1lbnRSZWYsXHJcbiAgLy8gICAgIHRyaWdnZXI6IFsnZm9jdXMnXSxcclxuICAvLyAgICAgY2FsbGJhY2tPbjogKCkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdmb2N1cycpO1xyXG4gIC8vICAgICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xyXG4gIC8vICAgICAgICAgdGhpcy5zZXRGb2N1cygpXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIC8vIHRoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGNhbGxiYWNrT2ZmOiAoKSA9PiB7XHJcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ2JsdXInKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfTtcclxuICAvLyAgIHRoaXMubGlzdGVuZXJzU2VydmljZS5zZXRMaXN0ZW5lcnMoY29uZmlnRm9ySG9zdCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwcml2YXRlIGNsZWFyTGlzdGVuZXJzKCkge1xyXG4gIC8vICAgdGhpcy5saXN0ZW5lcnNTZXJ2aWNlLmNsZWFyTGlzdGVuZXJzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBoYW5kbGVUYWdSZW1vdmUoJGV2ZW50OiBJT3B0aW9uKSB7XHJcbiAgICB0aGlzLnNldEZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICB0aGlzLmZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLmlucHV0RWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYsICdwcm9ncmFtJyk7XHJcbiAgfVxyXG5cclxuICAvLyBzZXRGaXJzdFNlbGVjdGVkT3B0aW9uQWN0aXZlKCkge1xyXG4gIC8vICAgY29uc3QgZmlyc3RTZWxlY3RlZE9wdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQpID8/XHJcbiAgLy8gICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZpbmQoKGl0ZW0sIGluZGV4KSA9PiBpbmRleCA9PT0gMCk7XHJcbiAgLy8gICBpZiAoZmlyc3RTZWxlY3RlZE9wdGlvbiAmJiB0aGlzLmlzRHJvcGRvd25WaXNpYmxlKSB7XHJcbiAgLy8gICAgIC8vIHRoaXMubGlzdEtleU1hbmFnZXIuc2V0Rm9jdXNPcmlnaW4oJ2tleWJvYXJkJyk7XHJcbiAgLy8gICAgIHRoaXMubGlzdEtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShmaXJzdFNlbGVjdGVkT3B0aW9uKTtcclxuICAvLyAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIC8vIHRoaXMubGlzdEtleU1hbmFnZXIuc2V0Rm9jdXNPcmlnaW4oJ2tleWJvYXJkJyk7XHJcbiAgLy8gICAgIHRoaXMubGlzdEtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XHJcbiAgLy8gICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPz8gJyc7XHJcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCEhc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZpc2libGVPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS52aXNpYmxlKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVOYXRpdmVTZWxlY3QoKSB7XHJcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChNdWx0aVNlbGVjdE5hdGl2ZVNlbGVjdENvbXBvbmVudCk7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTmF0aXZlU2VsZWN0KCkge1xyXG4gICAgaWYgKCF0aGlzLm5hdGl2ZVNlbGVjdFJlZikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9ID0gaXRlbTtcclxuICAgICAgcmV0dXJuIHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UubXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xyXG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UubmFtZSA9IHRoaXMubmF0aXZlTmFtZTtcclxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmZvcm0gPSB0aGlzLm5hdGl2ZUlkO1xyXG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2Uub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcclxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGlucHV0RWxlbWVudFNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDAgfHwgdGhpcy5zZWxlY3Rpb25UeXBlID09PSAnY291bnRlcicpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2l6ZScsICh0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCArIDIpLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzaXplJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hWYWx1ZS5sZW5ndGggfHwgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgaWYgKFsnQmFja3NwYWNlJywgJ0RlbGV0ZSddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gIW9wdGlvbi5kaXNhYmxlZCkucG9wKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKGxhc3QsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0T3B0aW9uKG9wdGlvbjogTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQsIHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoaXRlbSA9PT0gb3B0aW9uKSB7XHJcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnNVcGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICEhb3B0aW9uLnNlbGVjdGVkKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb25cIj5cclxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3RhZ3MnXCI+XHJcbiAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJoYW5kbGVUYWdSZW1vdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPC9jLW11bHRpLXNlbGVjdC10YWc+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zVGV4dFwiPlxyXG4gICAgPHNwYW4+e3sgc2VsZWN0ZWRPcHRpb25zVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzZWxlY3Rpb25UeXBlID09PSAnY291bnRlcidcIj5cclxuICAgIDxzcGFuICpuZ0lmPVwiY291bnRlclRleHRUeXBlID09PSAnc3RyaW5nJzsgZWxzZSBwbHVyYWxNYXBcIj57eyBjb3VudGVyVGV4dCB9fTwvc3Bhbj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjcGx1cmFsTWFwPlxyXG4gICAgICA8c3Bhbj57e3NlbGVjdGVkT3B0aW9ucy5sZW5ndGh9fSB7eyBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIHwgaTE4blBsdXJhbDogc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0UGx1cmFsTWFwID8/IHsgb3RoZXI6IGNvdW50ZXJUZXh0IH0gfX08L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFzZWFyY2ggJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3Rpb25UeXBlICE9PSAnY291bnRlcidcIj5cclxuICAgIDxzcGFuPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuPGlucHV0XHJcbiAgI2lucHV0RWxlbWVudFxyXG4gIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50KVwiXHJcbiAgKm5nSWY9XCJzZWFyY2ggJiYgIWRpc2FibGVkXCJcclxuICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcclxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIXNlYXJjaFwiXHJcbiAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IGRpc2FibGVkIH1cIlxyXG4gIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwICYmIHNlbGVjdGlvblR5cGUgIT09ICdjb3VudGVyJyA/IHBsYWNlaG9sZGVyIDogJydcIlxyXG4gIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgdGFiaW5kZXg9XCJ7eyBkaXNhYmxlZCA/ICctMScgOiAnMCcgfX1cIlxyXG4gIHR5cGU9XCJ0ZXh0XCJcclxuPlxyXG5cclxuPGJ1dHRvblxyXG4gIChjbGljayk9XCJjbGVhckFsbE9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgKm5nSWY9XCJjbGVhbmVyICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwICYmICFkaXNhYmxlZFwiXHJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFpc0Ryb3Bkb3duVmlzaWJsZVwiXHJcbiAgYXJpYS1sYWJlbD1cIkNsZWFyIGFsbFwiXHJcbiAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb24tY2xlYW5lclwiXHJcbj48L2J1dHRvbj5cclxuXHJcbjxkaXYgI2Ryb3Bkb3duRWxlbWVudCAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtZHJvcGRvd25cIj5cclxuICA8bmctdGVtcGxhdGUgW25nSWZFbHNlXT1cIm9wdGlvbnNFbXB0eVwiIFtuZ0lmXT1cInZpc2libGVPcHRpb25zID4gMFwiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic2VsZWN0QWxsT3B0aW9ucygpXCIgKm5nSWY9XCJzZWxlY3RBbGwgJiYgbXVsdGlwbGVcIiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiPlxyXG4gICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8ZGl2ICNtdWx0aXNlbGVjdE9wdGlvbnNEaXZcclxuICAgICAgICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3c6ICdzY3JvbGwnIH0gOiB7fVwiXHJcbiAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNvcHRpb25zRW1wdHk+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFPTCxNQUFNLEVBSU4sU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQTZCLE1BQU0sbUJBQW1CLENBQUM7QUFDL0UsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQzs7Ozs7Ozs7O0FBTXRILGFBQWE7QUFDYixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBMEI7SUFDN0QsSUFBSSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFB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QkFBWixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBcUJhLFdBQVc7c0JBQTdCLE1BQU07Z0JBRU0sT0FBTztzQkFBbkIsS0FBSztnQkFpQmEsYUFBYTtzQkFBL0IsTUFBTTtnQkFNaUIsZUFBZTtzQkFBdEMsS0FBSzt1QkFBQyxlQUFlO2dCQXVDOEMsa0JBQWtCO3NCQUFyRixlQUFlO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJdkMsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNFLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDVyxjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDa0IsUUFBUTtzQkFBM0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRXhCLFdBQVc7c0JBQXBDLFdBQVc7dUJBQUMsT0FBTztnQkFrQlIsUUFBUTtzQkFEbkIsV0FBVzt1QkFBQyxlQUFlO2dCQWFPLE9BQU87c0JBQXpDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCSSxTQUFTO3NCQUE3QyxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPQSxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSXRlcmFibGVEaWZmZXIsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1vZGlmaWVyLCBNb2RpZmllckFyZ3VtZW50cywgT3B0aW9ucyB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgSU11bHRpU2VsZWN0LCBJT3B0aW9uIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnR5cGUnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Qtb3B0aW9uL211bHRpLXNlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QvbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIElQbHVyYWxNYXAge1xuICBbazogc3RyaW5nXTogc3RyaW5nO1xufVxuXG4vLyBAdHMtaWdub3JlXG5leHBvcnQgY29uc3Qgb2JzZXJ2ZVJlZmVyZW5jZU1vZGlmaWVyOiBNb2RpZmllcjxzdHJpbmcsIGFueT4gPSB7XG4gIG5hbWU6ICdvYnNlcnZlUmVmZXJlbmNlTW9kaWZpZXInLCBlbmFibGVkOiB0cnVlLCBwaGFzZTogJ21haW4nLCBmbih7IHN0YXRlIH0pIHt9LFxuXG4gIGVmZmVjdDogKHsgc3RhdGUsIGluc3RhbmNlIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSA9PiB7XG4gICAgY29uc3QgUk9fUFJPUCA9ICdfX3BvcHBlcmpzUk9fXyc7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgfSA9IHN0YXRlLmVsZW1lbnRzO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlZmVyZW5jZVtST19QUk9QXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmVmZXJlbmNlW1JPX1BST1BdLm9ic2VydmUocmVmZXJlbmNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmVmZXJlbmNlW1JPX1BST1BdLmRpc2Nvbm5lY3QoKTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGRlbGV0ZSByZWZlcmVuY2VbUk9fUFJPUF07XG4gICAgfTtcbiAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY011bHRpU2VsZWN0JyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTXVsdGlTZWxlY3RTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVNlbGVjdENvbXBvbmVudCksIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgSU11bHRpU2VsZWN0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgbXVsdGlTZWxlY3RTZXJ2aWNlOiBNdWx0aVNlbGVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVyc1xuICApIHtcbiAgICB0aGlzLmRpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5fdmFsdWUpLmNyZWF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaWZmZXIhOiBJdGVyYWJsZURpZmZlcjxhbnk+O1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9tdWx0aXBsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcblxuICBvbkNoYW5nZTogYW55ID0gKHZhbHVlOiBhbnkpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IChzdHJpbmcgfCBzdHJpbmdbXSkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIGNsZWFuZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IG11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbmF0aXZlTmFtZSA9ICcnO1xuICBASW5wdXQoKSBuYXRpdmVJZCA9ICcnO1xuICBASW5wdXQoKSBvcHRpb25zTWF4SGVpZ2h0ID0gJ2F1dG8nO1xuICBASW5wdXQoKSBvcHRpb25zU3R5bGU6ICdjaGVja2JveCcgfCAndGV4dCcgPSAnY2hlY2tib3gnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QuLi4nO1xuICBASW5wdXQoKSBzZWFyY2ggPSB0cnVlO1xuICBASW5wdXQoKSBzZWFyY2hOb1Jlc3VsdHNMYWJlbCA9ICdubyBpdGVtcyc7XG4gIEBJbnB1dCgpIHNlbGVjdEFsbCA9IHRydWU7XG4gIEBJbnB1dCgpIHNlbGVjdEFsbExhYmVsID0gJ1NlbGVjdCBhbGwgb3B0aW9ucyc7XG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6ICdjb3VudGVyJyB8ICd0YWdzJyB8ICd0ZXh0JyA9ICd0YWdzJztcbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0OiBzdHJpbmcgPSAnaXRlbShzKSBzZWxlY3RlZCc7XG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcD86IElQbHVyYWxNYXAgPSB7ICc9MSc6ICdpdGVtIHNlbGVjdGVkJywgJ290aGVyJzogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbdmFsdWUgPz8gJyddO1xuICAgIGlmICh0aGlzLmRpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYobmV3VmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucygpO1xuICAgICAgICAvLyBub3QgcmVxdWlyZWQgaGVyZTpcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZE9wdGlvbnNVcGRhdGUoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFsuLi50aGlzLl92YWx1ZV0gOiB0aGlzLl92YWx1ZVswXT8udG9TdHJpbmcoKSA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmdbXSA9IFsnJ107XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBzdHJpbmdbXT4oKTtcblxuICBASW5wdXQoKSBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnRvZ2dsZVZpc2libGUobmV3VmFsdWUpO1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMubGlzdEtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoJ3BvcHBlck9wdGlvbnMnKSBwb3BwZXJqc09wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gICAgc3RyYXRlZ3k6ICdmaXhlZCcsIG1vZGlmaWVyczogW29ic2VydmVSZWZlcmVuY2VNb2RpZmllciwge1xuICAgICAgbmFtZTogJ29mZnNldCcsIG9wdGlvbnM6IHtcbiAgICAgICAgb2Zmc2V0OiBbMCwgdGhpcy5zZWxlY3Rpb25UeXBlID09PSAndGFncycgPyA4IDogMTBdXG4gICAgICB9XG4gICAgfV1cbiAgfTtcblxuICBpc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuXG4gIHNldCBzZWxlY3RlZE9wdGlvbnModmFsdWUpIHtcbiAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZE9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9uc1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpLmpvaW4oJywgJyk7XG4gIH1cblxuICBnZXQgY291bnRlclRleHQoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0gJHt0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dH1gO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8gdHlwZW9mIHRoaXMuc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0O1xuICB9O1xuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RTdGF0ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFZpc2libGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbXVsdGlTZWxlY3RPcHRpb25zU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBAQ29udGVudENoaWxkcmVuKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG11bHRpU2VsZWN0T3B0aW9ucyE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBsaXN0S2V5TWFuYWdlciE6IEZvY3VzS2V5TWFuYWdlcjxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25NZW51JykgZHJvcGRvd25NZW51ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSkgZHJvcGRvd25Ub2dnbGUhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKERyb3Bkb3duQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtdWx0aXNlbGVjdENsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdmb3JtLW11bHRpLXNlbGVjdCc6IHRydWUsXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICd0YWdzJyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgW2Bmb3JtLW11bHRpLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTogISF0aGlzLnNpemUsXG4gICAgICAnZm9ybS1tdWx0aS1zZWxlY3Qtd2l0aC1jbGVhbmVyJzogdGhpcy5jbGVhbmVyLFxuICAgICAgc2hvdzogdGhpcy52aXNpYmxlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgcHJpdmF0ZSBnZXQgdGFiSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYkluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgdGFiSW5kZXgodmFsdWUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3RhYkluZGV4ID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnNlYXJjaCA/ICctMScgOiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiAnMCc7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJJbmRleDogc3RyaW5nIHwgbnVsbCA9ICctMSc7XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKSBvbktleVVwKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFsnRW50ZXInLCAnICcsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQua2V5KSAmJiBbdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XS5pbmNsdWRlcygkZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgJGV2ZW50LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxuICAgIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5saXN0S2V5TWFuYWdlci5vbktleWRvd24oJGV2ZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoW3RoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2aXNpYmxlT3B0aW9ucyA9IDA7XG5cbiAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgdGhpcy52aXNpYmxlID0gISF0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCB8fCB0aGlzLnZpc2libGU7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICB9XG5cbiAgZ2V0IHNlYXJjaFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBnZXQgc3VidHJlZUZvY3VzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnRyZWVGb2N1c2VkO1xuICB9XG5cbiAgc2V0IHN1YnRyZWVGb2N1c2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc3VidHJlZUZvY3VzZWQgPSB0aGlzLmRpc2FibGVkID8gZmFsc2UgOiB2YWx1ZTtcbiAgICB0aGlzLnZpc2libGUgPSB2YWx1ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRoaXMudmlzaWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnRyZWVGb2N1c2VkID0gdGhpcy5mb2N1c09yaWdpbihudWxsKTtcblxuICBwcml2YXRlIG5hdGl2ZVNlbGVjdFJlZiE6IGFueTtcblxuICBmb2N1c09yaWdpbihvcmlnaW46IEZvY3VzT3JpZ2luKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBmb2N1c2VkID0gISFvcmlnaW47XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IGZvY3VzZWQgPyB0aGlzLnNlYXJjaFZhbHVlIDogJyc7XG4gICAgcmV0dXJuIGZvY3VzZWQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkluZGV4ID0gJzAnO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZShmYWxzZSk7XG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgob3B0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKG9wdGlvbiwgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUuaW5jbHVkZXMob3B0aW9uLnZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnNVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuc2VsZWN0T3B0aW9ucygpO1xuICAgIHRoaXMubXVsdGlzZWxlY3RTdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubGlzdEtleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMubXVsdGlTZWxlY3RPcHRpb25zKS53aXRoSG9tZUFuZEVuZCgpLndpdGhUeXBlQWhlYWQoKTtcbiAgICB0aGlzLmxpc3RLZXlNYW5hZ2VyLnNraXBQcmVkaWNhdGUoaXRlbSA9PiAoIWl0ZW0udmlzaWJsZSB8fCBpdGVtLmRpc2FibGVkKSk7XG4gICAgdGhpcy5saXN0S2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcblxuICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF0aGlzLmRpc2FibGVkKTtcbiAgICAvLyBub3QgcmVxdWlyZWQgaGVyZTpcbiAgICAvLyB0aGlzLnNlbGVjdGVkT3B0aW9uc1VwZGF0ZSgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVOYXRpdmVTZWxlY3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbXVsdGlzZWxlY3RTdWJzY3JpYmUoc3Vic2NyaWJlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChzdWJzY3JpYmUpIHtcblxuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNTdWJzY3JpcHRpb24gPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm11bHRpc2VsZWN0VmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm11bHRpU2VsZWN0VmlzaWJsZSQuc3Vic2NyaWJlKCh2aXNpYmxlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm11bHRpc2VsZWN0U3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdFN0YXRlJC5zdWJzY3JpYmUoKG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkID09PSB0cnVlICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMudG9BcnJheSgpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLnJldmVyc2UoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gb3B0aW9uKSB7XG4gICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBjbG9zZSBkcm9wZG93biBmb3Igc2luZ2xlIHNlbGVjdCAoIW11bHRpcGxlKVxuICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9kbz9cbiAgICAgICAgLy8gaWYgKCEhb3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpc2VsZWN0VmlzaWJsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5tdWx0aXNlbGVjdFN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wdGlvbnMoKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIG9wdGlvbi5vcHRpb25zU3R5bGUgPSB0aGlzLm9wdGlvbnNTdHlsZTtcbiAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpIHx8IG9wdGlvbi5zZWxlY3RlZCA6IG9wdGlvbi5zZWxlY3RlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyQWxsT3B0aW9ucygkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAoIW9wdGlvbi5fZGlzYWJsZWQpIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCk7XG4gICAgdGhpcy5zZXRGb2N1cygpO1xuICB9XG5cbiAgc2VsZWN0QWxsT3B0aW9ucygpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiBvcHRpb24udmlzaWJsZSkgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uc1VwZGF0ZSgpO1xuICB9XG5cbiAgaGFuZGxlVGFnUmVtb3ZlKCRldmVudDogSU9wdGlvbikge1xuICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgfVxuXG4gIHNldEZvY3VzKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c01vbml0b3I/LmZvY3VzVmlhKHRoaXMuaW5wdXRFbGVtZW50ID8/IHRoaXMuZWxlbWVudFJlZiwgJ3Byb2dyYW0nKTtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnModmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPz8gJyc7XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoISFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnZpc2libGUpLmxlbmd0aDtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTXVsdGlTZWxlY3ROYXRpdmVTZWxlY3RDb21wb25lbnQpO1xuICAgIHRoaXMudXBkYXRlTmF0aXZlU2VsZWN0KCk7XG4gIH1cblxuICB1cGRhdGVOYXRpdmVTZWxlY3QoKSB7XG4gICAgaWYgKCF0aGlzLm5hdGl2ZVNlbGVjdFJlZikgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9ID0gaXRlbTtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkLCB2YWx1ZSwgbGFiZWwgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5uYW1lID0gdGhpcy5uYXRpdmVOYW1lO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmZvcm0gPSB0aGlzLm5hdGl2ZUlkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaW5wdXRFbGVtZW50U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwIHx8IHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gJ2NvdW50ZXInKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoICsgMikudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnc2l6ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlYXJjaEtleURvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoIHx8IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKFsnQmFja3NwYWNlJywgJ0RlbGV0ZSddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiAhb3B0aW9uLmRpc2FibGVkKS5wb3AoKTtcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9uKGxhc3QsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdE9wdGlvbihvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBzZWxlY3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbSA9PT0gb3B0aW9uKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zVXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGVkT3B0aW9uc1VwZGF0ZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbHRlcigob3B0aW9uKSA9PiAhIW9wdGlvbi5zZWxlY3RlZCk7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICAgIHRoaXMudXBkYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c01vbml0b3IobW9uaXRvcjogYm9vbGVhbikge1xuICAgIGlmIChtb25pdG9yICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXNNb25pdG9yPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSkuc3Vic2NyaWJlKChvcmlnaW4pID0+IHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN1YnRyZWVGb2N1c2VkID0gdGhpcy5mb2N1c09yaWdpbihvcmlnaW4pO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvcj8uc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmKTtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBjbGFzcz1cInBpY2tlclwiIFtuZ0NsYXNzXT1cIm11bHRpc2VsZWN0Q2xhc3Nlc1wiXG4gICAgICAgICAgICBbKHZpc2libGUpXT1cInZpc2libGVcIiBbcG9wcGVyT3B0aW9uc109XCJwb3BwZXJqc09wdGlvbnNcIj5cbiAgPGRpdiBbY2FyZXRdPVwiZmFsc2VcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjRHJvcGRvd25Ub2dnbGUgI2Ryb3Bkb3duVG9nZ2xlPVwiY0Ryb3Bkb3duVG9nZ2xlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlbGVjdGlvblwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGlvblR5cGUgPT09ICd0YWdzJ1wiPlxuICAgICAgICA8Yy1tdWx0aS1zZWxlY3QtdGFnICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zOyBpbmRleCBhcyBpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cImhhbmRsZVRhZ1JlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8L2MtbXVsdGktc2VsZWN0LXRhZz5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwic2VsZWN0aW9uVHlwZSA9PT0gJ3RleHQnICYmICEhc2VsZWN0ZWRPcHRpb25zVGV4dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LXNlYXJjaFwiPnt7IHNlbGVjdGVkT3B0aW9uc1RleHQgfX08L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInNlbGVjdGlvblR5cGUgPT09ICdjb3VudGVyJ1wiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvdW50ZXJUZXh0VHlwZSA9PT0gJ3N0cmluZyc7IGVsc2UgcGx1cmFsTWFwXCI+e3sgY291bnRlclRleHQgfX08L3NwYW4+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1cmFsTWFwPlxuICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH19IHt7IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfCBpMThuUGx1cmFsOiBzZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8geyBvdGhlcjogY291bnRlclRleHQgfSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8IS0tICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFzZWFyY2ggJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3Rpb25UeXBlICE9PSAnY291bnRlcidcIj4tLT5cbiAgICAgIDwhLS0gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+LS0+XG4gICAgICA8IS0tICAgICAgPC9uZy10ZW1wbGF0ZT4tLT5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlU2VhcmNoS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFzZWFyY2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IChkaXNhYmxlZCB8fCAhc2VhcmNoKSB9XCJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgc2VsZWN0aW9uVHlwZSAhPT0gJ2NvdW50ZXInID8gcGxhY2Vob2xkZXIgOiBudWxsXCJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICB0YWJpbmRleD1cInt7IGRpc2FibGVkID8gJy0xJyA6ICcwJyB9fVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgPlxuXG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsT3B0aW9ucygkZXZlbnQpXCJcbiAgICAgICpuZ0lmPVwiY2xlYW5lciAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCAmJiAhZGlzYWJsZWRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8ICFpc0Ryb3Bkb3duVmlzaWJsZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgYWxsXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLWNsZWFuZXJcIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwiXCIgY0Ryb3Bkb3duTWVudSAjZHJvcGRvd25NZW51PVwiY0Ryb3Bkb3duTWVudVwiIFt2aXNpYmxlXT1cImRyb3Bkb3duLnZpc2libGVcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZFbHNlXT1cIm9wdGlvbnNFbXB0eVwiIFtuZ0lmXT1cInZpc2libGVPcHRpb25zID4gMFwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2VsZWN0QWxsT3B0aW9ucygpXCIgKm5nSWY9XCJzZWxlY3RBbGwgJiYgbXVsdGlwbGVcIiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiPlxuICAgICAgICB7eyBzZWxlY3RBbGxMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICNtdWx0aXNlbGVjdE9wdGlvbnNEaXZcbiAgICAgICAgICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3c6ICdzY3JvbGwnIH0gOiB7fVwiXG4gICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9uc1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNvcHRpb25zRW1wdHk+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9ucy1lbXB0eVwiPnt7IHNlYXJjaE5vUmVzdWx0c0xhYmVsIH19PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2MtZHJvcGRvd24+XG4iXX0=
|