@libs-ui/components-inputs-quill 0.2.304 → 0.2.306-3
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.
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1
2
|
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';
|
|
3
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, input, model, output, signal, untracked, viewChild, } from '@angular/core';
|
|
3
4
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
4
5
|
import { LibsUiComponentsButtonsSelectColorComponent } from '@libs-ui/components-buttons-select-color';
|
|
5
6
|
import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
|
|
@@ -46,8 +47,8 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
46
47
|
showMoreAction = signal(false);
|
|
47
48
|
link = signal(linkDefault());
|
|
48
49
|
toolbarOptionsConfig = signal([]);
|
|
49
|
-
displayShowMoreToolbar = computed(() => this.toolbarOptionsConfig().some(item => item.display === false));
|
|
50
|
-
displaySkeleton = computed(() => this.toolbarOptionsConfig().every(item => item.display === undefined));
|
|
50
|
+
displayShowMoreToolbar = computed(() => this.toolbarOptionsConfig().some((item) => item.display === false));
|
|
51
|
+
displaySkeleton = computed(() => this.toolbarOptionsConfig().every((item) => item.display === undefined));
|
|
51
52
|
timeCalculationToolBar = signal(undefined);
|
|
52
53
|
popoverFunctionControl = signal(undefined);
|
|
53
54
|
quill = signal(undefined);
|
|
@@ -58,8 +59,8 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
58
59
|
onDestroy = new Subject();
|
|
59
60
|
dynamicComponentService = inject(LibsUiDynamicComponentService);
|
|
60
61
|
translate = inject(TranslateService);
|
|
61
|
-
isShowToolBar = input(true, { transform: val => val ?? true });
|
|
62
|
-
isToolbarPositionFixed = input(false, { transform: val => val ?? false });
|
|
62
|
+
isShowToolBar = input(true, { transform: (val) => val ?? true });
|
|
63
|
+
isToolbarPositionFixed = input(false, { transform: (val) => val ?? false });
|
|
63
64
|
classIncludeToolbar = input('');
|
|
64
65
|
stylesIncludeToolbar = input();
|
|
65
66
|
toolbarConfig = input();
|
|
@@ -111,11 +112,14 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
111
112
|
constructor() {
|
|
112
113
|
effect(() => {
|
|
113
114
|
setTimeout(() => {
|
|
114
|
-
const classes = `${this.classInclude() || ''} h-full w-full
|
|
115
|
+
const classes = `${this.classInclude() || ''} h-full w-full`
|
|
116
|
+
.split(' ')
|
|
117
|
+
.map((item) => item.trim())
|
|
118
|
+
.filter((item) => item);
|
|
115
119
|
this.getQlEditorElement()?.classList.add(...classes);
|
|
116
120
|
}, this.timeDelayInit() + 10);
|
|
117
121
|
});
|
|
118
|
-
effect((
|
|
122
|
+
effect(() => {
|
|
119
123
|
const type = this.toolbarConfig()?.type || 'default';
|
|
120
124
|
const hasIconImage = this.uploadImageConfig().showIcon ?? false;
|
|
121
125
|
const hasIconPersonalize = !!this.templateToolBarPersonalize();
|
|
@@ -124,7 +128,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
124
128
|
this.cdr.detectChanges();
|
|
125
129
|
this.calculatorToolbar();
|
|
126
130
|
});
|
|
127
|
-
})
|
|
131
|
+
});
|
|
128
132
|
}
|
|
129
133
|
ngOnInit() {
|
|
130
134
|
this.outFunctionsControl.emit({
|
|
@@ -145,7 +149,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
145
149
|
this.scrollToSelectionWithElementScrollHeightAuto(range.indexSelect);
|
|
146
150
|
return;
|
|
147
151
|
},
|
|
148
|
-
reCalculatorToolbar: this.calculatorToolbar.bind(this)
|
|
152
|
+
reCalculatorToolbar: this.calculatorToolbar.bind(this),
|
|
149
153
|
});
|
|
150
154
|
}
|
|
151
155
|
async ngAfterViewInit() {
|
|
@@ -176,7 +180,73 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
176
180
|
const icons = Quill.import('ui/icons');
|
|
177
181
|
const italic = Quill.import('formats/italic');
|
|
178
182
|
const bold = Quill.import('formats/bold');
|
|
179
|
-
size.whitelist = [
|
|
183
|
+
size.whitelist = [
|
|
184
|
+
'8px',
|
|
185
|
+
'9px',
|
|
186
|
+
'10px',
|
|
187
|
+
'11px',
|
|
188
|
+
'12px',
|
|
189
|
+
'13px',
|
|
190
|
+
'14px',
|
|
191
|
+
'15px',
|
|
192
|
+
'16px',
|
|
193
|
+
'17px',
|
|
194
|
+
'18px',
|
|
195
|
+
'19px',
|
|
196
|
+
'20px',
|
|
197
|
+
'21px',
|
|
198
|
+
'22px',
|
|
199
|
+
'23px',
|
|
200
|
+
'24px',
|
|
201
|
+
'25px',
|
|
202
|
+
'26px',
|
|
203
|
+
'27px',
|
|
204
|
+
'28px',
|
|
205
|
+
'29px',
|
|
206
|
+
'30px',
|
|
207
|
+
'31px',
|
|
208
|
+
'32px',
|
|
209
|
+
'33px',
|
|
210
|
+
'34px',
|
|
211
|
+
'35px',
|
|
212
|
+
'36px',
|
|
213
|
+
'37px',
|
|
214
|
+
'38px',
|
|
215
|
+
'39px',
|
|
216
|
+
'40px',
|
|
217
|
+
'41px',
|
|
218
|
+
'42px',
|
|
219
|
+
'43px',
|
|
220
|
+
'44px',
|
|
221
|
+
'45px',
|
|
222
|
+
'46px',
|
|
223
|
+
'47px',
|
|
224
|
+
'48px',
|
|
225
|
+
'49px',
|
|
226
|
+
'50px',
|
|
227
|
+
'51px',
|
|
228
|
+
'52px',
|
|
229
|
+
'53px',
|
|
230
|
+
'54px',
|
|
231
|
+
'55px',
|
|
232
|
+
'56px',
|
|
233
|
+
'57px',
|
|
234
|
+
'58px',
|
|
235
|
+
'59px',
|
|
236
|
+
'60px',
|
|
237
|
+
'61px',
|
|
238
|
+
'62px',
|
|
239
|
+
'63px',
|
|
240
|
+
'64px',
|
|
241
|
+
'65px',
|
|
242
|
+
'66px',
|
|
243
|
+
'67px',
|
|
244
|
+
'68px',
|
|
245
|
+
'69px',
|
|
246
|
+
'70px',
|
|
247
|
+
'71px',
|
|
248
|
+
'72px',
|
|
249
|
+
];
|
|
180
250
|
italic.tagName = 'i';
|
|
181
251
|
bold.tagName = 'b';
|
|
182
252
|
Quill.register(bold, true);
|
|
@@ -186,40 +256,42 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
186
256
|
Quill.register(QuillDivBlot, true);
|
|
187
257
|
Quill.register(alignStyle, true);
|
|
188
258
|
Quill.register(QuillMentionBlot, true);
|
|
189
|
-
this.blotsRegister()?.forEach(item => {
|
|
259
|
+
this.blotsRegister()?.forEach((item) => {
|
|
190
260
|
Quill.register(item.component, true);
|
|
191
261
|
});
|
|
192
262
|
Quill.register({ 'formats/indent': indentStyle }, true);
|
|
193
|
-
fromEvent(this.quillEditorEl()?.nativeElement, 'contextmenu')
|
|
194
|
-
|
|
263
|
+
fromEvent(this.quillEditorEl()?.nativeElement, 'contextmenu')
|
|
264
|
+
.pipe(takeUntil(this.onDestroy))
|
|
265
|
+
.subscribe((e) => this.outContextMenu.emit(e));
|
|
266
|
+
iconList().forEach((element) => set(icons, element.key, `<span class="${element.icon} hover:text-[var(--libs-ui-color-light-1)] text-[16px] text-[#6a7383]"></span>`));
|
|
195
267
|
this.quill.set(new Quill(this.quillEditorEl()?.nativeElement, {
|
|
196
268
|
modules: {
|
|
197
269
|
toolbar: {
|
|
198
270
|
container: this.quillOptionEl()?.nativeElement,
|
|
199
|
-
handlers: this.handlers()
|
|
271
|
+
handlers: this.handlers(),
|
|
200
272
|
},
|
|
201
273
|
clipboard: {
|
|
202
|
-
matchVisual: false
|
|
274
|
+
matchVisual: false,
|
|
203
275
|
},
|
|
204
276
|
history: {
|
|
205
277
|
delay: 1000,
|
|
206
278
|
maxStack: 100,
|
|
207
|
-
userOnly: false
|
|
279
|
+
userOnly: false,
|
|
208
280
|
},
|
|
209
281
|
keyboard: {
|
|
210
282
|
bindings: {
|
|
211
283
|
enter: {
|
|
212
284
|
key: 13,
|
|
213
|
-
handler: () => this.showMention() ? false : true
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
285
|
+
handler: () => (this.showMention() ? false : true),
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
},
|
|
217
289
|
},
|
|
218
290
|
readOnly: this.readonly(),
|
|
219
291
|
placeholder: this.translate.instant(this.placeholder()),
|
|
220
292
|
theme: 'snow',
|
|
221
293
|
bounds: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : this.quillEditorEl()?.nativeElement,
|
|
222
|
-
scrollingContainer: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : null
|
|
294
|
+
scrollingContainer: this.heightAuto() ? this.wrapperEditorEl()?.nativeElement : null,
|
|
223
295
|
}));
|
|
224
296
|
this.quill()?.keyboard.addBinding({ key: 'Backspace' }, this.noPreventEmbedDeletion.bind(this));
|
|
225
297
|
this.quill()?.keyboard.addBinding({ key: 'Delete' }, this.noPreventEmbedDeletion.bind(this));
|
|
@@ -230,8 +302,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
230
302
|
if (editorRoot && this.blockUndoRedoKeyboard()) {
|
|
231
303
|
const keydownHandler = (e) => {
|
|
232
304
|
const isUndo = (e.key === 'z' || e.key === 'Z') && (e.ctrlKey || e.metaKey) && !e.shiftKey;
|
|
233
|
-
const isRedo = ((e.key === 'z' || e.key === 'Z') && (e.ctrlKey || e.metaKey) && e.shiftKey) ||
|
|
234
|
-
((e.key === 'y' || e.key === 'Y') && e.ctrlKey);
|
|
305
|
+
const isRedo = ((e.key === 'z' || e.key === 'Z') && (e.ctrlKey || e.metaKey) && e.shiftKey) || ((e.key === 'y' || e.key === 'Y') && e.ctrlKey);
|
|
235
306
|
if (isUndo || isRedo) {
|
|
236
307
|
e.preventDefault();
|
|
237
308
|
e.stopPropagation();
|
|
@@ -248,27 +319,33 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
248
319
|
if (!this.quill())
|
|
249
320
|
return false;
|
|
250
321
|
const delta = this.quill()?.getContents(range.index, 1);
|
|
251
|
-
if (delta?.ops.some(option => this.blotsRegister()?.find(item => get(option.insert, item.component['blotName']) && item.ignoreDelete))) {
|
|
322
|
+
if (delta?.ops.some((option) => this.blotsRegister()?.find((item) => get(option.insert, item.component['blotName']) && item.ignoreDelete))) {
|
|
252
323
|
return false; // Ngăn không cho Quill xử lý xóa
|
|
253
324
|
}
|
|
254
325
|
return true;
|
|
255
326
|
}
|
|
256
327
|
setHandlerFunction() {
|
|
257
|
-
this.handlers.update(
|
|
328
|
+
this.handlers.update((item) => ({
|
|
329
|
+
...item,
|
|
330
|
+
image: this.handlerShowUploadImage.bind(this),
|
|
331
|
+
emoji: () => {
|
|
332
|
+
return;
|
|
333
|
+
},
|
|
334
|
+
}));
|
|
258
335
|
let link = false;
|
|
259
336
|
const handlersExpand = this.handlersExpand();
|
|
260
337
|
if (handlersExpand && handlersExpand.length) {
|
|
261
|
-
handlersExpand.forEach(element => {
|
|
338
|
+
handlersExpand.forEach((element) => {
|
|
262
339
|
if (element.title && element.action) {
|
|
263
340
|
if (element.title === 'link') {
|
|
264
341
|
link = true;
|
|
265
342
|
}
|
|
266
|
-
this.handlers.update(item => ({ ...item, [element.title]: element.action }));
|
|
343
|
+
this.handlers.update((item) => ({ ...item, [element.title]: element.action }));
|
|
267
344
|
}
|
|
268
345
|
});
|
|
269
346
|
}
|
|
270
347
|
if (!link) {
|
|
271
|
-
this.handlers.update(item => ({ ...item, link: this.handleShowUploadLink.bind(this), unLink: this.handlerUnInsertLink.bind(this) }));
|
|
348
|
+
this.handlers.update((item) => ({ ...item, link: this.handleShowUploadLink.bind(this), unLink: this.handlerUnInsertLink.bind(this) }));
|
|
272
349
|
}
|
|
273
350
|
}
|
|
274
351
|
adjustIndexForImages(index) {
|
|
@@ -296,7 +373,6 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
296
373
|
adjustTextIndex(content);
|
|
297
374
|
return imageCount;
|
|
298
375
|
}
|
|
299
|
-
;
|
|
300
376
|
handlerSelectionChange() {
|
|
301
377
|
this.quill()?.on('selection-change', (range, oldRange, source) => {
|
|
302
378
|
if (this.readonly()) {
|
|
@@ -319,7 +395,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
319
395
|
quill: this.quill(),
|
|
320
396
|
range,
|
|
321
397
|
oldRange,
|
|
322
|
-
source
|
|
398
|
+
source,
|
|
323
399
|
});
|
|
324
400
|
if (range.length === 0 && format?.link && source === 'user') {
|
|
325
401
|
const selection = document.getSelection();
|
|
@@ -354,8 +430,8 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
354
430
|
url: linkNode.href,
|
|
355
431
|
range: {
|
|
356
432
|
index: rangeIndex + countImage,
|
|
357
|
-
length: linkText.length
|
|
358
|
-
}
|
|
433
|
+
length: linkText.length,
|
|
434
|
+
},
|
|
359
435
|
});
|
|
360
436
|
this.popoverFunctionControl()?.showPopover(linkNode);
|
|
361
437
|
}, 250);
|
|
@@ -384,7 +460,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
384
460
|
this.quill()?.on('text-change', (event) => {
|
|
385
461
|
this.outTextChange.emit({
|
|
386
462
|
quill: this.quill(),
|
|
387
|
-
delta: event
|
|
463
|
+
delta: event,
|
|
388
464
|
});
|
|
389
465
|
setTimeout(() => {
|
|
390
466
|
if (event?.ops[1]?.insert === '\n') {
|
|
@@ -443,7 +519,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
443
519
|
return;
|
|
444
520
|
}
|
|
445
521
|
this.insertLink(linkEdit.title, linkEdit.link);
|
|
446
|
-
}
|
|
522
|
+
},
|
|
447
523
|
});
|
|
448
524
|
return;
|
|
449
525
|
}
|
|
@@ -455,7 +531,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
455
531
|
this.timeCalculationToolBar.set(setTimeout(() => {
|
|
456
532
|
const toolbarWidth = this.toolbarItemsEl().nativeElement.offsetWidth || 0;
|
|
457
533
|
let totalWidth = 32 + 28;
|
|
458
|
-
this.toolbarOptionsConfig.update(configs => {
|
|
534
|
+
this.toolbarOptionsConfig.update((configs) => {
|
|
459
535
|
configs.forEach((item, index) => {
|
|
460
536
|
item.display = true;
|
|
461
537
|
totalWidth += item.width;
|
|
@@ -615,9 +691,9 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
615
691
|
{ selector: '.ql-font-Helvetica', style: 'font-family: Helvetica' },
|
|
616
692
|
{ selector: '.libs-ui-quill-format-image', style: 'max-width: 100%; height: auto', overrideStyle: true },
|
|
617
693
|
{ selector: '.libs-ui-quill-mention', style: 'font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA', overrideStyle: true },
|
|
618
|
-
{ selector: 'blockquote', style: 'border-left: 4px solid #ccc; margin-bottom: 5px; margin-top: 5px; padding-left: 16px', overrideStyle: true }
|
|
694
|
+
{ selector: 'blockquote', style: 'border-left: 4px solid #ccc; margin-bottom: 5px; margin-top: 5px; padding-left: 16px', overrideStyle: true },
|
|
619
695
|
];
|
|
620
|
-
this.blotsRegister()?.forEach(item => {
|
|
696
|
+
this.blotsRegister()?.forEach((item) => {
|
|
621
697
|
styleArray.push({ selector: `.${item.className}`, style: item.style, overrideStyle: true });
|
|
622
698
|
});
|
|
623
699
|
styleArray.forEach((item) => {
|
|
@@ -630,7 +706,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
630
706
|
// Fixbug issue: https://admin-cv.mobio.vn/issues/49092
|
|
631
707
|
let styleExist = element.getAttribute('style');
|
|
632
708
|
if (styleExist) {
|
|
633
|
-
['font-family: Arial', 'font-family: sans-serif', 'font-family: serif', 'font-family: monospace', 'font-family: Helvetica'].forEach(font => {
|
|
709
|
+
['font-family: Arial', 'font-family: sans-serif', 'font-family: serif', 'font-family: monospace', 'font-family: Helvetica'].forEach((font) => {
|
|
634
710
|
styleExist = (styleExist?.includes(`${font};`) ? styleExist?.replace(`${font};`, '') : styleExist?.replace(font, ''));
|
|
635
711
|
});
|
|
636
712
|
}
|
|
@@ -681,7 +757,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
681
757
|
if (!links?.length) {
|
|
682
758
|
return;
|
|
683
759
|
}
|
|
684
|
-
links.forEach(link => {
|
|
760
|
+
links.forEach((link) => {
|
|
685
761
|
if (!link || (this.uploadImageConfig().onlyAcceptImageHttpsLink && (link instanceof ArrayBuffer || !new RegExp(patternUrl()).test(link)))) {
|
|
686
762
|
return;
|
|
687
763
|
}
|
|
@@ -716,7 +792,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
716
792
|
this.quill()?.format('size', `${size}px`);
|
|
717
793
|
}
|
|
718
794
|
handlerValueChange(value) {
|
|
719
|
-
this.size.update(item => ({ ...item, value: value }));
|
|
795
|
+
this.size.update((item) => ({ ...item, value: value }));
|
|
720
796
|
this.quill()?.format('size', `${this.size().value}px`);
|
|
721
797
|
}
|
|
722
798
|
handleSelectAlign(event) {
|
|
@@ -729,7 +805,7 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
729
805
|
}
|
|
730
806
|
handlerChangeShowMoreAction(event) {
|
|
731
807
|
event.stopPropagation();
|
|
732
|
-
this.showMoreAction.update(item => !item);
|
|
808
|
+
this.showMoreAction.update((item) => !item);
|
|
733
809
|
}
|
|
734
810
|
scrollToSelectionWithElementScrollHeightAuto(index) {
|
|
735
811
|
clearTimeout(this.timeoutScrollToSelectionWithElementScrollHeightAuto());
|
|
@@ -758,7 +834,10 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
758
834
|
if (!html) {
|
|
759
835
|
return '';
|
|
760
836
|
}
|
|
761
|
-
return html
|
|
837
|
+
return html
|
|
838
|
+
.replace(/^\s*<p><br><\/p>/, '')
|
|
839
|
+
.replace(/<div><br><\/div>/gi, '')
|
|
840
|
+
.replace(/[\u200B-\u200D\uFEFF]/g, '');
|
|
762
841
|
}
|
|
763
842
|
handleSelectHeader(event) {
|
|
764
843
|
this.headerSelected.set(event);
|
|
@@ -778,13 +857,19 @@ export class LibsUiComponentsInputsQuillComponent {
|
|
|
778
857
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsQuillComponent, decorators: [{
|
|
779
858
|
type: Component,
|
|
780
859
|
args: [{ selector: 'libs_ui-components-inputs-quill', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
781
|
-
TranslateModule,
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
860
|
+
TranslateModule,
|
|
861
|
+
NgTemplateOutlet,
|
|
862
|
+
LibsUiComponentsInputsMentionDirective,
|
|
863
|
+
LibsUiComponentsScrollOverlayDirective,
|
|
864
|
+
LibsUiComponentsLabelComponent,
|
|
865
|
+
LibsUiComponentsDropdownComponent,
|
|
866
|
+
LibsUiComponentsPopoverComponent,
|
|
867
|
+
LibsUiComponentsButtonsSelectColorComponent,
|
|
868
|
+
LibsUiComponentsInputsValidComponent,
|
|
869
|
+
LibsUiComponentsEmojiComponent,
|
|
870
|
+
LibsUiComponentsButtonsButtonComponent,
|
|
871
|
+
LibsUiComponentsSpinnerComponent,
|
|
872
|
+
LibsUiComponentsSkeletonComponent,
|
|
788
873
|
], template: "<div class=\"flex flex-col w-full h-full\">\n @if (label(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [required]=\"label.required\"\n [labelLeft]=\"label.labelLeft\" />\n }\n <div #wrapperEditor\n [attr.heightAuto]=\"heightAuto()\"\n [attr.isToolbarPositionFixed]=\"isToolbarPositionFixed()\"\n class=\"libs-ui-quill-wrapper w-full h-full relative flex flex-col\"\n [class.libs-ui-border-error-general]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\"\n [class.rounded-[4px]]=\"messageError() && showErrorBorder() && !onlyShowErrorBorderInContent()\">\n <div #editor\n class=\"libs-ui-quill\"\n [attr.showError]=\"messageError() && showErrorBorder() && onlyShowErrorBorderInContent()\"\n [class.!hidden]=\"!display()\">\n <div #quillOption\n [class.!top-[-9999px]]=\"!isShowToolBar()\"\n [class.!left-[-9999px]]=\"!isShowToolBar()\"\n [style]=\"stylesIncludeToolbar()\"\n [class.pointer-events-none]=\"readonly() || loadingUploadImage()\"\n class=\"{{ isToolbarPositionFixed() ? 'fixed !z-10 w-[510px] shadow-[0px_4px_16px_0px_rgba(0,20,51,0.10)] rounded-[4px] bg-[#ffffff] libs-ui-quill-toolbar-animation':'' }} {{ classIncludeToolbar() }} h-[44px] shrink-0\"\n [class.bg-[#f8f9fa]]=\"!readonly() && !loadingUploadImage()\"\n [class.libs-ui-readonly-background]=\"readonly() || loadingUploadImage()\">\n <ng-container *ngTemplateOutlet=\"toolbar\"></ng-container>\n </div>\n <div #quillEditor\n LibsUiComponentsInputsMentionDirective\n [timeDelayInit]=\"timeDelayInit()+50\"\n [mentionConfig]=\"dataConfigMention()\"\n [class.libs-ui-readonly-background]=\"readonly() || loadingUploadImage()\"\n [class.pointer-events-none]=\"loadingUploadImage()\"\n (outToggle)=\"handleToggleMention($event)\"\n (outInsertMention)=\"handlerInsertMention($event)\"></div>\n <ng-container #qlEditorScroll\n LibsUiComponentsScrollOverlayDirective\n [ignoreInit]=\"!qlEditorElement()\"\n [elementScroll]=\"qlEditorElement()\" />\n </div>\n @if (template(); as template) {\n <div [class]=\"classIncludeTemplate()\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n }\n @if (loadingUploadImage()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n @if (messageError() && showErrorLabel()) {\n <div class=\"flex items-center leading-normal mt-[8px]\">\n <span class=\"text-[#ff5454] libs-ui-font-h7r\"> {{ messageError() | translate }}</span>\n </div>\n }\n</div>\n\n<ng-template #toolbar>\n <div class=\"toolbar h-full w-full shrink-0\"\n #toolbarItems>\n @if (displaySkeleton()) {\n <libs_ui-components-skeleton class=\"w-full h-full\"\n [config]=\"{\n rows: [{\n item:{classIncludeItem:'!rounded-none',}\n }]\n }\" />\n }\n <div class=\"ql-formats items-center px-[16px] py-[4px]\">\n @for (option of toolbarOptionsConfig(); track option) {\n <div class=\"items-center\"\n [class.hidden]=\"!option.display\"\n [class.flex]=\"option.display\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n <div class=\"relative\">\n @if (displayShowMoreToolbar()) {\n <libs_ui-components-buttons-button [type]=\"showMoreAction() ? 'button-secondary' : 'button-third'\"\n [iconOnlyType]=\"true\"\n [classInclude]=\"'!p-[1px] !h-[20px] ml-[8px]'\"\n [classIconLeft]=\"'libs-ui-icon-move-right rotate-90'\"\n (outClick)=\"handlerChangeShowMoreAction($event)\" />\n }\n <!-- Build toolbar khi click xem th\u00EAm-->\n <div [class.hidden]=\"!showMoreAction()\"\n class=\"absolute bg-[#ffffff] shadow-[0px_4px_16px_0px_rgba(0,20,51,0.10)] z-[1] flex items-center pl-[8px] pr-[16px] py-[4px] rounded-[8px] top-[31px] right-[0px]\">\n @for (option of toolbarOptionsConfig(); track option) {\n <div class=\"items-center\"\n [class.hidden]=\"option.display !== false\"\n [class.flex]=\"option.display === false\">\n <ng-container *ngTemplateOutlet=\"itemTemplate;context:{option, $index, $last}\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #itemTemplate\n let-$index=\"$index\"\n let-$last=\"$last\"\n let-option=\"option\">\n @if (option.type === 'undo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_undo', zIndex: zIndex()}\"\n class=\"ql-undo\"></button>\n </div>\n }\n @if (option.type === 'redo') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content: 'i18n_redo', zIndex: zIndex()}\"\n class=\"ql-redo\"></button>\n </div>\n }\n @if (option.type === 'fontFamily') {\n <div class=\"relative w-[132px] h-full rounded-[4px] libs-ui-border-general {{ option.classInclude || 'mx-[8px]' }}\"\n [class.bg-white]=\"!readonly() && !loadingUploadImage()\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigFont()\"\n [listHasButtonUnSelectOption]=\"false\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectFont($event)\">\n @if (fontSelected(); as fontSelected) {\n <div class=\"flex items-center cursor-pointer py-[7px] libs-ui-font-h5r pl-[16px] pr-[40px]\">\n <libs_ui-components-popover [type]=\"'text'\"\n [ignoreStopPropagationEvent]=\"true\"\n [config]=\"{zIndex: zIndex()}\">\n {{ labelFontSelectedComputed() }}\n </libs_ui-components-popover>\n <i class=\"libs-ui-icon-move-right rotate-90 absolute right-[12px] text-[#6a7383] text-[16px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </div>\n }\n @if (option.type === 'header') {\n <div class=\"relative w-[138px] h-full rounded-[4px] libs-ui-border-general {{ option.classInclude || 'mx-[8px]' }}\"\n [class.bg-white]=\"!readonly() && !loadingUploadImage()\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigHeader()\"\n [listHasButtonUnSelectOption]=\"false\"\n [listHiddenInputSearch]=\"true\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectHeader($event)\">\n @if (headerSelected(); as headerSelected) {\n <div\n class=\"flex items-center cursor-pointer py-[7px] libs-ui-font-h5r pl-[16px] pr-[40px] {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [type]=\"'text'\"\n [ignoreStopPropagationEvent]=\"true\"\n [config]=\"{zIndex: zIndex()}\">\n {{ labelHeaderSelectedComputed() }}\n </libs_ui-components-popover>\n <i class=\"libs-ui-icon-move-right rotate-90 absolute right-[12px] text-[#6a7383] text-[16px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </div>\n }\n @if (option.type === 'fontSize') {\n <div class=\"ql-picker {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-inputs-valid [dataType]=\"'int'\"\n [(item)]=\"size\"\n [fieldNameBind]=\"'value'\"\n [valueUpDownNumber]=\"1\"\n [maxValueNumber]=\"72\"\n [minValueNumber]=\"8\"\n [readonly]=\"readonly() || loadingUploadImage()\"\n [classContainerInput]=\"'w-[72px] h-[32px]'\"\n (outValueChange)=\"handlerValueChange($event)\" />\n </div>\n }\n @if (option.type === 'color') {\n <div class=\"ql-color ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_text_color', zIndex:zIndex()}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [customOptions]=\"{\n showAlpha:true,\n\n }\"\n [applyNow]=\"false\"\n (outColorChange)=\"setStyle('color', $event)\">\n <div\n class=\"libs-ui-icon-editor-color-text libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'background') {\n <div class=\"ql-background ql-picker ql-color-picker !flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_background_color', zIndex: zIndex()}\">\n <libs_ui-components-buttons-select_color [zIndex]=\"zIndex()\"\n [direction]=\"'top'\"\n [externalContent]=\"true\"\n [applyNow]=\"false\"\n [customOptions]=\"{\n showAlpha:true,\n }\"\n (outColorChange)=\"setStyle('background', $event)\">\n <div\n class=\"libs-ui-icon-editor-color-background libs-ui-buttons-select-color text-[#6a7383] text-[16px] hover:text-[var(--libs-ui-color-light-1)]\">\n </div>\n </libs_ui-components-buttons-select_color>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'bold') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_weight_bold', zIndex: zIndex()}\"\n class=\"ql-bold\"></button>\n </div>\n }\n @if (option.type === 'italic') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_font_style_italic', zIndex: zIndex()}\"\n class=\"ql-italic\"></button>\n </div>\n }\n @if (option.type === 'underline') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_decoration_underline', zIndex: zIndex()}\"\n class=\"ql-underline\"></button>\n </div>\n }\n @if (option.type === 'strikeThrough') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_text_line_through', zIndex: zIndex()}\"\n class=\"ql-strike\"></button>\n </div>\n }\n @if (option.type === 'adjust') {\n <div\n class=\"relative !flex items-center ql-align ql-picker ql-icon-picker !w-max {{ option.classInclude || 'mx-[8px]' }}\">\n <libs_ui-components-popover [config]=\"{content:'i18n_adjust', zIndex: zIndex()}\">\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [ignoreStopPropagationEvent]=\"true\"\n [labelPopoverFullWidth]=\"true\"\n [listConfig]=\"listConfigAlign()\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"{ignoreArrow: true, classInclude: '!w-[32px] overflow-hidden !py-[4px]', position: {mode: 'start', distance: 0}, paddingLeftItem: false}\"\n [listHasButtonUnSelectOption]=\"false\"\n [listMaxItemShow]=\"8\"\n [zIndex]=\"1250\"\n (outSelectKey)=\"handleSelectAlign($event)\">\n @if (alignSelected(); as alignSelected) {\n <div class=\"flex items-center cursor-pointer\">\n <i [class]=\"iconAlignSelectedComputed()\"></i>\n <i class=\"libs-ui-icon-move-right rotate-90 text-[#6a7383] text-[16px] ml-[4px]\"></i>\n </div>\n }\n </libs_ui-components-dropdown>\n </libs_ui-components-popover>\n </div>\n }\n @if (option.type === 'indentIncrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_increase', zIndex: zIndex()}\"\n class=\"ql-indent\"\n value=\"+1\"></button>\n </div>\n }\n @if (option.type === 'indentDecrease') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_indent_decrease', zIndex: zIndex()}\"\n class=\"ql-indent\"\n value=\"-1\"></button>\n </div>\n }\n @if (option.type === 'listBulleted') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_bulleted', zIndex: zIndex()}\"\n class=\"ql-list ql-bullet\"\n value=\"bullet\"></button>\n </div>\n }\n @if (option.type === 'listNumbered') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_list_numbered', zIndex: zIndex()}\"\n class=\"ql-list ql-ordered\"\n value=\"ordered\"></button>\n </div>\n }\n @if (option.type === 'personalize' && templateToolBarPersonalize(); as templateToolBarPersonalize) {\n <div class=\"flex items-center {{ option.classInclude || 'mx-[8px]' }}\">\n <ng-container *ngTemplateOutlet=\"templateToolBarPersonalize\"></ng-container>\n </div>\n }\n @if (option.type === 'blockquote') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_quote', zIndex: zIndex()}\"\n class=\"ql-blockquote\"></button>\n </div>\n }\n @if (option.type === 'link') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_insert_link', zIndex: zIndex()}\"\n class=\"ql-link\"></button>\n </div>\n }\n @if (option.type === 'unLink') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_unlink', zIndex: zIndex()}\"\n class=\"ql-unLink\"></button>\n </div>\n }\n @if (option.type === 'image') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <button LibsUiComponentsPopoverDirective\n [config]=\"{content:'i18n_image', zIndex: zIndex()}\"\n class=\"ql-image\"></button>\n </div>\n }\n @if (option.type === 'emoji') {\n <div [class]=\"option.classInclude || 'mx-[8px]'\">\n <libs_ui-components-emoji [zIndex]=\"zIndex()\"\n [isNgContent]=\"true\"\n (outEventEmoji)=\"handlerAddEmoji($event)\">\n <button class=\"ql-emoji\"></button>\n </libs_ui-components-emoji>\n </div>\n }\n @if (option.type === 'line') {\n <div class=\"w-[1px] h-[16px] libs-ui-border-right-general\"></div>\n }\n</ng-template>\n\n<libs_ui-components-popover [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{template: viewLink, whiteTheme: true, ignoreArrow: true, zIndex: zIndex()}\"\n (outEvent)=\"handlerPopoverEvent($event)\"\n (outFunctionsControl)=\"handlerPopoverFunctionControl($event)\" />\n\n<ng-template #viewLink>\n <div class=\"flex justify-between items-center px-[16px] py-[8px] rounded-[8px]\">\n <div class=\"w-full min-w-0 libs-ui-font-h5r\"\n [type]=\"'text'\"\n LibsUiComponentsPopoverDirective\n [config]=\"{content: link().url, zIndex: zIndex()+1}\">\n {{ link().url }}\n </div>\n <div class=\"flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button [type]=\"'button-link-primary'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerEdit($event)\" />\n <libs_ui-components-buttons-button [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631'\n },\n rootColor: '#071631'\n }\"\n [classInclude]=\"'!p-0 ml-[12px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-link-broken'\"\n (outClick)=\"handlerUnlink($event)\" />\n </div>\n </div>\n</ng-template>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(-12px)}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(-12px)}to{transform:translateY(0)}}.libs-ui-quill{height:100%;width:100%;display:flex;flex-direction:column}.libs-ui-quill-toolbar-animation{animation:animation-move .4s ease}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill{height:auto}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill ::ng-deep .ql-container{height:auto}.libs-ui-quill-wrapper[heightAuto=true] .libs-ui-quill ::ng-deep .ql-container .ql-editor{position:relative!important}.libs-ui-quill-wrapper[isToolbarPositionFixed=true] .libs-ui-quill ::ng-deep .ql-container.ql-snow{border:0px!important}.libs-ui-quill-wrapper[isToolbarPositionFixed=false] .libs-ui-quill ::ng-deep .ql-container.ql-snow{border:solid 1px #e6e8ed!important;border-radius:0 0 4px 4px}.libs-ui-quill-wrapper[isToolbarPositionFixed=false] .libs-ui-quill ::ng-deep .ql-toolbar.ql-snow{border:solid 1px #e6e8ed!important;border-radius:4px 4px 0 0;border-bottom:unset!important}.libs-ui-quill-wrapper[isToolbarPositionFixed=false] .libs-ui-quill[showError=true] ::ng-deep .ql-container.ql-snow{border:solid 1px #ee2d41!important}:host ::ng-deep .toolbar,:host ::ng-deep .ql-formats{position:relative;width:100%}:host ::ng-deep .ql-toolbar.ql-snow .ql-formats{display:flex}:host ::ng-deep .ql-container.ql-snow{width:100%;height:100%;position:relative}:host ::ng-deep .ql-editor{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:400}:host ::ng-deep .ql-editor b{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:600}:host ::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:8px;padding:0}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label{color:#071631;border:none!important;margin-top:5px}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label:hover{color:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker-label:hover .ql-stroke{stroke:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-item:hover{color:var(--libs-ui-color-light-1)!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active{color:#071631}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke{stroke:#071631}:host ::ng-deep .ql-editor{height:100%;width:100%;position:absolute;line-height:1.42!important}:host ::ng-deep .ql-editor:before{font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;color:#9ca2ad!important;font-size:12px}:host ::ng-deep .ql-editor img{height:auto;max-width:100%}:host ::ng-deep .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label{border:none!important}:host ::ng-deep .ql-snow .ql-picker.ql-bold{width:36px!important}:host ::ng-deep .ql-editor.ql-blank{font-size:11px!important;letter-spacing:.05px;font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;line-height:16px}:host ::ng-deep .ql-editor.ql-blank:before{font-style:normal!important;color:#9ca2ad!important}:host ::ng-deep .ql-snow.ql-toolbar .ql-picker-label :hover{color:red!important}:host ::ng-deep .ql-formats{margin-right:12px!important}:host ::ng-deep .ql-formats .ql-size.ql-picker,:host ::ng-deep .ql-formats .ql-header.ql-picker,:host ::ng-deep .ql-formats .ql-font.ql-picker{border:solid 1px #e6e8ed!important;border-radius:4px}:host ::ng-deep .ql-formats .ql-align.ql-picker .ql-picker-label{width:24px}:host ::ng-deep .ql-formats .ql-align.ql-picker .ql-picker-label:hover{color:red!important}:host ::ng-deep .ql-formats .ql-header.ql-picker .ql-picker-label:before{font-size:12px}:host ::ng-deep .ql-picker-item:before{font-size:12px}:host ::ng-deep .ql-picker-label:before{font-size:12px}:host ::ng-deep .ql-snow.ql-toolbar button,:host ::ng-deep .ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:flex;align-items:center;float:none;padding:0;width:inherit}:host ::ng-deep ul{padding-left:1rem!important}:host ::ng-deep li{padding-left:0!important}:host ::ng-deep .ql-tooltip{display:none!important}.ql-picker-options{max-height:130px;overflow-y:auto}.ql-snow .ql-picker.ql-size{border:1px solid #e6e7ea;box-shadow:#00000005 0 1px 3px,#1b1f2326 0 0 0 1px;border-radius:2px}.ql-snow .ql-picker.ql-font{border:1px solid #e6e7ea!important;margin-right:8px;border-radius:4px}.ql-snow .ql-picker.ql-font .ql-picker-options:before{font-size:12px}.ql-snow .ql-picker.ql-font .ql-picker-label:before{font-size:12px}.ql-font-Arial{font-family:Arial}.ql-font-sans-serif{font-family:\"sans-serif\"}.ql-font-Helvetica{font-family:Helvetica}.libs-ui-quill-mention{font-weight:500!important;color:#7239ea;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--libs-ui-font-family-name),\"Arial, Helvetica, sans-serif\"!important;font-weight:600}.ql-snow .ql-picker.ql-expanded .ql-picker-options{overflow:hidden}.ql-formats{margin-right:0!important}.ql-formats .ql-header{position:relative!important}.ql-formats .ql-header .ql-picker-options{position:absolute!important;top:-151px!important}.ql-formats .ql-font{position:relative!important}.ql-formats .ql-font .ql-picker-options{position:absolute!important;top:-93px!important}.ql-formats .ql-color{position:relative!important}.ql-formats .ql-color .ql-picker-options{position:absolute!important;top:-108px}.ql-formats .ql-background{position:relative!important}.ql-formats .ql-background .ql-picker-options{position:absolute!important;top:-108px}.ql-formats .ql-align{position:relative!important}.ql-formats .ql-align .ql-picker-label{padding:3px 4px!important}.ql-formats .ql-align .ql-picker-options{position:absolute!important;top:-106px}.ql-snow .ql-picker{font-size:12px!important;height:32px;float:none;width:auto}\n"] }]
|
|
789
874
|
}], ctorParameters: () => [] });
|
|
790
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDN1AsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkcsT0FBTyxFQUFrQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBa0Msc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1SCxPQUFPLEVBQWdDLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEgsT0FBTyxFQUFVLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbkYsT0FBTyxFQUFnQyxnQ0FBZ0MsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNqSSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNLLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEtBQTBDLE1BQU0sT0FBTyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTlFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFrQnBLLE1BQU0sT0FBTyxvQ0FBb0M7SUFDckMsZUFBZSxHQUFHLE1BQU0sQ0FBMEIsU0FBUyxDQUFDLENBQUM7SUFDL0QsbURBQW1ELEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUMxRixrQkFBa0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbkMsYUFBYSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QyxZQUFZLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDakMsZUFBZSxHQUFHLE1BQU0sQ0FBa0IsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUM3RCxhQUFhLEdBQUcsTUFBTSxDQUE2QixTQUFTLENBQUMsQ0FBQztJQUM5RCx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ25GLGNBQWMsR0FBRyxNQUFNLENBQWtCLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDM0QsWUFBWSxHQUFHLE1BQU0sQ0FBNkIsU0FBUyxDQUFDLENBQUM7SUFDN0QseUJBQXlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUM7SUFDbkcsZ0JBQWdCLEdBQUcsTUFBTSxDQUFrQixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDL0QsY0FBYyxHQUFHLE1BQU0sQ0FBNkIsU0FBUyxDQUFDLENBQUM7SUFDL0QsMkJBQTJCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7SUFDbkcsSUFBSSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxjQUFjLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBRyxNQUFNLENBQWEsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6QyxvQkFBb0IsR0FBK0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTlFLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUcsZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFMUcsc0JBQXNCLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUMvRCxzQkFBc0IsR0FBRyxNQUFNLENBQTJDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLEtBQUssR0FBRyxNQUFNLENBQW9CLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsR0FBRyxNQUFNLENBQXNELEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0ksV0FBVyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNyQyx1QkFBdUIsR0FBRyxNQUFNLENBQXFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hILHVCQUF1QixHQUFHLE1BQU0sQ0FBNEUsU0FBUyxDQUFDLENBQUM7SUFDdkgsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDaEMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEUsU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXBDLGFBQWEsR0FBRyxLQUFLLENBQStCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLHNCQUFzQixHQUFHLEtBQUssQ0FBK0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEcsbUJBQW1CLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLG9CQUFvQixHQUFHLEtBQUssRUFBZSxDQUFDO0lBQzVDLGFBQWEsR0FBRyxLQUFLLEVBRzFCLENBQUM7SUFDSSxXQUFXLEdBQUcsS0FBSyxDQUE2QixxQkFBcUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNqSSxLQUFLLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQ3BDLElBQUksR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUNyQyxzS0FBc0s7SUFDN0osNkJBQTZCLEdBQUcsS0FBSyxDQUErQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ILGFBQWEsR0FBRyxLQUFLLENBQVMsT0FBTyxDQUFDLENBQUM7SUFDdkMsUUFBUSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzVCLGNBQWMsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDdEMsZUFBZSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4Qyw0QkFBNEIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDckQsb0JBQW9CLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkMsWUFBWSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQy9CLGNBQWMsR0FBRyxLQUFLLEVBQWdELENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssRUFBa0IsQ0FBQztJQUN4QyxjQUFjLEdBQUcsS0FBSyxFQUFnQixDQUFDO0lBQ3ZDLGNBQWMsR0FBRyxLQUFLLEVBQWdCLENBQUM7SUFDdkMsTUFBTSxHQUFHLEtBQUssQ0FBNkIsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRixpQkFBaUIsR0FBRyxLQUFLLEVBQWtCLENBQUM7SUFDNUMsYUFBYSxHQUFHLEtBQUssRUFBNkIsQ0FBQztJQUNuRCxTQUFTLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDN0IsV0FBVyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQy9CLHFCQUFxQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ3pDLDBCQUEwQixHQUFHLEtBQUssRUFBa0MsQ0FBQztJQUNyRSxRQUFRLEdBQUcsS0FBSyxFQUFrQyxDQUFDO0lBQ25ELGlCQUFpQixHQUFHLEtBQUssQ0FBK0Qsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25MLFVBQVUsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUM5Qix1QkFBdUIsR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUMvQyx1QkFBdUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUMzQyxnQ0FBZ0MsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUNwRCxvQkFBb0IsR0FBRyxNQUFNLEVBR2xDLENBQUM7SUFDSSxlQUFlLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDbkMsT0FBTyxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUMxQixTQUFTLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDN0IsbUJBQW1CLEdBQUcsTUFBTSxFQUE4QixDQUFDO0lBQzNELGtCQUFrQixHQUFHLE1BQU0sRUFBeUIsQ0FBQztJQUNyRCxhQUFhLEdBQUcsTUFBTSxFQUFvQixDQUFDO0lBQzNDLGNBQWMsR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUV0QyxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxlQUFlLENBQUMsQ0FBQztJQUNsRSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxRQUFRLENBQUMsQ0FBQztJQUNwRCxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxhQUFhLENBQUMsQ0FBQztJQUM5RCxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxhQUFhLENBQUMsQ0FBQztJQUM5RCxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxjQUFjLENBQUMsQ0FBQztJQUVqRSxtQkFBbUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUN4RCxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEM7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQztZQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQ2hFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzdELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDNUQsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7WUFDaEUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztZQUMxRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBVztZQUNsQyw0Q0FBNEMsRUFBRSxJQUFJLENBQUMsNENBQTRDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxRyxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQThELEVBQUUsSUFBWSxFQUFFLElBQWEsRUFBRSxPQUFpQixFQUFFLEVBQUU7Z0JBQ3BJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckUsT0FBTztZQUNULENBQUM7WUFDRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsa05BQWtOO1FBQ2xOLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekcsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4aEIsTUFBTSxDQUFDLE9B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QyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFlBQVksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLFlBQVksQ0FBQyxJQUFJLENBQUMsbURBQW1ELEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7d0dBN3lCVSxvQ0FBb0M7NEZBQXBDLG9DQUFvQyxrNExDOUNqRCxrMGdCQWdZQSxzeExEM1ZJLGVBQWUsNEZBQUUsZ0JBQWdCLG9KQUNqQyxzQ0FBc0MsOFBBQUUsc0NBQXNDLDZTQUM5RSw4QkFBOEIsNHFCQUFFLGlDQUFpQyxpMURBQ2pFLGdDQUFnQyxvZ0JBQUUsMkNBQTJDLDBQQUM3RSxvQ0FBb0MsczFEQUFFLDhCQUE4QixvUEFDcEUsc0NBQXNDLHNqQkFBRSxnQ0FBZ0MsaUdBQ3hFLGlDQUFpQzs7NEZBR3hCLG9DQUFvQztrQkFqQmhELFNBQVM7K0JBRUUsaUNBQWlDLGNBQy9CLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUd0Qzt3QkFDUCxlQUFlLEVBQUUsZ0JBQWdCO3dCQUNqQyxzQ0FBc0MsRUFBRSxzQ0FBc0M7d0JBQzlFLDhCQUE4QixFQUFFLGlDQUFpQzt3QkFDakUsZ0NBQWdDLEVBQUUsMkNBQTJDO3dCQUM3RSxvQ0FBb0MsRUFBRSw4QkFBOEI7d0JBQ3BFLHNDQUFzQyxFQUFFLGdDQUFnQzt3QkFDeEUsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zU2VsZWN0Q29sb3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0LWNvbG9yJztcbmltcG9ydCB7IElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNFbW9qaUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWVtb2ppJztcbmltcG9ydCB7IElNZW50aW9uQ29uZmlnLCBJTWVudGlvbkluc2VydCwgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy1tZW50aW9uJztcbmltcG9ydCB7IElWYWxpZExlbmd0aCwgSVZhbGlkUmVxdWlyZWQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXknO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1za2VsZXRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBUWVBFX09CSkVDVCwgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgsIEVSUk9SX01FU1NBR0VfTUlOX0xFTkdUSCwgZ2V0LCBnZXRMYWJlbEJ5U2l6ZUZpbGUsIGlzTmlsLCBwYXR0ZXJuVXJsLCBzZXQsIHhzc0ZpbHRlciB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IFF1aWxsLCB7IFJhbmdlU3RhdGljLCBTb3VyY2VzLCBTdHJpbmdNYXAgfSBmcm9tICdxdWlsbCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGxhc3RWYWx1ZUZyb20sIFN1YmplY3QsIHRha2VVbnRpbCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFF1aWxsRGl2QmxvdCB9IGZyb20gJy4vYmxvdHMtY3VzdG9tL2Rpdi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tSW1hZ2VCbG90IH0gZnJvbSAnLi9ibG90cy1jdXN0b20vaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFF1aWxsTWVudGlvbkJsb3QgfSBmcm9tICcuL2Jsb3RzLWN1c3RvbS9tZW50aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmRlbnRTdHlsZSB9IGZyb20gJy4vaW5kZW50LWF0dHJpYnV0b3IvaW5kZW50LWF0dHJpYnV0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElRdWlsbEJsb3RSZWdpc3RlciwgSVF1aWxsRnVuY3Rpb25Db250cm9sRXZlbnQsIElRdWlsbExpbmssIElRdWlsbFNlbGVjdGlvbkNoYW5nZSwgSVF1aWxsVGV4dENoYW5nZSwgSVF1aWxsVG9vbGJhckNvbmZpZywgSVF1aWxsVXBsb2FkSW1hZ2VDb25maWcsIFRZUEVfTU9ERV9CQVJfQ09ORklHX09QVElPTiB9IGZyb20gJy4vaW50ZXJmYWNlcy9xdWlsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudCB9IGZyb20gJy4vbGluay9saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxVcGxvYWRJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vdXBsb2FkLWltYWdlL3VwbG9hZC1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgaWNvbkxpc3QsIGxpbmtEZWZhdWx0LCBsaXN0Q29uZmlnQWxpZ24sIGxpc3RDb25maWdGb250LCBsaXN0Q29uZmlnSGVhZGVyLCBsaXN0Rm9udCwgdG9vbEJhck9wdGlvbnMsIHVwbG9hZEltYWdlQ29uZmlnRGVmYXVsdCB9IGZyb20gJy4vdXRpbHMvcXVpbGwuZGVmaW5lJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtcXVpbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1aWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3F1aWxsLmNvbXBvbmVudC5zY3NzJyxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkRpcmVjdGl2ZSwgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU2VsZWN0Q29sb3JDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzRW1vamlDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTa2VsZXRvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIHFsRWRpdG9yRWxlbWVudCA9IHNpZ25hbDxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0aW1lb3V0U2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG8gPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ1VwbG9hZEltYWdlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpbWVEZWxheUluaXQgPSBzaWduYWw8bnVtYmVyPigyMCk7XG4gIHByb3RlY3RlZCBtZXNzYWdlRXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBkaXNwbGF5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdBbGlnbiA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0+KGxpc3RDb25maWdBbGlnbigpKTtcbiAgcHJvdGVjdGVkIGFsaWduU2VsZWN0ZWQgPSBzaWduYWw8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBpY29uQWxpZ25TZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gZ2V0KHRoaXMuYWxpZ25TZWxlY3RlZCgpLCAnaXRlbS5pY29uJykpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ0ZvbnQgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihsaXN0Q29uZmlnRm9udCgpKTtcbiAgcHJvdGVjdGVkIGZvbnRTZWxlY3RlZCA9IHNpZ25hbDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxhYmVsRm9udFNlbGVjdGVkQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiBnZXQodGhpcy5mb250U2VsZWN0ZWQoKSwgJ2l0ZW0ubGFiZWwnKSB8fCAnU2FucyBTZXJpZicpO1xuICBwcm90ZWN0ZWQgbGlzdENvbmZpZ0hlYWRlciA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0+KGxpc3RDb25maWdIZWFkZXIoKSk7XG4gIHByb3RlY3RlZCBoZWFkZXJTZWxlY3RlZCA9IHNpZ25hbDxJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxhYmVsSGVhZGVyU2VsZWN0ZWRDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLmhlYWRlclNlbGVjdGVkKCksICdpdGVtLmxhYmVsJykgfHwgJ05vcm1hbCcpO1xuICBwcm90ZWN0ZWQgc2l6ZSA9IHNpZ25hbDx7IHZhbHVlOiBudW1iZXIgfT4oeyB2YWx1ZTogMTQgfSk7XG4gIHByb3RlY3RlZCBzaG93TW9yZUFjdGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsaW5rID0gc2lnbmFsPElRdWlsbExpbms+KGxpbmtEZWZhdWx0KCkpO1xuICBwcm90ZWN0ZWQgdG9vbGJhck9wdGlvbnNDb25maWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PElRdWlsbFRvb2xiYXJDb25maWc+PiA9IHNpZ25hbChbXSk7XG5cbiAgcHJvdGVjdGVkIGRpc3BsYXlTaG93TW9yZVRvb2xiYXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRvb2xiYXJPcHRpb25zQ29uZmlnKCkuc29tZShpdGVtID0+IGl0ZW0uZGlzcGxheSA9PT0gZmFsc2UpKTtcbiAgcHJvdGVjdGVkIGRpc3BsYXlTa2VsZXRvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudG9vbGJhck9wdGlvbnNDb25maWcoKS5ldmVyeShpdGVtID0+IGl0ZW0uZGlzcGxheSA9PT0gdW5kZWZpbmVkKSk7XG5cbiAgcHJpdmF0ZSB0aW1lQ2FsY3VsYXRpb25Ub29sQmFyID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcXVpbGwgPSBzaWduYWw8UXVpbGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaGFuZGxlcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgKC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IHZvaWQ+Pih7IHVuZG86IHRoaXMuaGFuZGxlVW5kby5iaW5kKHRoaXMpLCByZWRvOiB0aGlzLmhhbmRsZVJlZG8uYmluZCh0aGlzKSB9KTtcbiAgcHJpdmF0ZSBzaG93TWVudGlvbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgYWRkRWRpdExpbmtDb21wb25lbnRSZWYgPSBzaWduYWw8Q29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbExpbmtDb21wb25lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHVwbG9hZEltYWdlQ29tcG9uZW50UmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxVcGxvYWRJbWFnZUNvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IGlzU2hvd1Rvb2xCYXIgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyB0cnVlIH0pO1xuICByZWFkb25seSBpc1Rvb2xiYXJQb3NpdGlvbkZpeGVkID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVUb29sYmFyID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHN0eWxlc0luY2x1ZGVUb29sYmFyID0gaW5wdXQ8VFlQRV9PQkpFQ1Q+KCk7XG4gIHJlYWRvbmx5IHRvb2xiYXJDb25maWcgPSBpbnB1dDx7XG4gICAgdHlwZTogVFlQRV9NT0RFX0JBUl9DT05GSUdfT1BUSU9OO1xuICAgIGNvbmZpZz86IEFycmF5PElRdWlsbFRvb2xiYXJDb25maWc+O1xuICB9PigpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbXBvcnRfY29udGVudCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdpMThuX2ltcG9ydF9jb250ZW50JyB9KTtcbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbDxUWVBFX09CSkVDVD4oKTtcbiAgLyoqxJHhurd0IGPhu50gbsOgeSBi4bqxbmcgZmFsc2UgxJHhu4MgdOG7kWkgxrB1IGhp4buHdSBuxINuZywgdsOgIGNo4buJIGzhuqV5IGThu68gbGnhu4d1IHJhIGtoaSBjw7MgecOqdSBj4bqndSBs4bqleSBk4buvIGxp4buHdSDEkeG7gyBn4butaSBsw6puIHNlcnZlciAsIGfhu41pIHJlZnJlc2hJdGVtVmFsdWUgxJHhu4MgY+G6rXAgbmjhuq10IGdpw6EgdHJpIHRo4bunIGPDtG5nKi9cbiAgcmVhZG9ubHkgYXV0b1VwZGF0ZVZhbHVlV2hlblRleHRDaGFuZ2UgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQ8c3RyaW5nPigndmFsdWUnKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93RXJyb3JMYWJlbCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzaG93RXJyb3JCb3JkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGhhbmRsZXJzRXhwYW5kID0gaW5wdXQ8QXJyYXk8eyB0aXRsZTogc3RyaW5nLCBhY3Rpb246ICgpID0+IHZvaWQgfT4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4TGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTI1MCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTI1MCB9KTtcbiAgcmVhZG9ubHkgZGF0YUNvbmZpZ01lbnRpb24gPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgYmxvdHNSZWdpc3RlciA9IGlucHV0PEFycmF5PElRdWlsbEJsb3RSZWdpc3Rlcj4+KCk7XG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZvY3VzQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYmxvY2tVbmRvUmVkb0tleWJvYXJkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB1cGxvYWRJbWFnZUNvbmZpZyA9IGlucHV0PElRdWlsbFVwbG9hZEltYWdlQ29uZmlnLCBJUXVpbGxVcGxvYWRJbWFnZUNvbmZpZyB8IHVuZGVmaW5lZD4odXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0KCksIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHVwbG9hZEltYWdlQ29uZmlnRGVmYXVsdCgpIH0pO1xuICByZWFkb25seSBoZWlnaHRBdXRvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbEhlaWdodEF1dG8gPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd1BvcHVwRWRpdExpbmsgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnRQb3B1cCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dQb3B1cEVkaXRMaW5rID0gb3V0cHV0PHtcbiAgICBkYXRhTGluazogSVF1aWxsTGluaztcbiAgICBjYWxsYmFjazogKGxpbmtFZGl0OiB7IHRpdGxlOiBzdHJpbmcsIGxpbms6IHN0cmluZyB9KT0+IFByb21pc2U8dm9pZD47XG4gIH0+KCk7XG4gIHJlYWRvbmx5IG91dE1lc3NhZ2VFcnJvciA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEJsdXIgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXMgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PElRdWlsbFNlbGVjdGlvbkNoYW5nZT4oKTtcbiAgcmVhZG9ubHkgb3V0VGV4dENoYW5nZSA9IG91dHB1dDxJUXVpbGxUZXh0Q2hhbmdlPigpO1xuICByZWFkb25seSBvdXRDb250ZXh0TWVudSA9IG91dHB1dDxNb3VzZUV2ZW50PigpO1xuXG4gIHJlYWRvbmx5IHdyYXBwZXJFZGl0b3JFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignd3JhcHBlckVkaXRvcicpO1xuICByZWFkb25seSBlZGl0b3JFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignZWRpdG9yJyk7XG4gIHJlYWRvbmx5IHF1aWxsT3B0aW9uRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3F1aWxsT3B0aW9uJyk7XG4gIHJlYWRvbmx5IHF1aWxsRWRpdG9yRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3F1aWxsRWRpdG9yJyk7XG4gIHJlYWRvbmx5IHRvb2xiYXJJdGVtc0VsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCd0b29sYmFySXRlbXMnKTtcblxuICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBgJHt0aGlzLmNsYXNzSW5jbHVkZSgpIHx8ICcnfSBoLWZ1bGwgdy1mdWxsYC5zcGxpdCgnICcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKS5maWx0ZXIoaXRlbSA9PiBpdGVtKTtcbiAgICAgICAgdGhpcy5nZXRRbEVkaXRvckVsZW1lbnQoKT8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcbiAgICAgIH0sIHRoaXMudGltZURlbGF5SW5pdCgpICsgMTApO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgoKSA9PiB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy50b29sYmFyQ29uZmlnKCk/LnR5cGUgfHwgJ2RlZmF1bHQnO1xuICAgICAgY29uc3QgaGFzSWNvbkltYWdlID0gdGhpcy51cGxvYWRJbWFnZUNvbmZpZygpLnNob3dJY29uID8/IGZhbHNlO1xuICAgICAgY29uc3QgaGFzSWNvblBlcnNvbmFsaXplID0gISF0aGlzLnRlbXBsYXRlVG9vbEJhclBlcnNvbmFsaXplKCk7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b29sYmFyT3B0aW9uc0NvbmZpZy5zZXQodGhpcy50b29sYmFyQ29uZmlnKCk/LmNvbmZpZyB8fCB0b29sQmFyT3B0aW9ucyh0eXBlLCBoYXNJY29uSW1hZ2UsIGhhc0ljb25QZXJzb25hbGl6ZSkpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0b3JUb29sYmFyKCk7XG4gICAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgcmVmcmVzaEl0ZW1WYWx1ZTogdGhpcy51cGRhdGVWYWx1ZUJ5Um9vdFF1aWxsSHRtbC5iaW5kKHRoaXMpLFxuICAgICAgc2V0Q29udGVudDogdGhpcy5zZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRUZXh0OiB0aGlzLmluc2VydFRleHQuYmluZCh0aGlzKSxcbiAgICAgIGluc2VydExpbms6IHRoaXMuaW5zZXJ0TGluay5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0SW1hZ2U6IHRoaXMuaW5zZXJ0SW1hZ2UuYmluZCh0aGlzKSxcbiAgICAgIHNldEZvbnRTaXplOiB0aGlzLnNldEZvbnRTaXplLmJpbmQodGhpcyksXG4gICAgICBzZXRDb2xvcjogYXN5bmMgKGNvbG9yOiBzdHJpbmcpID0+IHRoaXMuc2V0U3R5bGUoJ2NvbG9yJywgY29sb3IpLFxuICAgICAgc2V0QmFja2dyb3VuZDogYXN5bmMgKGNvbG9yOiBzdHJpbmcpID0+IHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQnLCBjb2xvciksXG4gICAgICBxdWlsbDogKCkgPT4gdGhpcy5xdWlsbCgpIGFzIFF1aWxsLFxuICAgICAgc2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG86IHRoaXMuc2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG8uYmluZCh0aGlzKSxcbiAgICAgIGluc2VydEVtYmVkOiBhc3luYyAocmFuZ2U6IHsgaW5kZXg6IG51bWJlciwgaW5kZXhTZWxlY3Q6IG51bWJlciwgbGVuZ3RoPzogbnVtYmVyIH0sIHR5cGU6IHN0cmluZywgZGF0YTogdW5rbm93biwgc291cmNlcz86IFNvdXJjZXMpID0+IHtcbiAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgdHlwZSwgZGF0YSwgc291cmNlcyB8fCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgICAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbihyYW5nZS5pbmRleFNlbGVjdCwgcmFuZ2UubGVuZ3RoIHx8IDAsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG8ocmFuZ2UuaW5kZXhTZWxlY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgcmVDYWxjdWxhdG9yVG9vbGJhcjogdGhpcy5jYWxjdWxhdG9yVG9vbGJhci5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXRIYW5kbGVyRnVuY3Rpb24oKTtcbiAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRpbWVyKHRoaXMudGltZURlbGF5SW5pdCgpKSk7XG4gICAgdGhpcy5pbml0UXVpbGwoKTtcblxuICAgIHRoaXMuc2V0Q29udGVudChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpLCAnJykpO1xuICAgIHRoaXMuaGFuZGxlclRleHRDaGFuZ2UoKTtcbiAgICB0aGlzLmhhbmRsZXJTZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB0aGlzLmhhbmRsZXJQYXN0ZSgpO1xuICAgIC8vIGfhu41pIGjDoG0gbsOgeSDEkeG7gyBxdWlsbCDEkcOhbmggZOG6pXUgbMOgIMSRw6MgZm9jdXMgdHJvbmcga2hpIHF1aWxsIGNoxrBhIGto4bufaSB04bqhbyB4b25nIMSR4buDIGtow7RuZyBi4buLIHNjcm9sbCB4deG7kW5nIGTGsOG7m2kuc2F1IGtoaSBxdWlsbCBraOG7n2kgdOG6oW8geG9uZyB2w6AgY2hlY2sgbuG6v3UgxJFhbmcgZm9jdXMgxJFhbmcgxJHGsOG7o2MgYuG6rXQgdGjDrCBuw7Mga2jDtG5nIGfhu41pIGzhuqFpIGjDoG0gZm9jdXMgbuG7r2FcbiAgICB0aGlzLnF1aWxsKCk/LmZvY3VzKCk7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKCkpIHtcbiAgICAgIHRoaXMuZGlzcGxheS5zZXQodHJ1ZSk7IFxuICAgICAgdGhpcy5xdWlsbCgpPy5ibHVyKCk7XG4gICAgfVxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLmNhbGN1bGF0b3JUb29sYmFyLmJpbmQodGhpcykpO1xuICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoNDAwKSk7XG4gICAgdGhpcy5kaXNwbGF5LnNldCh0cnVlKTtcbiAgICBjb25zdCBjdXJzb3JTcGFuID0gdGhpcy5xdWlsbCgpPy5yb290LnF1ZXJ5U2VsZWN0b3IoJy5xbC1jdXJzb3InKTtcbiAgICBpZiAoY3Vyc29yU3Bhbikge1xuICAgICAgY3Vyc29yU3Bhbi5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRRdWlsbCgpIHtcbiAgICBjb25zdCBzaXplID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9zaXplJyk7XG4gICAgY29uc3QgYWxpZ25TdHlsZSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvYWxpZ24nKTtcbiAgICBjb25zdCBpY29ucyA9IFF1aWxsLmltcG9ydCgndWkvaWNvbnMnKTtcbiAgICBjb25zdCBpdGFsaWMgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvaXRhbGljJyk7XG4gICAgY29uc3QgYm9sZCA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9ib2xkJyk7XG4gICAgc2l6ZS53aGl0ZWxpc3QgPSBbJzhweCcsICc5cHgnLCAnMTBweCcsICcxMXB4JywgJzEycHgnLCAnMTNweCcsICcxNHB4JywgJzE1cHgnLCAnMTZweCcsICcxN3B4JywgJzE4cHgnLCAnMTlweCcsICcyMHB4JywgJzIxcHgnLCAnMjJweCcsICcyM3B4JywgJzI0cHgnLCAnMjVweCcsICcyNnB4JywgJzI3cHgnLCAnMjhweCcsICcyOXB4JywgJzMwcHgnLCAnMzFweCcsICczMnB4JywgJzMzcHgnLCAnMzRweCcsICczNXB4JywgJzM2cHgnLCAnMzdweCcsICczOHB4JywgJzM5cHgnLCAnNDBweCcsICc0MXB4JywgJzQycHgnLCAnNDNweCcsICc0NHB4JywgJzQ1cHgnLCAnNDZweCcsICc0N3B4JywgJzQ4cHgnLCAnNDlweCcsICc1MHB4JywgJzUxcHgnLCAnNTJweCcsICc1M3B4JywgJzU0cHgnLCAnNTVweCcsICc1NnB4JywgJzU3cHgnLCAnNThweCcsICc1OXB4JywgJzYwcHgnLCAnNjFweCcsICc2MnB4JywgJzYzcHgnLCAnNjRweCcsICc2NXB4JywgJzY2cHgnLCAnNjdweCcsICc2OHB4JywgJzY5cHgnLCAnNzBweCcsICc3MXB4JywgJzcycHgnXTtcblxuICAgIGl0YWxpYy50YWdOYW1lID0gJ2knO1xuICAgIGJvbGQudGFnTmFtZSA9ICdiJztcbiAgICBRdWlsbC5yZWdpc3Rlcihib2xkLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihpdGFsaWMsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKHNpemUsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKEN1c3RvbUltYWdlQmxvdCwgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoUXVpbGxEaXZCbG90LCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihhbGlnblN0eWxlLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihRdWlsbE1lbnRpb25CbG90LCB0cnVlKTtcbiAgICB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIFF1aWxsLnJlZ2lzdGVyKGl0ZW0uY29tcG9uZW50LCB0cnVlKTtcbiAgICB9KTtcbiAgICBRdWlsbC5yZWdpc3Rlcih7ICdmb3JtYXRzL2luZGVudCc6IGluZGVudFN0eWxlIH0sIHRydWUpO1xuICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnF1aWxsRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCwgJ2NvbnRleHRtZW51JykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLm91dENvbnRleHRNZW51LmVtaXQoZSkpO1xuICAgIGljb25MaXN0KCkuZm9yRWFjaChlbGVtZW50ID0+IHNldChpY29ucywgZWxlbWVudC5rZXksIGA8c3BhbiBjbGFzcz1cIiR7ZWxlbWVudC5pY29ufSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXSB0ZXh0LVsxNnB4XSB0ZXh0LVsjNmE3MzgzXVwiPjwvc3Bhbj5gKSk7XG4gICAgdGhpcy5xdWlsbC5zZXQobmV3IFF1aWxsKHRoaXMucXVpbGxFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBtb2R1bGVzOiB7XG4gICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMucXVpbGxPcHRpb25FbCgpPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIGhhbmRsZXJzOiB0aGlzLmhhbmRsZXJzKClcbiAgICAgICAgfSxcbiAgICAgICAgY2xpcGJvYXJkOiB7XG4gICAgICAgICAgbWF0Y2hWaXN1YWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgICBtYXhTdGFjazogMTAwLFxuICAgICAgICAgIHVzZXJPbmx5OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGJpbmRpbmdzOiB7XG4gICAgICAgICAgICBlbnRlcjoge1xuICAgICAgICAgICAgICBrZXk6IDEzLFxuICAgICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLnNob3dNZW50aW9uKCkgPyBmYWxzZSA6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSgpLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5wbGFjZWhvbGRlcigpKSxcbiAgICAgIHRoZW1lOiAnc25vdycsXG4gICAgICBib3VuZHM6IHRoaXMuaGVpZ2h0QXV0bygpID8gdGhpcy53cmFwcGVyRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCA6IHRoaXMucXVpbGxFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50LFxuICAgICAgc2Nyb2xsaW5nQ29udGFpbmVyOiB0aGlzLmhlaWdodEF1dG8oKSA/IHRoaXMud3JhcHBlckVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQgOiBudWxsXG4gICAgfSkpO1xuXG4gICAgdGhpcy5xdWlsbCgpPy5rZXlib2FyZC5hZGRCaW5kaW5nKHsga2V5OiAnQmFja3NwYWNlJyB9LCB0aGlzLm5vUHJldmVudEVtYmVkRGVsZXRpb24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy5xdWlsbCgpPy5rZXlib2FyZC5hZGRCaW5kaW5nKHsga2V5OiAnRGVsZXRlJyB9LCB0aGlzLm5vUHJldmVudEVtYmVkRGVsZXRpb24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy5zZXR1cFVuZG9SZWRvQmxvY2tpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBVbmRvUmVkb0Jsb2NraW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvclJvb3QgPSB0aGlzLnF1aWxsKCk/LnJvb3Q7XG4gICAgaWYgKGVkaXRvclJvb3QgJiYgdGhpcy5ibG9ja1VuZG9SZWRvS2V5Ym9hcmQoKSkge1xuICAgICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpc1VuZG8gPSAoZS5rZXkgPT09ICd6JyB8fCBlLmtleSA9PT0gJ1onKSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkgJiYgIWUuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGlzUmVkbyA9ICgoZS5rZXkgPT09ICd6JyB8fCBlLmtleSA9PT0gJ1onKSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkgJiYgZS5zaGlmdEtleSkgfHxcbiAgICAgICAgICAoKGUua2V5ID09PSAneScgfHwgZS5rZXkgPT09ICdZJykgJiYgZS5jdHJsS2V5KTtcblxuICAgICAgICBpZiAoaXNVbmRvIHx8IGlzUmVkbykge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBCbG9ja2luZyAke2lzVW5kbyA/ICd1bmRvJyA6ICdyZWRvJ30ga2V5Ym9hcmQgc2hvcnRjdXRgKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZWRpdG9yUm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm9uRGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgbm9QcmV2ZW50RW1iZWREZWxldGlvbihyYW5nZTogUmFuZ2VTdGF0aWMpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucXVpbGwoKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhID0gdGhpcy5xdWlsbCgpPy5nZXRDb250ZW50cyhyYW5nZS5pbmRleCwgMSk7XG5cbiAgICBpZiAoZGVsdGE/Lm9wcy5zb21lKG9wdGlvbiA9PiB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZmluZChpdGVtID0+IGdldChvcHRpb24uaW5zZXJ0LCBpdGVtLmNvbXBvbmVudFsnYmxvdE5hbWUnXSkgJiYgaXRlbS5pZ25vcmVEZWxldGUpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOZ8SDbiBraMO0bmcgY2hvIFF1aWxsIHjhu60gbMO9IHjDs2FcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyRnVuY3Rpb24oKSB7XG4gICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBpbWFnZTogdGhpcy5oYW5kbGVyU2hvd1VwbG9hZEltYWdlLmJpbmQodGhpcyksIGVtb2ppOiAoKSA9PiB7IHJldHVybiB9IH0pKVxuICAgIGxldCBsaW5rID0gZmFsc2U7XG4gICAgY29uc3QgaGFuZGxlcnNFeHBhbmQgPSB0aGlzLmhhbmRsZXJzRXhwYW5kKCk7XG4gICAgaWYgKGhhbmRsZXJzRXhwYW5kICYmIGhhbmRsZXJzRXhwYW5kLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNFeHBhbmQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQudGl0bGUgJiYgZWxlbWVudC5hY3Rpb24pIHtcbiAgICAgICAgICBpZiAoZWxlbWVudC50aXRsZSA9PT0gJ2xpbmsnKSB7XG4gICAgICAgICAgICBsaW5rID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBbZWxlbWVudC50aXRsZV06IGVsZW1lbnQuYWN0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghbGluaykge1xuICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBsaW5rOiB0aGlzLmhhbmRsZVNob3dVcGxvYWRMaW5rLmJpbmQodGhpcyksIHVuTGluazogdGhpcy5oYW5kbGVyVW5JbnNlcnRMaW5rLmJpbmQodGhpcykgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0SW5kZXhGb3JJbWFnZXMoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnF1aWxsKCk/LnJvb3Q7XG4gICAgbGV0IGltYWdlQ291bnQgPSAwO1xuICAgIGxldCBhZGp1c3RlZEluZGV4ID0gMDtcbiAgICBjb25zdCBhZGp1c3RUZXh0SW5kZXggPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgaWYgKGFkanVzdGVkSW5kZXggPiBpbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgYWRqdXN0ZWRJbmRleCArPSBub2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUubm9kZU5hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgIGlmIChhZGp1c3RlZEluZGV4IDw9IGluZGV4KSB7XG4gICAgICAgICAgaW1hZ2VDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykuZm9yRWFjaChhZGp1c3RUZXh0SW5kZXgpO1xuICAgICAgfVxuICAgIH07XG4gICAgYWRqdXN0VGV4dEluZGV4KGNvbnRlbnQgYXMgTm9kZSk7XG4gICAgcmV0dXJuIGltYWdlQ291bnQ7XG4gIH07XG5cblxuICBwcml2YXRlIGhhbmRsZXJTZWxlY3Rpb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZTogUmFuZ2VTdGF0aWMsIG9sZFJhbmdlOiBSYW5nZVN0YXRpYywgc291cmNlOiBTb3VyY2VzKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZSA9PT0gbnVsbCAmJiBvbGRSYW5nZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm91dEJsdXIuZW1pdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UgIT09IG51bGwgJiYgb2xkUmFuZ2UgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vdXRGb2N1cy5lbWl0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucXVpbGwoKT8uZ2V0Rm9ybWF0KCk7XG4gICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIHRoaXMuZ2V0Rm9udChmb3JtYXQpO1xuICAgICAgICB0aGlzLmdldEZvbnRTaXplKGZvcm1hdCk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgcXVpbGw6IHRoaXMucXVpbGwoKSBhcyBRdWlsbCxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIG9sZFJhbmdlLFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMCAmJiBmb3JtYXQ/LmxpbmsgJiYgc291cmNlID09PSAndXNlcicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24/LmFuY2hvck5vZGU7XG4gICAgICAgIGxldCBsaW5rTm9kZSA9IGFuY2hvck5vZGUgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChsaW5rTm9kZSAmJiBsaW5rTm9kZS50YWdOYW1lICE9PSAnQScpIHtcbiAgICAgICAgICBsaW5rTm9kZSA9IGxpbmtOb2RlLnBhcmVudE5vZGUgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmtOb2RlICYmIGxpbmtOb2RlLnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICAgIGNvbnN0IGxpbmtUZXh0ID0gbGlua05vZGUuaW5uZXJUZXh0O1xuICAgICAgICAgIGNvbnN0IGxpbmtzSW5kaWNlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgICAgICAgIGxldCBpbmRleFJldHVybjogbnVtYmVyIHwgdW5kZWZpbmVkID0gLTE7XG4gICAgICAgICAgd2hpbGUgKCFpc05pbChpbmRleFJldHVybikgJiYgaW5kZXhSZXR1cm4gPCByYW5nZS5pbmRleCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSB0aGlzLnF1aWxsKCk/LmdldFRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtJbmRleCA9IHRleHRDb250ZW50Py5pbmRleE9mKGxpbmtUZXh0LCBsaW5rc0luZGljZXMubGVuZ3RoID4gMCA/IGxpbmtzSW5kaWNlc1tsaW5rc0luZGljZXMubGVuZ3RoIC0gMV0gKyBsaW5rVGV4dC5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgIGlmICghaXNOaWwobGlua0luZGV4KSkge1xuICAgICAgICAgICAgICBpZiAobGlua0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxpbmtzSW5kaWNlcy5wdXNoKGxpbmtJbmRleCk7XG4gICAgICAgICAgICAgICAgaW5kZXhSZXR1cm4gPSBsaW5rSW5kZXggKyBsaW5rVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpbmtJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpbmRleFJldHVybiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGlua3NJbmRpY2VzICYmIGxpbmtzSW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlSW5kZXggPSBsaW5rc0luZGljZXNbbGlua3NJbmRpY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgY291bnRJbWFnZSA9IHRoaXMuYWRqdXN0SW5kZXhGb3JJbWFnZXMocmFuZ2VJbmRleClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxpbmsuc2V0KHtcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlua1RleHQsXG4gICAgICAgICAgICAgICAgdXJsOiBsaW5rTm9kZS5ocmVmLFxuICAgICAgICAgICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICBpbmRleDogcmFuZ2VJbmRleCArIGNvdW50SW1hZ2UsXG4gICAgICAgICAgICAgICAgICBsZW5ndGg6IGxpbmtUZXh0Lmxlbmd0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnNob3dQb3BvdmVyKGxpbmtOb2RlKVxuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlclBhc3RlKCkge1xuICAgIHNldCh0aGlzLnF1aWxsLCAncm9vdC5vbnBhc3RlJywgYXN5bmMgKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmNsaXBib2FyZERhdGEuZmlsZXM7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0JykpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0aW9uV2l0aEVsZW1lbnRTY3JvbGxIZWlnaHRBdXRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2VzQW5kSW5zZXJ0KGZpbGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlclRleHRDaGFuZ2UoKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5vbigndGV4dC1jaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMub3V0VGV4dENoYW5nZS5lbWl0KHtcbiAgICAgICAgcXVpbGw6IHRoaXMucXVpbGwoKSBhcyBRdWlsbCxcbiAgICAgICAgZGVsdGE6IGV2ZW50XG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQ/Lm9wc1sxXT8uaW5zZXJ0ID09PSAnXFxuJykge1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0geyBpbmRleDogZXZlbnQ/Lm9wc1swXS5yZXRhaW4gYXMgbnVtYmVyIH07XG4gICAgICAgICAgY29uc3QgY3VycmVudExlYWYgPSB0aGlzLnF1aWxsKCk/LmdldExlYWYocmFuZ2UuaW5kZXgpWzBdO1xuICAgICAgICAgIGNvbnN0IG5leHRMZWFmID0gdGhpcy5xdWlsbCgpPy5nZXRMZWFmKHJhbmdlLmluZGV4ICsgMSlbMF07XG4gICAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2JyZWFrJywgdHJ1ZSwgJ3VzZXInKTtcbiAgICAgICAgICBpZiAobmV4dExlYWYgPT09IG51bGwgfHwgY3VycmVudExlYWYucGFyZW50ICE9PSBuZXh0TGVhZi5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdicmVhaycsIHRydWUsICd1c2VyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucXVpbGwoKT8uc2V0U2VsZWN0aW9uKChyYW5nZS5pbmRleCB8fCAwKSArIDEsIDAsIFF1aWxsLnNvdXJjZXMuU0lMRU5UKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuYXV0b1VwZGF0ZVZhbHVlV2hlblRleHRDaGFuZ2UoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQnlSb290UXVpbGxIdG1sKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQnlSb290UXVpbGxIdG1sKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLnJlbW92ZVVud2FudGVkUGFydCh0aGlzLnF1aWxsKCk/LnJvb3QuaW5uZXJIVE1MIHx8ICcnKTtcbiAgICBpZiAoIXRoaXMucXVpbGwoKT8ucm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJykubGVuZ3RoICYmICF0aGlzLnF1aWxsKCk/LmdldFRleHQoKSkge1xuICAgICAgc2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgJycpO1xuICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udmVydElubmVySFRNTEFuZFNldFZhbHVlKGh0bWwpO1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KGdldCh0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRXZlbnQoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMubGluay5zZXQobGlua0RlZmF1bHQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJVbmxpbmsoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGluayA9IHRoaXMubGluaygpO1xuICAgIHRoaXMucXVpbGwoKT8uZm9ybWF0VGV4dChsaW5rLnJhbmdlLmluZGV4LCBsaW5rLnJhbmdlLmxlbmd0aCwgeyBsaW5rOiBmYWxzZSB9KTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRWRpdChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5saW5rKCk7XG4gICAgaWYodGhpcy5pZ25vcmVTaG93UG9wdXBFZGl0TGluaygpKXtcbiAgICAgIHRoaXMub3V0U2hvd1BvcHVwRWRpdExpbmsuZW1pdCh7XG4gICAgICAgIGRhdGFMaW5rOiBsaW5rLFxuICAgICAgICBjYWxsYmFjazogYXN5bmMgKGxpbmtFZGl0OiB7IHRpdGxlOiBzdHJpbmcsIGxpbms6IHN0cmluZyB9KT0+e1xuICAgICAgICAgIGlmIChsaW5rIGluc3RhbmNlb2YgT2JqZWN0ICYmIGxpbmsudXJsKSB7XG4gICAgICAgICAgICB0aGlzLnF1aWxsKCk/LmRlbGV0ZVRleHQobGluay5yYW5nZS5pbmRleCwgbGluay5yYW5nZS5sZW5ndGgsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQobGluay5yYW5nZS5pbmRleCwgbGlua0VkaXQudGl0bGUsICdsaW5rJywgbGlua0VkaXQubGluayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaW5zZXJ0TGluayhsaW5rRWRpdC50aXRsZSwgbGlua0VkaXQubGluayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZVNob3dVcGxvYWRMaW5rKGxpbmspO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjdWxhdG9yVG9vbGJhcigpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy50aW1lQ2FsY3VsYXRpb25Ub29sQmFyLnNldChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IHRoaXMudG9vbGJhckl0ZW1zRWwoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gICAgICBsZXQgdG90YWxXaWR0aCA9IDMyICsgMjg7XG4gICAgICB0aGlzLnRvb2xiYXJPcHRpb25zQ29uZmlnLnVwZGF0ZShjb25maWdzID0+IHtcbiAgICAgICAgY29uZmlncy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGl0ZW0uZGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgdG90YWxXaWR0aCArPSBpdGVtLndpZHRoO1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdsaW5lJykge1xuICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW1XaWR0aCA9IHRvdGFsV2lkdGggKyB0aGlzLnRvb2xiYXJPcHRpb25zQ29uZmlnKClbK2luZGV4ICsgMV0ud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBwcmVJdGVtID0gdGhpcy50b29sYmFyT3B0aW9uc0NvbmZpZygpWytpbmRleCAtIDFdO1xuICAgICAgICAgICAgaWYgKG5leHRJdGVtV2lkdGggPiB0b29sYmFyV2lkdGggJiYgcHJlSXRlbS5kaXNwbGF5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGl0ZW0uZGlzcGxheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG90YWxXaWR0aCA+IHRvb2xiYXJXaWR0aCkge1xuICAgICAgICAgICAgaXRlbS5kaXNwbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFsuLi5jb25maWdzXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDYwMCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFN0eWxlKHR5cGU6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXQodHlwZSwgZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvbnRTaXplKGZvcm1hdDogU3RyaW5nTWFwKSB7XG4gICAgY29uc3QgZm9udFNpemUgPSBmb3JtYXQ/LnNpemU/LnRvU3RyaW5nKCk/LnJlcGxhY2UoJ3B4JywgJycpO1xuICAgIGlmIChpc05hTihwYXJzZUZsb2F0KGZvbnRTaXplKSkpIHtcbiAgICAgIHRoaXMuc2l6ZS5zZXQoeyB2YWx1ZTogMTQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2l6ZS5zZXQoeyB2YWx1ZTogcGFyc2VGbG9hdChmb250U2l6ZSkgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvbnQoZm9ybWF0OiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBmb250ID0gbGlzdEZvbnQoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0gZm9ybWF0LmZvbnQpO1xuICAgIGlmICghZm9udCkge1xuICAgICAgdGhpcy5mb250U2VsZWN0ZWQuc2V0KHsga2V5OiAnJywgaXRlbTogbGlzdEZvbnQoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0gJycpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoeyBrZXk6IGZvcm1hdC5mb250LCBpdGVtOiBmb250IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVVuZG8oKSB7XG4gICAgdGhpcy5xdWlsbCgpPy5oaXN0b3J5Py51bmRvKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVkbygpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lmhpc3Rvcnk/LnJlZG8oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRlbnRYc3NGaWx0ZXIgPSBhd2FpdCB4c3NGaWx0ZXIodGhpcy5yZW1vdmVVbndhbnRlZFBhcnQoY29udGVudCB8fCAnJykpO1xuICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoMSkpO1xuICAgICh0aGlzLnF1aWxsKCk/LnJvb3QgYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9IGNvbnRlbnRYc3NGaWx0ZXI7XG4gICAgaWYgKCF0aGlzLmF1dG9Gb2N1cygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoMTAwKSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5xdWlsbEVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nKTtcbiAgICBjb25zdCBjb250ZW50U2Nyb2xsID0gdGhpcy5oZWlnaHRBdXRvKCkgPyB0aGlzLndyYXBwZXJFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50IDogdGFyZ2V0O1xuICAgIGNvbnRlbnRTY3JvbGwuc2Nyb2xsVG9wID0gY29udGVudFNjcm9sbC5zY3JvbGxIZWlnaHQ7XG4gICAgaWYgKHRoaXMuZm9jdXNCb3R0b20oKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oY29udGVudFhzc0ZpbHRlci5sZW5ndGgsIDAsIFF1aWxsLnNvdXJjZXMuU0lMRU5UKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oMCwgMCwgUXVpbGwuc291cmNlcy5TSUxFTlQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJBZGRFbW9qaShlbW9qaTogdW5rbm93bikge1xuICAgIHRoaXMuaW5zZXJ0VGV4dChlbW9qaSBhcyBzdHJpbmcsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2hvd1VwbG9hZExpbmsoZXZlbnQ6IHVua25vd24pIHtcbiAgICB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbExpbmtDb21wb25lbnQpKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYoKT8uaW5zdGFuY2U7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCB0ZXh0U2VsZWN0ZWQgPSBzZWxlY3Rpb24/Lmxlbmd0aCA/IHRoaXMucXVpbGwoKT8uZ2V0VGV4dChzZWxlY3Rpb24/LmluZGV4LCBzZWxlY3Rpb24/Lmxlbmd0aCkgOiAnJztcbiAgICBjb25zdCBkYXRhID0gZXZlbnQgYXMgSVF1aWxsTGluayB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCd6SW5kZXgnLCB0aGlzLnpJbmRleCgpKTtcbiAgICB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCd0aXRsZScsIGRhdGE/LnRpdGxlIHx8IHRleHRTZWxlY3RlZCk7XG4gICAgdGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpPy5zZXRJbnB1dCgnbGluaycsIGRhdGE/LnVybCB8fCAnJyk7XG4gICAgdGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpPy5zZXRJbnB1dCgnaWdub3JlQ29tbXVuaWNhdGVNaWNyb0V2ZW50JywgdGhpcy5pZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnRQb3B1cCgpKTtcbiAgICBpbnN0YW5jZT8ub3V0U2F2ZUxpbmsuc3Vic2NyaWJlKChpdGVtOiB7IHRpdGxlOiBzdHJpbmcsIGxpbms6IHN0cmluZyB9KSA9PiB7XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkYXRhLnVybCkge1xuICAgICAgICB0aGlzLnF1aWxsKCk/LmRlbGV0ZVRleHQoZGF0YS5yYW5nZS5pbmRleCwgZGF0YS5yYW5nZS5sZW5ndGgsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChkYXRhLnJhbmdlLmluZGV4LCBpdGVtLnRpdGxlLCAnbGluaycsIGl0ZW0ubGluayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5zZXJ0TGluayhpdGVtLnRpdGxlLCBpdGVtLmxpbmspO1xuICAgIH0pO1xuICAgIGluc3RhbmNlPy5vdXRDbG9zZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpKSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVW5JbnNlcnRMaW5rKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghaXNOaWwoc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5mb3JtYXRUZXh0KHNlbGVjdGlvbiwgJ2xpbmsnLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCgnJyk7XG4gICAgY29uc3QgdmFsaWRSZXF1aXJlZCA9IHRoaXMudmFsaWRSZXF1aXJlZCgpO1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICBjb25zdCBmaWVsZE5hbWVCaW5kID0gdGhpcy5maWVsZE5hbWVCaW5kKCk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXQoaXRlbSwgZmllbGROYW1lQmluZCk7XG4gICAgaWYgKHZhbGlkUmVxdWlyZWQgJiYgdmFsaWRSZXF1aXJlZC5pc1JlcXVpcmVkICYmICghZmllbGROYW1lQmluZCB8fCAhdmFsdWUgfHwgIXZhbHVlLnRyaW0oKSkpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh2YWxpZFJlcXVpcmVkLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCk7XG4gICAgICB0aGlzLm91dE1lc3NhZ2VFcnJvci5lbWl0KHRoaXMubWVzc2FnZUVycm9yKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZE1pbkxlbmd0aCA9IHRoaXMudmFsaWRNaW5MZW5ndGgoKTtcbiAgICBpZiAodmFsaWRNaW5MZW5ndGggJiYgZmllbGROYW1lQmluZCAmJiB2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoIDwgdmFsaWRNaW5MZW5ndGgubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodmFsaWRNaW5MZW5ndGgubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01JTl9MRU5HVEgpO1xuICAgICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRNYXhMZW5ndGggPSB0aGlzLnZhbGlkTWF4TGVuZ3RoKCk7XG4gICAgaWYgKHZhbGlkTWF4TGVuZ3RoICYmIGZpZWxkTmFtZUJpbmQgJiYgdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IHRoaXMudmFsaWRNYXhMZW5ndGgubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodmFsaWRNYXhMZW5ndGgubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9MRU5HVEgpO1xuICAgICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbnNlcnRJbWFnZShjb250ZW50OiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gaW5kZXggPz8gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgaWYgKCFpc05pbChzZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHNlbGVjdGlvbiwgJ2ltYWdlJywgY29udGVudCk7XG4gICAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbihzZWxlY3Rpb24gKyAxLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluc2VydFRleHQoY29udGVudDogc3RyaW5nLCBpbmRleD86IG51bWJlciwgZm9jdXNMYXN0PzogYm9vbGVhbikge1xuICAgIGluZGV4ID0gaW5kZXggPz8gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChpbmRleCwgY29udGVudCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICAgIGlmIChmb2N1c0xhc3QpIHtcbiAgICAgICAgYXdhaXQgbGFzdFZhbHVlRnJvbSh0aW1lcigwKSk7XG4gICAgICAgIHRoaXMucXVpbGwoKT8uc2V0U2VsZWN0aW9uKGluZGV4ICsgY29udGVudC5sZW5ndGgsIDAsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnRMaW5rKHRleHQ6IHN0cmluZywgdXJsOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgY29uc3QgaW5kZXhJbnNlcnQgPSBpbmRleCA/PyBzZWxlY3Rpb24/LmluZGV4O1xuICAgIGlmIChzZWxlY3Rpb24/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5kZWxldGVUZXh0KHNlbGVjdGlvbi5pbmRleCwgc2VsZWN0aW9uLmxlbmd0aCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICB9XG4gICAgaWYgKCFpc05pbChpbmRleEluc2VydCkpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChpbmRleEluc2VydCwgdGV4dCwgJ2xpbmsnLCB1cmwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElubmVySFRNTEFuZFNldFZhbHVlKGh0bWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0U3R5bGVGb3JDb250ZW50KCk7XG4gICAgc2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgaHRtbCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlRm9yQ29udGVudCgpIHtcbiAgICBjb25zdCBzdHlsZUFycmF5ID0gW1xuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LUFyaWFsJywgc3R5bGU6ICdmb250LWZhbWlseTogQXJpYWwnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2Fucy1zZXJpZicsIHN0eWxlOiAnZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2VyaWYnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBzZXJpZicgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1tb25vc3BhY2UnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBtb25vc3BhY2UnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtSGVsdmV0aWNhJywgc3R5bGU6ICdmb250LWZhbWlseTogSGVsdmV0aWNhJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5saWJzLXVpLXF1aWxsLWZvcm1hdC1pbWFnZScsIHN0eWxlOiAnbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG8nLCBvdmVycmlkZVN0eWxlOiB0cnVlIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLmxpYnMtdWktcXVpbGwtbWVudGlvbicsIHN0eWxlOiAnZm9udC13ZWlnaHQ6IDYwMDstbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyBjb2xvcjogIzcyMzlFQScsIG92ZXJyaWRlU3R5bGU6IHRydWUgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICdibG9ja3F1b3RlJywgc3R5bGU6ICdib3JkZXItbGVmdDogNHB4IHNvbGlkICNjY2M7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLXRvcDogNXB4OyBwYWRkaW5nLWxlZnQ6IDE2cHgnLCBvdmVycmlkZVN0eWxlOiB0cnVlIH1cbiAgICBdO1xuICAgIHRoaXMuYmxvdHNSZWdpc3RlcigpPy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgc3R5bGVBcnJheS5wdXNoKHsgc2VsZWN0b3I6IGAuJHtpdGVtLmNsYXNzTmFtZX1gLCBzdHlsZTogaXRlbS5zdHlsZSwgb3ZlcnJpZGVTdHlsZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICBzdHlsZUFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5xdWlsbCgpPy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoaXRlbS5zZWxlY3Rvcik7XG4gICAgICBlbGVtZW50cz8uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vdmVycmlkZVN0eWxlKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgaXRlbS5zdHlsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeGJ1ZyBpc3N1ZTogaHR0cHM6Ly9hZG1pbi1jdi5tb2Jpby52bi9pc3N1ZXMvNDkwOTJcbiAgICAgICAgbGV0IHN0eWxlRXhpc3QgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgaWYgKHN0eWxlRXhpc3QpIHtcbiAgICAgICAgICBbJ2ZvbnQtZmFtaWx5OiBBcmlhbCcsICdmb250LWZhbWlseTogc2Fucy1zZXJpZicsICdmb250LWZhbWlseTogc2VyaWYnLCAnZm9udC1mYW1pbHk6IG1vbm9zcGFjZScsICdmb250LWZhbWlseTogSGVsdmV0aWNhJ10uZm9yRWFjaChmb250ID0+IHtcbiAgICAgICAgICAgIHN0eWxlRXhpc3QgPSAoc3R5bGVFeGlzdD8uaW5jbHVkZXMoYCR7Zm9udH07YCkgPyBzdHlsZUV4aXN0Py5yZXBsYWNlKGAke2ZvbnR9O2AsICcnKSA6IHN0eWxlRXhpc3Q/LnJlcGxhY2UoZm9udCwgJycpKSBhcyBzdHJpbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVFeGlzdCA/IGAke3N0eWxlRXhpc3R9JHtzdHlsZUV4aXN0W3N0eWxlRXhpc3QubGVuZ3RoIC0gMV0gPT09ICc7JyA/ICcnIDogJzsnfSR7aXRlbS5zdHlsZX07YCA6IGl0ZW0uc3R5bGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlVG9nZ2xlTWVudGlvbihzaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93TWVudGlvbi5zZXQoc2hvdyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJTaG93VXBsb2FkSW1hZ2UoKSB7XG4gICAgaWYgKHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5tb2RlQ3VzdG9tKSB7XG4gICAgICB0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50KSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKT8uaW5zdGFuY2U7XG4gICAgICB0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCd1cGxvYWRJbWFnZUNvbmZpZycsIHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKSk7XG4gICAgICB0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCdpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnQnLCB0aGlzLmlnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudFBvcHVwKCkpO1xuICAgICAgaW5zdGFuY2U/Lm91dENsb3NlLnN1YnNjcmliZSgobGluazogc3RyaW5nIHwgdm9pZCkgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCkpO1xuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UobGluayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy51cGxvYWRJbWFnZUNvbXBvbmVudFJlZigpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpO1xuICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgJ2ltYWdlLyonKTtcbiAgICBpbnB1dC5jbGljaygpO1xuICAgIGlucHV0Lm9uY2hhbmdlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZXNBbmRJbnNlcnQoaW5wdXQ/LmZpbGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEltYWdlc0FuZEluc2VydChmaWxlcz86IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghZmlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SW1hZ2VTaXplID0gdGhpcy51cGxvYWRJbWFnZUNvbmZpZygpPy5tYXhJbWFnZVNpemUgfHwgNSAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGltYWdlcyA9IEFycmF5LmZyb20oZmlsZXMpLmZpbHRlcigoZmlsZSkgPT4gZmlsZSAmJiBmaWxlLnR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2ltYWdlJyAmJiAoIXRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5tYXhJbWFnZVNpemUgfHwgZmlsZS5zaXplIDw9IG1heEltYWdlU2l6ZSkpO1xuICAgIGlmICghaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dDb21wVHlwZVRleHRXYXJuaW5nKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fbm90ZV91cGxvYWRfaW1hZ2Vfdm9sdW1lJywgeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heEltYWdlU2l6ZSkgfSksIHsgdGltZVJlbW92ZTogODAwMCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1VwbG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGluZGV4SW5zZXJ0ID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgICBjb25zdCBsaW5rcyA9IGF3YWl0IHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5mdW5jdGlvblVwbG9hZEltYWdlPy4oaW1hZ2VzKTtcbiAgICAgIGlmICghbGlua3M/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsaW5rcy5mb3JFYWNoKGxpbmsgPT4ge1xuICAgICAgICBpZiAoIWxpbmsgfHwgKHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5vbmx5QWNjZXB0SW1hZ2VIdHRwc0xpbmsgJiYgKGxpbmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCAhbmV3IFJlZ0V4cChwYXR0ZXJuVXJsKCkpLnRlc3QobGluaykpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc2VydEltYWdlKGxpbmsgYXMgc3RyaW5nLCBpbmRleEluc2VydCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG8oaW5kZXhJbnNlcnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nVXBsb2FkSW1hZ2Uuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRNZW50aW9uKGV2ZW50OiBJTWVudGlvbkluc2VydCkge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnNvclBvcyA9IHJhbmdlLmluZGV4O1xuICAgIGNvbnN0IHN0YXJ0UG9zSW5zZXJ0ID0gY3Vyc29yUG9zIC0gZXZlbnQubGVuZ3RoS2V5O1xuICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChzdGFydFBvc0luc2VydCwgZXZlbnQubGVuZ3RoS2V5LCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0RW1iZWQoc3RhcnRQb3NJbnNlcnQsICdtZW50aW9uJywgZXZlbnQuZGF0YSwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICB0aGlzLmluc2VydFRleHQoJyAnLCBzdGFydFBvc0luc2VydCArIDEpO1xuICAgIHRoaXMucXVpbGwoKT8uc2V0U2VsZWN0aW9uKHN0YXJ0UG9zSW5zZXJ0ICsgMiwgMCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW5zZXJ0TWVudGlvbihkYXRhOiBJTWVudGlvbkluc2VydCkge1xuICAgIHRoaXMuaW5zZXJ0TWVudGlvbihkYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRGb250U2l6ZShzaXplOiBudW1iZXIpIHtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCgnc2l6ZScsIGAke3NpemV9cHhgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVmFsdWVDaGFuZ2UodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuc2l6ZS51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCB2YWx1ZTogdmFsdWUgYXMgbnVtYmVyIH0pKTtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCgnc2l6ZScsIGAke3RoaXMuc2l6ZSgpLnZhbHVlfXB4YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VsZWN0QWxpZ24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5hbGlnblNlbGVjdGVkLnNldChldmVudCk7XG4gICAgdGhpcy5zZXRTdHlsZSgnYWxpZ24nLCBldmVudD8ua2V5IGFzIHN0cmluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VsZWN0Rm9udChldmVudDogSUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoZXZlbnQpO1xuICAgIHRoaXMuc2V0U3R5bGUoJ2ZvbnQnLCBldmVudD8ua2V5IGFzIHN0cmluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVNob3dNb3JlQWN0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2hvd01vcmVBY3Rpb24udXBkYXRlKGl0ZW0gPT4gIWl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0byhpbmRleD86IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRTY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bygpKTtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFNjcm9sbEhlaWdodEF1dG8oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRpbWVvdXRTY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0by5zZXQoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbmRleCA9IGluZGV4ID8/IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4O1xuICAgICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5xdWlsbCgpPy5nZXRCb3VuZHMoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmVsZW1lbnRTY3JvbGxIZWlnaHRBdXRvKCk/LnNjcm9sbFRvKDAsIChib3VuZHM/LnRvcCB8fCAwKSAtIDIwKTtcbiAgICAgIH1cbiAgICB9LCAxMDApKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UWxFZGl0b3JFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLnFsRWRpdG9yRWxlbWVudCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5xbEVkaXRvckVsZW1lbnQoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50Tm9kZSBvZiB0aGlzLnF1aWxsRWRpdG9yRWwoKS5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpKSB7XG4gICAgICB0aGlzLnFsRWRpdG9yRWxlbWVudC5zZXQoZWxlbWVudE5vZGUgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnFsRWRpdG9yRWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVVbndhbnRlZFBhcnQoaHRtbDogc3RyaW5nKSB7XG4gICAgaWYgKCFodG1sKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBodG1sLnJlcGxhY2UoL15cXHMqPHA+PGJyPjxcXC9wPi8sICcnKS5yZXBsYWNlKC88ZGl2Pjxicj48XFwvZGl2Pi9naSwgJycpLnJlcGxhY2UoL1tcXHUyMDBCLVxcdTIwMERcXHVGRUZGXS9nLCAnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VsZWN0SGVhZGVyKGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaGVhZGVyU2VsZWN0ZWQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLnNldFN0eWxlKCdoZWFkZXInLCBldmVudD8ua2V5IGFzIHN0cmluZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKSk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZUNhbGN1bGF0aW9uVG9vbEJhcigpKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0U2Nyb2xsVG9TZWxlY3Rpb25XaXRoRWxlbWVudFNjcm9sbEhlaWdodEF1dG8oKSk7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICBAaWYgKGxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWwucmVxdWlyZWRcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbC5sYWJlbExlZnRcIiAvPlxuICB9XG4gIDxkaXYgI3dyYXBwZXJFZGl0b3JcbiAgICBbYXR0ci5oZWlnaHRBdXRvXT1cImhlaWdodEF1dG8oKVwiXG4gICAgW2F0dHIuaXNUb29sYmFyUG9zaXRpb25GaXhlZF09XCJpc1Rvb2xiYXJQb3NpdGlvbkZpeGVkKClcIlxuICAgIGNsYXNzPVwibGlicy11aS1xdWlsbC13cmFwcGVyIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZmxleCBmbGV4LWNvbFwiXG4gICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtWzRweF1dPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiPlxuICAgIDxkaXYgI2VkaXRvclxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXF1aWxsXCJcbiAgICAgIFthdHRyLnNob3dFcnJvcl09XCJtZXNzYWdlRXJyb3IoKSAmJiBzaG93RXJyb3JCb3JkZXIoKSAmJiBvbmx5U2hvd0Vycm9yQm9yZGVySW5Db250ZW50KClcIlxuICAgICAgW2NsYXNzLiFoaWRkZW5dPVwiIWRpc3BsYXkoKVwiPlxuICAgICAgPGRpdiAjcXVpbGxPcHRpb25cbiAgICAgICAgW2NsYXNzLiF0b3AtWy05OTk5cHhdXT1cIiFpc1Nob3dUb29sQmFyKClcIlxuICAgICAgICBbY2xhc3MuIWxlZnQtWy05OTk5cHhdXT1cIiFpc1Nob3dUb29sQmFyKClcIlxuICAgICAgICBbc3R5bGVdPVwic3R5bGVzSW5jbHVkZVRvb2xiYXIoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cInJlYWRvbmx5KCkgfHwgbG9hZGluZ1VwbG9hZEltYWdlKClcIlxuICAgICAgICBjbGFzcz1cInt7IGlzVG9vbGJhclBvc2l0aW9uRml4ZWQoKSA/ICdmaXhlZCAhei0xMCB3LVs1MTBweF0gc2hhZG93LVswcHhfNHB4XzE2cHhfMHB4X3JnYmEoMCwyMCw1MSwwLjEwKV0gcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gbGlicy11aS1xdWlsbC10b29sYmFyLWFuaW1hdGlvbic6JycgfX0ge3sgY2xhc3NJbmNsdWRlVG9vbGJhcigpIH19IGgtWzQ0cHhdIHNocmluay0wXCJcbiAgICAgICAgW2NsYXNzLmJnLVsjZjhmOWZhXV09XCIhcmVhZG9ubHkoKSAmJiAhbG9hZGluZ1VwbG9hZEltYWdlKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KCkgfHwgbG9hZGluZ1VwbG9hZEltYWdlKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjcXVpbGxFZGl0b3JcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmVcbiAgICAgICAgW3RpbWVEZWxheUluaXRdPVwidGltZURlbGF5SW5pdCgpKzUwXCJcbiAgICAgICAgW21lbnRpb25Db25maWddPVwiZGF0YUNvbmZpZ01lbnRpb24oKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKSB8fCBsb2FkaW5nVXBsb2FkSW1hZ2UoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImxvYWRpbmdVcGxvYWRJbWFnZSgpXCJcbiAgICAgICAgKG91dFRvZ2dsZSk9XCJoYW5kbGVUb2dnbGVNZW50aW9uKCRldmVudClcIlxuICAgICAgICAob3V0SW5zZXJ0TWVudGlvbik9XCJoYW5kbGVySW5zZXJ0TWVudGlvbigkZXZlbnQpXCI+PC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICNxbEVkaXRvclNjcm9sbFxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbaWdub3JlSW5pdF09XCIhcWxFZGl0b3JFbGVtZW50KClcIlxuICAgICAgICBbZWxlbWVudFNjcm9sbF09XCJxbEVkaXRvckVsZW1lbnQoKVwiIC8+XG4gICAgPC9kaXY+XG4gICAgQGlmICh0ZW1wbGF0ZSgpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlVGVtcGxhdGUoKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGxvYWRpbmdVcGxvYWRJbWFnZSgpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yTGFiZWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBsZWFkaW5nLW5vcm1hbCBtdC1bOHB4XVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjZmY1NDU0XSBsaWJzLXVpLWZvbnQtaDdyXCI+IHt7IG1lc3NhZ2VFcnJvcigpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b29sYmFyPlxuICA8ZGl2IGNsYXNzPVwidG9vbGJhciBoLWZ1bGwgdy1mdWxsIHNocmluay0wXCJcbiAgICAjdG9vbGJhckl0ZW1zPlxuICAgIEBpZiAoZGlzcGxheVNrZWxldG9uKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgIHJvd3M6IFt7XG4gICAgICAgICAgaXRlbTp7Y2xhc3NJbmNsdWRlSXRlbTonIXJvdW5kZWQtbm9uZScsfVxuICAgICAgICB9XVxuICAgICAgfVwiIC8+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJxbC1mb3JtYXRzIGl0ZW1zLWNlbnRlciBweC1bMTZweF0gcHktWzRweF1cIj5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiB0b29sYmFyT3B0aW9uc0NvbmZpZygpOyB0cmFjayBvcHRpb24pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhb3B0aW9uLmRpc3BsYXlcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm9wdGlvbi5kaXNwbGF5XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgIEBpZiAoZGlzcGxheVNob3dNb3JlVG9vbGJhcigpKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJzaG93TW9yZUFjdGlvbigpID8gJ2J1dHRvbi1zZWNvbmRhcnknIDogJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVsxcHhdICFoLVsyMHB4XSBtbC1bOHB4XSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDaGFuZ2VTaG93TW9yZUFjdGlvbigkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEJ1aWxkIHRvb2xiYXIga2hpIGNsaWNrIHhlbSB0aMOqbS0tPlxuICAgICAgICA8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiIXNob3dNb3JlQWN0aW9uKClcIlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYmctWyNmZmZmZmZdIHNoYWRvdy1bMHB4XzRweF8xNnB4XzBweF9yZ2JhKDAsMjAsNTEsMC4xMCldIHotWzFdIGZsZXggaXRlbXMtY2VudGVyIHBsLVs4cHhdIHByLVsxNnB4XSBweS1bNHB4XSByb3VuZGVkLVs4cHhdIHRvcC1bMzFweF0gcmlnaHQtWzBweF1cIj5cbiAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdG9vbGJhck9wdGlvbnNDb25maWcoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJvcHRpb24uZGlzcGxheSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJvcHRpb24uZGlzcGxheSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZVxuICBsZXQtJGluZGV4PVwiJGluZGV4XCJcbiAgbGV0LSRsYXN0PVwiJGxhc3RcIlxuICBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICd1bmRvJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl91bmRvJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZG9cIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAncmVkbycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fcmVkbycsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1yZWRvXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctWzEzMnB4XSBoLWZ1bGwgcm91bmRlZC1bNHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiXG4gICAgICBbY2xhc3MuYmctd2hpdGVdPVwiIXJlYWRvbmx5KCkgJiYgIWxvYWRpbmdVcGxvYWRJbWFnZSgpXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0ZvbnQoKVwiXG4gICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjhcIlxuICAgICAgICBbekluZGV4XT1cIjEyNTBcIlxuICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEZvbnQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKGZvbnRTZWxlY3RlZCgpOyBhcyBmb250U2VsZWN0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcHktWzdweF0gbGlicy11aS1mb250LWg1ciBwbC1bMTZweF0gcHItWzQwcHhdXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInt6SW5kZXg6IHpJbmRleCgpfVwiPlxuICAgICAgICAgICAgICB7eyBsYWJlbEZvbnRTZWxlY3RlZENvbXB1dGVkKCkgfX1cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCBhYnNvbHV0ZSByaWdodC1bMTJweF0gdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdoZWFkZXInKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctWzEzOHB4XSBoLWZ1bGwgcm91bmRlZC1bNHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiXG4gICAgICBbY2xhc3MuYmctd2hpdGVdPVwiIXJlYWRvbmx5KCkgJiYgIWxvYWRpbmdVcGxvYWRJbWFnZSgpXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0hlYWRlcigpXCJcbiAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiOFwiXG4gICAgICAgIFt6SW5kZXhdPVwiMTI1MFwiXG4gICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlU2VsZWN0SGVhZGVyKCRldmVudClcIj5cbiAgICAgICAgQGlmIChoZWFkZXJTZWxlY3RlZCgpOyBhcyBoZWFkZXJTZWxlY3RlZCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcHktWzdweF0gbGlicy11aS1mb250LWg1ciBwbC1bMTZweF0gcHItWzQwcHhdIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7ekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgICAgICAge3sgbGFiZWxIZWFkZXJTZWxlY3RlZENvbXB1dGVkKCkgfX1cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCBhYnNvbHV0ZSByaWdodC1bMTJweF0gdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdmb250U2l6ZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtcGlja2VyIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgWyhpdGVtKV09XCJzaXplXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ3ZhbHVlJ1wiXG4gICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjcyXCJcbiAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjhcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKSB8fCBsb2FkaW5nVXBsb2FkSW1hZ2UoKVwiXG4gICAgICAgIFtjbGFzc0NvbnRhaW5lcklucHV0XT1cIid3LVs3MnB4XSBoLVszMnB4XSdcIlxuICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtY29sb3IgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl90ZXh0X2NvbG9yJywgekluZGV4OnpJbmRleCgpfVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0X2NvbG9yIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgIFtkaXJlY3Rpb25dPVwiJ3RvcCdcIlxuICAgICAgICAgIFtleHRlcm5hbENvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2N1c3RvbU9wdGlvbnNdPVwie1xuICAgICAgICAgICAgc2hvd0FscGhhOnRydWUsXG5cbiAgICAgICAgICB9XCJcbiAgICAgICAgICBbYXBwbHlOb3ddPVwiZmFsc2VcIlxuICAgICAgICAgIChvdXRDb2xvckNoYW5nZSk9XCJzZXRTdHlsZSgnY29sb3InLCAkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tZWRpdG9yLWNvbG9yLXRleHQgbGlicy11aS1idXR0b25zLXNlbGVjdC1jb2xvciB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvcj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2JhY2tncm91bmQnKSB7XG4gICAgPGRpdiBjbGFzcz1cInFsLWJhY2tncm91bmQgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9iYWNrZ3JvdW5kX2NvbG9yJywgekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvciBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cIid0b3AnXCJcbiAgICAgICAgICBbZXh0ZXJuYWxDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFthcHBseU5vd109XCJmYWxzZVwiXG4gICAgICAgICAgW2N1c3RvbU9wdGlvbnNdPVwie1xuICAgICAgICAgICAgc2hvd0FscGhhOnRydWUsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dENvbG9yQ2hhbmdlKT1cInNldFN0eWxlKCdiYWNrZ3JvdW5kJywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWVkaXRvci1jb2xvci1iYWNrZ3JvdW5kIGxpYnMtdWktYnV0dG9ucy1zZWxlY3QtY29sb3IgdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF0gaG92ZXI6dGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xKV1cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3I+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdib2xkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ZvbnRfd2VpZ2h0X2JvbGQnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtYm9sZFwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpdGFsaWMnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fZm9udF9zdHlsZV9pdGFsaWMnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtaXRhbGljXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3VuZGVybGluZScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl90ZXh0X2RlY29yYXRpb25fdW5kZXJsaW5lJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZGVybGluZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdzdHJpa2VUaHJvdWdoJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3RleHRfbGluZV90aHJvdWdoJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXN0cmlrZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdhZGp1c3QnKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSAhZmxleCBpdGVtcy1jZW50ZXIgcWwtYWxpZ24gcWwtcGlja2VyIHFsLWljb24tcGlja2VyICF3LW1heCB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2FkanVzdCcsIHpJbmRleDogekluZGV4KCl9XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbbGFiZWxQb3BvdmVyRnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWdBbGlnbigpXCJcbiAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cIntpZ25vcmVBcnJvdzogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzMycHhdIG92ZXJmbG93LWhpZGRlbiAhcHktWzRweF0nLCBwb3NpdGlvbjoge21vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwfSwgcGFkZGluZ0xlZnRJdGVtOiBmYWxzZX1cIlxuICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiOFwiXG4gICAgICAgICAgW3pJbmRleF09XCIxMjUwXCJcbiAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEFsaWduKCRldmVudClcIj5cbiAgICAgICAgICBAaWYgKGFsaWduU2VsZWN0ZWQoKTsgYXMgYWxpZ25TZWxlY3RlZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQWxpZ25TZWxlY3RlZENvbXB1dGVkKClcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIHRleHQtWyM2YTczODNdIHRleHQtWzE2cHhdIG1sLVs0cHhdXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2luZGVudEluY3JlYXNlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luZGVudF9pbmNyZWFzZScsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbmRlbnRcIlxuICAgICAgICB2YWx1ZT1cIisxXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2luZGVudERlY3JlYXNlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luZGVudF9kZWNyZWFzZScsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbmRlbnRcIlxuICAgICAgICB2YWx1ZT1cIi0xXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2xpc3RCdWxsZXRlZCcpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9saXN0X2J1bGxldGVkJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWxpc3QgcWwtYnVsbGV0XCJcbiAgICAgICAgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGlzdE51bWJlcmVkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2xpc3RfbnVtYmVyZWQnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtbGlzdCBxbC1vcmRlcmVkXCJcbiAgICAgICAgdmFsdWU9XCJvcmRlcmVkXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3BlcnNvbmFsaXplJyAmJiB0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZSgpOyBhcyB0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdibG9ja3F1b3RlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3F1b3RlJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWJsb2NrcXVvdGVcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbnNlcnRfbGluaycsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1saW5rXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3VuTGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl91bmxpbmsnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtdW5MaW5rXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2ltYWdlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ltYWdlJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWltYWdlXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2Vtb2ppJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1lbW9qaSBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAob3V0RXZlbnRFbW9qaSk9XCJoYW5kbGVyQWRkRW1vamkoJGV2ZW50KVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtZW1vamlcIj48L2J1dHRvbj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWVtb2ppPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdsaW5lJykge1xuICAgIDxkaXYgY2xhc3M9XCJ3LVsxcHhdIGgtWzE2cHhdIGxpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWxcIj48L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFttb2RlXT1cIidjbGljaydcIlxuICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgW2NvbmZpZ109XCJ7dGVtcGxhdGU6IHZpZXdMaW5rLCB3aGl0ZVRoZW1lOiB0cnVlLCBpZ25vcmVBcnJvdzogdHJ1ZSwgekluZGV4OiB6SW5kZXgoKX1cIlxuICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCJcbiAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50KVwiIC8+XG5cbjxuZy10ZW1wbGF0ZSAjdmlld0xpbms+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdIHJvdW5kZWQtWzhweF1cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi13LTAgbGlicy11aS1mb250LWg1clwiXG4gICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6IGxpbmsoKS51cmwsIHpJbmRleDogekluZGV4KCkrMX1cIj5cbiAgICAgIHt7IGxpbmsoKS51cmwgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZWRpdC1saW5lJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0KCRldmVudClcIiAvPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNlZTJkNDEnLFxuICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZWUyZDQxJyxcbiAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wIG1sLVsxMnB4XSdcIlxuICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWxpbmstYnJva2VuJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyVW5saW5rKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
875
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvcXVpbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxFQUNULFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RyxPQUFPLEVBQWtCLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEYsT0FBTyxFQUFrQyxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVILE9BQU8sRUFBZ0Msb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0SCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRixPQUFPLEVBQWdDLGdDQUFnQyxFQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFN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QUM7UUFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEtBQUs7WUFDTCxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFDTixNQUFNO1lBQ04sTUFBTTtZQUNOLE1BQU07WUFD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QUFnQzt3QkFDaEMsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTZWxlY3RDb2xvckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3QtY29sb3InO1xuaW1wb3J0IHsgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0Vtb2ppQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtZW1vamknO1xuaW1wb3J0IHsgSU1lbnRpb25Db25maWcsIElNZW50aW9uSW5zZXJ0LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkRpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLW1lbnRpb24nO1xuaW1wb3J0IHsgSVZhbGlkTGVuZ3RoLCBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxhYmVsJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2tlbGV0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNrZWxldG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IFRZUEVfT0JKRUNULCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsIEVSUk9SX01FU1NBR0VfTUFYX0xFTkdUSCwgRVJST1JfTUVTU0FHRV9NSU5fTEVOR1RILCBnZXQsIGdldExhYmVsQnlTaXplRmlsZSwgaXNOaWwsIHBhdHRlcm5VcmwsIHNldCwgeHNzRmlsdGVyIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgUXVpbGwsIHsgUmFuZ2VTdGF0aWMsIFNvdXJjZXMsIFN0cmluZ01hcCB9IGZyb20gJ3F1aWxsJztcbmltcG9ydCB7IGZyb21FdmVudCwgbGFzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUXVpbGxEaXZCbG90IH0gZnJvbSAnLi9ibG90cy1jdXN0b20vZGl2LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21JbWFnZUJsb3QgfSBmcm9tICcuL2Jsb3RzLWN1c3RvbS9pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVpbGxNZW50aW9uQmxvdCB9IGZyb20gJy4vYmxvdHMtY3VzdG9tL21lbnRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IGluZGVudFN0eWxlIH0gZnJvbSAnLi9pbmRlbnQtYXR0cmlidXRvci9pbmRlbnQtYXR0cmlidXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVF1aWxsQmxvdFJlZ2lzdGVyLCBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVF1aWxsTGluaywgSVF1aWxsU2VsZWN0aW9uQ2hhbmdlLCBJUXVpbGxUZXh0Q2hhbmdlLCBJUXVpbGxUb29sYmFyQ29uZmlnLCBJUXVpbGxVcGxvYWRJbWFnZUNvbmZpZywgVFlQRV9NT0RFX0JBUl9DT05GSUdfT1BUSU9OIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3F1aWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9saW5rL2xpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtaW1hZ2UvdXBsb2FkLWltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpY29uTGlzdCwgbGlua0RlZmF1bHQsIGxpc3RDb25maWdBbGlnbiwgbGlzdENvbmZpZ0ZvbnQsIGxpc3RDb25maWdIZWFkZXIsIGxpc3RGb250LCB0b29sQmFyT3B0aW9ucywgdXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0IH0gZnJvbSAnLi91dGlscy9xdWlsbC5kZWZpbmUnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVpbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcXVpbGwuY29tcG9uZW50LnNjc3MnLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NlbGVjdENvbG9yQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzRW1vamlDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NrZWxldG9uQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBxbEVkaXRvckVsZW1lbnQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGltZW91dFNjcm9sbFRvU2VsZWN0aW9uV2l0aEVsZW1lbnRTY3JvbGxIZWlnaHRBdXRvID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdVcGxvYWRJbWFnZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0aW1lRGVsYXlJbml0ID0gc2lnbmFsPG51bWJlcj4oMjApO1xuICBwcm90ZWN0ZWQgbWVzc2FnZUVycm9yID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgZGlzcGxheSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsaXN0Q29uZmlnQWxpZ24gPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihsaXN0Q29uZmlnQWxpZ24oKSk7XG4gIHByb3RlY3RlZCBhbGlnblNlbGVjdGVkID0gc2lnbmFsPElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaWNvbkFsaWduU2VsZWN0ZWRDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLmFsaWduU2VsZWN0ZWQoKSwgJ2l0ZW0uaWNvbicpKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdGb250ID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbT4obGlzdENvbmZpZ0ZvbnQoKSk7XG4gIHByb3RlY3RlZCBmb250U2VsZWN0ZWQgPSBzaWduYWw8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsYWJlbEZvbnRTZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gZ2V0KHRoaXMuZm9udFNlbGVjdGVkKCksICdpdGVtLmxhYmVsJykgfHwgJ1NhbnMgU2VyaWYnKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdIZWFkZXIgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihsaXN0Q29uZmlnSGVhZGVyKCkpO1xuICBwcm90ZWN0ZWQgaGVhZGVyU2VsZWN0ZWQgPSBzaWduYWw8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsYWJlbEhlYWRlclNlbGVjdGVkQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiBnZXQodGhpcy5oZWFkZXJTZWxlY3RlZCgpLCAnaXRlbS5sYWJlbCcpIHx8ICdOb3JtYWwnKTtcbiAgcHJvdGVjdGVkIHNpemUgPSBzaWduYWw8eyB2YWx1ZTogbnVtYmVyIH0+KHsgdmFsdWU6IDE0IH0pO1xuICBwcm90ZWN0ZWQgc2hvd01vcmVBY3Rpb24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgbGluayA9IHNpZ25hbDxJUXVpbGxMaW5rPihsaW5rRGVmYXVsdCgpKTtcbiAgcHJvdGVjdGVkIHRvb2xiYXJPcHRpb25zQ29uZmlnOiBXcml0YWJsZVNpZ25hbDxBcnJheTxJUXVpbGxUb29sYmFyQ29uZmlnPj4gPSBzaWduYWwoW10pO1xuXG4gIHByb3RlY3RlZCBkaXNwbGF5U2hvd01vcmVUb29sYmFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50b29sYmFyT3B0aW9uc0NvbmZpZygpLnNvbWUoKGl0ZW0pID0+IGl0ZW0uZGlzcGxheSA9PT0gZmFsc2UpKTtcbiAgcHJvdGVjdGVkIGRpc3BsYXlTa2VsZXRvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudG9vbGJhck9wdGlvbnNDb25maWcoKS5ldmVyeSgoaXRlbSkgPT4gaXRlbS5kaXNwbGF5ID09PSB1bmRlZmluZWQpKTtcblxuICBwcml2YXRlIHRpbWVDYWxjdWxhdGlvblRvb2xCYXIgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBxdWlsbCA9IHNpZ25hbDxRdWlsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBoYW5kbGVycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCAoLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gdm9pZD4+KHsgdW5kbzogdGhpcy5oYW5kbGVVbmRvLmJpbmQodGhpcyksIHJlZG86IHRoaXMuaGFuZGxlUmVkby5iaW5kKHRoaXMpIH0pO1xuICBwcml2YXRlIHNob3dNZW50aW9uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBhZGRFZGl0TGlua0NvbXBvbmVudFJlZiA9IHNpZ25hbDxDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdXBsb2FkSW1hZ2VDb21wb25lbnRSZWYgPSBzaWduYWw8Q29tcG9uZW50UmVmPExpYnNVaUNvbXBvbmVudHNJbnB1dHNRdWlsbFVwbG9hZEltYWdlQ29tcG9uZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgaXNTaG93VG9vbEJhciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaXNUb29sYmFyUG9zaXRpb25GaXhlZCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVUb29sYmFyID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHN0eWxlc0luY2x1ZGVUb29sYmFyID0gaW5wdXQ8VFlQRV9PQkpFQ1Q+KCk7XG4gIHJlYWRvbmx5IHRvb2xiYXJDb25maWcgPSBpbnB1dDx7XG4gICAgdHlwZTogVFlQRV9NT0RFX0JBUl9DT05GSUdfT1BUSU9OO1xuICAgIGNvbmZpZz86IEFycmF5PElRdWlsbFRvb2xiYXJDb25maWc+O1xuICB9PigpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbXBvcnRfY29udGVudCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdpMThuX2ltcG9ydF9jb250ZW50JyB9KTtcbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dDxJTGFiZWwgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbDxUWVBFX09CSkVDVD4oKTtcbiAgLyoqxJHhurd0IGPhu50gbsOgeSBi4bqxbmcgZmFsc2UgxJHhu4MgdOG7kWkgxrB1IGhp4buHdSBuxINuZywgdsOgIGNo4buJIGzhuqV5IGThu68gbGnhu4d1IHJhIGtoaSBjw7MgecOqdSBj4bqndSBs4bqleSBk4buvIGxp4buHdSDEkeG7gyBn4butaSBsw6puIHNlcnZlciAsIGfhu41pIHJlZnJlc2hJdGVtVmFsdWUgxJHhu4MgY+G6rXAgbmjhuq10IGdpw6EgdHJpIHRo4bunIGPDtG5nKi9cbiAgcmVhZG9ubHkgYXV0b1VwZGF0ZVZhbHVlV2hlblRleHRDaGFuZ2UgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBmaWVsZE5hbWVCaW5kID0gaW5wdXQ8c3RyaW5nPigndmFsdWUnKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93RXJyb3JMYWJlbCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzaG93RXJyb3JCb3JkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGhhbmRsZXJzRXhwYW5kID0gaW5wdXQ8QXJyYXk8eyB0aXRsZTogc3RyaW5nOyBhY3Rpb246ICgpID0+IHZvaWQgfT4+KCk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IHZhbGlkTWF4TGVuZ3RoID0gaW5wdXQ8SVZhbGlkTGVuZ3RoPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTI1MCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTI1MCB9KTtcbiAgcmVhZG9ubHkgZGF0YUNvbmZpZ01lbnRpb24gPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgYmxvdHNSZWdpc3RlciA9IGlucHV0PEFycmF5PElRdWlsbEJsb3RSZWdpc3Rlcj4+KCk7XG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGZvY3VzQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYmxvY2tVbmRvUmVkb0tleWJvYXJkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVUb29sQmFyUGVyc29uYWxpemUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSB1cGxvYWRJbWFnZUNvbmZpZyA9IGlucHV0PElRdWlsbFVwbG9hZEltYWdlQ29uZmlnLCBJUXVpbGxVcGxvYWRJbWFnZUNvbmZpZyB8IHVuZGVmaW5lZD4odXBsb2FkSW1hZ2VDb25maWdEZWZhdWx0KCksIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHVwbG9hZEltYWdlQ29uZmlnRGVmYXVsdCgpIH0pO1xuICByZWFkb25seSBoZWlnaHRBdXRvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbEhlaWdodEF1dG8gPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd1BvcHVwRWRpdExpbmsgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnRQb3B1cCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dQb3B1cEVkaXRMaW5rID0gb3V0cHV0PHtcbiAgICBkYXRhTGluazogSVF1aWxsTGluaztcbiAgICBjYWxsYmFjazogKGxpbmtFZGl0OiB7IHRpdGxlOiBzdHJpbmc7IGxpbms6IHN0cmluZyB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICB9PigpO1xuICByZWFkb25seSBvdXRNZXNzYWdlRXJyb3IgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRCbHVyID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dEZvY3VzID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SVF1aWxsRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxJUXVpbGxTZWxlY3Rpb25DaGFuZ2U+KCk7XG4gIHJlYWRvbmx5IG91dFRleHRDaGFuZ2UgPSBvdXRwdXQ8SVF1aWxsVGV4dENoYW5nZT4oKTtcbiAgcmVhZG9ubHkgb3V0Q29udGV4dE1lbnUgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcblxuICByZWFkb25seSB3cmFwcGVyRWRpdG9yRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3dyYXBwZXJFZGl0b3InKTtcbiAgcmVhZG9ubHkgZWRpdG9yRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2VkaXRvcicpO1xuICByZWFkb25seSBxdWlsbE9wdGlvbkVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdxdWlsbE9wdGlvbicpO1xuICByZWFkb25seSBxdWlsbEVkaXRvckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdxdWlsbEVkaXRvcicpO1xuICByZWFkb25seSB0b29sYmFySXRlbXNFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPigndG9vbGJhckl0ZW1zJyk7XG5cbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gYCR7dGhpcy5jbGFzc0luY2x1ZGUoKSB8fCAnJ30gaC1mdWxsIHctZnVsbGBcbiAgICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0pO1xuICAgICAgICB0aGlzLmdldFFsRWRpdG9yRWxlbWVudCgpPy5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xuICAgICAgfSwgdGhpcy50aW1lRGVsYXlJbml0KCkgKyAxMCk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMudG9vbGJhckNvbmZpZygpPy50eXBlIHx8ICdkZWZhdWx0JztcbiAgICAgIGNvbnN0IGhhc0ljb25JbWFnZSA9IHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5zaG93SWNvbiA/PyBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc0ljb25QZXJzb25hbGl6ZSA9ICEhdGhpcy50ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy50b29sYmFyT3B0aW9uc0NvbmZpZy5zZXQodGhpcy50b29sYmFyQ29uZmlnKCk/LmNvbmZpZyB8fCB0b29sQmFyT3B0aW9ucyh0eXBlLCBoYXNJY29uSW1hZ2UsIGhhc0ljb25QZXJzb25hbGl6ZSkpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRvclRvb2xiYXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksXG4gICAgICByZWZyZXNoSXRlbVZhbHVlOiB0aGlzLnVwZGF0ZVZhbHVlQnlSb290UXVpbGxIdG1sLmJpbmQodGhpcyksXG4gICAgICBzZXRDb250ZW50OiB0aGlzLnNldENvbnRlbnQuYmluZCh0aGlzKSxcbiAgICAgIGluc2VydFRleHQ6IHRoaXMuaW5zZXJ0VGV4dC5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0TGluazogdGhpcy5pbnNlcnRMaW5rLmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRJbWFnZTogdGhpcy5pbnNlcnRJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgc2V0Rm9udFNpemU6IHRoaXMuc2V0Rm9udFNpemUuYmluZCh0aGlzKSxcbiAgICAgIHNldENvbG9yOiBhc3luYyAoY29sb3I6IHN0cmluZykgPT4gdGhpcy5zZXRTdHlsZSgnY29sb3InLCBjb2xvciksXG4gICAgICBzZXRCYWNrZ3JvdW5kOiBhc3luYyAoY29sb3I6IHN0cmluZykgPT4gdGhpcy5zZXRTdHlsZSgnYmFja2dyb3VuZCcsIGNvbG9yKSxcbiAgICAgIHF1aWxsOiAoKSA9PiB0aGlzLnF1aWxsKCkgYXMgUXVpbGwsXG4gICAgICBzY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bzogdGhpcy5zY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0by5iaW5kKHRoaXMpLFxuICAgICAgaW5zZXJ0RW1iZWQ6IGFzeW5jIChyYW5nZTogeyBpbmRleDogbnVtYmVyOyBpbmRleFNlbGVjdDogbnVtYmVyOyBsZW5ndGg/OiBudW1iZXIgfSwgdHlwZTogc3RyaW5nLCBkYXRhOiB1bmtub3duLCBzb3VyY2VzPzogU291cmNlcykgPT4ge1xuICAgICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCB0eXBlLCBkYXRhLCBzb3VyY2VzIHx8IFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICAgIHRoaXMucXVpbGwoKT8uc2V0U2VsZWN0aW9uKHJhbmdlLmluZGV4U2VsZWN0LCByYW5nZS5sZW5ndGggfHwgMCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0byhyYW5nZS5pbmRleFNlbGVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0sXG4gICAgICByZUNhbGN1bGF0b3JUb29sYmFyOiB0aGlzLmNhbGN1bGF0b3JUb29sYmFyLmJpbmQodGhpcyksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXRIYW5kbGVyRnVuY3Rpb24oKTtcbiAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRpbWVyKHRoaXMudGltZURlbGF5SW5pdCgpKSk7XG4gICAgdGhpcy5pbml0UXVpbGwoKTtcblxuICAgIHRoaXMuc2V0Q29udGVudChnZXQ8YW55Pih0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksICcnKSk7XG4gICAgdGhpcy5oYW5kbGVyVGV4dENoYW5nZSgpO1xuICAgIHRoaXMuaGFuZGxlclNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIHRoaXMuaGFuZGxlclBhc3RlKCk7XG4gICAgLy8gZ+G7jWkgaMOgbSBuw6B5IMSR4buDIHF1aWxsIMSRw6FuaCBk4bqldSBsw6AgxJHDoyBmb2N1cyB0cm9uZyBraGkgcXVpbGwgY2jGsGEga2jhu59pIHThuqFvIHhvbmcgxJHhu4Mga2jDtG5nIGLhu4sgc2Nyb2xsIHh14buRbmcgZMaw4bubaS5zYXUga2hpIHF1aWxsIGto4bufaSB04bqhbyB4b25nIHbDoCBjaGVjayBu4bq/dSDEkWFuZyBmb2N1cyDEkWFuZyDEkcaw4bujYyBi4bqtdCB0aMOsIG7DsyBraMO0bmcgZ+G7jWkgbOG6oWkgaMOgbSBmb2N1cyBu4buvYVxuICAgIHRoaXMucXVpbGwoKT8uZm9jdXMoKTtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMoKSkge1xuICAgICAgdGhpcy5kaXNwbGF5LnNldCh0cnVlKTtcbiAgICAgIHRoaXMucXVpbGwoKT8uYmx1cigpO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5jYWxjdWxhdG9yVG9vbGJhci5iaW5kKHRoaXMpKTtcbiAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRpbWVyKDQwMCkpO1xuICAgIHRoaXMuZGlzcGxheS5zZXQodHJ1ZSk7XG4gICAgY29uc3QgY3Vyc29yU3BhbiA9IHRoaXMucXVpbGwoKT8ucm9vdC5xdWVyeVNlbGVjdG9yKCcucWwtY3Vyc29yJyk7XG4gICAgaWYgKGN1cnNvclNwYW4pIHtcbiAgICAgIGN1cnNvclNwYW4ucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0UXVpbGwoKSB7XG4gICAgY29uc3Qgc2l6ZSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvc2l6ZScpO1xuICAgIGNvbnN0IGFsaWduU3R5bGUgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL2FsaWduJyk7XG4gICAgY29uc3QgaWNvbnMgPSBRdWlsbC5pbXBvcnQoJ3VpL2ljb25zJyk7XG4gICAgY29uc3QgaXRhbGljID0gUXVpbGwuaW1wb3J0KCdmb3JtYXRzL2l0YWxpYycpO1xuICAgIGNvbnN0IGJvbGQgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvYm9sZCcpO1xuICAgIHNpemUud2hpdGVsaXN0ID0gW1xuICAgICAgJzhweCcsXG4gICAgICAnOXB4JyxcbiAgICAgICcxMHB4JyxcbiAgICAgICcxMXB4JyxcbiAgICAgICcxMnB4JyxcbiAgICAgICcxM3B4JyxcbiAgICAgICcxNHB4JyxcbiAgICAgICcxNXB4JyxcbiAgICAgICcxNnB4JyxcbiAgICAgICcxN3B4JyxcbiAgICAgICcxOHB4JyxcbiAgICAgICcxOXB4JyxcbiAgICAgICcyMHB4JyxcbiAgICAgICcyMXB4JyxcbiAgICAgICcyMnB4JyxcbiAgICAgICcyM3B4JyxcbiAgICAgICcyNHB4JyxcbiAgICAgICcyNXB4JyxcbiAgICAgICcyNnB4JyxcbiAgICAgICcyN3B4JyxcbiAgICAgICcyOHB4JyxcbiAgICAgICcyOXB4JyxcbiAgICAgICczMHB4JyxcbiAgICAgICczMXB4JyxcbiAgICAgICczMnB4JyxcbiAgICAgICczM3B4JyxcbiAgICAgICczNHB4JyxcbiAgICAgICczNXB4JyxcbiAgICAgICczNnB4JyxcbiAgICAgICczN3B4JyxcbiAgICAgICczOHB4JyxcbiAgICAgICczOXB4JyxcbiAgICAgICc0MHB4JyxcbiAgICAgICc0MXB4JyxcbiAgICAgICc0MnB4JyxcbiAgICAgICc0M3B4JyxcbiAgICAgICc0NHB4JyxcbiAgICAgICc0NXB4JyxcbiAgICAgICc0NnB4JyxcbiAgICAgICc0N3B4JyxcbiAgICAgICc0OHB4JyxcbiAgICAgICc0OXB4JyxcbiAgICAgICc1MHB4JyxcbiAgICAgICc1MXB4JyxcbiAgICAgICc1MnB4JyxcbiAgICAgICc1M3B4JyxcbiAgICAgICc1NHB4JyxcbiAgICAgICc1NXB4JyxcbiAgICAgICc1NnB4JyxcbiAgICAgICc1N3B4JyxcbiAgICAgICc1OHB4JyxcbiAgICAgICc1OXB4JyxcbiAgICAgICc2MHB4JyxcbiAgICAgICc2MXB4JyxcbiAgICAgICc2MnB4JyxcbiAgICAgICc2M3B4JyxcbiAgICAgICc2NHB4JyxcbiAgICAgICc2NXB4JyxcbiAgICAgICc2NnB4JyxcbiAgICAgICc2N3B4JyxcbiAgICAgICc2OHB4JyxcbiAgICAgICc2OXB4JyxcbiAgICAgICc3MHB4JyxcbiAgICAgICc3MXB4JyxcbiAgICAgICc3MnB4JyxcbiAgICBdO1xuXG4gICAgaXRhbGljLnRhZ05hbWUgPSAnaSc7XG4gICAgYm9sZC50YWdOYW1lID0gJ2InO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGJvbGQsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGl0YWxpYywgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoc2l6ZSwgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoQ3VzdG9tSW1hZ2VCbG90LCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihRdWlsbERpdkJsb3QsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKGFsaWduU3R5bGUsIHRydWUpO1xuICAgIFF1aWxsLnJlZ2lzdGVyKFF1aWxsTWVudGlvbkJsb3QsIHRydWUpO1xuICAgIHRoaXMuYmxvdHNSZWdpc3RlcigpPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBRdWlsbC5yZWdpc3RlcihpdGVtLmNvbXBvbmVudCwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoeyAnZm9ybWF0cy9pbmRlbnQnOiBpbmRlbnRTdHlsZSB9LCB0cnVlKTtcbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5xdWlsbEVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQsICdjb250ZXh0bWVudScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5vdXRDb250ZXh0TWVudS5lbWl0KGUpKTtcbiAgICBpY29uTGlzdCgpLmZvckVhY2goKGVsZW1lbnQpID0+IHNldChpY29ucywgZWxlbWVudC5rZXksIGA8c3BhbiBjbGFzcz1cIiR7ZWxlbWVudC5pY29ufSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXSB0ZXh0LVsxNnB4XSB0ZXh0LVsjNmE3MzgzXVwiPjwvc3Bhbj5gKSk7XG4gICAgdGhpcy5xdWlsbC5zZXQoXG4gICAgICBuZXcgUXVpbGwodGhpcy5xdWlsbEVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgbW9kdWxlczoge1xuICAgICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5xdWlsbE9wdGlvbkVsKCk/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xpcGJvYXJkOiB7XG4gICAgICAgICAgICBtYXRjaFZpc3VhbDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoaXN0b3J5OiB7XG4gICAgICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgICAgIG1heFN0YWNrOiAxMDAsXG4gICAgICAgICAgICB1c2VyT25seTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgICAgYmluZGluZ3M6IHtcbiAgICAgICAgICAgICAgZW50ZXI6IHtcbiAgICAgICAgICAgICAgICBrZXk6IDEzLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+ICh0aGlzLnNob3dNZW50aW9uKCkgPyBmYWxzZSA6IHRydWUpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZWFkT25seTogdGhpcy5yZWFkb25seSgpLFxuICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKCkpLFxuICAgICAgICB0aGVtZTogJ3Nub3cnLFxuICAgICAgICBib3VuZHM6IHRoaXMuaGVpZ2h0QXV0bygpID8gdGhpcy53cmFwcGVyRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCA6IHRoaXMucXVpbGxFZGl0b3JFbCgpPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICBzY3JvbGxpbmdDb250YWluZXI6IHRoaXMuaGVpZ2h0QXV0bygpID8gdGhpcy53cmFwcGVyRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudCA6IG51bGwsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnF1aWxsKCk/LmtleWJvYXJkLmFkZEJpbmRpbmcoeyBrZXk6ICdCYWNrc3BhY2UnIH0sIHRoaXMubm9QcmV2ZW50RW1iZWREZWxldGlvbi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnF1aWxsKCk/LmtleWJvYXJkLmFkZEJpbmRpbmcoeyBrZXk6ICdEZWxldGUnIH0sIHRoaXMubm9QcmV2ZW50RW1iZWREZWxldGlvbi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnNldHVwVW5kb1JlZG9CbG9ja2luZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFVuZG9SZWRvQmxvY2tpbmcoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yUm9vdCA9IHRoaXMucXVpbGwoKT8ucm9vdDtcbiAgICBpZiAoZWRpdG9yUm9vdCAmJiB0aGlzLmJsb2NrVW5kb1JlZG9LZXlib2FyZCgpKSB7XG4gICAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVW5kbyA9IChlLmtleSA9PT0gJ3onIHx8IGUua2V5ID09PSAnWicpICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgaXNSZWRvID0gKChlLmtleSA9PT0gJ3onIHx8IGUua2V5ID09PSAnWicpICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiBlLnNoaWZ0S2V5KSB8fCAoKGUua2V5ID09PSAneScgfHwgZS5rZXkgPT09ICdZJykgJiYgZS5jdHJsS2V5KTtcblxuICAgICAgICBpZiAoaXNVbmRvIHx8IGlzUmVkbykge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBCbG9ja2luZyAke2lzVW5kbyA/ICd1bmRvJyA6ICdyZWRvJ30ga2V5Ym9hcmQgc2hvcnRjdXRgKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZWRpdG9yUm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIsIHRydWUpO1xuXG4gICAgICB0aGlzLm9uRGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vUHJldmVudEVtYmVkRGVsZXRpb24ocmFuZ2U6IFJhbmdlU3RhdGljKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnF1aWxsKCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkZWx0YSA9IHRoaXMucXVpbGwoKT8uZ2V0Q29udGVudHMocmFuZ2UuaW5kZXgsIDEpO1xuXG4gICAgaWYgKGRlbHRhPy5vcHMuc29tZSgob3B0aW9uKSA9PiB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZmluZCgoaXRlbSkgPT4gZ2V0KG9wdGlvbi5pbnNlcnQsIGl0ZW0uY29tcG9uZW50WydibG90TmFtZSddKSAmJiBpdGVtLmlnbm9yZURlbGV0ZSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5nxINuIGtow7RuZyBjaG8gUXVpbGwgeOG7rSBsw70geMOzYVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyRnVuY3Rpb24oKSB7XG4gICAgdGhpcy5oYW5kbGVycy51cGRhdGUoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgaW1hZ2U6IHRoaXMuaGFuZGxlclNob3dVcGxvYWRJbWFnZS5iaW5kKHRoaXMpLFxuICAgICAgZW1vamk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSxcbiAgICB9KSk7XG4gICAgbGV0IGxpbmsgPSBmYWxzZTtcbiAgICBjb25zdCBoYW5kbGVyc0V4cGFuZCA9IHRoaXMuaGFuZGxlcnNFeHBhbmQoKTtcbiAgICBpZiAoaGFuZGxlcnNFeHBhbmQgJiYgaGFuZGxlcnNFeHBhbmQubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc0V4cGFuZC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnRpdGxlICYmIGVsZW1lbnQuYWN0aW9uKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQudGl0bGUgPT09ICdsaW5rJykge1xuICAgICAgICAgICAgbGluayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGFuZGxlcnMudXBkYXRlKChpdGVtKSA9PiAoeyAuLi5pdGVtLCBbZWxlbWVudC50aXRsZV06IGVsZW1lbnQuYWN0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghbGluaykge1xuICAgICAgdGhpcy5oYW5kbGVycy51cGRhdGUoKGl0ZW0pID0+ICh7IC4uLml0ZW0sIGxpbms6IHRoaXMuaGFuZGxlU2hvd1VwbG9hZExpbmsuYmluZCh0aGlzKSwgdW5MaW5rOiB0aGlzLmhhbmRsZXJVbkluc2VydExpbmsuYmluZCh0aGlzKSB9KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGp1c3RJbmRleEZvckltYWdlcyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucXVpbGwoKT8ucm9vdDtcbiAgICBsZXQgaW1hZ2VDb3VudCA9IDA7XG4gICAgbGV0IGFkanVzdGVkSW5kZXggPSAwO1xuICAgIGNvbnN0IGFkanVzdFRleHRJbmRleCA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBpZiAoYWRqdXN0ZWRJbmRleCA+IGluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBhZGp1c3RlZEluZGV4ICs9IG5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZS5ub2RlTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgaWYgKGFkanVzdGVkSW5kZXggPD0gaW5kZXgpIHtcbiAgICAgICAgICBpbWFnZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5mb3JFYWNoKGFkanVzdFRleHRJbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhZGp1c3RUZXh0SW5kZXgoY29udGVudCBhcyBOb2RlKTtcbiAgICByZXR1cm4gaW1hZ2VDb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlclNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgKHJhbmdlOiBSYW5nZVN0YXRpYywgb2xkUmFuZ2U6IFJhbmdlU3RhdGljLCBzb3VyY2U6IFNvdXJjZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJhbmdlID09PSBudWxsICYmIG9sZFJhbmdlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMub3V0Qmx1ci5lbWl0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZSAhPT0gbnVsbCAmJiBvbGRSYW5nZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLm91dEZvY3VzLmVtaXQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5xdWlsbCgpPy5nZXRGb3JtYXQoKTtcbiAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgdGhpcy5nZXRGb250KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuZ2V0Rm9udFNpemUoZm9ybWF0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0U2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBxdWlsbDogdGhpcy5xdWlsbCgpIGFzIFF1aWxsLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgb2xkUmFuZ2UsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMCAmJiBmb3JtYXQ/LmxpbmsgJiYgc291cmNlID09PSAndXNlcicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24/LmFuY2hvck5vZGU7XG4gICAgICAgIGxldCBsaW5rTm9kZSA9IGFuY2hvck5vZGUgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChsaW5rTm9kZSAmJiBsaW5rTm9kZS50YWdOYW1lICE9PSAnQScpIHtcbiAgICAgICAgICBsaW5rTm9kZSA9IGxpbmtOb2RlLnBhcmVudE5vZGUgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmtOb2RlICYmIGxpbmtOb2RlLnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICAgIGNvbnN0IGxpbmtUZXh0ID0gbGlua05vZGUuaW5uZXJUZXh0O1xuICAgICAgICAgIGNvbnN0IGxpbmtzSW5kaWNlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgICAgICAgIGxldCBpbmRleFJldHVybjogbnVtYmVyIHwgdW5kZWZpbmVkID0gLTE7XG4gICAgICAgICAgd2hpbGUgKCFpc05pbChpbmRleFJldHVybikgJiYgaW5kZXhSZXR1cm4gPCByYW5nZS5pbmRleCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSB0aGlzLnF1aWxsKCk/LmdldFRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtJbmRleCA9IHRleHRDb250ZW50Py5pbmRleE9mKGxpbmtUZXh0LCBsaW5rc0luZGljZXMubGVuZ3RoID4gMCA/IGxpbmtzSW5kaWNlc1tsaW5rc0luZGljZXMubGVuZ3RoIC0gMV0gKyBsaW5rVGV4dC5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgIGlmICghaXNOaWwobGlua0luZGV4KSkge1xuICAgICAgICAgICAgICBpZiAobGlua0luZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxpbmtzSW5kaWNlcy5wdXNoKGxpbmtJbmRleCk7XG4gICAgICAgICAgICAgICAgaW5kZXhSZXR1cm4gPSBsaW5rSW5kZXggKyBsaW5rVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpbmtJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpbmRleFJldHVybiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGlua3NJbmRpY2VzICYmIGxpbmtzSW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlSW5kZXggPSBsaW5rc0luZGljZXNbbGlua3NJbmRpY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgY291bnRJbWFnZSA9IHRoaXMuYWRqdXN0SW5kZXhGb3JJbWFnZXMocmFuZ2VJbmRleCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5saW5rLnNldCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpbmtUZXh0LFxuICAgICAgICAgICAgICAgIHVybDogbGlua05vZGUuaHJlZixcbiAgICAgICAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IHJhbmdlSW5kZXggKyBjb3VudEltYWdlLFxuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsaW5rVGV4dC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5zaG93UG9wb3ZlcihsaW5rTm9kZSk7XG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyUGFzdGUoKSB7XG4gICAgc2V0PGFueT4odGhpcy5xdWlsbCwgJ3Jvb3Qub25wYXN0ZScsIGFzeW5jIChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5jbGlwYm9hcmREYXRhLmZpbGVzO1xuICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlc0FuZEluc2VydChmaWxlcyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJUZXh0Q2hhbmdlKCkge1xuICAgIHRoaXMucXVpbGwoKT8ub24oJ3RleHQtY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm91dFRleHRDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHF1aWxsOiB0aGlzLnF1aWxsKCkgYXMgUXVpbGwsXG4gICAgICAgIGRlbHRhOiBldmVudCxcbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChldmVudD8ub3BzWzFdPy5pbnNlcnQgPT09ICdcXG4nKSB7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGluZGV4OiBldmVudD8ub3BzWzBdLnJldGFpbiBhcyBudW1iZXIgfTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TGVhZiA9IHRoaXMucXVpbGwoKT8uZ2V0TGVhZihyYW5nZS5pbmRleClbMF07XG4gICAgICAgICAgY29uc3QgbmV4dExlYWYgPSB0aGlzLnF1aWxsKCk/LmdldExlYWYocmFuZ2UuaW5kZXggKyAxKVswXTtcbiAgICAgICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnYnJlYWsnLCB0cnVlLCAndXNlcicpO1xuICAgICAgICAgIGlmIChuZXh0TGVhZiA9PT0gbnVsbCB8fCBjdXJyZW50TGVhZi5wYXJlbnQgIT09IG5leHRMZWFmLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2JyZWFrJywgdHJ1ZSwgJ3VzZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oKHJhbmdlLmluZGV4IHx8IDApICsgMSwgMCwgUXVpbGwuc291cmNlcy5TSUxFTlQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5hdXRvVXBkYXRlVmFsdWVXaGVuVGV4dENoYW5nZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVCeVJvb3RRdWlsbEh0bWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVCeVJvb3RRdWlsbEh0bWwoKSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMucmVtb3ZlVW53YW50ZWRQYXJ0KHRoaXMucXVpbGwoKT8ucm9vdC5pbm5lckhUTUwgfHwgJycpO1xuICAgIGlmICghdGhpcy5xdWlsbCgpPy5yb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKS5sZW5ndGggJiYgIXRoaXMucXVpbGwoKT8uZ2V0VGV4dCgpKSB7XG4gICAgICBzZXQ8YW55Pih0aGlzLml0ZW0oKSwgdGhpcy5maWVsZE5hbWVCaW5kKCksICcnKTtcbiAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoZ2V0KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnZlcnRJbm5lckhUTUxBbmRTZXRWYWx1ZShodG1sKTtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChnZXQodGhpcy5pdGVtKCksIHRoaXMuZmllbGROYW1lQmluZCgpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2wuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAoZXZlbnQgPT09ICdyZW1vdmUnKSB7XG4gICAgICB0aGlzLmxpbmsuc2V0KGxpbmtEZWZhdWx0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVW5saW5rKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmxpbmsoKTtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdFRleHQobGluay5yYW5nZS5pbmRleCwgbGluay5yYW5nZS5sZW5ndGgsIHsgbGluazogZmFsc2UgfSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckVkaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGluayA9IHRoaXMubGluaygpO1xuICAgIGlmICh0aGlzLmlnbm9yZVNob3dQb3B1cEVkaXRMaW5rKCkpIHtcbiAgICAgIHRoaXMub3V0U2hvd1BvcHVwRWRpdExpbmsuZW1pdCh7XG4gICAgICAgIGRhdGFMaW5rOiBsaW5rLFxuICAgICAgICBjYWxsYmFjazogYXN5bmMgKGxpbmtFZGl0OiB7IHRpdGxlOiBzdHJpbmc7IGxpbms6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgaWYgKGxpbmsgaW5zdGFuY2VvZiBPYmplY3QgJiYgbGluay51cmwpIHtcbiAgICAgICAgICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChsaW5rLnJhbmdlLmluZGV4LCBsaW5rLnJhbmdlLmxlbmd0aCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICAgICAgICAgIHRoaXMucXVpbGwoKT8uaW5zZXJ0VGV4dChsaW5rLnJhbmdlLmluZGV4LCBsaW5rRWRpdC50aXRsZSwgJ2xpbmsnLCBsaW5rRWRpdC5saW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnNlcnRMaW5rKGxpbmtFZGl0LnRpdGxlLCBsaW5rRWRpdC5saW5rKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZVNob3dVcGxvYWRMaW5rKGxpbmspO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjdWxhdG9yVG9vbGJhcigpIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy50aW1lQ2FsY3VsYXRpb25Ub29sQmFyLnNldChcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b29sYmFyV2lkdGggPSB0aGlzLnRvb2xiYXJJdGVtc0VsKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDMyICsgMjg7XG4gICAgICAgIHRoaXMudG9vbGJhck9wdGlvbnNDb25maWcudXBkYXRlKChjb25maWdzKSA9PiB7XG4gICAgICAgICAgY29uZmlncy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5kaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gaXRlbS53aWR0aDtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdsaW5lJykge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0SXRlbVdpZHRoID0gdG90YWxXaWR0aCArIHRoaXMudG9vbGJhck9wdGlvbnNDb25maWcoKVsraW5kZXggKyAxXS53aWR0aDtcbiAgICAgICAgICAgICAgY29uc3QgcHJlSXRlbSA9IHRoaXMudG9vbGJhck9wdGlvbnNDb25maWcoKVsraW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgaWYgKG5leHRJdGVtV2lkdGggPiB0b29sYmFyV2lkdGggJiYgcHJlSXRlbS5kaXNwbGF5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5kaXNwbGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggPiB0b29sYmFyV2lkdGgpIHtcbiAgICAgICAgICAgICAgaXRlbS5kaXNwbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLmNvbmZpZ3NdO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSwgNjAwKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U3R5bGUodHlwZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdCh0eXBlLCBkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9udFNpemUoZm9ybWF0OiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBmb250U2l6ZSA9IGZvcm1hdD8uc2l6ZT8udG9TdHJpbmcoKT8ucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoZm9udFNpemUpKSkge1xuICAgICAgdGhpcy5zaXplLnNldCh7IHZhbHVlOiAxNCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaXplLnNldCh7IHZhbHVlOiBwYXJzZUZsb2F0KGZvbnRTaXplKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9udChmb3JtYXQ6IFN0cmluZ01hcCkge1xuICAgIGNvbnN0IGZvbnQgPSBsaXN0Rm9udCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBmb3JtYXQuZm9udCk7XG4gICAgaWYgKCFmb250KSB7XG4gICAgICB0aGlzLmZvbnRTZWxlY3RlZC5zZXQoeyBrZXk6ICcnLCBpdGVtOiBsaXN0Rm9udCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSAnJykgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9udFNlbGVjdGVkLnNldCh7IGtleTogZm9ybWF0LmZvbnQsIGl0ZW06IGZvbnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlVW5kbygpIHtcbiAgICB0aGlzLnF1aWxsKCk/Lmhpc3Rvcnk/LnVuZG8oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSZWRvKCkge1xuICAgIHRoaXMucXVpbGwoKT8uaGlzdG9yeT8ucmVkbygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29udGVudFhzc0ZpbHRlciA9IGF3YWl0IHhzc0ZpbHRlcih0aGlzLnJlbW92ZVVud2FudGVkUGFydChjb250ZW50IHx8ICcnKSk7XG4gICAgYXdhaXQgbGFzdFZhbHVlRnJvbSh0aW1lcigxKSk7XG4gICAgKHRoaXMucXVpbGwoKT8ucm9vdCBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gY29udGVudFhzc0ZpbHRlcjtcbiAgICBpZiAoIXRoaXMuYXV0b0ZvY3VzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgbGFzdFZhbHVlRnJvbSh0aW1lcigxMDApKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnF1aWxsRWRpdG9yRWwoKT8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXScpO1xuICAgIGNvbnN0IGNvbnRlbnRTY3JvbGwgPSB0aGlzLmhlaWdodEF1dG8oKSA/IHRoaXMud3JhcHBlckVkaXRvckVsKCk/Lm5hdGl2ZUVsZW1lbnQgOiB0YXJnZXQ7XG4gICAgY29udGVudFNjcm9sbC5zY3JvbGxUb3AgPSBjb250ZW50U2Nyb2xsLnNjcm9sbEhlaWdodDtcbiAgICBpZiAodGhpcy5mb2N1c0JvdHRvbSgpKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbihjb250ZW50WHNzRmlsdGVyLmxlbmd0aCwgMCwgUXVpbGwuc291cmNlcy5TSUxFTlQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbigwLCAwLCBRdWlsbC5zb3VyY2VzLlNJTEVOVCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckFkZEVtb2ppKGVtb2ppOiB1bmtub3duKSB7XG4gICAgdGhpcy5pbnNlcnRUZXh0KGVtb2ppIGFzIHN0cmluZywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTaG93VXBsb2FkTGluayhldmVudDogdW5rbm93bikge1xuICAgIHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudCkpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5hZGRFZGl0TGlua0NvbXBvbmVudFJlZigpPy5pbnN0YW5jZTtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IHRleHRTZWxlY3RlZCA9IHNlbGVjdGlvbj8ubGVuZ3RoID8gdGhpcy5xdWlsbCgpPy5nZXRUZXh0KHNlbGVjdGlvbj8uaW5kZXgsIHNlbGVjdGlvbj8ubGVuZ3RoKSA6ICcnO1xuICAgIGNvbnN0IGRhdGEgPSBldmVudCBhcyBJUXVpbGxMaW5rIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYoKT8uc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkpO1xuICAgIHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYoKT8uc2V0SW5wdXQoJ3RpdGxlJywgZGF0YT8udGl0bGUgfHwgdGV4dFNlbGVjdGVkKTtcbiAgICB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCdsaW5rJywgZGF0YT8udXJsIHx8ICcnKTtcbiAgICB0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCk/LnNldElucHV0KCdpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnQnLCB0aGlzLmlnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudFBvcHVwKCkpO1xuICAgIGluc3RhbmNlPy5vdXRTYXZlTGluay5zdWJzY3JpYmUoKGl0ZW06IHsgdGl0bGU6IHN0cmluZzsgbGluazogc3RyaW5nIH0pID0+IHtcbiAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0ICYmIGRhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChkYXRhLnJhbmdlLmluZGV4LCBkYXRhLnJhbmdlLmxlbmd0aCwgUXVpbGwuc291cmNlcy5VU0VSKTtcbiAgICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRUZXh0KGRhdGEucmFuZ2UuaW5kZXgsIGl0ZW0udGl0bGUsICdsaW5rJywgaXRlbS5saW5rKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnNlcnRMaW5rKGl0ZW0udGl0bGUsIGl0ZW0ubGluayk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2U/Lm91dENsb3NlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpKTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLmFkZEVkaXRMaW5rQ29tcG9uZW50UmVmKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJVbkluc2VydExpbmsoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFpc05pbChzZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/LmZvcm1hdFRleHQoc2VsZWN0aW9uLCAnbGluaycsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KCcnKTtcbiAgICBjb25zdCB2YWxpZFJlcXVpcmVkID0gdGhpcy52YWxpZFJlcXVpcmVkKCk7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbSgpO1xuICAgIGNvbnN0IGZpZWxkTmFtZUJpbmQgPSB0aGlzLmZpZWxkTmFtZUJpbmQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldDxhbnk+KGl0ZW0sIGZpZWxkTmFtZUJpbmQpO1xuICAgIGlmICh2YWxpZFJlcXVpcmVkICYmIHZhbGlkUmVxdWlyZWQuaXNSZXF1aXJlZCAmJiAoIWZpZWxkTmFtZUJpbmQgfHwgIXZhbHVlIHx8ICF2YWx1ZS50cmltKCkpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodmFsaWRSZXF1aXJlZC5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQpO1xuICAgICAgdGhpcy5vdXRNZXNzYWdlRXJyb3IuZW1pdCh0aGlzLm1lc3NhZ2VFcnJvcigpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRNaW5MZW5ndGggPSB0aGlzLnZhbGlkTWluTGVuZ3RoKCk7XG4gICAgaWYgKHZhbGlkTWluTGVuZ3RoICYmIGZpZWxkTmFtZUJpbmQgJiYgdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA8IHZhbGlkTWluTGVuZ3RoLmxlbmd0aCkge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHZhbGlkTWluTGVuZ3RoLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NSU5fTEVOR1RIKTtcbiAgICAgIHRoaXMub3V0TWVzc2FnZUVycm9yLmVtaXQodGhpcy5tZXNzYWdlRXJyb3IoKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkTWF4TGVuZ3RoID0gdGhpcy52YWxpZE1heExlbmd0aCgpO1xuICAgIGlmICh2YWxpZE1heExlbmd0aCAmJiBmaWVsZE5hbWVCaW5kICYmIHZhbHVlICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiB0aGlzLnZhbGlkTWF4TGVuZ3RoLmxlbmd0aCkge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHZhbGlkTWF4TGVuZ3RoLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9NQVhfTEVOR1RIKTtcbiAgICAgIHRoaXMub3V0TWVzc2FnZUVycm9yLmVtaXQodGhpcy5tZXNzYWdlRXJyb3IoKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMub3V0TWVzc2FnZUVycm9yLmVtaXQodGhpcy5tZXNzYWdlRXJyb3IoKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5zZXJ0SW1hZ2UoY29udGVudDogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGluZGV4ID8/IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4O1xuICAgIGlmICghaXNOaWwoc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChzZWxlY3Rpb24sICdpbWFnZScsIGNvbnRlbnQpO1xuICAgICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uICsgMSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5kZXg/OiBudW1iZXIsIGZvY3VzTGFzdD86IGJvb2xlYW4pIHtcbiAgICBpbmRleCA9IGluZGV4ID8/IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpLmluZGV4O1xuICAgIGlmICghaXNOaWwoaW5kZXgpKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQoaW5kZXgsIGNvbnRlbnQsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgICBpZiAoZm9jdXNMYXN0KSB7XG4gICAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoMCkpO1xuICAgICAgICB0aGlzLnF1aWxsKCk/LnNldFNlbGVjdGlvbihpbmRleCArIGNvbnRlbnQubGVuZ3RoLCAwLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5zZXJ0TGluayh0ZXh0OiBzdHJpbmcsIHVybDogc3RyaW5nLCBpbmRleD86IG51bWJlcikge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwoKT8uZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGNvbnN0IGluZGV4SW5zZXJ0ID0gaW5kZXggPz8gc2VsZWN0aW9uPy5pbmRleDtcbiAgICBpZiAoc2VsZWN0aW9uPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucXVpbGwoKT8uZGVsZXRlVGV4dChzZWxlY3Rpb24uaW5kZXgsIHNlbGVjdGlvbi5sZW5ndGgsIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgfVxuICAgIGlmICghaXNOaWwoaW5kZXhJbnNlcnQpKSB7XG4gICAgICB0aGlzLnF1aWxsKCk/Lmluc2VydFRleHQoaW5kZXhJbnNlcnQsIHRleHQsICdsaW5rJywgdXJsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJbm5lckhUTUxBbmRTZXRWYWx1ZShodG1sOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFN0eWxlRm9yQ29udGVudCgpO1xuICAgIHNldDxhbnk+KHRoaXMuaXRlbSgpLCB0aGlzLmZpZWxkTmFtZUJpbmQoKSwgaHRtbCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlRm9yQ29udGVudCgpIHtcbiAgICBjb25zdCBzdHlsZUFycmF5ID0gW1xuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LUFyaWFsJywgc3R5bGU6ICdmb250LWZhbWlseTogQXJpYWwnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2Fucy1zZXJpZicsIHN0eWxlOiAnZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2VyaWYnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBzZXJpZicgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1tb25vc3BhY2UnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBtb25vc3BhY2UnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtSGVsdmV0aWNhJywgc3R5bGU6ICdmb250LWZhbWlseTogSGVsdmV0aWNhJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5saWJzLXVpLXF1aWxsLWZvcm1hdC1pbWFnZScsIHN0eWxlOiAnbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG8nLCBvdmVycmlkZVN0eWxlOiB0cnVlIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLmxpYnMtdWktcXVpbGwtbWVudGlvbicsIHN0eWxlOiAnZm9udC13ZWlnaHQ6IDYwMDstbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyBjb2xvcjogIzcyMzlFQScsIG92ZXJyaWRlU3R5bGU6IHRydWUgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICdibG9ja3F1b3RlJywgc3R5bGU6ICdib3JkZXItbGVmdDogNHB4IHNvbGlkICNjY2M7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLXRvcDogNXB4OyBwYWRkaW5nLWxlZnQ6IDE2cHgnLCBvdmVycmlkZVN0eWxlOiB0cnVlIH0sXG4gICAgXTtcbiAgICB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgc3R5bGVBcnJheS5wdXNoKHsgc2VsZWN0b3I6IGAuJHtpdGVtLmNsYXNzTmFtZX1gLCBzdHlsZTogaXRlbS5zdHlsZSwgb3ZlcnJpZGVTdHlsZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICBzdHlsZUFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5xdWlsbCgpPy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoaXRlbS5zZWxlY3Rvcik7XG4gICAgICBlbGVtZW50cz8uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vdmVycmlkZVN0eWxlKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgaXRlbS5zdHlsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeGJ1ZyBpc3N1ZTogaHR0cHM6Ly9hZG1pbi1jdi5tb2Jpby52bi9pc3N1ZXMvNDkwOTJcbiAgICAgICAgbGV0IHN0eWxlRXhpc3QgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgaWYgKHN0eWxlRXhpc3QpIHtcbiAgICAgICAgICBbJ2ZvbnQtZmFtaWx5OiBBcmlhbCcsICdmb250LWZhbWlseTogc2Fucy1zZXJpZicsICdmb250LWZhbWlseTogc2VyaWYnLCAnZm9udC1mYW1pbHk6IG1vbm9zcGFjZScsICdmb250LWZhbWlseTogSGVsdmV0aWNhJ10uZm9yRWFjaCgoZm9udCkgPT4ge1xuICAgICAgICAgICAgc3R5bGVFeGlzdCA9IChzdHlsZUV4aXN0Py5pbmNsdWRlcyhgJHtmb250fTtgKSA/IHN0eWxlRXhpc3Q/LnJlcGxhY2UoYCR7Zm9udH07YCwgJycpIDogc3R5bGVFeGlzdD8ucmVwbGFjZShmb250LCAnJykpIGFzIHN0cmluZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZUV4aXN0ID8gYCR7c3R5bGVFeGlzdH0ke3N0eWxlRXhpc3Rbc3R5bGVFeGlzdC5sZW5ndGggLSAxXSA9PT0gJzsnID8gJycgOiAnOyd9JHtpdGVtLnN0eWxlfTtgIDogaXRlbS5zdHlsZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVUb2dnbGVNZW50aW9uKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dNZW50aW9uLnNldChzaG93KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlclNob3dVcGxvYWRJbWFnZSgpIHtcbiAgICBpZiAodGhpcy51cGxvYWRJbWFnZUNvbmZpZygpLm1vZGVDdXN0b20pIHtcbiAgICAgIHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsVXBsb2FkSW1hZ2VDb21wb25lbnQpKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy51cGxvYWRJbWFnZUNvbXBvbmVudFJlZigpPy5pbnN0YW5jZTtcbiAgICAgIHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKT8uc2V0SW5wdXQoJ3VwbG9hZEltYWdlQ29uZmlnJywgdGhpcy51cGxvYWRJbWFnZUNvbmZpZygpKTtcbiAgICAgIHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKT8uc2V0SW5wdXQoJ2lnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudCcsIHRoaXMuaWdub3JlQ29tbXVuaWNhdGVNaWNyb0V2ZW50UG9wdXAoKSk7XG4gICAgICBpbnN0YW5jZT8ub3V0Q2xvc2Uuc3Vic2NyaWJlKChsaW5rOiBzdHJpbmcgfCB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMudXBsb2FkSW1hZ2VDb21wb25lbnRSZWYoKSk7XG4gICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShsaW5rKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLnVwbG9hZEltYWdlQ29tcG9uZW50UmVmKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxlJyk7XG4gICAgaW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnaW1hZ2UvKicpO1xuICAgIGlucHV0LmNsaWNrKCk7XG4gICAgaW5wdXQub25jaGFuZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlc0FuZEluc2VydChpbnB1dD8uZmlsZXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEltYWdlc0FuZEluc2VydChmaWxlcz86IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghZmlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF4SW1hZ2VTaXplID0gdGhpcy51cGxvYWRJbWFnZUNvbmZpZygpPy5tYXhJbWFnZVNpemUgfHwgNSAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGltYWdlcyA9IEFycmF5LmZyb20oZmlsZXMpLmZpbHRlcigoZmlsZSkgPT4gZmlsZSAmJiBmaWxlLnR5cGUuc3BsaXQoJy8nKVswXSA9PT0gJ2ltYWdlJyAmJiAoIXRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5tYXhJbWFnZVNpemUgfHwgZmlsZS5zaXplIDw9IG1heEltYWdlU2l6ZSkpO1xuICAgIGlmICghaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dDb21wVHlwZVRleHRXYXJuaW5nKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fbm90ZV91cGxvYWRfaW1hZ2Vfdm9sdW1lJywgeyB2YWx1ZTogZ2V0TGFiZWxCeVNpemVGaWxlKG1heEltYWdlU2l6ZSkgfSksIHsgdGltZVJlbW92ZTogODAwMCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZ1VwbG9hZEltYWdlLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGluZGV4SW5zZXJ0ID0gdGhpcy5xdWlsbCgpPy5nZXRTZWxlY3Rpb24odHJ1ZSkuaW5kZXg7XG4gICAgICBjb25zdCBsaW5rcyA9IGF3YWl0IHRoaXMudXBsb2FkSW1hZ2VDb25maWcoKS5mdW5jdGlvblVwbG9hZEltYWdlPy4oaW1hZ2VzKTtcbiAgICAgIGlmICghbGlua3M/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsaW5rcy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICAgIGlmICghbGluayB8fCAodGhpcy51cGxvYWRJbWFnZUNvbmZpZygpLm9ubHlBY2NlcHRJbWFnZUh0dHBzTGluayAmJiAobGluayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8ICFuZXcgUmVnRXhwKHBhdHRlcm5VcmwoKSkudGVzdChsaW5rKSkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UobGluayBhcyBzdHJpbmcsIGluZGV4SW5zZXJ0KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0byhpbmRleEluc2VydCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmdVcGxvYWRJbWFnZS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIGluc2VydE1lbnRpb24oZXZlbnQ6IElNZW50aW9uSW5zZXJ0KSB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3Vyc29yUG9zID0gcmFuZ2UuaW5kZXg7XG4gICAgY29uc3Qgc3RhcnRQb3NJbnNlcnQgPSBjdXJzb3JQb3MgLSBldmVudC5sZW5ndGhLZXk7XG4gICAgdGhpcy5xdWlsbCgpPy5kZWxldGVUZXh0KHN0YXJ0UG9zSW5zZXJ0LCBldmVudC5sZW5ndGhLZXksIFF1aWxsLnNvdXJjZXMuVVNFUik7XG4gICAgdGhpcy5xdWlsbCgpPy5pbnNlcnRFbWJlZChzdGFydFBvc0luc2VydCwgJ21lbnRpb24nLCBldmVudC5kYXRhLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICAgIHRoaXMuaW5zZXJ0VGV4dCgnICcsIHN0YXJ0UG9zSW5zZXJ0ICsgMSk7XG4gICAgdGhpcy5xdWlsbCgpPy5zZXRTZWxlY3Rpb24oc3RhcnRQb3NJbnNlcnQgKyAyLCAwLCBRdWlsbC5zb3VyY2VzLlVTRVIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnNlcnRNZW50aW9uKGRhdGE6IElNZW50aW9uSW5zZXJ0KSB7XG4gICAgdGhpcy5pbnNlcnRNZW50aW9uKGRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNldEZvbnRTaXplKHNpemU6IG51bWJlcikge1xuICAgIHRoaXMucXVpbGwoKT8uZm9ybWF0KCdzaXplJywgYCR7c2l6ZX1weGApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5zaXplLnVwZGF0ZSgoaXRlbSkgPT4gKHsgLi4uaXRlbSwgdmFsdWU6IHZhbHVlIGFzIG51bWJlciB9KSk7XG4gICAgdGhpcy5xdWlsbCgpPy5mb3JtYXQoJ3NpemUnLCBgJHt0aGlzLnNpemUoKS52YWx1ZX1weGApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdEFsaWduKGV2ZW50OiBJRW1pdFNlbGVjdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYWxpZ25TZWxlY3RlZC5zZXQoZXZlbnQpO1xuICAgIHRoaXMuc2V0U3R5bGUoJ2FsaWduJywgZXZlbnQ/LmtleSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdEZvbnQoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5mb250U2VsZWN0ZWQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLnNldFN0eWxlKCdmb250JywgZXZlbnQ/LmtleSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VTaG93TW9yZUFjdGlvbihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNob3dNb3JlQWN0aW9uLnVwZGF0ZSgoaXRlbSkgPT4gIWl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0byhpbmRleD86IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRTY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bygpKTtcbiAgICBpZiAoIXRoaXMuZWxlbWVudFNjcm9sbEhlaWdodEF1dG8oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRpbWVvdXRTY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0by5zZXQoXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaW5kZXggPSBpbmRleCA/PyB0aGlzLnF1aWxsKCk/LmdldFNlbGVjdGlvbih0cnVlKS5pbmRleDtcbiAgICAgICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLnF1aWxsKCk/LmdldEJvdW5kcyhpbmRleCwgMSk7XG4gICAgICAgICAgdGhpcy5lbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bygpPy5zY3JvbGxUbygwLCAoYm91bmRzPy50b3AgfHwgMCkgLSAyMCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRbEVkaXRvckVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMucWxFZGl0b3JFbGVtZW50KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnFsRWRpdG9yRWxlbWVudCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnROb2RlIG9mIHRoaXMucXVpbGxFZGl0b3JFbCgpLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtZWRpdG9yJykpIHtcbiAgICAgIHRoaXMucWxFZGl0b3JFbGVtZW50LnNldChlbGVtZW50Tm9kZSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucWxFZGl0b3JFbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVVud2FudGVkUGFydChodG1sOiBzdHJpbmcpIHtcbiAgICBpZiAoIWh0bWwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxcbiAgICAgIC5yZXBsYWNlKC9eXFxzKjxwPjxicj48XFwvcD4vLCAnJylcbiAgICAgIC5yZXBsYWNlKC88ZGl2Pjxicj48XFwvZGl2Pi9naSwgJycpXG4gICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RIZWFkZXIoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5oZWFkZXJTZWxlY3RlZC5zZXQoZXZlbnQpO1xuICAgIHRoaXMuc2V0U3R5bGUoJ2hlYWRlcicsIGV2ZW50Py5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuYWRkRWRpdExpbmtDb21wb25lbnRSZWYoKSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZW1vdmUodGhpcy51cGxvYWRJbWFnZUNvbXBvbmVudFJlZigpKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lQ2FsY3VsYXRpb25Ub29sQmFyKCkpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRTY3JvbGxUb1NlbGVjdGlvbldpdGhFbGVtZW50U2Nyb2xsSGVpZ2h0QXV0bygpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICBAaWYgKGxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWwucmVxdWlyZWRcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbC5sYWJlbExlZnRcIiAvPlxuICB9XG4gIDxkaXYgI3dyYXBwZXJFZGl0b3JcbiAgICBbYXR0ci5oZWlnaHRBdXRvXT1cImhlaWdodEF1dG8oKVwiXG4gICAgW2F0dHIuaXNUb29sYmFyUG9zaXRpb25GaXhlZF09XCJpc1Rvb2xiYXJQb3NpdGlvbkZpeGVkKClcIlxuICAgIGNsYXNzPVwibGlicy11aS1xdWlsbC13cmFwcGVyIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZmxleCBmbGV4LWNvbFwiXG4gICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtWzRweF1dPVwibWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yQm9yZGVyKCkgJiYgIW9ubHlTaG93RXJyb3JCb3JkZXJJbkNvbnRlbnQoKVwiPlxuICAgIDxkaXYgI2VkaXRvclxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXF1aWxsXCJcbiAgICAgIFthdHRyLnNob3dFcnJvcl09XCJtZXNzYWdlRXJyb3IoKSAmJiBzaG93RXJyb3JCb3JkZXIoKSAmJiBvbmx5U2hvd0Vycm9yQm9yZGVySW5Db250ZW50KClcIlxuICAgICAgW2NsYXNzLiFoaWRkZW5dPVwiIWRpc3BsYXkoKVwiPlxuICAgICAgPGRpdiAjcXVpbGxPcHRpb25cbiAgICAgICAgW2NsYXNzLiF0b3AtWy05OTk5cHhdXT1cIiFpc1Nob3dUb29sQmFyKClcIlxuICAgICAgICBbY2xhc3MuIWxlZnQtWy05OTk5cHhdXT1cIiFpc1Nob3dUb29sQmFyKClcIlxuICAgICAgICBbc3R5bGVdPVwic3R5bGVzSW5jbHVkZVRvb2xiYXIoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cInJlYWRvbmx5KCkgfHwgbG9hZGluZ1VwbG9hZEltYWdlKClcIlxuICAgICAgICBjbGFzcz1cInt7IGlzVG9vbGJhclBvc2l0aW9uRml4ZWQoKSA/ICdmaXhlZCAhei0xMCB3LVs1MTBweF0gc2hhZG93LVswcHhfNHB4XzE2cHhfMHB4X3JnYmEoMCwyMCw1MSwwLjEwKV0gcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gbGlicy11aS1xdWlsbC10b29sYmFyLWFuaW1hdGlvbic6JycgfX0ge3sgY2xhc3NJbmNsdWRlVG9vbGJhcigpIH19IGgtWzQ0cHhdIHNocmluay0wXCJcbiAgICAgICAgW2NsYXNzLmJnLVsjZjhmOWZhXV09XCIhcmVhZG9ubHkoKSAmJiAhbG9hZGluZ1VwbG9hZEltYWdlKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KCkgfHwgbG9hZGluZ1VwbG9hZEltYWdlKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjcXVpbGxFZGl0b3JcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmVcbiAgICAgICAgW3RpbWVEZWxheUluaXRdPVwidGltZURlbGF5SW5pdCgpKzUwXCJcbiAgICAgICAgW21lbnRpb25Db25maWddPVwiZGF0YUNvbmZpZ01lbnRpb24oKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKSB8fCBsb2FkaW5nVXBsb2FkSW1hZ2UoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImxvYWRpbmdVcGxvYWRJbWFnZSgpXCJcbiAgICAgICAgKG91dFRvZ2dsZSk9XCJoYW5kbGVUb2dnbGVNZW50aW9uKCRldmVudClcIlxuICAgICAgICAob3V0SW5zZXJ0TWVudGlvbik9XCJoYW5kbGVySW5zZXJ0TWVudGlvbigkZXZlbnQpXCI+PC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICNxbEVkaXRvclNjcm9sbFxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbaWdub3JlSW5pdF09XCIhcWxFZGl0b3JFbGVtZW50KClcIlxuICAgICAgICBbZWxlbWVudFNjcm9sbF09XCJxbEVkaXRvckVsZW1lbnQoKVwiIC8+XG4gICAgPC9kaXY+XG4gICAgQGlmICh0ZW1wbGF0ZSgpOyBhcyB0ZW1wbGF0ZSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xhc3NJbmNsdWRlVGVtcGxhdGUoKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGxvYWRpbmdVcGxvYWRJbWFnZSgpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgc2hvd0Vycm9yTGFiZWwoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBsZWFkaW5nLW5vcm1hbCBtdC1bOHB4XVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjZmY1NDU0XSBsaWJzLXVpLWZvbnQtaDdyXCI+IHt7IG1lc3NhZ2VFcnJvcigpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0b29sYmFyPlxuICA8ZGl2IGNsYXNzPVwidG9vbGJhciBoLWZ1bGwgdy1mdWxsIHNocmluay0wXCJcbiAgICAjdG9vbGJhckl0ZW1zPlxuICAgIEBpZiAoZGlzcGxheVNrZWxldG9uKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgIHJvd3M6IFt7XG4gICAgICAgICAgaXRlbTp7Y2xhc3NJbmNsdWRlSXRlbTonIXJvdW5kZWQtbm9uZScsfVxuICAgICAgICB9XVxuICAgICAgfVwiIC8+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJxbC1mb3JtYXRzIGl0ZW1zLWNlbnRlciBweC1bMTZweF0gcHktWzRweF1cIj5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiB0b29sYmFyT3B0aW9uc0NvbmZpZygpOyB0cmFjayBvcHRpb24pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhb3B0aW9uLmRpc3BsYXlcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm9wdGlvbi5kaXNwbGF5XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgIEBpZiAoZGlzcGxheVNob3dNb3JlVG9vbGJhcigpKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJzaG93TW9yZUFjdGlvbigpID8gJ2J1dHRvbi1zZWNvbmRhcnknIDogJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVsxcHhdICFoLVsyMHB4XSBtbC1bOHB4XSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDaGFuZ2VTaG93TW9yZUFjdGlvbigkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEJ1aWxkIHRvb2xiYXIga2hpIGNsaWNrIHhlbSB0aMOqbS0tPlxuICAgICAgICA8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiIXNob3dNb3JlQWN0aW9uKClcIlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgYmctWyNmZmZmZmZdIHNoYWRvdy1bMHB4XzRweF8xNnB4XzBweF9yZ2JhKDAsMjAsNTEsMC4xMCldIHotWzFdIGZsZXggaXRlbXMtY2VudGVyIHBsLVs4cHhdIHByLVsxNnB4XSBweS1bNHB4XSByb3VuZGVkLVs4cHhdIHRvcC1bMzFweF0gcmlnaHQtWzBweF1cIj5cbiAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdG9vbGJhck9wdGlvbnNDb25maWcoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJvcHRpb24uZGlzcGxheSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJvcHRpb24uZGlzcGxheSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTtjb250ZXh0OntvcHRpb24sICRpbmRleCwgJGxhc3R9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZVxuICBsZXQtJGluZGV4PVwiJGluZGV4XCJcbiAgbGV0LSRsYXN0PVwiJGxhc3RcIlxuICBsZXQtb3B0aW9uPVwib3B0aW9uXCI+XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICd1bmRvJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OiAnaTE4bl91bmRvJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZG9cIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAncmVkbycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fcmVkbycsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1yZWRvXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctWzEzMnB4XSBoLWZ1bGwgcm91bmRlZC1bNHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiXG4gICAgICBbY2xhc3MuYmctd2hpdGVdPVwiIXJlYWRvbmx5KCkgJiYgIWxvYWRpbmdVcGxvYWRJbWFnZSgpXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0ZvbnQoKVwiXG4gICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjhcIlxuICAgICAgICBbekluZGV4XT1cIjEyNTBcIlxuICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEZvbnQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKGZvbnRTZWxlY3RlZCgpOyBhcyBmb250U2VsZWN0ZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcHktWzdweF0gbGlicy11aS1mb250LWg1ciBwbC1bMTZweF0gcHItWzQwcHhdXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInt6SW5kZXg6IHpJbmRleCgpfVwiPlxuICAgICAgICAgICAgICB7eyBsYWJlbEZvbnRTZWxlY3RlZENvbXB1dGVkKCkgfX1cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCBhYnNvbHV0ZSByaWdodC1bMTJweF0gdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdoZWFkZXInKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctWzEzOHB4XSBoLWZ1bGwgcm91bmRlZC1bNHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiXG4gICAgICBbY2xhc3MuYmctd2hpdGVdPVwiIXJlYWRvbmx5KCkgJiYgIWxvYWRpbmdVcGxvYWRJbWFnZSgpXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsUG9wb3ZlckZ1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0hlYWRlcigpXCJcbiAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiOFwiXG4gICAgICAgIFt6SW5kZXhdPVwiMTI1MFwiXG4gICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlU2VsZWN0SGVhZGVyKCRldmVudClcIj5cbiAgICAgICAgQGlmIChoZWFkZXJTZWxlY3RlZCgpOyBhcyBoZWFkZXJTZWxlY3RlZCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgcHktWzdweF0gbGlicy11aS1mb250LWg1ciBwbC1bMTZweF0gcHItWzQwcHhdIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7ekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgICAgICAge3sgbGFiZWxIZWFkZXJTZWxlY3RlZENvbXB1dGVkKCkgfX1cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCBhYnNvbHV0ZSByaWdodC1bMTJweF0gdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdmb250U2l6ZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtcGlja2VyIHt7IG9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJyB9fVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgWyhpdGVtKV09XCJzaXplXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ3ZhbHVlJ1wiXG4gICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjcyXCJcbiAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjhcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKSB8fCBsb2FkaW5nVXBsb2FkSW1hZ2UoKVwiXG4gICAgICAgIFtjbGFzc0NvbnRhaW5lcklucHV0XT1cIid3LVs3MnB4XSBoLVszMnB4XSdcIlxuICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICA8ZGl2IGNsYXNzPVwicWwtY29sb3IgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl90ZXh0X2NvbG9yJywgekluZGV4OnpJbmRleCgpfVwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc2VsZWN0X2NvbG9yIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgIFtkaXJlY3Rpb25dPVwiJ3RvcCdcIlxuICAgICAgICAgIFtleHRlcm5hbENvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2N1c3RvbU9wdGlvbnNdPVwie1xuICAgICAgICAgICAgc2hvd0FscGhhOnRydWUsXG5cbiAgICAgICAgICB9XCJcbiAgICAgICAgICBbYXBwbHlOb3ddPVwiZmFsc2VcIlxuICAgICAgICAgIChvdXRDb2xvckNoYW5nZSk9XCJzZXRTdHlsZSgnY29sb3InLCAkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tZWRpdG9yLWNvbG9yLXRleHQgbGlicy11aS1idXR0b25zLXNlbGVjdC1jb2xvciB0ZXh0LVsjNmE3MzgzXSB0ZXh0LVsxNnB4XSBob3Zlcjp0ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTEpXVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvcj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2JhY2tncm91bmQnKSB7XG4gICAgPGRpdiBjbGFzcz1cInFsLWJhY2tncm91bmQgcWwtcGlja2VyIHFsLWNvbG9yLXBpY2tlciAhZmxleCBpdGVtcy1jZW50ZXIge3sgb3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nIH19XCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9iYWNrZ3JvdW5kX2NvbG9yJywgekluZGV4OiB6SW5kZXgoKX1cIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLXNlbGVjdF9jb2xvciBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICBbZGlyZWN0aW9uXT1cIid0b3AnXCJcbiAgICAgICAgICBbZXh0ZXJuYWxDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFthcHBseU5vd109XCJmYWxzZVwiXG4gICAgICAgICAgW2N1c3RvbU9wdGlvbnNdPVwie1xuICAgICAgICAgICAgc2hvd0FscGhhOnRydWUsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dENvbG9yQ2hhbmdlKT1cInNldFN0eWxlKCdiYWNrZ3JvdW5kJywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWVkaXRvci1jb2xvci1iYWNrZ3JvdW5kIGxpYnMtdWktYnV0dG9ucy1zZWxlY3QtY29sb3IgdGV4dC1bIzZhNzM4M10gdGV4dC1bMTZweF0gaG92ZXI6dGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xKV1cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zZWxlY3RfY29sb3I+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdib2xkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ZvbnRfd2VpZ2h0X2JvbGQnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtYm9sZFwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdpdGFsaWMnKSB7XG4gICAgPGRpdiBbY2xhc3NdPVwib3B0aW9uLmNsYXNzSW5jbHVkZSB8fCAnbXgtWzhweF0nXCI+XG4gICAgICA8YnV0dG9uIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6J2kxOG5fZm9udF9zdHlsZV9pdGFsaWMnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtaXRhbGljXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3VuZGVybGluZScpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl90ZXh0X2RlY29yYXRpb25fdW5kZXJsaW5lJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXVuZGVybGluZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdzdHJpa2VUaHJvdWdoJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3RleHRfbGluZV90aHJvdWdoJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLXN0cmlrZVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdhZGp1c3QnKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSAhZmxleCBpdGVtcy1jZW50ZXIgcWwtYWxpZ24gcWwtcGlja2VyIHFsLWljb24tcGlja2VyICF3LW1heCB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2FkanVzdCcsIHpJbmRleDogekluZGV4KCl9XCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24gW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCJcbiAgICAgICAgICBbbGFiZWxQb3BvdmVyRnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RDb25maWdBbGlnbigpXCJcbiAgICAgICAgICBbbGlzdEhpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cIntpZ25vcmVBcnJvdzogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzMycHhdIG92ZXJmbG93LWhpZGRlbiAhcHktWzRweF0nLCBwb3NpdGlvbjoge21vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwfSwgcGFkZGluZ0xlZnRJdGVtOiBmYWxzZX1cIlxuICAgICAgICAgIFtsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiOFwiXG4gICAgICAgICAgW3pJbmRleF09XCIxMjUwXCJcbiAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZVNlbGVjdEFsaWduKCRldmVudClcIj5cbiAgICAgICAgICBAaWYgKGFsaWduU2VsZWN0ZWQoKTsgYXMgYWxpZ25TZWxlY3RlZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQWxpZ25TZWxlY3RlZENvbXB1dGVkKClcIj48L2k+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwIHRleHQtWyM2YTczODNdIHRleHQtWzE2cHhdIG1sLVs0cHhdXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2luZGVudEluY3JlYXNlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luZGVudF9pbmNyZWFzZScsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbmRlbnRcIlxuICAgICAgICB2YWx1ZT1cIisxXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2luZGVudERlY3JlYXNlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2luZGVudF9kZWNyZWFzZScsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1pbmRlbnRcIlxuICAgICAgICB2YWx1ZT1cIi0xXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2xpc3RCdWxsZXRlZCcpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9saXN0X2J1bGxldGVkJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWxpc3QgcWwtYnVsbGV0XCJcbiAgICAgICAgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGlzdE51bWJlcmVkJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2xpc3RfbnVtYmVyZWQnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtbGlzdCBxbC1vcmRlcmVkXCJcbiAgICAgICAgdmFsdWU9XCJvcmRlcmVkXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3BlcnNvbmFsaXplJyAmJiB0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZSgpOyBhcyB0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB7eyBvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XScgfX1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVRvb2xCYXJQZXJzb25hbGl6ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdibG9ja3F1b3RlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX3F1b3RlJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWJsb2NrcXVvdGVcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKG9wdGlvbi50eXBlID09PSAnbGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl9pbnNlcnRfbGluaycsIHpJbmRleDogekluZGV4KCl9XCJcbiAgICAgICAgY2xhc3M9XCJxbC1saW5rXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ3VuTGluaycpIHtcbiAgICA8ZGl2IFtjbGFzc109XCJvcHRpb24uY2xhc3NJbmNsdWRlIHx8ICdteC1bOHB4XSdcIj5cbiAgICAgIDxidXR0b24gTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDonaTE4bl91bmxpbmsnLCB6SW5kZXg6IHpJbmRleCgpfVwiXG4gICAgICAgIGNsYXNzPVwicWwtdW5MaW5rXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2ltYWdlJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGJ1dHRvbiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICBbY29uZmlnXT1cIntjb250ZW50OidpMThuX2ltYWdlJywgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICBjbGFzcz1cInFsLWltYWdlXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2Vtb2ppJykge1xuICAgIDxkaXYgW2NsYXNzXT1cIm9wdGlvbi5jbGFzc0luY2x1ZGUgfHwgJ214LVs4cHhdJ1wiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1lbW9qaSBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAob3V0RXZlbnRFbW9qaSk9XCJoYW5kbGVyQWRkRW1vamkoJGV2ZW50KVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtZW1vamlcIj48L2J1dHRvbj5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWVtb2ppPlxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAob3B0aW9uLnR5cGUgPT09ICdsaW5lJykge1xuICAgIDxkaXYgY2xhc3M9XCJ3LVsxcHhdIGgtWzE2cHhdIGxpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWxcIj48L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFttb2RlXT1cIidjbGljaydcIlxuICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgW2NvbmZpZ109XCJ7dGVtcGxhdGU6IHZpZXdMaW5rLCB3aGl0ZVRoZW1lOiB0cnVlLCBpZ25vcmVBcnJvdzogdHJ1ZSwgekluZGV4OiB6SW5kZXgoKX1cIlxuICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCJcbiAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50KVwiIC8+XG5cbjxuZy10ZW1wbGF0ZSAjdmlld0xpbms+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdIHJvdW5kZWQtWzhweF1cIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi13LTAgbGlicy11aS1mb250LWg1clwiXG4gICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgIFtjb25maWddPVwie2NvbnRlbnQ6IGxpbmsoKS51cmwsIHpJbmRleDogekluZGV4KCkrMX1cIj5cbiAgICAgIHt7IGxpbmsoKS51cmwgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZWRpdC1saW5lJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0KCRldmVudClcIiAvPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNlZTJkNDEnLFxuICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZWUyZDQxJyxcbiAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wIG1sLVsxMnB4XSdcIlxuICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWxpbmstYnJva2VuJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyVW5saW5rKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|