bways-report 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/esm2022/lib/core/config/bways-report-config.mjs +1 -1
- package/esm2022/lib/core/services/report-session-context.service.mjs +1 -44
- package/esm2022/lib/core/utils/report-parameter.util.mjs +14 -2
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +55 -2
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +9 -7
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +7 -14
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +11 -11
- package/esm2022/lib/features/designer/designer.component.mjs +3 -3
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +5 -3
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +4 -4
- package/fesm2022/bways-report.mjs +94 -81
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +3 -0
- package/lib/core/services/report-session-context.service.d.ts +0 -5
- package/lib/core/utils/report-parameter.util.d.ts +2 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +7 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +1 -0
- package/package.json +1 -1
- package/styles/theme.css +9 -12
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { REPORTING_CONFIG } from '../../../../core/tokens/reporting-config.token';
|
|
2
|
+
import { getFieldCaseInsensitive } from '../../../../core/utils/data-normalization.util';
|
|
1
3
|
import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, } from '@angular/core';
|
|
2
4
|
import { CommonModule } from '@angular/common';
|
|
3
5
|
import { FormsModule } from '@angular/forms';
|
|
@@ -9,6 +11,7 @@ import * as i0 from "@angular/core";
|
|
|
9
11
|
import * as i1 from "@angular/forms";
|
|
10
12
|
export class ParameterBindingEditorComponent {
|
|
11
13
|
sessionService = inject(ReportSessionContextService);
|
|
14
|
+
reportingConfig = inject(REPORTING_CONFIG, { optional: true });
|
|
12
15
|
param = input.required();
|
|
13
16
|
currentValue = input('');
|
|
14
17
|
allComponents = input([]);
|
|
@@ -17,7 +20,11 @@ export class ParameterBindingEditorComponent {
|
|
|
17
20
|
valueChange = output();
|
|
18
21
|
linkedFieldChange = output();
|
|
19
22
|
internalMode = signal(null);
|
|
20
|
-
sessionMatch = computed(() => this.sessionService.matchParameter(this.param().name));
|
|
23
|
+
sessionMatch = computed(() => this.reportingConfig?.autoParameter === false ? null : this.sessionService.matchParameter(this.param().name));
|
|
24
|
+
unavailableSessionBinding = computed(() => {
|
|
25
|
+
const token = parseParameterToken(String(this.currentValue() ?? ''));
|
|
26
|
+
return token?.field.startsWith('session.') && getFieldCaseInsensitive(this.sessionService.getCurrentSessionContext?.() ?? {}, token.field.slice(8)) == null;
|
|
27
|
+
});
|
|
21
28
|
friendlyLabel = computed(() => {
|
|
22
29
|
return this.param().friendlyLabel || humanizeIdentifier(this.param().name);
|
|
23
30
|
});
|
|
@@ -87,6 +94,14 @@ export class ParameterBindingEditorComponent {
|
|
|
87
94
|
? ['from', 'to'].map(part => ({ ...c, key: (c.key || c.id) + '.' + part, label: (c.label || c.key || c.id) + (part === 'from' ? ' ? From' : ' ? To') }))
|
|
88
95
|
: [c]);
|
|
89
96
|
});
|
|
97
|
+
selectedDropdownField = computed(() => this.compatibleControls().find(c => (c.key || c.id) === this.selectedControlKey() && c.type === 'dropdown'));
|
|
98
|
+
dropdownExample = computed(() => {
|
|
99
|
+
const options = this.selectedDropdownField()?.properties?.['options'];
|
|
100
|
+
if (!Array.isArray(options))
|
|
101
|
+
return null;
|
|
102
|
+
const first = options.find(option => option && typeof option === 'object' && 'key' in option);
|
|
103
|
+
return first ? { label: String(first.label ?? first.key), value: String(first.key) } : null;
|
|
104
|
+
});
|
|
90
105
|
dateFormats = PARAMETER_DATE_FORMATS;
|
|
91
106
|
selectedDateField = computed(() => this.compatibleControls().find(c => (c.key || c.id) === this.selectedControlKey() && (c.type === 'date' || c.type === 'date-range')));
|
|
92
107
|
selectedDateFormat = computed(() => parseParameterToken(String(this.currentValue()))?.dateFormat ?? 'yyyy-MM-dd');
|
|
@@ -335,6 +350,9 @@ export class ParameterBindingEditorComponent {
|
|
|
335
350
|
|
|
336
351
|
<!-- Mode-specific Input Controls -->
|
|
337
352
|
<div class="param-body">
|
|
353
|
+
@if (unavailableSessionBinding()) {
|
|
354
|
+
<div class="param-desc" role="status">This session value is unavailable and will not be sent. Configure a session source or choose Field / Fixed.</div>
|
|
355
|
+
}
|
|
338
356
|
<!-- 0. AUTO SESSION DERIVED -->
|
|
339
357
|
@if (activeMode() === 'session' && sessionMatch()) {
|
|
340
358
|
<div class="session-box">
|
|
@@ -377,6 +395,22 @@ export class ParameterBindingEditorComponent {
|
|
|
377
395
|
}
|
|
378
396
|
</select>
|
|
379
397
|
</div>
|
|
398
|
+
@if (selectedDropdownField(); as field) {
|
|
399
|
+
<div class="param-desc" role="note">
|
|
400
|
+
Sends the selected option's <strong>{{ field.dataSource?.valueField || 'key' }}</strong> value.
|
|
401
|
+
@if (field.dataSource?.displayField) {
|
|
402
|
+
<span>{{ field.dataSource?.displayField }} is the display label.</span>
|
|
403
|
+
}
|
|
404
|
+
@if (field.dataSource?.valueField || field.dataSource?.entityName || field.dataSource?.apiEndpoint || field.dataSource?.masterName) {
|
|
405
|
+
<span>Choose Value Field in the dropdown settings to change what is sent.</span>
|
|
406
|
+
} @else {
|
|
407
|
+
<span>Edit option keys in the dropdown settings to change what is sent.</span>
|
|
408
|
+
}
|
|
409
|
+
</div>
|
|
410
|
+
@if (dropdownExample(); as example) {
|
|
411
|
+
<div class="param-desc">Example: {{ example.label }} ? {{ example.value }}</div>
|
|
412
|
+
}
|
|
413
|
+
}
|
|
380
414
|
@if (selectedDateField()) {
|
|
381
415
|
<label class="param-desc" [for]="'date-format-' + currentComponentId() + '-' + param().name">Execution date format</label>
|
|
382
416
|
<select class="field-select" [id]="'date-format-' + currentComponentId() + '-' + param().name"
|
|
@@ -592,6 +626,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
592
626
|
|
|
593
627
|
<!-- Mode-specific Input Controls -->
|
|
594
628
|
<div class="param-body">
|
|
629
|
+
@if (unavailableSessionBinding()) {
|
|
630
|
+
<div class="param-desc" role="status">This session value is unavailable and will not be sent. Configure a session source or choose Field / Fixed.</div>
|
|
631
|
+
}
|
|
595
632
|
<!-- 0. AUTO SESSION DERIVED -->
|
|
596
633
|
@if (activeMode() === 'session' && sessionMatch()) {
|
|
597
634
|
<div class="session-box">
|
|
@@ -634,6 +671,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
634
671
|
}
|
|
635
672
|
</select>
|
|
636
673
|
</div>
|
|
674
|
+
@if (selectedDropdownField(); as field) {
|
|
675
|
+
<div class="param-desc" role="note">
|
|
676
|
+
Sends the selected option's <strong>{{ field.dataSource?.valueField || 'key' }}</strong> value.
|
|
677
|
+
@if (field.dataSource?.displayField) {
|
|
678
|
+
<span>{{ field.dataSource?.displayField }} is the display label.</span>
|
|
679
|
+
}
|
|
680
|
+
@if (field.dataSource?.valueField || field.dataSource?.entityName || field.dataSource?.apiEndpoint || field.dataSource?.masterName) {
|
|
681
|
+
<span>Choose Value Field in the dropdown settings to change what is sent.</span>
|
|
682
|
+
} @else {
|
|
683
|
+
<span>Edit option keys in the dropdown settings to change what is sent.</span>
|
|
684
|
+
}
|
|
685
|
+
</div>
|
|
686
|
+
@if (dropdownExample(); as example) {
|
|
687
|
+
<div class="param-desc">Example: {{ example.label }} ? {{ example.value }}</div>
|
|
688
|
+
}
|
|
689
|
+
}
|
|
637
690
|
@if (selectedDateField()) {
|
|
638
691
|
<label class="param-desc" [for]="'date-format-' + currentComponentId() + '-' + param().name">Execution date format</label>
|
|
639
692
|
<select class="field-select" [id]="'date-format-' + currentComponentId() + '-' + param().name"
|
|
@@ -767,4 +820,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
767
820
|
</div>
|
|
768
821
|
`, styles: [".property-group{display:flex;flex-direction:column;gap:12px}.group-title{font-size:.7rem;font-weight:700;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em;line-height:1.2}.field-row{display:flex;flex-direction:column;gap:4px}.field-label-row{display:flex;align-items:center;justify-content:space-between}.field-badge-val{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.field-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text, #0f172a)}.field-input,.field-select,.field-textarea{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);padding:6px 10px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all var(--rpt-transition-speed, .15s) ease}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,.field-input[type=number]::-webkit-inner-spin-button,.field-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number],.field-input[type=number]{-moz-appearance:textfield;appearance:textfield}.field-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 10px center;background-size:13px 13px;padding-right:28px;cursor:pointer}.field-input:focus,.field-select:focus,.field-textarea:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.checkbox-toggle{display:inline-flex;align-items:center;gap:8px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text, #0f172a);cursor:pointer}.preset-pill-group{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.preset-pill{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:.65rem;font-weight:600;color:#475569;cursor:pointer;transition:all .12s ease}.preset-pill:hover{background:#e2e8f0;color:#0f172a;border-color:#cbd5e1}.preset-pill-active{background:var(--rpt-color-primary, #2563eb)!important;color:#fff!important;border-color:var(--rpt-color-primary, #2563eb)!important}.preset-pill-reset{color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border-color:#bfdbfe}.preset-pill-reset:hover{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}\n", "input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;appearance:textfield}.param-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:7px;box-shadow:0 1px 2px #0f172a0a;box-sizing:border-box;width:100%;min-width:0;transition:border-color .15s ease,box-shadow .15s ease}.param-card:hover{border-color:#cbd5e1;box-shadow:0 2px 6px -1px #0f172a12}.param-card:focus-within{border-color:#93c5fd;box-shadow:0 0 0 1px #93c5fd,0 2px 6px -1px #2563eb14}.param-card.session-bound{background:#fcfdfa;border-color:#bbf7d0}.param-header{display:flex;flex-direction:column;gap:6px;width:100%;box-sizing:border-box}.param-title-wrap{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;min-width:0}.param-title-left{display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden}.param-label{font-size:.75rem;font-weight:700;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.param-tech-badge{font-size:.625rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;padding:1px 5px;border-radius:4px;background:#eff6ff;color:#2563eb;border:1px solid #dbeafe;white-space:nowrap}.param-title-right{display:flex;align-items:center;gap:4px;flex-shrink:0}.param-type-badge{font-size:.6rem;font-weight:500;padding:1px 5px;border-radius:4px;background:#f8fafc;color:#64748b;border:1px solid #e2e8f0;text-transform:capitalize;white-space:nowrap}.session-auto-badge{font-size:.6rem;font-weight:600;padding:1px 5px;border-radius:4px;background:#dcfce7;color:#15803d;border:1px solid #bbf7d0;white-space:nowrap}.required-warn-badge{font-size:.6rem;font-weight:600;padding:1px 5px;border-radius:4px;background:#fef2f2;color:#b91c1c;border:1px solid #fecaca;white-space:nowrap}.binding-mode-tabs{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;width:100%;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;padding:2px;gap:2px;box-sizing:border-box;height:26px}.mode-btn{flex:1 1 0px;min-width:0;height:20px;display:inline-flex;align-items:center;justify-content:center;gap:3px;padding:0 4px;font-size:.65rem;font-weight:500;background:transparent;color:#64748b;border:none;border-radius:4px;cursor:pointer;transition:all .12s ease;white-space:nowrap;-webkit-user-select:none;user-select:none}.mode-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mode-btn:hover{color:#0f172a;background:#ffffffb3}.mode-btn.active{background:#fff;color:var(--rpt-color-primary, #2563eb);font-weight:600;box-shadow:0 1px 2px #00000014}.param-body{display:flex;flex-direction:column;gap:5px;width:100%;min-width:0;box-sizing:border-box}.linker-row{display:flex;align-items:center;gap:6px;width:100%;min-width:0;box-sizing:border-box;position:relative}.linker-icon{color:#2563eb;position:absolute;left:8px;pointer-events:none;z-index:1}.linker-select{flex:1;width:100%;min-width:0;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:6px;background-color:#f8fafc;font-size:.75rem;color:#0f172a;padding:5px 8px 5px 26px!important;height:30px;transition:all .12s ease}.linker-select:focus{background-color:#fff;border-color:#2563eb;box-shadow:0 0 0 3px #2563eb26}.quick-chips-row{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-top:2px}.chips-label{font-size:.6rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.02em}.chip-btn{font-size:.625rem;font-weight:500;padding:2px 8px;border-radius:9999px;background:#f8fafc;color:#334155;border:1px solid #e2e8f0;cursor:pointer;transition:all .12s ease;line-height:1.2}.chip-btn:hover{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe}.chip-btn.active{background:#2563eb;color:#fff;border-color:#2563eb;font-weight:600}.input-wrap{width:100%;min-width:0;box-sizing:border-box}.field-input,.field-select{width:100%;box-sizing:border-box;height:30px;padding:5px 8px;font-size:.75rem;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;outline:none;transition:border-color .12s ease,box-shadow .12s ease}.field-input:focus,.field-select:focus{border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.textarea-input{height:auto;min-height:56px;resize:vertical;line-height:1.35;font-size:.72rem;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.session-box{display:flex;align-items:center;justify-content:space-between;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;padding:5px 8px;gap:6px;width:100%;box-sizing:border-box}.session-box-text{display:flex;align-items:center;gap:6px;font-size:.7rem;color:#166534;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-icon{color:#16a34a;flex-shrink:0}.session-box-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.session-val-tag{font-size:.65rem;color:#15803d;background:#dcfce7;padding:1px 6px;border-radius:4px;white-space:nowrap}.btn-session-override{background:#fff;border:1px solid #86efac;color:#15803d;font-size:.625rem;font-weight:600;padding:1px 5px;border-radius:4px;cursor:pointer;transition:all .12s ease}.btn-session-override:hover{background:#dcfce7}.empty-hint{font-size:.68rem;color:#94a3b8;font-style:italic}.toggle-switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:.75rem;color:#334155;font-weight:500}.monospace-input{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem}.param-desc{font-size:.65rem;color:#64748b;line-height:1.35}\n"] }]
|
|
769
822
|
}] });
|
|
770
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWJpbmRpbmctZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL2NvbXBvbmVudHMvcHJvcGVydHktZWRpdG9yL3BhcmFtZXRlci1iaW5kaW5nLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBdUIsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBeW1CekosTUFBTSxPQUFPLCtCQUErQjtJQUN6QixjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFFN0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQThCLENBQUM7SUFDckQsWUFBWSxHQUFHLEtBQUssQ0FBNEIsRUFBRSxDQUFDLENBQUM7SUFDcEQsYUFBYSxHQUFHLEtBQUssQ0FBOEIsRUFBRSxDQUFDLENBQUM7SUFDdkQsa0JBQWtCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLGNBQWMsR0FBRyxL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WUFBWSw4QkFBRSxXQUFXLDYxQ0FBRSxnQkFBZ0I7OzRGQWttQjFDLCtCQUErQjtrQkFybUIzQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLG1CQUNyQyx1QkFBdUIsQ0FBQyxNQUFNLFlBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNlBUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgaHVtYW5pemVJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFBBUkFNRVRFUl9EQVRFX0ZPUk1BVFMsIFBhcmFtZXRlckRhdGVGb3JtYXQsIHBhcnNlUGFyYW1ldGVyVG9rZW4sIHNhbml0aXplU3FsUGFyYW1MaXRlcmFsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXJCaW5kaW5nTW9kZSA9ICdzZXNzaW9uJyB8ICdjb250cm9sJyB8ICdmaXhlZCcgfCAnY29udGV4dCcgfCAnY3VzdG9tJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXBhcmFtZXRlci1iaW5kaW5nLWVkaXRvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBScHRJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWVkaXRvci5jb21tb24uY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhcmFtLWNhcmRcIiBbY2xhc3Muc2Vzc2lvbi1ib3VuZF09XCJpc0F1dG9TZXNzaW9uRGVyaXZlZCgpXCI+XG4gICAgICA8IS0tIENhcmQgSGVhZGVyOiBUaXRsZSwgVGVjaG5pY2FsIE5hbWUsIFR5cGUsIGFuZCBCYWRnZXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFyYW0taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXJhbS10aXRsZS13cmFwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLXRpdGxlLWxlZnRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFyYW0tbGFiZWxcIiBbdGl0bGVdPVwicGFyYW0oKS5uYW1lXCI+e3sgZnJpZW5kbHlMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXJhbS10ZWNoLWJhZGdlXCI+e3sgcGFyYW0oKS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJhbS10aXRsZS1yaWdodFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXJhbS10eXBlLWJhZGdlXCI+e3sgZGlzcGxheVR5cGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaXNBdXRvU2Vzc2lvbkRlcml2ZWQoKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlc3Npb24tYXV0by1iYWRnZVwiPkF1dG8gU2Vzc2lvbjwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKHBhcmFtKCkucmVxdWlyZWQgJiYgIWhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC13YXJuLWJhZGdlXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQmluZGluZyBNb2RlIFNlZ21lbnRlZCBTZWxlY3RvciAoVWx0cmEtY29tcGFjdCwgc2luZ2xlIGhvcml6b250YWwgdHJhY2spIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmluZGluZy1tb2RlLXRhYnNcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICAgIEBpZiAoc2Vzc2lvbk1hdGNoKCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZU1vZGUoKSA9PT0gJ3Nlc3Npb24nXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ3Nlc3Npb24nKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQm91bmQgdG8gc2Vzc2lvbiB1c2VyL2JyYW5jaCBjb250ZXh0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJ1c2VyXCIgW3NpemVdPVwiMTBcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5TZXNzaW9uPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZU1vZGUoKSA9PT0gJ2NvbnRyb2wnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdjb250cm9sJylcIlxuICAgICAgICAgICAgdGl0bGU9XCJMaW5rIHZhbHVlIHRvIGEgY2FudmFzIGZvcm0gZmllbGQgKGUuZy4gRHJvcGRvd24sIERhdGVQaWNrZXIpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpbmtcIiBbc2l6ZV09XCIxMFwiIC8+XG4gICAgICAgICAgICA8c3Bhbj5GaWVsZDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVNb2RlKCkgPT09ICdmaXhlZCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ2ZpeGVkJylcIlxuICAgICAgICAgICAgdGl0bGU9XCJUeXBlIGEgbWFudWFsIG9yIGZpeGVkIHZhbHVlIChlLmcuIDEwMSwgJ0FETUlOJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjEwXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkZpeGVkPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZU1vZGUoKSA9PT0gJ2NvbnRleHQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdjb250ZXh0JylcIlxuICAgICAgICAgICAgdGl0bGU9XCJVc2Ugc3lzdGVtIGRhdGUgcHJlc2V0cyAoVG9kYXksIE1vbnRoIFN0YXJ0LCBldGMuKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjbG9ja1wiIFtzaXplXT1cIjEwXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPlByZXNldDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICBAaWYgKGlzQWR2YW5jZWRNb2RlKCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9kZS1idG5cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZU1vZGUoKSA9PT0gJ2N1c3RvbSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TW9kZSgnY3VzdG9tJylcIlxuICAgICAgICAgICAgICB0aXRsZT1cIk1hbnVhbCB0ZW1wbGF0ZSBleHByZXNzaW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjb2RlXCIgW3NpemVdPVwiMTBcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj5FeHByPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIE1vZGUtc3BlY2lmaWMgSW5wdXQgQ29udHJvbHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tYm9keVwiPlxuICAgICAgICA8IS0tIDAuIEFVVE8gU0VTU0lPTiBERVJJVkVEIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ3Nlc3Npb24nICYmIHNlc3Npb25NYXRjaCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1ib3gtdGV4dFwiPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInVzZXJcIiBbc2l6ZV09XCIxM1wiIGNsYXNzPVwic2Vzc2lvbi1pY29uXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgRGVyaXZlZCBmcm9tIDxzdHJvbmc+e3sgc2Vzc2lvbk1hdGNoKCk/LnNlc3Npb25LZXkgfX08L3N0cm9uZz4gKHt7IHNlc3Npb25NYXRjaCgpPy5mcmllbmRseUxhYmVsIH19KVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLWJveC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXZhbC10YWdcIj5cbiAgICAgICAgICAgICAgICBDdXJyZW50OiA8c3Ryb25nPnt7IHNlc3Npb25NYXRjaCgpPy52YWx1ZSA/PyAnKG5vbmUpJyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXNlc3Npb24tb3ZlcnJpZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdmaXhlZCcpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIk92ZXJyaWRlIHdpdGggbWFudWFsIHZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE92ZXJyaWRlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDEuIEZPUk0gQ09OVFJPTCBMSU5LRVIgLS0+XG4gICAgICAgIEBpZiAoYWN0aXZlTW9kZSgpID09PSAnY29udHJvbCcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlua2VyLXJvd1wiPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJsaW5rXCIgW3NpemVdPVwiMTNcIiBjbGFzcz1cImxpbmtlci1pY29uXCIgLz5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1zZWxlY3QgbGlua2VyLXNlbGVjdFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQ29udHJvbEtleSgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db250cm9sU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj4tLSBDaG9vc2UgRm9ybSBGaWVsZCBvbiBDYW52YXMgLS08L29wdGlvbj5cbiAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29tcGF0aWJsZUNvbnRyb2xzKCk7IHRyYWNrIGZpZWxkLmtleSB8fCBmaWVsZC5pZCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImZpZWxkLmtleSB8fCBmaWVsZC5pZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQua2V5IH19ICh7eyBmaWVsZC50eXBlIH19KVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkRGF0ZUZpZWxkKCkpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBhcmFtLWRlc2NcIiBbZm9yXT1cIidkYXRlLWZvcm1hdC0nICsgY3VycmVudENvbXBvbmVudElkKCkgKyAnLScgKyBwYXJhbSgpLm5hbWVcIj5FeGVjdXRpb24gZGF0ZSBmb3JtYXQ8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZpZWxkLXNlbGVjdFwiIFtpZF09XCInZGF0ZS1mb3JtYXQtJyArIGN1cnJlbnRDb21wb25lbnRJZCgpICsgJy0nICsgcGFyYW0oKS5uYW1lXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREYXRlRm9ybWF0KClcIiAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVGb3JtYXRTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGZvcm1hdCBvZiBkYXRlRm9ybWF0czsgdHJhY2sgZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZm9ybWF0XCI+e3sgZm9ybWF0IH19e3sgZm9ybWF0ID09PSAneXl5eU1NZGQnID8gJyAoZS5nLiAyMDI2MTEwNCknIDogJycgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tZGVzY1wiPkFwcGxpZWQgd2hlbiBleGVjdXRpbmc7IHRoZSBkYXRlIHBpY2tlciBrZWVwcyBpdHMgbm9ybWFsIGRpc3BsYXkuPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXNlbGVjdGVkQ29udHJvbEtleSgpICYmIGNvbXBhdGlibGVDb250cm9scygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWhpbnRcIj5ObyBpbnB1dCBmaWVsZHMgb24gY2FudmFzLiBBZGQgYSBkcm9wZG93biwgZGF0ZSBwaWNrZXIsIG9yIGlucHV0IGZpcnN0LjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gMi4gRU5URVIgRklYRUQgVkFMVUUgLS0+XG4gICAgICAgIEBpZiAoYWN0aXZlTW9kZSgpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgQHN3aXRjaCAocGFyYW0oKS5kYXRhVHlwZSkge1xuICAgICAgICAgICAgQGNhc2UgKCdib29sZWFuJykge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b2dnbGUtc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYm9vbGVhbkZpeGVkVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkJvb2xlYW5DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtdGV4dFwiPnt7IGJvb2xlYW5GaXhlZFZhbHVlKCkgPyAnQWN0aXZlIC8gWWVzICgxKScgOiAnSW5hY3RpdmUgLyBObyAoMCknIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXQgbW9ub3NwYWNlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbnVtYmVyIChlLmcuIDEsIDAsIDExKVwiXG4gICAgICAgICAgICAgICAgICAod2hlZWwpPVwiJGFueSgkZXZlbnQudGFyZ2V0KS5ibHVyKClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3d1cCk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY3VycmVudFZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgKHdoZWVsKT1cIiRhbnkoJGV2ZW50LnRhcmdldCkuYmx1cigpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvbmdUZXh0SW5wdXQoKSkge1xuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXQgdGV4dGFyZWEtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFNRTCBjb2x1bW4gbmFtZXMgb3IgZXhwcmVzc2lvbi4uLlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHZhbHVlIChlLmcuIDEwMSwgdGV4dCwgY29kZSlcIlxuICAgICAgICAgICAgICAgICAgICAod2hlZWwpPVwiJGFueSgkZXZlbnQudGFyZ2V0KS5ibHVyKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50VmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocGFyYW1RdWlja1N1Z2dlc3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWNoaXBzLXJvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBzLWxhYmVsXCI+U3VnZ2VzdGlvbnM6PC9zcGFuPlxuICAgICAgICAgICAgICBAZm9yIChjaGlwIG9mIHBhcmFtUXVpY2tTdWdnZXN0aW9ucygpOyB0cmFjayBjaGlwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXAtYnRuXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNDdXJyZW50VmFsdWUoY2hpcC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoY2hpcC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNoaXAubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAzLiBTWVNURU0gREFURSBQUkVTRVRTIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ2NvbnRleHQnKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZENvbnRleHRLZXkoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29udGV4dFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+LS0gQ2hvb3NlIERhdGUgLyBDb250ZXh0IFByZXNldCAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQudG9kYXl7eyAnfX0nIH19XCI+VG9kYXkncyBEYXRlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyAne3snIH19Y29udGV4dC5zdGFydE9mTW9udGh7eyAnfX0nIH19XCI+Rmlyc3QgRGF5IG9mIEN1cnJlbnQgTW9udGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInt7ICd7eycgfX1jb250ZXh0LmVuZE9mTW9udGh7eyAnfX0nIH19XCI+TGFzdCBEYXkgb2YgQ3VycmVudCBNb250aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQuc3RhcnRPZlllYXJ7eyAnfX0nIH19XCI+Rmlyc3QgRGF5IG9mIEN1cnJlbnQgWWVhcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQueWVzdGVyZGF5e3sgJ319JyB9fVwiPlllc3RlcmRheTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQuYnJhbmNoSWR7eyAnfX0nIH19XCI+Q3VycmVudCBVc2VyIEJyYW5jaDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQudXNlcklke3sgJ319JyB9fVwiPkN1cnJlbnQgVXNlciBJRDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDQuIENVU1RPTSBFWFBSRVNTSU9OIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4ge3sgJ3t7JyB9fWZvcm0uZHJvcGRvd25GaWVsZCA/PyAxe3sgJ319JyB9fVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHBhcmFtKCkuZGVzY3JpcHRpb24gJiYgaXNBZHZhbmNlZE1vZGUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tZGVzY1wiPnt7IHBhcmFtKCkuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICBpbnB1dFt0eXBlPW51bWJlcl0ge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgfVxuICAgIC5wYXJhbS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogN3B4O1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wNCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTUwbXMgZWFzZSwgYm94LXNoYWRvdyAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZDpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6ICNjYmQ1ZTE7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggLTFweCByZ2JhKDE1LCAyMywgNDIsIDAuMDcpO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZDpmb2N1cy13aXRoaW4ge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTNjNWZkO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM5M2M1ZmQsIDAgMnB4IDZweCAtMXB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZC5zZXNzaW9uLWJvdW5kIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmY2ZkZmE7XG4gICAgICBib3JkZXItY29sb3I6ICNiYmY3ZDA7XG4gICAgfVxuICAgIC5wYXJhbS1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnBhcmFtLXRpdGxlLXdyYXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucGFyYW0tdGl0bGUtbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLnBhcmFtLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgfVxuICAgIC5wYXJhbS10ZWNoLWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTtcbiAgICAgIHBhZGRpbmc6IDFweCA1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGJlYWZlO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLnBhcmFtLXRpdGxlLXJpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnBhcmFtLXR5cGUtYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjZyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgcGFkZGluZzogMXB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5zZXNzaW9uLWF1dG8tYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjZyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMXB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmY3ZDA7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAucmVxdWlyZWQtd2Fybi1iYWRnZSB7XG4gICAgICBmb250LXNpemU6IDAuNnJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAxcHggNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZlZjJmMjtcbiAgICAgIGNvbG9yOiAjYjkxYzFjO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZlY2FjYTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5iaW5kaW5nLW1vZGUtdGFicyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBwYWRkaW5nOiAycHg7XG4gICAgICBnYXA6IDJweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgfVxuICAgIC5tb2RlLWJ0biB7XG4gICAgICBmbGV4OiAxIDEgMHB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDNweDtcbiAgICAgIHBhZGRpbmc6IDAgNHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gICAgLm1vZGUtYnRuIHNwYW4ge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLm1vZGUtYnRuOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIH1cbiAgICAubW9kZS1idG4uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIH1cbiAgICAucGFyYW0tYm9keSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAubGlua2VyLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICAubGlua2VyLWljb24ge1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiA4cHg7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICAgIC5saW5rZXItc2VsZWN0IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgcGFkZGluZzogNXB4IDhweCA1cHggMjZweCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5saW5rZXItc2VsZWN0OmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4xNSk7XG4gICAgfVxuICAgIC5xdWljay1jaGlwcy1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICB9XG4gICAgLmNoaXBzLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gICAgfVxuICAgIC5jaGlwLWJ0biB7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgY29sb3I6ICMzMzQxNTU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIH1cbiAgICAuY2hpcC1idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWQ0ZWQ4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjYmZkYmZlO1xuICAgIH1cbiAgICAuY2hpcC1idG4uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICMyNTYzZWI7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzI1NjNlYjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC5pbnB1dC13cmFwIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmZpZWxkLWlucHV0LCAuZmllbGQtc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIHBhZGRpbmc6IDVweCA4cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5maWVsZC1pbnB1dDpmb2N1cywgLmZpZWxkLXNlbGVjdDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4xMik7XG4gICAgfVxuICAgIC50ZXh0YXJlYS1pbnB1dCB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICBtaW4taGVpZ2h0OiA1NnB4O1xuICAgICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAgIH1cbiAgICAuc2Vzc2lvbi1ib3gge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZjBmZGY0O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JiZjdkMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIHBhZGRpbmc6IDVweCA4cHg7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnNlc3Npb24tYm94LXRleHQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgICAgY29sb3I6ICMxNjY1MzQ7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAuc2Vzc2lvbi1pY29uIHtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5zZXNzaW9uLWJveC1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnNlc3Npb24tdmFsLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBwYWRkaW5nOiAxcHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLmJ0bi1zZXNzaW9uLW92ZXJyaWRlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjODZlZmFjO1xuICAgICAgY29sb3I6ICMxNTgwM2Q7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHBhZGRpbmc6IDFweCA1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1zZXNzaW9uLW92ZXJyaWRlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgfVxuICAgIC5lbXB0eS1oaW50IHtcbiAgICAgIGZvbnQtc2l6ZTogMC42OHJlbTtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cbiAgICAudG9nZ2xlLXN3aXRjaCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG4gICAgLm1vbm9zcGFjZS1pbnB1dCB7XG4gICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG4gICAgLnBhcmFtLWRlc2Mge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICB9XG4gIGBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJCaW5kaW5nRWRpdG9yQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBhcmFtID0gaW5wdXQucmVxdWlyZWQ8UHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGE+KCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRWYWx1ZSA9IGlucHV0PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KCcnKTtcbiAgcmVhZG9ubHkgYWxsQ29tcG9uZW50cyA9IGlucHV0PFJlcG9ydENvbXBvbmVudERlZmluaXRpb25bXT4oW10pO1xuICByZWFkb25seSBjdXJyZW50Q29tcG9uZW50SWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNBZHZhbmNlZE1vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlua2VkRmllbGRDaGFuZ2UgPSBvdXRwdXQ8eyBwYXJhbU5hbWU6IHN0cmluZzsgZmllbGRLZXk6IHN0cmluZzsgaXNMaW5rZWQ6IGJvb2xlYW4gfT4oKTtcblxuICByZWFkb25seSBpbnRlcm5hbE1vZGUgPSBzaWduYWw8UGFyYW1ldGVyQmluZGluZ01vZGUgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBzZXNzaW9uTWF0Y2ggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlc3Npb25TZXJ2aWNlLm1hdGNoUGFyYW1ldGVyKHRoaXMucGFyYW0oKS5uYW1lKSk7XG5cbiAgcmVhZG9ubHkgZnJpZW5kbHlMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbSgpLmZyaWVuZGx5TGFiZWwgfHwgaHVtYW5pemVJZGVudGlmaWVyKHRoaXMucGFyYW0oKS5uYW1lKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheVR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnBhcmFtKCkuZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gJ1llcyAvIE5vJztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAnTnVtYmVyJztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gJ0RhdGUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdUZXh0JztcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzQ3VycmVudFZhbHVlID0gKHZhbDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmN1cnJlbnRWYWx1ZSgpKSA9PT0gU3RyaW5nKHZhbCk7XG4gIH07XG5cbiAgcmVhZG9ubHkgcGFyYW1RdWlja1N1Z2dlc3Rpb25zID0gY29tcHV0ZWQ8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH1bXT4oKCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcmFtKCkubmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15ALywgJycpO1xuICAgIGlmIChuYW1lID09PSAnaW50dHJhbm9yZHVlZGF0ZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcwOiBUcmFuc2FjdGlvbiBEYXRlJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJzE6IER1ZSBEYXRlJywgdmFsdWU6IDEgfSxcbiAgICAgICAgeyBsYWJlbDogJzI6IEdJUiBEYXRlJywgdmFsdWU6IDIgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChuYW1lID09PSAnaW50b25seWR1ZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcwOiBBbGwgQmlsbHMnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnMTogT25seSBEdWUgQmlsbHMnLCB2YWx1ZTogMSB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdpbnR2YWx1ZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcxMTogQ3VzdG9tZXIgTGVkZ2VyJywgdmFsdWU6IDExIH0sXG4gICAgICAgIHsgbGFiZWw6ICcxMjogU3VwcGxpZXIgTGVkZ2VyJywgdmFsdWU6IDEyIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gJ2NocmNvbXBhbnlpZCcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcxMDE6IERlZmF1bHQgQ28nLCB2YWx1ZTogJzEwMScgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChuYW1lID09PSAnY2hyY29tcHVuaXRpZCcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcxMDE6IFVuaXQgMTAxJywgdmFsdWU6ICcxMDEnIH0sXG4gICAgICAgIHsgbGFiZWw6ICcxMDEsMTAyLDEwMzogQWxsIFVuaXRzJywgdmFsdWU6ICcxMDEsMTAyLDEwMycgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChuYW1lID09PSAnY2hyc3ViYWNub2xpc3QnKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7IGxhYmVsOiAnMDogQWxsIEFjY291bnRzJywgdmFsdWU6ICcwJyB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdpbnR3aXRoY2l0eScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcwOiBObycsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICcxOiBZZXMnLCB2YWx1ZTogMSB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICByZWFkb25seSBjb21wYXRpYmxlQ29udHJvbHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsQ29tcG9uZW50cygpLmZpbHRlcihjID0+IGMuaWQgIT09IHRoaXMuY3VycmVudENvbXBvbmVudElkKCkgJiYgISFjLmtleSAmJiBbJ2lucHV0JywgJ251bWJlcicsICdkYXRlJywgJ2RhdGUtcmFuZ2UnLCAnZHJvcGRvd24nLCAncmFkaW8nLCAnY2hlY2tib3gnXS5pbmNsdWRlcyhjLnR5cGUpKVxuICAgICAgLmZsYXRNYXAoYyA9PiBjLnR5cGUgPT09ICdkYXRlLXJhbmdlJ1xuICAgICAgICA/IFsnZnJvbScsICd0byddLm1hcChwYXJ0ID0+ICh7IC4uLmMsIGtleTogKGMua2V5IHx8IGMuaWQpICsgJy4nICsgcGFydCwgbGFiZWw6IChjLmxhYmVsIHx8IGMua2V5IHx8IGMuaWQpICsgKHBhcnQgPT09ICdmcm9tJyA/ICcgPyBGcm9tJyA6ICcgPyBUbycpIH0pKVxuICAgICAgICA6IFtjXSk7XG4gIH0pO1xuICByZWFkb25seSBkYXRlRm9ybWF0cyA9IFBBUkFNRVRFUl9EQVRFX0ZPUk1BVFM7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZUZpZWxkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wYXRpYmxlQ29udHJvbHMoKS5maW5kKGMgPT4gKGMua2V5IHx8IGMuaWQpID09PSB0aGlzLnNlbGVjdGVkQ29udHJvbEtleSgpICYmIChjLnR5cGUgPT09ICdkYXRlJyB8fCBjLnR5cGUgPT09ICdkYXRlLXJhbmdlJykpKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlRm9ybWF0ID0gY29tcHV0ZWQoKCkgPT4gcGFyc2VQYXJhbWV0ZXJUb2tlbihTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUoKSkpPy5kYXRlRm9ybWF0ID8/ICd5eXl5LU1NLWRkJyk7XG5cbiAgb25EYXRlRm9ybWF0U2VsZWN0ZWQoZm9ybWF0OiBQYXJhbWV0ZXJEYXRlRm9ybWF0KTogdm9pZCB7XG4gICAgaWYgKCFQQVJBTUVURVJfREFURV9GT1JNQVRTLmluY2x1ZGVzKGZvcm1hdCkgfHwgIXRoaXMuc2VsZWN0ZWREYXRlRmllbGQoKSkgcmV0dXJuO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCgne3snICsgdGhpcy5zZWxlY3RlZENvbnRyb2xLZXkoKSArICcgfCBkYXRlOicgKyBmb3JtYXQgKyAnfX0nKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGhhc1ZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHYgPSB0aGlzLmN1cnJlbnRWYWx1ZSgpO1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbCAmJiB2ICE9PSAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlTW9kZSA9IGNvbXB1dGVkPFBhcmFtZXRlckJpbmRpbmdNb2RlPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuaW50ZXJuYWxNb2RlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsTW9kZSgpITtcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUoKSA/PyAnJyk7XG5cbiAgICAvLyBJZiBtYXRjaGVzIHNlc3Npb24gY29udGV4dCBhbmQgaGFzIG5vIGV4cGxpY2l0IG1hbnVhbCBvdmVycmlkZSwgZGVmYXVsdCB0byBzZXNzaW9uXG4gICAgaWYgKHRoaXMuc2Vzc2lvbk1hdGNoKCkgIT09IG51bGwgJiYgKCF2YWwgfHwgdmFsLnN0YXJ0c1dpdGgoJ3t7c2Vzc2lvbi4nKSkpIHtcbiAgICAgIHJldHVybiAnc2Vzc2lvbic7XG4gICAgfVxuXG4gICAgaWYgKHZhbC5zdGFydHNXaXRoKCd7e2NvbnRleHQuJykpIHtcbiAgICAgIHJldHVybiAnY29udGV4dCc7XG4gICAgfVxuXG4gICAgaWYgKHZhbC5zdGFydHNXaXRoKCd7e3Nlc3Npb24uJykpIHtcbiAgICAgIHJldHVybiAnc2Vzc2lvbic7XG4gICAgfVxuXG4gICAgaWYgKHZhbC5zdGFydHNXaXRoKCd7eycpICYmIHZhbC5lbmRzV2l0aCgnfX0nKSkge1xuICAgICAgY29uc3QgaW5uZXIgPSBwYXJzZVBhcmFtZXRlclRva2VuKHZhbCk/LmZpZWxkO1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmNvbXBhdGlibGVDb250cm9scygpLmZpbmQoKGMpID0+IChjLmtleSB8fCBjLmlkKSA9PT0gaW5uZXIpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiAnY29udHJvbCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ2N1c3RvbSc7XG4gICAgfVxuXG4gICAgY29uc3QgcGxhaW5NYXRjaCA9IHRoaXMuY29tcGF0aWJsZUNvbnRyb2xzKCkuZmluZCgoYykgPT4gKGMua2V5IHx8IGMuaWQpID09PSB2YWwpO1xuICAgIGlmIChwbGFpbk1hdGNoKSB7XG4gICAgICByZXR1cm4gJ2NvbnRyb2wnO1xuICAgIH1cblxuICAgIGlmICghdmFsKSB7XG4gICAgICAvLyBTbWFydCBkZWZhdWx0OiBudW1lcmljIG9yIGZsYWcgcGFyYW1ldGVycyBkZWZhdWx0IHRvICdmaXhlZCcgKEVudGVyIFZhbHVlKVxuICAgICAgY29uc3QgbmFtZSA9IHRoaXMucGFyYW0oKS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGFyYW0oKS5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgbmFtZS5zdGFydHNXaXRoKCdpbnQnKSB8fFxuICAgICAgICBuYW1lLmluY2x1ZGVzKCdmbGFnJykgfHxcbiAgICAgICAgbmFtZS5pbmNsdWRlcygndHlwZScpIHx8XG4gICAgICAgIG5hbWUuaW5jbHVkZXMoJ29ubHknKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAnZml4ZWQnO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgYXJlIGNvbXBhdGlibGUgZm9ybSBmaWVsZHMgb24gY2FudmFzLCBkZWZhdWx0IHRvIGNvbnRyb2wsIG90aGVyd2lzZSBmaXhlZFxuICAgICAgcmV0dXJuIHRoaXMuY29tcGF0aWJsZUNvbnRyb2xzKCkubGVuZ3RoID4gMCA/ICdjb250cm9sJyA6ICdmaXhlZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdmaXhlZCc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzQXV0b1Nlc3Npb25EZXJpdmVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25NYXRjaCgpICE9PSBudWxsICYmIHRoaXMuYWN0aXZlTW9kZSgpID09PSAnc2Vzc2lvbic7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29udHJvbEtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSBTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUoKSA/PyAnJyk7XG4gICAgaWYgKHZhbC5zdGFydHNXaXRoKCd7eycpICYmIHZhbC5lbmRzV2l0aCgnfX0nKSkge1xuICAgICAgcmV0dXJuIHBhcnNlUGFyYW1ldGVyVG9rZW4odmFsKT8uZmllbGQgPz8gJyc7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29udGV4dEtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YWwgPSBTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUoKSA/PyAnJyk7XG4gICAgaWYgKHZhbC5zdGFydHNXaXRoKCd7e2NvbnRleHQuJykpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYm9vbGVhbkZpeGVkVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdiA9IHRoaXMuY3VycmVudFZhbHVlKCk7XG4gICAgcmV0dXJuIHYgPT09IHRydWUgfHwgdiA9PT0gJ3RydWUnIHx8IHYgPT09IDEgfHwgdiA9PT0gJzEnO1xuICB9KTtcblxuICByZWFkb25seSBpc0xvbmdUZXh0SW5wdXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkgPz8gJycpO1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcmFtKCkubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoXG4gICAgICB2YWwubGVuZ3RoID4gNTAgfHxcbiAgICAgIG5hbWUuaW5jbHVkZXMoJ2NvbHVtbm5hbWVzJykgfHxcbiAgICAgIG5hbWUuaW5jbHVkZXMoJ2ZpbHRlcicpIHx8XG4gICAgICBuYW1lLmluY2x1ZGVzKCdzcWwnKSB8fFxuICAgICAgbmFtZS5pbmNsdWRlcygncXVlcnknKVxuICAgICk7XG4gIH0pO1xuXG4gIHNldE1vZGUobW9kZTogUGFyYW1ldGVyQmluZGluZ01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybmFsTW9kZS5zZXQobW9kZSk7XG4gICAgaWYgKG1vZGUgPT09ICdzZXNzaW9uJykge1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnNlc3Npb25NYXRjaCgpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChge3tzZXNzaW9uLiR7bWF0Y2guc2Vzc2lvbktleX19fWApO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5rZWRGaWVsZENoYW5nZS5lbWl0KHtcbiAgICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgICAgZmllbGRLZXk6ICcnLFxuICAgICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRWYWx1ZSgpO1xuICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09ICcnICYmICFTdHJpbmcoY3VycmVudCkuc3RhcnRzV2l0aCgne3snKSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY3VycmVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFyYW0oKS5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMucGFyYW0oKS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4odGhpcy5wYXJhbSgpLmRlZmF1bHRWYWx1ZSkgOiB0cnVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZGVmKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbSgpLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLnBhcmFtKCkuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBOdW1iZXIodGhpcy5wYXJhbSgpLmRlZmF1bHRWYWx1ZSkgOiAwO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZGVmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCgnJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYXJhbU5hbWU6IHRoaXMucGFyYW0oKS5uYW1lLFxuICAgICAgICBmaWVsZEtleTogJycsXG4gICAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ29udHJvbFNlbGVjdGVkKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGtleSkge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbXBhdGlibGVDb250cm9scygpLmZpbmQoYyA9PiAoYy5rZXkgfHwgYy5pZCkgPT09IGtleSk7XG4gICAgICBjb25zdCBpc0RhdGUgPSBmaWVsZD8udHlwZSA9PT0gJ2RhdGUnIHx8IGZpZWxkPy50eXBlID09PSAnZGF0ZS1yYW5nZSc7XG4gICAgICBjb25zdCBleHByID0gaXNEYXRlID8gJ3t7JyArIGtleSArICcgfCBkYXRlOnl5eXktTU0tZGR9fScgOiAne3snICsga2V5ICsgJ319JztcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChleHByKTtcbiAgICAgIHRoaXMubGlua2VkRmllbGRDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhcmFtTmFtZTogdGhpcy5wYXJhbSgpLm5hbWUsXG4gICAgICAgIGZpZWxkS2V5OiBrZXksXG4gICAgICAgIGlzTGlua2VkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCgnJyk7XG4gICAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYXJhbU5hbWU6IHRoaXMucGFyYW0oKS5uYW1lLFxuICAgICAgICBmaWVsZEtleTogJycsXG4gICAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQm9vbGVhbkNoYW5nZWQoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjaGVja2VkKTtcbiAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgIGZpZWxkS2V5OiAnJyxcbiAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRml4ZWRWYWx1ZUNoYW5nZWQodmFsOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY2xlYW5WYWwgPSBzYW5pdGl6ZVNxbFBhcmFtTGl0ZXJhbCh2YWwpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjbGVhblZhbCBhcyBzdHJpbmcgfCBudW1iZXIpO1xuICAgIHRoaXMubGlua2VkRmllbGRDaGFuZ2UuZW1pdCh7XG4gICAgICBwYXJhbU5hbWU6IHRoaXMucGFyYW0oKS5uYW1lLFxuICAgICAgZmllbGRLZXk6ICcnLFxuICAgICAgaXNMaW5rZWQ6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgb25Db250ZXh0U2VsZWN0ZWQoY3R4S2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY3R4S2V5KTtcbiAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgIGZpZWxkS2V5OiAnJyxcbiAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
823
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWJpbmRpbmctZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL2NvbXBvbmVudHMvcHJvcGVydHktZWRpdG9yL3BhcmFtZXRlci1iaW5kaW5nLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBdUIsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBNG5CekosTUFBTSxPQUFPLCtCQUErQjtJQUN6QixjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDckQsZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLEtBQUssR0FBRyxLQUFLLENB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NUIsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQS9SVSwrQkFBK0I7NEZBQS9CLCtCQUErQiwyM0JBbG5CaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ1JULDhzUUFuUlMsWUFBWSw4QkFBRSxXQUFXLDYxQ0FBRSxnQkFBZ0I7OzRGQXFuQjFDLCtCQUErQjtrQkF4bkIzQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLG1CQUNyQyx1QkFBdUIsQ0FBQyxNQUFNLFlBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdSVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUEFSQU1FVEVSX0RBVEVfRk9STUFUUywgUGFyYW1ldGVyRGF0ZUZvcm1hdCwgcGFyc2VQYXJhbWV0ZXJUb2tlbiwgc2FuaXRpemVTcWxQYXJhbUxpdGVyYWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckJpbmRpbmdNb2RlID0gJ3Nlc3Npb24nIHwgJ2NvbnRyb2wnIHwgJ2ZpeGVkJyB8ICdjb250ZXh0JyB8ICdjdXN0b20nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtcGFyYW1ldGVyLWJpbmRpbmctZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJwdEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvcGVydHktZWRpdG9yLmNvbW1vbi5jc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFyYW0tY2FyZFwiIFtjbGFzcy5zZXNzaW9uLWJvdW5kXT1cImlzQXV0b1Nlc3Npb25EZXJpdmVkKClcIj5cbiAgICAgIDwhLS0gQ2FyZCBIZWFkZXI6IFRpdGxlLCBUZWNobmljYWwgTmFtZSwgVHlwZSwgYW5kIEJhZGdlcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYXJhbS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLXRpdGxlLXdyYXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tdGl0bGUtbGVmdFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYXJhbS1sYWJlbFwiIFt0aXRsZV09XCJwYXJhbSgpLm5hbWVcIj57eyBmcmllbmRseUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhcmFtLXRlY2gtYmFkZ2VcIj57eyBwYXJhbSgpLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLXRpdGxlLXJpZ2h0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhcmFtLXR5cGUtYmFkZ2VcIj57eyBkaXNwbGF5VHlwZSgpIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChpc0F1dG9TZXNzaW9uRGVyaXZlZCgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vzc2lvbi1hdXRvLWJhZGdlXCI+QXV0byBTZXNzaW9uPC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAocGFyYW0oKS5yZXF1aXJlZCAmJiAhaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLXdhcm4tYmFkZ2VcIj5SZXF1aXJlZDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBCaW5kaW5nIE1vZGUgU2VnbWVudGVkIFNlbGVjdG9yIChVbHRyYS1jb21wYWN0LCBzaW5nbGUgaG9yaXpvbnRhbCB0cmFjaykgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiaW5kaW5nLW1vZGUtdGFic1wiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICAgICAgQGlmIChzZXNzaW9uTWF0Y2goKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlTW9kZSgpID09PSAnc2Vzc2lvbidcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TW9kZSgnc2Vzc2lvbicpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJCb3VuZCB0byBzZXNzaW9uIHVzZXIvYnJhbmNoIGNvbnRleHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInVzZXJcIiBbc2l6ZV09XCIxMFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPlNlc3Npb248L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vZGUtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlTW9kZSgpID09PSAnY29udHJvbCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ2NvbnRyb2wnKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkxpbmsgdmFsdWUgdG8gYSBjYW52YXMgZm9ybSBmaWVsZCAoZS5nLiBEcm9wZG93biwgRGF0ZVBpY2tlcilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGlua1wiIFtzaXplXT1cIjEwXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkZpZWxkPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZU1vZGUoKSA9PT0gJ2ZpeGVkJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0TW9kZSgnZml4ZWQnKVwiXG4gICAgICAgICAgICB0aXRsZT1cIlR5cGUgYSBtYW51YWwgb3IgZml4ZWQgdmFsdWUgKGUuZy4gMTAxLCAnQURNSU4nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTBcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Rml4ZWQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vZGUtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlTW9kZSgpID09PSAnY29udGV4dCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldE1vZGUoJ2NvbnRleHQnKVwiXG4gICAgICAgICAgICB0aXRsZT1cIlVzZSBzeXN0ZW0gZGF0ZSBwcmVzZXRzIChUb2RheSwgTW9udGggU3RhcnQsIGV0Yy4pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNsb2NrXCIgW3NpemVdPVwiMTBcIiAvPlxuICAgICAgICAgICAgPHNwYW4+UHJlc2V0PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIEBpZiAoaXNBZHZhbmNlZE1vZGUoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtb2RlLWJ0blwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlTW9kZSgpID09PSAnY3VzdG9tJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdjdXN0b20nKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiTWFudWFsIHRlbXBsYXRlIGV4cHJlc3Npb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxMFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkV4cHI8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTW9kZS1zcGVjaWZpYyBJbnB1dCBDb250cm9scyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYXJhbS1ib2R5XCI+XG4gICAgICAgIEBpZiAodW5hdmFpbGFibGVTZXNzaW9uQmluZGluZygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLWRlc2NcIiByb2xlPVwic3RhdHVzXCI+VGhpcyBzZXNzaW9uIHZhbHVlIGlzIHVuYXZhaWxhYmxlIGFuZCB3aWxsIG5vdCBiZSBzZW50LiBDb25maWd1cmUgYSBzZXNzaW9uIHNvdXJjZSBvciBjaG9vc2UgRmllbGQgLyBGaXhlZC48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIDAuIEFVVE8gU0VTU0lPTiBERVJJVkVEIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ3Nlc3Npb24nICYmIHNlc3Npb25NYXRjaCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlc3Npb24tYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vzc2lvbi1ib3gtdGV4dFwiPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInVzZXJcIiBbc2l6ZV09XCIxM1wiIGNsYXNzPVwic2Vzc2lvbi1pY29uXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgRGVyaXZlZCBmcm9tIDxzdHJvbmc+e3sgc2Vzc2lvbk1hdGNoKCk/LnNlc3Npb25LZXkgfX08L3N0cm9uZz4gKHt7IHNlc3Npb25NYXRjaCgpPy5mcmllbmRseUxhYmVsIH19KVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLWJveC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXNzaW9uLXZhbC10YWdcIj5cbiAgICAgICAgICAgICAgICBDdXJyZW50OiA8c3Ryb25nPnt7IHNlc3Npb25NYXRjaCgpPy52YWx1ZSA/PyAnKG5vbmUpJyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXNlc3Npb24tb3ZlcnJpZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKCdmaXhlZCcpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIk92ZXJyaWRlIHdpdGggbWFudWFsIHZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE92ZXJyaWRlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDEuIEZPUk0gQ09OVFJPTCBMSU5LRVIgLS0+XG4gICAgICAgIEBpZiAoYWN0aXZlTW9kZSgpID09PSAnY29udHJvbCcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlua2VyLXJvd1wiPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJsaW5rXCIgW3NpemVdPVwiMTNcIiBjbGFzcz1cImxpbmtlci1pY29uXCIgLz5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1zZWxlY3QgbGlua2VyLXNlbGVjdFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQ29udHJvbEtleSgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Db250cm9sU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj4tLSBDaG9vc2UgRm9ybSBGaWVsZCBvbiBDYW52YXMgLS08L29wdGlvbj5cbiAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgY29tcGF0aWJsZUNvbnRyb2xzKCk7IHRyYWNrIGZpZWxkLmtleSB8fCBmaWVsZC5pZCkge1xuICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImZpZWxkLmtleSB8fCBmaWVsZC5pZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfHwgZmllbGQua2V5IH19ICh7eyBmaWVsZC50eXBlIH19KVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkRHJvcGRvd25GaWVsZCgpOyBhcyBmaWVsZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLWRlc2NcIiByb2xlPVwibm90ZVwiPlxuICAgICAgICAgICAgICBTZW5kcyB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgPHN0cm9uZz57eyBmaWVsZC5kYXRhU291cmNlPy52YWx1ZUZpZWxkIHx8ICdrZXknIH19PC9zdHJvbmc+IHZhbHVlLlxuICAgICAgICAgICAgICBAaWYgKGZpZWxkLmRhdGFTb3VyY2U/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpZWxkLmRhdGFTb3VyY2U/LmRpc3BsYXlGaWVsZCB9fSBpcyB0aGUgZGlzcGxheSBsYWJlbC48L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChmaWVsZC5kYXRhU291cmNlPy52YWx1ZUZpZWxkIHx8IGZpZWxkLmRhdGFTb3VyY2U/LmVudGl0eU5hbWUgfHwgZmllbGQuZGF0YVNvdXJjZT8uYXBpRW5kcG9pbnQgfHwgZmllbGQuZGF0YVNvdXJjZT8ubWFzdGVyTmFtZSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPkNob29zZSBWYWx1ZSBGaWVsZCBpbiB0aGUgZHJvcGRvd24gc2V0dGluZ3MgdG8gY2hhbmdlIHdoYXQgaXMgc2VudC48L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuPkVkaXQgb3B0aW9uIGtleXMgaW4gdGhlIGRyb3Bkb3duIHNldHRpbmdzIHRvIGNoYW5nZSB3aGF0IGlzIHNlbnQuPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZHJvcGRvd25FeGFtcGxlKCk7IGFzIGV4YW1wbGUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcmFtLWRlc2NcIj5FeGFtcGxlOiB7eyBleGFtcGxlLmxhYmVsIH19ID8ge3sgZXhhbXBsZS52YWx1ZSB9fTwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkRGF0ZUZpZWxkKCkpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBhcmFtLWRlc2NcIiBbZm9yXT1cIidkYXRlLWZvcm1hdC0nICsgY3VycmVudENvbXBvbmVudElkKCkgKyAnLScgKyBwYXJhbSgpLm5hbWVcIj5FeGVjdXRpb24gZGF0ZSBmb3JtYXQ8L2xhYmVsPlxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZpZWxkLXNlbGVjdFwiIFtpZF09XCInZGF0ZS1mb3JtYXQtJyArIGN1cnJlbnRDb21wb25lbnRJZCgpICsgJy0nICsgcGFyYW0oKS5uYW1lXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWREYXRlRm9ybWF0KClcIiAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVGb3JtYXRTZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGZvcm1hdCBvZiBkYXRlRm9ybWF0czsgdHJhY2sgZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZm9ybWF0XCI+e3sgZm9ybWF0IH19e3sgZm9ybWF0ID09PSAneXl5eU1NZGQnID8gJyAoZS5nLiAyMDI2MTEwNCknIDogJycgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tZGVzY1wiPkFwcGxpZWQgd2hlbiBleGVjdXRpbmc7IHRoZSBkYXRlIHBpY2tlciBrZWVwcyBpdHMgbm9ybWFsIGRpc3BsYXkuPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXNlbGVjdGVkQ29udHJvbEtleSgpICYmIGNvbXBhdGlibGVDb250cm9scygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWhpbnRcIj5ObyBpbnB1dCBmaWVsZHMgb24gY2FudmFzLiBBZGQgYSBkcm9wZG93biwgZGF0ZSBwaWNrZXIsIG9yIGlucHV0IGZpcnN0LjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gMi4gRU5URVIgRklYRUQgVkFMVUUgLS0+XG4gICAgICAgIEBpZiAoYWN0aXZlTW9kZSgpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgQHN3aXRjaCAocGFyYW0oKS5kYXRhVHlwZSkge1xuICAgICAgICAgICAgQGNhc2UgKCdib29sZWFuJykge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b2dnbGUtc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYm9vbGVhbkZpeGVkVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkJvb2xlYW5DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtdGV4dFwiPnt7IGJvb2xlYW5GaXhlZFZhbHVlKCkgPyAnQWN0aXZlIC8gWWVzICgxKScgOiAnSW5hY3RpdmUgLyBObyAoMCknIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXQgbW9ub3NwYWNlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbnVtYmVyIChlLmcuIDEsIDAsIDExKVwiXG4gICAgICAgICAgICAgICAgICAod2hlZWwpPVwiJGFueSgkZXZlbnQudGFyZ2V0KS5ibHVyKClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3d1cCk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY3VycmVudFZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgKHdoZWVsKT1cIiRhbnkoJGV2ZW50LnRhcmdldCkuYmx1cigpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvbmdUZXh0SW5wdXQoKSkge1xuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXQgdGV4dGFyZWEtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFNRTCBjb2x1bW4gbmFtZXMgb3IgZXhwcmVzc2lvbi4uLlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHZhbHVlIChlLmcuIDEwMSwgdGV4dCwgY29kZSlcIlxuICAgICAgICAgICAgICAgICAgICAod2hlZWwpPVwiJGFueSgkZXZlbnQudGFyZ2V0KS5ibHVyKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50VmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocGFyYW1RdWlja1N1Z2dlc3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWNoaXBzLXJvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBzLWxhYmVsXCI+U3VnZ2VzdGlvbnM6PC9zcGFuPlxuICAgICAgICAgICAgICBAZm9yIChjaGlwIG9mIHBhcmFtUXVpY2tTdWdnZXN0aW9ucygpOyB0cmFjayBjaGlwLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXAtYnRuXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNDdXJyZW50VmFsdWUoY2hpcC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRml4ZWRWYWx1ZUNoYW5nZWQoY2hpcC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNoaXAubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAzLiBTWVNURU0gREFURSBQUkVTRVRTIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ2NvbnRleHQnKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1zZWxlY3RcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZENvbnRleHRLZXkoKVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29udGV4dFNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+LS0gQ2hvb3NlIERhdGUgLyBDb250ZXh0IFByZXNldCAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQudG9kYXl7eyAnfX0nIH19XCI+VG9kYXkncyBEYXRlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyAne3snIH19Y29udGV4dC5zdGFydE9mTW9udGh7eyAnfX0nIH19XCI+Rmlyc3QgRGF5IG9mIEN1cnJlbnQgTW9udGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInt7ICd7eycgfX1jb250ZXh0LmVuZE9mTW9udGh7eyAnfX0nIH19XCI+TGFzdCBEYXkgb2YgQ3VycmVudCBNb250aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQuc3RhcnRPZlllYXJ7eyAnfX0nIH19XCI+Rmlyc3QgRGF5IG9mIEN1cnJlbnQgWWVhcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQueWVzdGVyZGF5e3sgJ319JyB9fVwiPlllc3RlcmRheTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQuYnJhbmNoSWR7eyAnfX0nIH19XCI+Q3VycmVudCBVc2VyIEJyYW5jaDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgJ3t7JyB9fWNvbnRleHQudXNlcklke3sgJ319JyB9fVwiPkN1cnJlbnQgVXNlciBJRDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDQuIENVU1RPTSBFWFBSRVNTSU9OIC0tPlxuICAgICAgICBAaWYgKGFjdGl2ZU1vZGUoKSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1pbnB1dCBtb25vc3BhY2UtaW5wdXRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4ge3sgJ3t7JyB9fWZvcm0uZHJvcGRvd25GaWVsZCA/PyAxe3sgJ319JyB9fVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaXhlZFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHBhcmFtKCkuZGVzY3JpcHRpb24gJiYgaXNBZHZhbmNlZE1vZGUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGFyYW0tZGVzY1wiPnt7IHBhcmFtKCkuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICBpbnB1dFt0eXBlPW51bWJlcl0ge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgICBhcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gICAgfVxuICAgIC5wYXJhbS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogN3B4O1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wNCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTUwbXMgZWFzZSwgYm94LXNoYWRvdyAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZDpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6ICNjYmQ1ZTE7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggLTFweCByZ2JhKDE1LCAyMywgNDIsIDAuMDcpO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZDpmb2N1cy13aXRoaW4ge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTNjNWZkO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM5M2M1ZmQsIDAgMnB4IDZweCAtMXB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpO1xuICAgIH1cbiAgICAucGFyYW0tY2FyZC5zZXNzaW9uLWJvdW5kIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmY2ZkZmE7XG4gICAgICBib3JkZXItY29sb3I6ICNiYmY3ZDA7XG4gICAgfVxuICAgIC5wYXJhbS1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnBhcmFtLXRpdGxlLXdyYXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucGFyYW0tdGl0bGUtbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLnBhcmFtLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgfVxuICAgIC5wYXJhbS10ZWNoLWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTtcbiAgICAgIHBhZGRpbmc6IDFweCA1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGJlYWZlO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLnBhcmFtLXRpdGxlLXJpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnBhcmFtLXR5cGUtYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjZyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgcGFkZGluZzogMXB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5zZXNzaW9uLWF1dG8tYmFkZ2Uge1xuICAgICAgZm9udC1zaXplOiAwLjZyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMXB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmY3ZDA7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAucmVxdWlyZWQtd2Fybi1iYWRnZSB7XG4gICAgICBmb250LXNpemU6IDAuNnJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAxcHggNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZlZjJmMjtcbiAgICAgIGNvbG9yOiAjYjkxYzFjO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZlY2FjYTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICAgIC5iaW5kaW5nLW1vZGUtdGFicyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBwYWRkaW5nOiAycHg7XG4gICAgICBnYXA6IDJweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgfVxuICAgIC5tb2RlLWJ0biB7XG4gICAgICBmbGV4OiAxIDEgMHB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDNweDtcbiAgICAgIHBhZGRpbmc6IDAgNHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB9XG4gICAgLm1vZGUtYnRuIHNwYW4ge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLm1vZGUtYnRuOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIH1cbiAgICAubW9kZS1idG4uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIH1cbiAgICAucGFyYW0tYm9keSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAubGlua2VyLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICAubGlua2VyLWljb24ge1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiA4cHg7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICAgIC5saW5rZXItc2VsZWN0IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgcGFkZGluZzogNXB4IDhweCA1cHggMjZweCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5saW5rZXItc2VsZWN0OmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4xNSk7XG4gICAgfVxuICAgIC5xdWljay1jaGlwcy1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICB9XG4gICAgLmNoaXBzLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gICAgfVxuICAgIC5jaGlwLWJ0biB7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgY29sb3I6ICMzMzQxNTU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIH1cbiAgICAuY2hpcC1idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWQ0ZWQ4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjYmZkYmZlO1xuICAgIH1cbiAgICAuY2hpcC1idG4uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICMyNTYzZWI7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzI1NjNlYjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC5pbnB1dC13cmFwIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmZpZWxkLWlucHV0LCAuZmllbGQtc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIHBhZGRpbmc6IDVweCA4cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5maWVsZC1pbnB1dDpmb2N1cywgLmZpZWxkLXNlbGVjdDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4xMik7XG4gICAgfVxuICAgIC50ZXh0YXJlYS1pbnB1dCB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICBtaW4taGVpZ2h0OiA1NnB4O1xuICAgICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAgIH1cbiAgICAuc2Vzc2lvbi1ib3gge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZjBmZGY0O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JiZjdkMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIHBhZGRpbmc6IDVweCA4cHg7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnNlc3Npb24tYm94LXRleHQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgICAgY29sb3I6ICMxNjY1MzQ7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAuc2Vzc2lvbi1pY29uIHtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5zZXNzaW9uLWJveC1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnNlc3Npb24tdmFsLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBwYWRkaW5nOiAxcHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gICAgLmJ0bi1zZXNzaW9uLW92ZXJyaWRlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjODZlZmFjO1xuICAgICAgY29sb3I6ICMxNTgwM2Q7XG4gICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHBhZGRpbmc6IDFweCA1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1zZXNzaW9uLW92ZXJyaWRlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgfVxuICAgIC5lbXB0eS1oaW50IHtcbiAgICAgIGZvbnQtc2l6ZTogMC42OHJlbTtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cbiAgICAudG9nZ2xlLXN3aXRjaCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG4gICAgLm1vbm9zcGFjZS1pbnB1dCB7XG4gICAgICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG4gICAgLnBhcmFtLWRlc2Mge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICB9XG4gIGBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJCaW5kaW5nRWRpdG9yQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IHBhcmFtID0gaW5wdXQucmVxdWlyZWQ8UHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGE+KCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRWYWx1ZSA9IGlucHV0PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KCcnKTtcbiAgcmVhZG9ubHkgYWxsQ29tcG9uZW50cyA9IGlucHV0PFJlcG9ydENvbXBvbmVudERlZmluaXRpb25bXT4oW10pO1xuICByZWFkb25seSBjdXJyZW50Q29tcG9uZW50SWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNBZHZhbmNlZE1vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlua2VkRmllbGRDaGFuZ2UgPSBvdXRwdXQ8eyBwYXJhbU5hbWU6IHN0cmluZzsgZmllbGRLZXk6IHN0cmluZzsgaXNMaW5rZWQ6IGJvb2xlYW4gfT4oKTtcblxuICByZWFkb25seSBpbnRlcm5hbE1vZGUgPSBzaWduYWw8UGFyYW1ldGVyQmluZGluZ01vZGUgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBzZXNzaW9uTWF0Y2ggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlcG9ydGluZ0NvbmZpZz8uYXV0b1BhcmFtZXRlciA9PT0gZmFsc2UgPyBudWxsIDogdGhpcy5zZXNzaW9uU2VydmljZS5tYXRjaFBhcmFtZXRlcih0aGlzLnBhcmFtKCkubmFtZSkpO1xuICByZWFkb25seSB1bmF2YWlsYWJsZVNlc3Npb25CaW5kaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gcGFyc2VQYXJhbWV0ZXJUb2tlbihTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUoKSA/PyAnJykpO1xuICAgIHJldHVybiB0b2tlbj8uZmllbGQuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSAmJiBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZSh0aGlzLnNlc3Npb25TZXJ2aWNlLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dD8uKCkgPz8ge30sIHRva2VuLmZpZWxkLnNsaWNlKDgpKSA9PSBudWxsO1xuICB9KTtcblxuICByZWFkb25seSBmcmllbmRseUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtKCkuZnJpZW5kbHlMYWJlbCB8fCBodW1hbml6ZUlkZW50aWZpZXIodGhpcy5wYXJhbSgpLm5hbWUpO1xuICB9KTtcblxuICByZWFkb25seSBkaXNwbGF5VHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMucGFyYW0oKS5kYXRhVHlwZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnWWVzIC8gTm8nO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdOdW1iZXInO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiAnRGF0ZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ1RleHQnO1xuICAgIH1cbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNDdXJyZW50VmFsdWUgPSAodmFsOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkpID09PSBTdHJpbmcodmFsKTtcbiAgfTtcblxuICByZWFkb25seSBwYXJhbVF1aWNrU3VnZ2VzdGlvbnMgPSBjb21wdXRlZDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfVtdPigoKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMucGFyYW0oKS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgaWYgKG5hbWUgPT09ICdpbnR0cmFub3JkdWVkYXRlJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzA6IFRyYW5zYWN0aW9uIERhdGUnLCB2YWx1ZTogMCB9LFxuICAgICAgICB7IGxhYmVsOiAnMTogRHVlIERhdGUnLCB2YWx1ZTogMSB9LFxuICAgICAgICB7IGxhYmVsOiAnMjogR0lSIERhdGUnLCB2YWx1ZTogMiB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdpbnRvbmx5ZHVlJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzA6IEFsbCBCaWxscycsIHZhbHVlOiAwIH0sXG4gICAgICAgIHsgbGFiZWw6ICcxOiBPbmx5IER1ZSBCaWxscycsIHZhbHVlOiAxIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gJ2ludHZhbHVlJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzExOiBDdXN0b21lciBMZWRnZXInLCB2YWx1ZTogMTEgfSxcbiAgICAgICAgeyBsYWJlbDogJzEyOiBTdXBwbGllciBMZWRnZXInLCB2YWx1ZTogMTIgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChuYW1lID09PSAnY2hyY29tcGFueWlkJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzEwMTogRGVmYXVsdCBDbycsIHZhbHVlOiAnMTAxJyB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdjaHJjb21wdW5pdGlkJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzEwMTogVW5pdCAxMDEnLCB2YWx1ZTogJzEwMScgfSxcbiAgICAgICAgeyBsYWJlbDogJzEwMSwxMDIsMTAzOiBBbGwgVW5pdHMnLCB2YWx1ZTogJzEwMSwxMDIsMTAzJyB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09ICdjaHJzdWJhY25vbGlzdCcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgbGFiZWw6ICcwOiBBbGwgQWNjb3VudHMnLCB2YWx1ZTogJzAnIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gJ2ludHdpdGhjaXR5Jykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBsYWJlbDogJzA6IE5vJywgdmFsdWU6IDAgfSxcbiAgICAgICAgeyBsYWJlbDogJzE6IFllcycsIHZhbHVlOiAxIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbXBhdGlibGVDb250cm9scyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxDb21wb25lbnRzKCkuZmlsdGVyKGMgPT4gYy5pZCAhPT0gdGhpcy5jdXJyZW50Q29tcG9uZW50SWQoKSAmJiAhIWMua2V5ICYmIFsnaW5wdXQnLCAnbnVtYmVyJywgJ2RhdGUnLCAnZGF0ZS1yYW5nZScsICdkcm9wZG93bicsICdyYWRpbycsICdjaGVja2JveCddLmluY2x1ZGVzKGMudHlwZSkpXG4gICAgICAuZmxhdE1hcChjID0+IGMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UnXG4gICAgICAgID8gWydmcm9tJywgJ3RvJ10ubWFwKHBhcnQgPT4gKHsgLi4uYywga2V5OiAoYy5rZXkgfHwgYy5pZCkgKyAnLicgKyBwYXJ0LCBsYWJlbDogKGMubGFiZWwgfHwgYy5rZXkgfHwgYy5pZCkgKyAocGFydCA9PT0gJ2Zyb20nID8gJyA/IEZyb20nIDogJyA/IFRvJykgfSkpXG4gICAgICAgIDogW2NdKTtcbiAgfSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRHJvcGRvd25GaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcGF0aWJsZUNvbnRyb2xzKCkuZmluZChjID0+IChjLmtleSB8fCBjLmlkKSA9PT0gdGhpcy5zZWxlY3RlZENvbnRyb2xLZXkoKSAmJiBjLnR5cGUgPT09ICdkcm9wZG93bicpKTtcbiAgcmVhZG9ubHkgZHJvcGRvd25FeGFtcGxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkRHJvcGRvd25GaWVsZCgpPy5wcm9wZXJ0aWVzPy5bJ29wdGlvbnMnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGZpcnN0ID0gb3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24gJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgJ2tleScgaW4gb3B0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPyB7IGxhYmVsOiBTdHJpbmcoZmlyc3QubGFiZWwgPz8gZmlyc3Qua2V5KSwgdmFsdWU6IFN0cmluZyhmaXJzdC5rZXkpIH0gOiBudWxsO1xuICB9KTtcbiAgcmVhZG9ubHkgZGF0ZUZvcm1hdHMgPSBQQVJBTUVURVJfREFURV9GT1JNQVRTO1xuICByZWFkb25seSBzZWxlY3RlZERhdGVGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcGF0aWJsZUNvbnRyb2xzKCkuZmluZChjID0+IChjLmtleSB8fCBjLmlkKSA9PT0gdGhpcy5zZWxlY3RlZENvbnRyb2xLZXkoKSAmJiAoYy50eXBlID09PSAnZGF0ZScgfHwgYy50eXBlID09PSAnZGF0ZS1yYW5nZScpKSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZUZvcm1hdCA9IGNvbXB1dGVkKCgpID0+IHBhcnNlUGFyYW1ldGVyVG9rZW4oU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkpKT8uZGF0ZUZvcm1hdCA/PyAneXl5eS1NTS1kZCcpO1xuXG4gIG9uRGF0ZUZvcm1hdFNlbGVjdGVkKGZvcm1hdDogUGFyYW1ldGVyRGF0ZUZvcm1hdCk6IHZvaWQge1xuICAgIGlmICghUEFSQU1FVEVSX0RBVEVfRk9STUFUUy5pbmNsdWRlcyhmb3JtYXQpIHx8ICF0aGlzLnNlbGVjdGVkRGF0ZUZpZWxkKCkpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoJ3t7JyArIHRoaXMuc2VsZWN0ZWRDb250cm9sS2V5KCkgKyAnIHwgZGF0ZTonICsgZm9ybWF0ICsgJ319Jyk7XG4gIH1cblxuICByZWFkb25seSBoYXNWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2ID0gdGhpcy5jdXJyZW50VmFsdWUoKTtcbiAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU1vZGUgPSBjb21wdXRlZDxQYXJhbWV0ZXJCaW5kaW5nTW9kZT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmludGVybmFsTW9kZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE1vZGUoKSE7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsID0gU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkgPz8gJycpO1xuXG4gICAgLy8gSWYgbWF0Y2hlcyBzZXNzaW9uIGNvbnRleHQgYW5kIGhhcyBubyBleHBsaWNpdCBtYW51YWwgb3ZlcnJpZGUsIGRlZmF1bHQgdG8gc2Vzc2lvblxuICAgIGlmICh0aGlzLnNlc3Npb25NYXRjaCgpICE9PSBudWxsICYmICghdmFsIHx8IHZhbC5zdGFydHNXaXRoKCd7e3Nlc3Npb24uJykpKSB7XG4gICAgICByZXR1cm4gJ3Nlc3Npb24nO1xuICAgIH1cblxuICAgIGlmICh2YWwuc3RhcnRzV2l0aCgne3tjb250ZXh0LicpKSB7XG4gICAgICByZXR1cm4gJ2NvbnRleHQnO1xuICAgIH1cblxuICAgIGlmICh2YWwuc3RhcnRzV2l0aCgne3tzZXNzaW9uLicpKSB7XG4gICAgICByZXR1cm4gJ3Nlc3Npb24nO1xuICAgIH1cblxuICAgIGlmICh2YWwuc3RhcnRzV2l0aCgne3snKSAmJiB2YWwuZW5kc1dpdGgoJ319JykpIHtcbiAgICAgIGNvbnN0IGlubmVyID0gcGFyc2VQYXJhbWV0ZXJUb2tlbih2YWwpPy5maWVsZDtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5jb21wYXRpYmxlQ29udHJvbHMoKS5maW5kKChjKSA9PiAoYy5rZXkgfHwgYy5pZCkgPT09IGlubmVyKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICByZXR1cm4gJ2NvbnRyb2wnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdjdXN0b20nO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYWluTWF0Y2ggPSB0aGlzLmNvbXBhdGlibGVDb250cm9scygpLmZpbmQoKGMpID0+IChjLmtleSB8fCBjLmlkKSA9PT0gdmFsKTtcbiAgICBpZiAocGxhaW5NYXRjaCkge1xuICAgICAgcmV0dXJuICdjb250cm9sJztcbiAgICB9XG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgLy8gU21hcnQgZGVmYXVsdDogbnVtZXJpYyBvciBmbGFnIHBhcmFtZXRlcnMgZGVmYXVsdCB0byAnZml4ZWQnIChFbnRlciBWYWx1ZSlcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcmFtKCkubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhcmFtKCkuZGF0YVR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICAgIG5hbWUuc3RhcnRzV2l0aCgnaW50JykgfHxcbiAgICAgICAgbmFtZS5pbmNsdWRlcygnZmxhZycpIHx8XG4gICAgICAgIG5hbWUuaW5jbHVkZXMoJ3R5cGUnKSB8fFxuICAgICAgICBuYW1lLmluY2x1ZGVzKCdvbmx5JylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gJ2ZpeGVkJztcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGFyZSBjb21wYXRpYmxlIGZvcm0gZmllbGRzIG9uIGNhbnZhcywgZGVmYXVsdCB0byBjb250cm9sLCBvdGhlcndpc2UgZml4ZWRcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhdGlibGVDb250cm9scygpLmxlbmd0aCA+IDAgPyAnY29udHJvbCcgOiAnZml4ZWQnO1xuICAgIH1cblxuICAgIHJldHVybiAnZml4ZWQnO1xuICB9KTtcblxuICByZWFkb25seSBpc0F1dG9TZXNzaW9uRGVyaXZlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uTWF0Y2goKSAhPT0gbnVsbCAmJiB0aGlzLmFjdGl2ZU1vZGUoKSA9PT0gJ3Nlc3Npb24nO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZENvbnRyb2xLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkgPz8gJycpO1xuICAgIGlmICh2YWwuc3RhcnRzV2l0aCgne3snKSAmJiB2YWwuZW5kc1dpdGgoJ319JykpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhcmFtZXRlclRva2VuKHZhbCk/LmZpZWxkID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZENvbnRleHRLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsID0gU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKCkgPz8gJycpO1xuICAgIGlmICh2YWwuc3RhcnRzV2l0aCgne3tjb250ZXh0LicpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJvb2xlYW5GaXhlZFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHYgPSB0aGlzLmN1cnJlbnRWYWx1ZSgpO1xuICAgIHJldHVybiB2ID09PSB0cnVlIHx8IHYgPT09ICd0cnVlJyB8fCB2ID09PSAxIHx8IHYgPT09ICcxJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNMb25nVGV4dElucHV0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IFN0cmluZyh0aGlzLmN1cnJlbnRWYWx1ZSgpID8/ICcnKTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wYXJhbSgpLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsLmxlbmd0aCA+IDUwIHx8XG4gICAgICBuYW1lLmluY2x1ZGVzKCdjb2x1bW5uYW1lcycpIHx8XG4gICAgICBuYW1lLmluY2x1ZGVzKCdmaWx0ZXInKSB8fFxuICAgICAgbmFtZS5pbmNsdWRlcygnc3FsJykgfHxcbiAgICAgIG5hbWUuaW5jbHVkZXMoJ3F1ZXJ5JylcbiAgICApO1xuICB9KTtcblxuICBzZXRNb2RlKG1vZGU6IFBhcmFtZXRlckJpbmRpbmdNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbE1vZGUuc2V0KG1vZGUpO1xuICAgIGlmIChtb2RlID09PSAnc2Vzc2lvbicpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zZXNzaW9uTWF0Y2goKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYHt7c2Vzc2lvbi4ke21hdGNoLnNlc3Npb25LZXl9fX1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlua2VkRmllbGRDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHBhcmFtTmFtZTogdGhpcy5wYXJhbSgpLm5hbWUsXG4gICAgICAgIGZpZWxkS2V5OiAnJyxcbiAgICAgICAgaXNMaW5rZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAnZml4ZWQnKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50VmFsdWUoKTtcbiAgICAgIGlmIChjdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50ICE9PSAnJyAmJiAhU3RyaW5nKGN1cnJlbnQpLnN0YXJ0c1dpdGgoJ3t7JykpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGN1cnJlbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmFtKCkuZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLnBhcmFtKCkuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHRoaXMucGFyYW0oKS5kZWZhdWx0VmFsdWUpIDogdHJ1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGRlZik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFyYW0oKS5kYXRhVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5wYXJhbSgpLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKHRoaXMucGFyYW0oKS5kZWZhdWx0VmFsdWUpIDogMDtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGRlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5rZWRGaWVsZENoYW5nZS5lbWl0KHtcbiAgICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgICAgZmllbGRLZXk6ICcnLFxuICAgICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRyb2xTZWxlY3RlZChrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChrZXkpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb21wYXRpYmxlQ29udHJvbHMoKS5maW5kKGMgPT4gKGMua2V5IHx8IGMuaWQpID09PSBrZXkpO1xuICAgICAgY29uc3QgaXNEYXRlID0gZmllbGQ/LnR5cGUgPT09ICdkYXRlJyB8fCBmaWVsZD8udHlwZSA9PT0gJ2RhdGUtcmFuZ2UnO1xuICAgICAgY29uc3QgZXhwciA9IGlzRGF0ZSA/ICd7eycgKyBrZXkgKyAnIHwgZGF0ZTp5eXl5LU1NLWRkfX0nIDogJ3t7JyArIGtleSArICd9fSc7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZXhwcik7XG4gICAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYXJhbU5hbWU6IHRoaXMucGFyYW0oKS5uYW1lLFxuICAgICAgICBmaWVsZEtleToga2V5LFxuICAgICAgICBpc0xpbmtlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoJycpO1xuICAgICAgdGhpcy5saW5rZWRGaWVsZENoYW5nZS5lbWl0KHtcbiAgICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgICAgZmllbGRLZXk6ICcnLFxuICAgICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkJvb2xlYW5DaGFuZ2VkKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2hlY2tlZCk7XG4gICAgdGhpcy5saW5rZWRGaWVsZENoYW5nZS5lbWl0KHtcbiAgICAgIHBhcmFtTmFtZTogdGhpcy5wYXJhbSgpLm5hbWUsXG4gICAgICBmaWVsZEtleTogJycsXG4gICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBvbkZpeGVkVmFsdWVDaGFuZ2VkKHZhbDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGNsZWFuVmFsID0gc2FuaXRpemVTcWxQYXJhbUxpdGVyYWwodmFsKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xlYW5WYWwgYXMgc3RyaW5nIHwgbnVtYmVyKTtcbiAgICB0aGlzLmxpbmtlZEZpZWxkQ2hhbmdlLmVtaXQoe1xuICAgICAgcGFyYW1OYW1lOiB0aGlzLnBhcmFtKCkubmFtZSxcbiAgICAgIGZpZWxkS2V5OiAnJyxcbiAgICAgIGlzTGlua2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ29udGV4dFNlbGVjdGVkKGN0eEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGN0eEtleSk7XG4gICAgdGhpcy5saW5rZWRGaWVsZENoYW5nZS5lbWl0KHtcbiAgICAgIHBhcmFtTmFtZTogdGhpcy5wYXJhbSgpLm5hbWUsXG4gICAgICBmaWVsZEtleTogJycsXG4gICAgICBpc0xpbmtlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|