@eqproject/eqp-dynamic-module 2.11.6 → 2.11.8
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/USERGUIDE.md +437 -437
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +2 -2
- package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +115 -27
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +28 -6
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +25 -5
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +12 -3
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +26 -4
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +26 -4
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +26 -4
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -3
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
- package/esm2020/lib/utils/css-property-catalog.mjs +45 -2
- package/esm2020/lib/utils/field-style-catalog.mjs +45 -19
- package/esm2020/lib/utils/floating-label-styles.mjs +155 -0
- package/esm2020/lib/utils/refresh-outline-notch.mjs +38 -0
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +782 -327
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +762 -313
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +19 -1
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +6 -2
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +6 -2
- package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +6 -2
- package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +6 -2
- package/lib/utils/css-property-catalog.d.ts +25 -0
- package/lib/utils/field-style-catalog.d.ts +5 -0
- package/lib/utils/floating-label-styles.d.ts +73 -0
- package/lib/utils/refresh-outline-notch.d.ts +15 -0
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ import { ListPresentationEnum } from '../../../../models/fields/listValueField.m
|
|
|
3
3
|
import { UtilityHelperService } from '../../../../services/utilityHelper.services';
|
|
4
4
|
import { GlobalService } from '../../../..//services/global.service';
|
|
5
5
|
import { DataGetterTypeEnum } from '../../../../models/baseField.model';
|
|
6
|
+
import { cssSetsTop, readStyleCss } from '../../../../utils/floating-label-styles';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/material/checkbox";
|
|
8
9
|
import * as i2 from "@angular/material/button";
|
|
@@ -17,6 +18,8 @@ import * as i7 from "tmw-select";
|
|
|
17
18
|
const ELEMENT_SELECTORS_COMBO = {
|
|
18
19
|
Container: ' tmw-select .tmw-select-field',
|
|
19
20
|
Label: ' tmw-select .tmw-select-label',
|
|
21
|
+
// Label: grafica base, sempre valida. LabelSollevata (virtuale, salvata dentro Label): override sul bordo
|
|
22
|
+
LabelSollevata: ' tmw-select .tmw-select-field--floated .tmw-select-label',
|
|
20
23
|
CasellaTrigger: ' tmw-select .tmw-select-value',
|
|
21
24
|
BottoneCancella: ' tmw-select .tmw-select-clear',
|
|
22
25
|
};
|
|
@@ -37,7 +40,7 @@ const ELEMENT_SELECTORS_BUTTON = {
|
|
|
37
40
|
const STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];
|
|
38
41
|
const DEFAULT_FIELD_STYLES = {};
|
|
39
42
|
// Elementi il cui CSS iniettato richiede !important per vincere sulle regole di tmw-select.scss
|
|
40
|
-
const FORCE_IMPORTANT_ELEMENTS = new Set(['Label', 'BottoneCancella']);
|
|
43
|
+
const FORCE_IMPORTANT_ELEMENTS = new Set(['Label', 'LabelSollevata', 'BottoneCancella']);
|
|
41
44
|
export class ListValueFieldTemplateComponent {
|
|
42
45
|
constructor(renderer) {
|
|
43
46
|
this.renderer = renderer;
|
|
@@ -127,7 +130,7 @@ export class ListValueFieldTemplateComponent {
|
|
|
127
130
|
for (const state of STATES) {
|
|
128
131
|
const key = el + state;
|
|
129
132
|
const defaultVal = DEFAULT_FIELD_STYLES[key];
|
|
130
|
-
const userVal = css
|
|
133
|
+
const userVal = readStyleCss(css, key);
|
|
131
134
|
if (!defaultVal?.trim() && !userVal?.trim())
|
|
132
135
|
continue;
|
|
133
136
|
const selector = this.getSelector(uid, state, el, s);
|
|
@@ -139,6 +142,12 @@ export class ListValueFieldTemplateComponent {
|
|
|
139
142
|
const needsImportant = FORCE_IMPORTANT_ELEMENTS.has(el) || (el === 'Bottone' && state === 'Selezionato');
|
|
140
143
|
const finalVal = needsImportant ? this.forceImportant(userVal) : userVal;
|
|
141
144
|
lines.push(`${selector} { ${finalVal} }`);
|
|
145
|
+
// Il top della label nel contenitore non deve spostare quella sul bordo
|
|
146
|
+
if (el === 'Label' && selectors['LabelSollevata'] && cssSetsTop(userVal)) {
|
|
147
|
+
const floatSel = this.getSelector(uid, state, el, selectors['LabelSollevata']);
|
|
148
|
+
if (floatSel)
|
|
149
|
+
lines.push(`${floatSel} { top: 0 !important; }`);
|
|
150
|
+
}
|
|
142
151
|
// BottoneCancella: l'icona è un <svg> con fill legato a --tmw-select-clear-color (non currentColor),
|
|
143
152
|
// quindi "color" non la raggiunge: si estrae il color dichiarato e si inietta come fill sull'svg.
|
|
144
153
|
if (el === 'BottoneCancella') {
|
|
@@ -398,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
398
407
|
}], recordChange: [{
|
|
399
408
|
type: Output
|
|
400
409
|
}] } });
|
|
401
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBRXhFLDBGQUEwRjtBQUMxRix3RkFBd0Y7QUFDeEYsMkZBQTJGO0FBQzNGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBUSwrQkFBK0I7SUFDaEQsS0FBSyxFQUFZLCtCQUErQjtJQUNoRCxjQUFjLEVBQUcsK0JBQStCO0lBQ2hELGVBQWUsRUFBRSwrQkFBK0I7Q0FDakQsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFB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QUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsd0ZBQXdGO1FBQ3hGLHlGQUF5RjtRQUN6RiwwRkFBMEY7UUFDMUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQzVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsQ0FDbkQsQ0FBQztJQUNKLENBQUM7OzZIQTlWVSwrQkFBK0I7aUhBQS9CLCtCQUErQiw2UkM5QzVDLDRoR0FrRE07NEZESk8sK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDJCQUEyQjtnR0FNNUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0UHJlc2VudGF0aW9uRW51bSwgTGlzdFZhbHVlRmllbGQsIExpc3RWYWx1ZUZpZWxkU3R5bGVDU1MgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUdldHRlclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcblxyXG4vLyB0bXctc2VsZWN0IG5vbiB1c2EgcGnDuSBBbmd1bGFyIE1hdGVyaWFsIChyaWNvc3RydWl0YSBpbiB0bXctc3VpdGUpOiBpIHNlbGV0dG9yaSBwdW50YW5vXHJcbi8vIGFsbGUgY2xhc3NpIG5hdGl2ZSBkZWwgY29tcG9uZW50ZSAoLnRtdy1zZWxlY3QtZmllbGQvLWxhYmVsLy12YWx1ZS8tY2xlYXIpLCBub24gcGnDuSBhXHJcbi8vIG1hdC1mb3JtLWZpZWxkLy5tZGMtZmxvYXRpbmctbGFiZWwvLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeC9idXR0b25bYXJpYS1sYWJlbD1cIkNsZWFyXCJdLlxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19DT01CTzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBDb250YWluZXI6ICAgICAgICcgdG13LXNlbGVjdCAudG13LXNlbGVjdC1maWVsZCcsXHJcbiAgTGFiZWw6ICAgICAgICAgICAnIHRtdy1zZWxlY3QgLnRtdy1zZWxlY3QtbGFiZWwnLFxyXG4gIENhc2VsbGFUcmlnZ2VyOiAgJyB0bXctc2VsZWN0IC50bXctc2VsZWN0LXZhbHVlJyxcclxuICBCb3R0b25lQ2FuY2VsbGE6ICcgdG13LXNlbGVjdCAudG13LXNlbGVjdC1jbGVhcicsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19SQURJTzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBDb250YWluZXI6ICcgLmxpc3QtdmFsdWUtcmFkaW8tY29udGFpbmVyJyxcclxuICBMYWJlbDogICAgICcgLmxpc3QtdmFsdWUtbGFiZWwnLFxyXG4gIE9wemlvbmU6ICAgJyBtYXQtcmFkaW8tYnV0dG9uJyxcclxuICBTZWxlemlvbmU6ICcgbWF0LXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvJyxcclxufTtcclxuXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTX0NIRUNLQk9YOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIExhYmVsOiAgICcgLmxpc3QtdmFsdWUtbGFiZWwnLFxyXG4gIE9wemlvbmU6ICcgbWF0LWNoZWNrYm94JyxcclxufTtcclxuXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTX0JVVFRPTjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBMYWJlbDogICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBCb3R0b25lOiAnIGJ1dHRvbi5kYXRhLWJ1dHRvbicsXHJcbn07XHJcblxyXG5jb25zdCBTVEFURVMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ1NlbGV6aW9uYXRvJywgJ05vdFZhbGlkJywgJ1JlYWRvbmx5J107XHJcbmNvbnN0IERFRkFVTFRfRklFTERfU1RZTEVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4vLyBFbGVtZW50aSBpbCBjdWkgQ1NTIGluaWV0dGF0byByaWNoaWVkZSAhaW1wb3J0YW50IHBlciB2aW5jZXJlIHN1bGxlIHJlZ29sZSBkaSB0bXctc2VsZWN0LnNjc3NcclxuY29uc3QgRk9SQ0VfSU1QT1JUQU5UX0VMRU1FTlRTID0gbmV3IFNldChbJ0xhYmVsJywgJ0JvdHRvbmVDYW5jZWxsYSddKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdFZhbHVlRmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTGlzdFZhbHVlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzdHlsZVZlcnNpb246IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgTGlzdFByZXNlbnRhdGlvbkVudW0gPSBMaXN0UHJlc2VudGF0aW9uRW51bTtcclxuICBhcnJheURhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBhbnksIFNlbGVjdGVkPzogYm9vbGVhbiwgSW1nVXJsPzogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGZpZWxkVWlkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdHlsZUVsOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikgeyB9XHJcblxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuTGFiZWxzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWVsZFVpZCA9ICdsdi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY29tYm9ib3ggZmlsZWRcIiwgdGhpcy5maWVsZCk7XHJcbiAgICBjb25zdCBpbml0aWFsdmFsdWUgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLkxhYmVsXTtcclxuICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmICF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgICB0aGlzLmNoZWNrUmVhZG9ubHkoKTtcclxuXHJcbiAgICBpZiAoaW5pdGlhbHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKGluaXRpYWx2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10gJiYgIWNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuaW5qZWN0U3R5bGVzKCk7XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkPy5Gb3JtRm9ybUdyb3VwPy5jb250cm9scz8uW3RoaXMuZmllbGQuTmFtZV0pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWRBcnJheURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ZvcmNlU3RhdGUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0eWxlRWw/LnBhcmVudE5vZGUpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBDU1MgaW5qZWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIGdldEVsZW1lbnRTZWxlY3RvcnMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgICBjb25zdCBtb2RlID0gTnVtYmVyKHRoaXMuZmllbGQ/LlByZXNlbnRhdGlvbk1vZGUpO1xyXG4gICAgaWYgKG1vZGUgPT09IExpc3RQcmVzZW50YXRpb25FbnVtWydDb21ibyBib3gnXSkgcmV0dXJuIEVMRU1FTlRfU0VMRUNUT1JTX0NPTUJPO1xyXG4gICAgaWYgKG1vZGUgPT09IExpc3RQcmVzZW50YXRpb25FbnVtWydQdWxzYW50ZSBjb24gdGVzdG8nXSkgcmV0dXJuIEVMRU1FTlRfU0VMRUNUT1JTX0JVVFRPTjtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkPy5Jc011bHRpQ2hvaWNoZSA/IEVMRU1FTlRfU0VMRUNUT1JTX0NIRUNLQk9YIDogRUxFTUVOVF9TRUxFQ1RPUlNfUkFESU87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluamVjdFN0eWxlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY3NzID0gKHRoaXMuZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpPy5MaXN0VmFsdWVGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTKTtcclxuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5idWlsZENzc1J1bGVzKHRoaXMuZmllbGRVaWQsIGNzcyk7XHJcbiAgICBpZiAoIXRoaXMuc3R5bGVFbCkge1xyXG4gICAgICB0aGlzLnN0eWxlRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJykgYXMgSFRNTFN0eWxlRWxlbWVudDtcclxuICAgICAgdGhpcy5zdHlsZUVsLmlkID0gJ3N0eWxlLScgKyB0aGlzLmZpZWxkVWlkO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0eWxlRWwudGV4dENvbnRlbnQgPSBydWxlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDc3NSdWxlcyh1aWQ6IHN0cmluZywgY3NzOiBMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMuZ2V0RWxlbWVudFNlbGVjdG9ycygpO1xyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIE9iamVjdC5rZXlzKHNlbGVjdG9ycykpIHtcclxuICAgICAgY29uc3QgcyA9IHNlbGVjdG9yc1tlbF07XHJcbiAgICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgU1RBVEVTKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZWwgKyBzdGF0ZTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBERUZBVUxUX0ZJRUxEX1NUWUxFU1trZXldO1xyXG4gICAgICAgIGNvbnN0IHVzZXJWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChjc3MgYXMgYW55KVtrZXldO1xyXG4gICAgICAgIGlmICghZGVmYXVsdFZhbD8udHJpbSgpICYmICF1c2VyVmFsPy50cmltKCkpIGNvbnRpbnVlO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgcyk7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RvcikgY29udGludWU7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRWYWw/LnRyaW0oKSkgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2RlZmF1bHRWYWx9IH1gKTtcclxuICAgICAgICBpZiAodXNlclZhbD8udHJpbSgpKSB7XHJcbiAgICAgICAgICBjb25zdCBuZWVkc0ltcG9ydGFudCA9IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUy5oYXMoZWwpIHx8IChlbCA9PT0gJ0JvdHRvbmUnICYmIHN0YXRlID09PSAnU2VsZXppb25hdG8nKTtcclxuICAgICAgICAgIGNvbnN0IGZpbmFsVmFsID0gbmVlZHNJbXBvcnRhbnQgPyB0aGlzLmZvcmNlSW1wb3J0YW50KHVzZXJWYWwpIDogdXNlclZhbDtcclxuICAgICAgICAgIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtmaW5hbFZhbH0gfWApO1xyXG4gICAgICAgICAgLy8gQm90dG9uZUNhbmNlbGxhOiBsJ2ljb25hIMOoIHVuIDxzdmc+IGNvbiBmaWxsIGxlZ2F0byBhIC0tdG13LXNlbGVjdC1jbGVhci1jb2xvciAobm9uIGN1cnJlbnRDb2xvciksXHJcbiAgICAgICAgICAvLyBxdWluZGkgXCJjb2xvclwiIG5vbiBsYSByYWdnaXVuZ2U6IHNpIGVzdHJhZSBpbCBjb2xvciBkaWNoaWFyYXRvIGUgc2kgaW5pZXR0YSBjb21lIGZpbGwgc3VsbCdzdmcuXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdCb3R0b25lQ2FuY2VsbGEnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaWNvblNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgdG13LXNlbGVjdCAudG13LXNlbGVjdC1jbGVhciBzdmcnKTtcclxuICAgICAgICAgICAgICBpZiAoaWNvblNlbCkgbGluZXMucHVzaChgJHtpY29uU2VsfSB7IGZpbGw6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT3B6aW9uZSAocmFkaW8pOiBpbCBjb2xvciB2YSBzdSBtYXQtcmFkaW8tYnV0dG9uIGxhYmVsIHBlciByYWdnaXVuZ2VyZSBpbCB0ZXN0byAoTWF0ZXJpYWwgc292cmFzY3JpdmUgaWwgY29sb3JlIHN1bCBjb250ZW5pdG9yZSlcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnICYmIHMgPT09ICcgbWF0LXJhZGlvLWJ1dHRvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiBsYWJlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChsYWJlbFNlbCkgbGluZXMucHVzaChgJHtsYWJlbFNlbH0geyBjb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBTZWxlemlvbmU6IGJhY2tncm91bmQtY29sb3IgdmEgc3UgLm1kYy1yYWRpbzsgY29sb3IgdmEgc3Ugb3V0ZXItY2lyY2xlL2lubmVyLWNpcmNsZSBFIENTUyB2YXJpYWJsZXMgTURDXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdTZWxlemlvbmUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3V0ZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19fb3V0ZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5uZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19faW5uZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmFkaW9CdG5TZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24nKTtcclxuICAgICAgICAgICAgICBpZiAob3V0ZXJTZWwpICAgIGxpbmVzLnB1c2goYCR7b3V0ZXJTZWx9IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgICAgaWYgKGlubmVyU2VsKSAgICBsaW5lcy5wdXNoKGAke2lubmVyU2VsfSB7IGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgICAvLyBDU1MgdmFyaWFibGVzIE1EQyBwZXIgaWwgZG90IGRpIHNlbGV6aW9uZSAoc292cmFzY3Jpdm9ubyBpbCB0ZW1hIE1hdGVyaWFsKVxyXG4gICAgICAgICAgICAgIGlmIChyYWRpb0J0blNlbCkgbGluZXMucHVzaChgJHtyYWRpb0J0blNlbH0geyAtLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyB9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzc1xyXG4gICAgICAuc3BsaXQoJzsnKVxyXG4gICAgICAubWFwKHBhcnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXJ0LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICAgIGlmICh0cmltbWVkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyFpbXBvcnRhbnQnKSkgcmV0dXJuIHBhcnQ7XHJcbiAgICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZSgvXFxzKyQvLCAnJykgKyAnICFpbXBvcnRhbnQnO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0Q3NzUHJvcFZhbHVlKGNzczogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKD86Xnw7KVxcXFxzKiR7cHJvcH1cXFxccyo6XFxcXHMqKFteOyFdKz8pKD86XFxcXHMqIWltcG9ydGFudCk/XFxcXHMqKD86O3wkKWAsICdpJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChyZSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzpcclxuICAgICAgICAvLyBPcHppb25lL1NlbGV6aW9uZS9Cb3R0b25lOiA6aG92ZXIgc3VsIHNpbmdvbG8gZWxlbWVudG8sIG5vbiBzdWwgY29udGVuaXRvcmVcclxuICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyB8fCBlbCA9PT0gJ1NlbGV6aW9uZScgfHwgZWwgPT09ICdCb3R0b25lJylcclxuICAgICAgICAgIHJldHVybiBgJHt0aGlzLmJ1aWxkUGVySXRlbUhvdmVyU2VsZWN0b3IodWlkLCBzKX0sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgICAgcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOlxyXG4gICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmUnKVxyXG4gICAgICAgICAgcmV0dXJuIGAjJHt1aWR9IGJ1dHRvbi5kYXRhLWJ1dHRvbi5zZWxlY3RlZC1idXR0b24sICMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgICAgLy8gUmFkaW8gT3B6aW9uZS9TZWxlemlvbmU6IGFnZ2l1bmdlIHNlbGV0dG9yZSBydW50aW1lIG1hdC1tZGMtcmFkaW8tY2hlY2tlZFxyXG4gICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnIHx8IGVsID09PSAnU2VsZXppb25lJykge1xyXG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdtYXQtcmFkaW8tYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJGaXJzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdtYXQtcmFkaW8tYnV0dG9uJy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCMke3VpZH0gbWF0LXJhZGlvLWJ1dHRvbi5tYXQtbWRjLXJhZGlvLWNoZWNrZWQke2FmdGVyRmlyc3R9LCAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ05vdFZhbGlkJzogIHJldHVybiBgIyR7dWlkfS5lcXAtaW52YWxpZCR7c31gO1xyXG4gICAgICBjYXNlICdSZWFkb25seSc6ICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBlckl0ZW1Ib3ZlclNlbGVjdG9yKHVpZDogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICBjb25zdCBzcGFjZUlkeCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgaWYgKHNwYWNlSWR4ID09PSAtMSkgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZH06aG92ZXJgO1xyXG4gICAgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpfTpob3ZlciR7dHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJZHgpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBMb2dpY2EgY2FtcG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seSkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXMoaW5pdGlhbHZhbHVlKSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLkxhYmVsXSA9IGluaXRpYWx2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCB1cGRhdGVGaWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIEZvcm11bGFcIiwgXCJmb3JtdWxhXCIpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyPy5EYXRhR2V0dGVyVHlwZSA9PT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgICAvLyBMYSBmb3JtdWxhIGNhbGNvbGEgaWwgVkFMT1JFIFNFTEVaSU9OQVRPIChub24gbGUgb3B6aW9uaSk6IGNvbXBvcnRhbWVudG8gYW5hbG9nbyBhbCBjYW1wbyBudW1lcmljby5cclxuICAgICAgICAvLyBMZSBvcHppb25pIHZlbmdvbm8gZGEgVmFsdWVTdHJpbmcvVmFsdWVQYWlycy4gTm9uIHNpIGNoaWFtYSByZXNldEFycmF5RGF0YSgpIHBlciBldml0YXJlIGxvb3AuXHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIExhIGZvcm11bGEgY2FsY29sYSBsZSBPUFpJT05JIChWYWx1ZVBhaXJzKSDigJQgY2FzbyBkJ3VzbyBvcmlnaW5hbGVcclxuICAgICAgICBjb25zdCB0ZW1wVmFsdWVQYWlycyA9IHRoaXMuZmllbGQuVmFsdWVQYWlycztcclxuICAgICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG4gICAgICAgIGlmICghKEpTT04uc3RyaW5naWZ5KHRlbXBWYWx1ZVBhaXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5WYWx1ZVBhaXJzKSkpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlUGFpcnNcIik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlU3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0aGlzLmZpZWxkLlZhbHVlU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nLCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9KSB7XHJcbiAgICBkYXRhLlNlbGVjdGVkID0gIWRhdGEuU2VsZWN0ZWQ7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkID0+IGQuS2V5ICE9IGRhdGEuS2V5ICYmIGQuVmFsdWUgIT0gZGF0YS5WYWx1ZSkuZm9yRWFjaChkID0+IGQuU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkKGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgLy8gU2luZ2xlLWNob2ljZTogdXNhIG51bGwgKG5vbiBbXSkgcXVhbmRvIG5lc3N1biB2YWxvcmUgw6ggc2VsZXppb25hdG8uXHJcbiAgICAvLyBbXSAhPT0gW10gaW4gSlMgKGNvbmZyb250byBwZXIgcmVmZXJlbnphKTogbWF0LXNlbGVjdC5fYXNzaWduVmFsdWUgdmVkZSBzZW1wcmUgdW4gXCJjYW1iaW9cIlxyXG4gICAgLy8gc3Ugb2duaSBjeWNsZSBkaSBDRCBlIHNjYXRlbmEgX29uQ2hhbmdlIOKGkiBuZ01vZGVsQ2hhbmdlIOKGkiBsb29wIGluZmluaXRvLlxyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGVcclxuICAgICAgPyBzZWxlY3RlZFZhbHVlc1xyXG4gICAgICA6IChzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRWYWx1ZXNbMF0gOiBudWxsKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEFycmF5RGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwpIHtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0aGlzLmZpZWxkLlZhbHVlUGFpcnNbT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKVswXV0pKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICAvLyBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ZmFsc2UgaW1wZWRpc2NlIGNoZSBGb3JtQ29udHJvbC5zZXRWYWx1ZSgpIG5vdGlmaWNoaSBpIGNhbGxiYWNrXHJcbiAgICAvLyBfb25DaGFuZ2UgcmVnaXN0cmF0aSBkYSBOZ01vZGVsICh2aWEgW2Zvcm1Db250cm9sTmFtZV0gc3VsIG1hdC1jaGVja2JveCksIGV2aXRhbmRvIGNoZVxyXG4gICAgLy8gTmdNb2RlbCBlbWV0dGEgbmdNb2RlbENoYW5nZSDihpIgdXBkYXRlU2VsZWN0ZWQoKSDihpIgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHJpY29yc2l2YW1lbnRlLlxyXG4gICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gICAgPHRtdy1zZWxlY3QgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIlxyXG4gICAgICAgIFthcnJheURhdGFdPVwiYXJyYXlEYXRhXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidLZXknXCJcclxuICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbElucHV0KV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbaXNNdWx0aVNlbGVjdF09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiXHJcbiAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgIDwvdG13LXNlbGVjdD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSAhPSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIiBbZm9ybUdyb3VwXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIj5cclxuXHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1yLTMgbGlzdC12YWx1ZS1sYWJlbFwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj4ge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIlxyXG4gICAgICAgICAgICA6IFwiXCIpfX0gPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgIWZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtcy0zIGQtYmxvY2tcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbdmFsdWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIChTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkIHx8IHRoaXMuZmllbGQuUmVhZG9ubHlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLlNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJbTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddXS5pbmNsdWRlcyhmaWVsZC5QcmVzZW50YXRpb25Nb2RlKVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1idXR0b24nOiBkYXRhLlNlbGVjdGVkID09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25TZWxlY3RDbGljayhkYXRhKVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7QUFFbkYsMEZBQTBGO0FBQzFGLHdGQUF3RjtBQUN4RiwyRkFBMkY7QUFDM0YsTUFBTSx1QkFBdUIsR0FBOEI7SUFDekQsU0FBUyxFQUFRLCtCQUErQjtJQUNoRCxLQUFLLEVBQVksK0JBQStCO0lBQ2hELDBHQUEwRztJQUMxRyxjQUFjLEVBQUcsMERBQTBEO0lBQzNFLGNBQWMsRUFBRywrQkFBK0I7SUFDaEQsZUFBZSxFQUFFLCtCQUErQjtDQUNqRCxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBOEI7SUFDekQsU0FBUyxFQUFFLDhCQUE4QjtJQUN6QyxLQUFLLEVBQU0sb0JBQW9CO0lBQy9CLE9BQU8sRUFBSSxtQkFBbUI7SUFDOUIsU0FBUyxFQUFFLDhCQUE4QjtDQUMxQyxDQUFDO0FBRUYsTUFBTSwwQkFBMEIsR0FBOEI7SUFDNUQsS0FBSyxFQUFJLG9CQUFvQjtJQUM3QixPQUFPLEVBQUUsZUFBZTtDQUN6QixDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBOEI7SUFDMUQsS0FBSyxFQUFJLG9CQUFvQjtJQUM3QixPQUFPLEVBQUUscUJBQXFCO0NBQy9CLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRSxNQUFNLG9CQUFvQixHQUE4QixFQUFFLENBQUM7QUFFM0QsZ0dBQWdHO0FBQ2hHLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBT3pGLE1BQU0sT0FBTywrQkFBK0I7SUFrQjFDLFlBQW9CLFFBQW1CO1FBQW5CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFkOUIsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixlQUFVLEdBQWtCLElBQUksQ0FBQztRQUNoQyxpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTFFLHlCQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQzVDLGNBQVMsR0FBdUUsRUFBRSxDQUFDO1FBSzNFLFlBQU8sR0FBNEIsSUFBSSxDQUFDO0lBRUwsQ0FBQztJQUU1QyxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksU0FBUztZQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLFNBQVM7WUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNuRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtZQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakwsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUV4RSxtQkFBbUI7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLHVCQUF1QixDQUFDO1FBQy9FLElBQUksSUFBSSxLQUFLLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDO1lBQUUsT0FBTyx3QkFBd0IsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7SUFDM0YsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsS0FBd0IsRUFBRSxzQkFBc0IsSUFBSyxFQUE2QixDQUFDO1FBQ3JHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBcUIsQ0FBQztZQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVcsRUFBRSxHQUEyQjtRQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtnQkFDMUIsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsTUFBTSxVQUFVLEdBQXVCLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLE9BQU8sR0FBdUIsWUFBWSxDQUFDLEdBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7b0JBQUUsU0FBUztnQkFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFFBQVE7b0JBQUUsU0FBUztnQkFDeEIsSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFO29CQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ25CLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLGFBQWEsQ0FBQyxDQUFDO29CQUN6RyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDekUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsTUFBTSxRQUFRLElBQUksQ0FBQyxDQUFDO29CQUMxQyx3RUFBd0U7b0JBQ3hFLElBQUksRUFBRSxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt3QkFDL0UsSUFBSSxRQUFROzRCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLHlCQUF5QixDQUFDLENBQUM7cUJBQ2hFO29CQUNELHFHQUFxRztvQkFDckcsa0dBQWtHO29CQUNsRyxJQUFJLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTt3QkFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDN0QsSUFBSSxRQUFRLEVBQUU7NEJBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDOzRCQUN0RixJQUFJLE9BQU87Z0NBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sWUFBWSxRQUFRLGdCQUFnQixDQUFDLENBQUM7eUJBQ3pFO3FCQUNGO29CQUNELG1JQUFtSTtvQkFDbkksSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxtQkFBbUIsRUFBRTt3QkFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDN0QsSUFBSSxRQUFRLEVBQUU7NEJBQ1osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDOzRCQUM3RSxJQUFJLFFBQVE7Z0NBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsYUFBYSxRQUFRLGdCQUFnQixDQUFDLENBQUM7eUJBQzVFO3FCQUNGO29CQUNELDBHQUEwRztvQkFDMUcsSUFBSSxFQUFFLEtBQUssV0FBVyxFQUFFO3dCQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLFFBQVEsRUFBRTs0QkFDWixNQUFNLFFBQVEsR0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7NEJBQ25HLE1BQU0sUUFBUSxHQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsNENBQTRDLENBQUMsQ0FBQzs0QkFDbkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDOzRCQUMxRSxJQUFJLFFBQVE7Z0NBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsb0JBQW9CLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDckYsSUFBSSxRQUFRO2dDQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLHdCQUF3QixRQUFRLGdCQUFnQixDQUFDLENBQUM7NEJBQ3pGLDZFQUE2RTs0QkFDN0UsSUFBSSxXQUFXO2dDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLHVDQUF1QyxRQUFRLHdDQUF3QyxRQUFRLDRDQUE0QyxRQUFRLDRDQUE0QyxRQUFRLDhDQUE4QyxRQUFRLEtBQUssQ0FBQyxDQUFDO3lCQUMvUztxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFXO1FBQ2hDLE9BQU8sR0FBRzthQUNQLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDMUIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUNsRCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDbkQsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLGtEQUFrRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFVLEVBQUUsQ0FBUztRQUNuRSxRQUFRLEtBQUssRUFBRTtZQUNiLEtBQUssU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxLQUFLLFdBQVc7Z0JBQ2QsOEVBQThFO2dCQUM5RSxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLFdBQVcsSUFBSSxFQUFFLEtBQUssU0FBUztvQkFDNUQsT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xGLE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQzFELEtBQUssYUFBYTtnQkFDaEIsSUFBSSxFQUFFLEtBQUssU0FBUztvQkFDbEIsT0FBTyxJQUFJLEdBQUcseUNBQXlDLEdBQUcsc0JBQXNCLENBQUMsRUFBRSxDQUFDO2dCQUN0Riw0RUFBNEU7Z0JBQzVFLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssV0FBVyxFQUFFO29CQUMxQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7d0JBQzFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2hFLE9BQU8sSUFBSSxHQUFHLDBDQUEwQyxVQUFVLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7cUJBQ3RHO2lCQUNGO2dCQUNELE9BQU8sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUMxQyxLQUFLLFVBQVUsQ0FBQyxDQUFFLE9BQU8sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsS0FBSyxVQUFVLENBQUMsQ0FBRSxPQUFPLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLENBQVUsT0FBTyxJQUFJLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsR0FBVyxFQUFFLENBQVM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQ3pGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUssSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBVSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBUyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTyxXQUFXLENBQUMsRUFBVyxFQUFFLEdBQVcsRUFBRSxTQUFrQjtRQUM5RCxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7O1lBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBRWhGLGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzlEO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM3RDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxZQUFZO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtRQUNELGFBQWEsQ0FBQyxRQUFRLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDdEIsYUFBYSxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLGNBQWMsS0FBSyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hFLHNHQUFzRztnQkFDdEcsaUdBQWlHO2dCQUNqRyxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDaEgsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN4QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7YUFDRjtpQkFBTTtnQkFDTCxvRUFBb0U7Z0JBQ3BFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxHQUFXLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwSCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7b0JBQy9FLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDdkI7YUFDRjtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1RSxhQUFhLENBQUMsUUFBUSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDdkU7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUU7WUFDekUsYUFBYSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6SCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNyQztTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQXlFO1FBQ3pGLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUN4RyxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25EO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYyxDQUFDLGFBQXNCLElBQUk7UUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVGLHVFQUF1RTtRQUN2RSw2RkFBNkY7UUFDN0YsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7WUFDdEQsQ0FBQyxDQUFDLGNBQWM7WUFDaEIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ2pDLElBQUksb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6SDtpQkFBTTtnQkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0c7U0FDRjtJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsS0FBYSxFQUFFLFNBQWlCLElBQUk7UUFDOUUsSUFBSSxnQkFBeUIsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4RyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztTQUN6RTthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sNEJBQTRCLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxTQUFpQixJQUFJO1FBQ3BGLElBQUksZ0JBQXlCLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNMLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7U0FDM0Q7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLG1CQUFtQjtRQUN6Qix3RkFBd0Y7UUFDeEYseUZBQXlGO1FBQ3pGLDBGQUEwRjtRQUMxRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDNUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxDQUNuRCxDQUFDO0lBQ0osQ0FBQzs7NkhBbldVLCtCQUErQjtpSEFBL0IsK0JBQStCLDZSQ2pENUMsNGhHQWtETTs0RkRETywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0UsMkJBQTJCO2dHQU01QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RQcmVzZW50YXRpb25FbnVtLCBMaXN0VmFsdWVGaWVsZCwgTGlzdFZhbHVlRmllbGRTdHlsZUNTUyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgY3NzU2V0c1RvcCwgcmVhZFN0eWxlQ3NzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZmxvYXRpbmctbGFiZWwtc3R5bGVzJztcclxuXHJcbi8vIHRtdy1zZWxlY3Qgbm9uIHVzYSBwacO5IEFuZ3VsYXIgTWF0ZXJpYWwgKHJpY29zdHJ1aXRhIGluIHRtdy1zdWl0ZSk6IGkgc2VsZXR0b3JpIHB1bnRhbm9cclxuLy8gYWxsZSBjbGFzc2kgbmF0aXZlIGRlbCBjb21wb25lbnRlICgudG13LXNlbGVjdC1maWVsZC8tbGFiZWwvLXZhbHVlLy1jbGVhciksIG5vbiBwacO5IGFcclxuLy8gbWF0LWZvcm0tZmllbGQvLm1kYy1mbG9hdGluZy1sYWJlbC8ubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4L2J1dHRvblthcmlhLWxhYmVsPVwiQ2xlYXJcIl0uXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTX0NPTUJPOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAgICAgJyB0bXctc2VsZWN0IC50bXctc2VsZWN0LWZpZWxkJyxcclxuICBMYWJlbDogICAgICAgICAgICcgdG13LXNlbGVjdCAudG13LXNlbGVjdC1sYWJlbCcsXHJcbiAgLy8gTGFiZWw6IGdyYWZpY2EgYmFzZSwgc2VtcHJlIHZhbGlkYS4gTGFiZWxTb2xsZXZhdGEgKHZpcnR1YWxlLCBzYWx2YXRhIGRlbnRybyBMYWJlbCk6IG92ZXJyaWRlIHN1bCBib3Jkb1xyXG4gIExhYmVsU29sbGV2YXRhOiAgJyB0bXctc2VsZWN0IC50bXctc2VsZWN0LWZpZWxkLS1mbG9hdGVkIC50bXctc2VsZWN0LWxhYmVsJyxcclxuICBDYXNlbGxhVHJpZ2dlcjogICcgdG13LXNlbGVjdCAudG13LXNlbGVjdC12YWx1ZScsXHJcbiAgQm90dG9uZUNhbmNlbGxhOiAnIHRtdy1zZWxlY3QgLnRtdy1zZWxlY3QtY2xlYXInLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfUkFESU86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAnIC5saXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lcicsXHJcbiAgTGFiZWw6ICAgICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAgICcgbWF0LXJhZGlvLWJ1dHRvbicsXHJcbiAgU2VsZXppb25lOiAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpbycsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBMYWJlbDogICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAnIG1hdC1jaGVja2JveCcsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT046IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgTGFiZWw6ICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgQm90dG9uZTogJyBidXR0b24uZGF0YS1idXR0b24nLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuLy8gRWxlbWVudGkgaWwgY3VpIENTUyBpbmlldHRhdG8gcmljaGllZGUgIWltcG9ydGFudCBwZXIgdmluY2VyZSBzdWxsZSByZWdvbGUgZGkgdG13LXNlbGVjdC5zY3NzXHJcbmNvbnN0IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUyA9IG5ldyBTZXQoWydMYWJlbCcsICdMYWJlbFNvbGxldmF0YScsICdCb3R0b25lQ2FuY2VsbGEnXSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IExpc3RWYWx1ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgYXJyYXlEYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9W10gPSBbXTtcclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnbHYtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuaW5qZWN0U3R5bGVzKCk7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNvbWJvYm94IGZpbGVkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgaW5pdGlhbHZhbHVlID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5MYWJlbF07XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnJlc2V0QXJyYXlEYXRhKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiAhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcblxyXG4gICAgaWYgKGluaXRpYWx2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhpbml0aWFsdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddICYmICFjaGFuZ2VzWydzdHlsZVZlcnNpb24nXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmluamVjdFN0eWxlcygpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkQXJyYXlEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBnZXRFbGVtZW50U2VsZWN0b3JzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbW9kZSA9IE51bWJlcih0aGlzLmZpZWxkPy5QcmVzZW50YXRpb25Nb2RlKTtcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19DT01CTztcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT047XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZD8uSXNNdWx0aUNob2ljaGUgPyBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWCA6IEVMRU1FTlRfU0VMRUNUT1JTX1JBRElPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uTGlzdFZhbHVlRmllbGRTdHlsZUNTUyA/PyAoe30gYXMgTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RvcnMgPSB0aGlzLmdldEVsZW1lbnRTZWxlY3RvcnMoKTtcclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBlbCBvZiBPYmplY3Qua2V5cyhzZWxlY3RvcnMpKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBzZWxlY3RvcnNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWFkU3R5bGVDc3MoY3NzIGFzIGFueSwga2V5KTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgY29uc3QgbmVlZHNJbXBvcnRhbnQgPSBGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMuaGFzKGVsKSB8fCAoZWwgPT09ICdCb3R0b25lJyAmJiBzdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICAgICAgICBjb25zdCBmaW5hbFZhbCA9IG5lZWRzSW1wb3J0YW50ID8gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKSA6IHVzZXJWYWw7XHJcbiAgICAgICAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIElsIHRvcCBkZWxsYSBsYWJlbCBuZWwgY29udGVuaXRvcmUgbm9uIGRldmUgc3Bvc3RhcmUgcXVlbGxhIHN1bCBib3Jkb1xyXG4gICAgICAgICAgaWYgKGVsID09PSAnTGFiZWwnICYmIHNlbGVjdG9yc1snTGFiZWxTb2xsZXZhdGEnXSAmJiBjc3NTZXRzVG9wKHVzZXJWYWwpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsb2F0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgc2VsZWN0b3JzWydMYWJlbFNvbGxldmF0YSddKTtcclxuICAgICAgICAgICAgaWYgKGZsb2F0U2VsKSBsaW5lcy5wdXNoKGAke2Zsb2F0U2VsfSB7IHRvcDogMCAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBCb3R0b25lQ2FuY2VsbGE6IGwnaWNvbmEgw6ggdW4gPHN2Zz4gY29uIGZpbGwgbGVnYXRvIGEgLS10bXctc2VsZWN0LWNsZWFyLWNvbG9yIChub24gY3VycmVudENvbG9yKSxcclxuICAgICAgICAgIC8vIHF1aW5kaSBcImNvbG9yXCIgbm9uIGxhIHJhZ2dpdW5nZTogc2kgZXN0cmFlIGlsIGNvbG9yIGRpY2hpYXJhdG8gZSBzaSBpbmlldHRhIGNvbWUgZmlsbCBzdWxsJ3N2Zy5cclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmVDYW5jZWxsYScpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpY29uU2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyB0bXctc2VsZWN0IC50bXctc2VsZWN0LWNsZWFyIHN2ZycpO1xyXG4gICAgICAgICAgICAgIGlmIChpY29uU2VsKSBsaW5lcy5wdXNoKGAke2ljb25TZWx9IHsgZmlsbDogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBPcHppb25lIChyYWRpbyk6IGlsIGNvbG9yIHZhIHN1IG1hdC1yYWRpby1idXR0b24gbGFiZWwgcGVyIHJhZ2dpdW5nZXJlIGlsIHRlc3RvIChNYXRlcmlhbCBzb3ZyYXNjcml2ZSBpbCBjb2xvcmUgc3VsIGNvbnRlbml0b3JlKVxyXG4gICAgICAgICAgaWYgKGVsID09PSAnT3B6aW9uZScgJiYgcyA9PT0gJyBtYXQtcmFkaW8tYnV0dG9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvclZhbCA9IHRoaXMuZXh0cmFjdENzc1Byb3BWYWx1ZShmaW5hbFZhbCwgJ2NvbG9yJyk7XHJcbiAgICAgICAgICAgIGlmIChjb2xvclZhbCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsU2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBtYXQtcmFkaW8tYnV0dG9uIGxhYmVsJyk7XHJcbiAgICAgICAgICAgICAgaWYgKGxhYmVsU2VsKSBsaW5lcy5wdXNoKGAke2xhYmVsU2VsfSB7IGNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFNlbGV6aW9uZTogYmFja2dyb3VuZC1jb2xvciB2YSBzdSAubWRjLXJhZGlvOyBjb2xvciB2YSBzdSBvdXRlci1jaXJjbGUvaW5uZXItY2lyY2xlIEUgQ1NTIHZhcmlhYmxlcyBNRENcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ1NlbGV6aW9uZScpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBvdXRlclNlbCAgICA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvX19vdXRlci1jaXJjbGUnKTtcclxuICAgICAgICAgICAgICBjb25zdCBpbm5lclNlbCAgICA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvX19pbm5lci1jaXJjbGUnKTtcclxuICAgICAgICAgICAgICBjb25zdCByYWRpb0J0blNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbicpO1xyXG4gICAgICAgICAgICAgIGlmIChvdXRlclNlbCkgICAgbGluZXMucHVzaChgJHtvdXRlclNlbH0geyBib3JkZXItY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgICBpZiAoaW5uZXJTZWwpICAgIGxpbmVzLnB1c2goYCR7aW5uZXJTZWx9IHsgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICAgIC8vIENTUyB2YXJpYWJsZXMgTURDIHBlciBpbCBkb3QgZGkgc2VsZXppb25lIChzb3ZyYXNjcml2b25vIGlsIHRlbWEgTWF0ZXJpYWwpXHJcbiAgICAgICAgICAgICAgaWYgKHJhZGlvQnRuU2VsKSBsaW5lcy5wdXNoKGAke3JhZGlvQnRuU2VsfSB7IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JjZUltcG9ydGFudChjc3M6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gY3NzXHJcbiAgICAgIC5zcGxpdCgnOycpXHJcbiAgICAgIC5tYXAocGFydCA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHBhcnQudHJpbSgpO1xyXG4gICAgICAgIGlmICghdHJpbW1lZCkgcmV0dXJuIHBhcnQ7XHJcbiAgICAgICAgaWYgKHRyaW1tZWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnIWltcG9ydGFudCcpKSByZXR1cm4gcGFydDtcclxuICAgICAgICByZXR1cm4gcGFydC5yZXBsYWNlKC9cXHMrJC8sICcnKSArICcgIWltcG9ydGFudCc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCc7Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RDc3NQcm9wVmFsdWUoY3NzOiBzdHJpbmcsIHByb3A6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGAoPzpefDspXFxcXHMqJHtwcm9wfVxcXFxzKjpcXFxccyooW147IV0rPykoPzpcXFxccyohaW1wb3J0YW50KT9cXFxccyooPzo7fCQpYCwgJ2knKTtcclxuICAgIGNvbnN0IG1hdGNoID0gY3NzLm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnRyaW0oKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdG9yKHVpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBlbDogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSAnTm9ybWFsZSc6IHJldHVybiBgIyR7dWlkfSR7c31gO1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOlxyXG4gICAgICAgIC8vIE9wemlvbmUvU2VsZXppb25lL0JvdHRvbmU6IDpob3ZlciBzdWwgc2luZ29sbyBlbGVtZW50bywgbm9uIHN1bCBjb250ZW5pdG9yZVxyXG4gICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnIHx8IGVsID09PSAnU2VsZXppb25lJyB8fCBlbCA9PT0gJ0JvdHRvbmUnKVxyXG4gICAgICAgICAgcmV0dXJuIGAke3RoaXMuYnVpbGRQZXJJdGVtSG92ZXJTZWxlY3Rvcih1aWQsIHMpfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgICByZXR1cm4gYCMke3VpZH06aG92ZXIke3N9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6XHJcbiAgICAgICAgaWYgKGVsID09PSAnQm90dG9uZScpXHJcbiAgICAgICAgICByZXR1cm4gYCMke3VpZH0gYnV0dG9uLmRhdGEtYnV0dG9uLnNlbGVjdGVkLWJ1dHRvbiwgIyR7dWlkfS5lcXAtc3RhdGUtc2VsZWN0ZWQke3N9YDtcclxuICAgICAgICAvLyBSYWRpbyBPcHppb25lL1NlbGV6aW9uZTogYWdnaXVuZ2Ugc2VsZXR0b3JlIHJ1bnRpbWUgbWF0LW1kYy1yYWRpby1jaGVja2VkXHJcbiAgICAgICAgaWYgKGVsID09PSAnT3B6aW9uZScgfHwgZWwgPT09ICdTZWxlemlvbmUnKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gcy5yZXBsYWNlKC9eXFxzKy8sICcnKTtcclxuICAgICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ21hdC1yYWRpby1idXR0b24nKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhZnRlckZpcnN0ID0gdHJpbW1lZC5zdWJzdHJpbmcoJ21hdC1yYWRpby1idXR0b24nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgIyR7dWlkfSBtYXQtcmFkaW8tYnV0dG9uLm1hdC1tZGMtcmFkaW8tY2hlY2tlZCR7YWZ0ZXJGaXJzdH0sICMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgIyR7dWlkfS5lcXAtc3RhdGUtc2VsZWN0ZWQke3N9YDtcclxuICAgICAgY2FzZSAnTm90VmFsaWQnOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1pbnZhbGlkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1JlYWRvbmx5JzogIHJldHVybiBgIyR7dWlkfS5lcXAtcmVhZG9ubHkke3N9YDtcclxuICAgICAgZGVmYXVsdDogICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkUGVySXRlbUhvdmVyU2VsZWN0b3IodWlkOiBzdHJpbmcsIHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0cmltbWVkID0gcy5yZXBsYWNlKC9eXFxzKy8sICcnKTtcclxuICAgIGNvbnN0IHNwYWNlSWR4ID0gdHJpbW1lZC5pbmRleE9mKCcgJyk7XHJcbiAgICBpZiAoc3BhY2VJZHggPT09IC0xKSByZXR1cm4gYCMke3VpZH0gJHt0cmltbWVkfTpob3ZlcmA7XHJcbiAgICByZXR1cm4gYCMke3VpZH0gJHt0cmltbWVkLnN1YnN0cmluZygwLCBzcGFjZUlkeCl9OmhvdmVyJHt0cmltbWVkLnN1YnN0cmluZyhzcGFjZUlkeCl9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU3RhdGVDbGFzc2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkVWlkKSByZXR1cm47XHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWVsZFVpZCk7XHJcbiAgICBpZiAoIXdyYXBwZXIpIHJldHVybjtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1ob3ZlcicsICAgIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ01vdXNlb3ZlcicpO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLXNlbGVjdGVkJywgdGhpcy5mb3JjZVN0YXRlID09PSAnU2VsZXppb25hdG8nKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdOb3RWYWxpZCcpO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgICAgICAgIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1JlYWRvbmx5Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUNsYXNzKGVsOiBFbGVtZW50LCBjbHM6IHN0cmluZywgY29uZGl0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsLCBjbHMpO1xyXG4gICAgZWxzZSB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBjbHMpO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIExvZ2ljYSBjYW1wbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgY2hlY2tSZWFkb25seSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmZpZWxkLk5hbWVdLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRJdGVtcyhpbml0aWFsdmFsdWUpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTGFiZWxdID0gaW5pdGlhbHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlJlYWRvbmx5SWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICB0aGlzLmNoZWNrUmVhZG9ubHkoKTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJsaXN0LXZhbHVlLWZpZWxkIHVwZGF0ZUZpZWxkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gRm9ybXVsYVwiLCBcImZvcm11bGFcIik7XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXI/LkRhdGFHZXR0ZXJUeXBlID09PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkge1xyXG4gICAgICAgIC8vIExhIGZvcm11bGEgY2FsY29sYSBpbCBWQUxPUkUgU0VMRVpJT05BVE8gKG5vbiBsZSBvcHppb25pKTogY29tcG9ydGFtZW50byBhbmFsb2dvIGFsIGNhbXBvIG51bWVyaWNvLlxyXG4gICAgICAgIC8vIExlIG9wemlvbmkgdmVuZ29ubyBkYSBWYWx1ZVN0cmluZy9WYWx1ZVBhaXJzLiBOb24gc2kgY2hpYW1hIHJlc2V0QXJyYXlEYXRhKCkgcGVyIGV2aXRhcmUgbG9vcC5cclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gIT09IG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTGEgZm9ybXVsYSBjYWxjb2xhIGxlIE9QWklPTkkgKFZhbHVlUGFpcnMpIOKAlCBjYXNvIGQndXNvIG9yaWdpbmFsZVxyXG4gICAgICAgIGNvbnN0IHRlbXBWYWx1ZVBhaXJzID0gdGhpcy5maWVsZC5WYWx1ZVBhaXJzO1xyXG4gICAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHRlbXA6IHN0cmluZyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgICAgdGhpcy5maWVsZC5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnModGVtcCk7XHJcbiAgICAgICAgaWYgKCEoSlNPTi5zdHJpbmdpZnkodGVtcFZhbHVlUGFpcnMpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpKSkge1xyXG4gICAgICAgICAgdGhpcy5yZXNldEFycmF5RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlUGFpcnMubGVuZ2h0ID4gMCkge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVQYWlyc1wiKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVN0cmluZyAhPSBudWxsICYmIHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCAtIHVwZGF0ZUZpZWxkIC0gVmFsdWVTdHJpbmdcIik7XHJcbiAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmICghdGhpcy5maWVsZC5Jbkxpc3RWaWV3ICYmICF0aGlzLmZpZWxkLk1haW50YWluX1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1dHRvblNlbGVjdENsaWNrKGRhdGE6IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBzdHJpbmcsIFNlbGVjdGVkPzogYm9vbGVhbiwgSW1nVXJsPzogc3RyaW5nIH0pIHtcclxuICAgIGRhdGEuU2VsZWN0ZWQgPSAhZGF0YS5TZWxlY3RlZDtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hcnJheURhdGEuZmlsdGVyKGQgPT4gZC5LZXkgIT0gZGF0YS5LZXkgJiYgZC5WYWx1ZSAhPSBkYXRhLlZhbHVlKS5mb3JFYWNoKGQgPT4gZC5TZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyhkYXRhLlZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBOdW1iZXIoZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGEuVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25SZWNvcmRWYWx1ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWQoZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5hcnJheURhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5TZWxlY3RlZCkubWFwKGRhdGEgPT4gZGF0YS5WYWx1ZSk7XHJcbiAgICAvLyBTaW5nbGUtY2hvaWNlOiB1c2EgbnVsbCAobm9uIFtdKSBxdWFuZG8gbmVzc3VuIHZhbG9yZSDDqCBzZWxlemlvbmF0by5cclxuICAgIC8vIFtdICE9PSBbXSBpbiBKUyAoY29uZnJvbnRvIHBlciByZWZlcmVuemEpOiBtYXQtc2VsZWN0Ll9hc3NpZ25WYWx1ZSB2ZWRlIHNlbXByZSB1biBcImNhbWJpb1wiXHJcbiAgICAvLyBzdSBvZ25pIGN5Y2xlIGRpIENEIGUgc2NhdGVuYSBfb25DaGFuZ2Ug4oaSIG5nTW9kZWxDaGFuZ2Ug4oaSIGxvb3AgaW5maW5pdG8uXHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZVxyXG4gICAgICA/IHNlbGVjdGVkVmFsdWVzXHJcbiAgICAgIDogKHNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFZhbHVlc1swXSA6IG51bGwpO1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICBpZiAoZW1pdENoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIHJlc2V0QXJyYXlEYXRhKCkge1xyXG4gICAgdGhpcy5hcnJheURhdGEgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgdGhpcy5zZXRBcnJheURhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsb2FkQXJyYXlEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcnJheURhdGEgPSBbXTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFycmF5RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZhbHVlUGFpcnMgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRoaXMuZmllbGQuVmFsdWVQYWlyc1tPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpWzBdXSkpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2goayA9PiB0aGlzLmNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoaywgTnVtYmVyKHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkLlZhbHVlUGFpcnMpLmZvckVhY2goayA9PiB0aGlzLmNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoaywgdGhpcy5maWVsZC5WYWx1ZVBhaXJzW2tdKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTnVtYmVyQXJyYXlEYXRhRWxlbWVudChrZXk6IHN0cmluZywgdmFsdWU6IG51bWJlciwgaW1nVXJsOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBsZXQgaXNPcHRpb25TZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gJiYgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSAhIXRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZmluZCh2ID0+IHYgPT0gdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNPcHRpb25TZWxlY3RlZCA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheURhdGEucHVzaCh7IEtleToga2V5LCBWYWx1ZTogdmFsdWUsIFNlbGVjdGVkOiBpc09wdGlvblNlbGVjdGVkLCBJbWdVcmw6IGltZ1VybCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHtcclxuICAgIC8vIGVtaXRNb2RlbFRvVmlld0NoYW5nZTpmYWxzZSBpbXBlZGlzY2UgY2hlIEZvcm1Db250cm9sLnNldFZhbHVlKCkgbm90aWZpY2hpIGkgY2FsbGJhY2tcclxuICAgIC8vIF9vbkNoYW5nZSByZWdpc3RyYXRpIGRhIE5nTW9kZWwgKHZpYSBbZm9ybUNvbnRyb2xOYW1lXSBzdWwgbWF0LWNoZWNrYm94KSwgZXZpdGFuZG8gY2hlXHJcbiAgICAvLyBOZ01vZGVsIGVtZXR0YSBuZ01vZGVsQ2hhbmdlIOKGkiB1cGRhdGVTZWxlY3RlZCgpIOKGkiBzZXRGb3JtQ29udHJvbFZhbHVlKCkgcmljb3JzaXZhbWVudGUuXHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5zZXRWYWx1ZShcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSxcclxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlLCBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6IGZhbHNlIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ7e2ZpZWxkVWlkfX1cIj5cclxuXHJcbiAgICA8dG13LXNlbGVjdCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydDb21ibyBib3gnXVwiXHJcbiAgICAgICAgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIiBbYXJyYXlLZXlQcm9wZXJ0eV09XCInVmFsdWUnXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgICAgIFtmb3JtR3JvdXBJbnB1dF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCIgW2Zvcm1Db250cm9sTmFtZUlucHV0XT1cImZpZWxkLk5hbWVcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQuRGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFtpbmNsdWRlRnVsbE9iamVjdF09XCJmYWxzZVwiIFtpc1JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgW2lzRGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtpc011bHRpU2VsZWN0XT1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCJcclxuICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgPC90bXctc2VsZWN0PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlICE9IExpc3RQcmVzZW50YXRpb25FbnVtWydDb21ibyBib3gnXVwiIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiPlxyXG5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibXItMyBsaXN0LXZhbHVlLWxhYmVsXCIgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiPiB7e2ZpZWxkLkRlc2NyaXB0aW9uICsgKGZpZWxkLlJlcXVpcmVkID8gXCIgKlwiXHJcbiAgICAgICAgICAgIDogXCJcIil9fSA8L21hdC1sYWJlbD5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBSQURJTyBCVVRUT04gKFNFTlpBIFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtdmFsdWUtcmFkaW8tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXSAmJiAhZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCIgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm1zLTMgZC1ibG9ja1wiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGFycmF5RGF0YVwiIFt2YWx1ZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2RhdGEuS2V5fX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgQ0hFQ0tCT1ggKFNFTEVaSU9ORSBNVUxUSVBMQSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5QcmVzZW50YXRpb25Nb2RlID09IExpc3RQcmVzZW50YXRpb25FbnVtWydSYWRpbyBidXR0b24nXSAmJiBmaWVsZC5Jc011bHRpQ2hvaWNoZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBjbGFzcz1cIm1yLTJcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWQgfHwgdGhpcy5maWVsZC5SZWFkb25seVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGEuU2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICB7e2RhdGEuS2V5fX1cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUFVMU0FOVEkgKENPTiBURVNUTyBPIElNTUFHSU5JKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIltMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ11dLmluY2x1ZGVzKGZpZWxkLlByZXNlbnRhdGlvbk1vZGUpXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tMSBkYXRhLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLWJ1dHRvbic6IGRhdGEuU2VsZWN0ZWQgPT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvblNlbGVjdENsaWNrKGRhdGEpXCIgW2Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7e2RhdGEuS2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatFormField } from '@angular/material/form-field';
|
|
3
|
+
import { refreshOutlineNotch, watchOutlineNotch } from '../../../../utils/refresh-outline-notch';
|
|
4
|
+
import { buildFloatingLabelBaseRules, cssSetsTop, LABEL_FLOATING_SUFFIX, readStyleCss } from '../../../../utils/floating-label-styles';
|
|
2
5
|
import { TmwNumericInputMode } from 'tmw-numeric';
|
|
3
6
|
import { UtilityHelperService } from '../../../../services/utilityHelper.services';
|
|
4
7
|
import { NumericFieldIconPositionEnum } from '../../../../models/fields/numericField.model';
|
|
@@ -17,6 +20,9 @@ const ELEMENT_SELECTORS = {
|
|
|
17
20
|
Container: ' .mat-mdc-text-field-wrapper',
|
|
18
21
|
Input: ' .mat-mdc-form-field-infix',
|
|
19
22
|
Descrizione: ' label.mat-mdc-floating-label',
|
|
23
|
+
// Descrizione: grafica base della label, sempre valida. Sollevata (virtuale, salvata dentro
|
|
24
|
+
// Descrizione): override quando è sul bordo
|
|
25
|
+
DescrizioneSollevata: ' label.mat-mdc-floating-label' + LABEL_FLOATING_SUFFIX,
|
|
20
26
|
Icona: [' .mat-mdc-form-field-icon-prefix', ' .mat-mdc-form-field-icon-suffix'],
|
|
21
27
|
Errore: ' mat-error',
|
|
22
28
|
};
|
|
@@ -42,6 +48,7 @@ export class NumericFieldTemplateComponent {
|
|
|
42
48
|
this.isDirty = false;
|
|
43
49
|
this.styleEl = null;
|
|
44
50
|
this.statusSub = null;
|
|
51
|
+
this.notchObserver = null;
|
|
45
52
|
}
|
|
46
53
|
ngOnInit() {
|
|
47
54
|
this.fieldUid = 'nf-' + Math.random().toString(36).slice(2, 10);
|
|
@@ -64,6 +71,9 @@ export class NumericFieldTemplateComponent {
|
|
|
64
71
|
if (changes['forceState']) {
|
|
65
72
|
this.updateStateClasses();
|
|
66
73
|
}
|
|
74
|
+
if (changes['styleVersion'] || changes['forceState']) {
|
|
75
|
+
refreshOutlineNotch(this.formField);
|
|
76
|
+
}
|
|
67
77
|
if (changes['record'] != undefined && changes['record'].firstChange == false
|
|
68
78
|
&& JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
|
|
69
79
|
this.record = changes['record'].currentValue;
|
|
@@ -71,7 +81,11 @@ export class NumericFieldTemplateComponent {
|
|
|
71
81
|
this.updateStateClasses();
|
|
72
82
|
}
|
|
73
83
|
}
|
|
84
|
+
ngAfterViewInit() {
|
|
85
|
+
this.notchObserver = watchOutlineNotch(this.formField);
|
|
86
|
+
}
|
|
74
87
|
ngOnDestroy() {
|
|
88
|
+
this.notchObserver?.disconnect();
|
|
75
89
|
if (this.styleEl?.parentNode) {
|
|
76
90
|
this.styleEl.parentNode.removeChild(this.styleEl);
|
|
77
91
|
}
|
|
@@ -156,13 +170,14 @@ export class NumericFieldTemplateComponent {
|
|
|
156
170
|
: 'display: none;'} }`);
|
|
157
171
|
lines.push(`#${uid} .mdc-notched-outline { border: 0; }`);
|
|
158
172
|
lines.push(`#${uid} input.mat-mdc-input-element { color: inherit; }`);
|
|
173
|
+
lines.push(...buildFloatingLabelBaseRules(uid, ELEMENT_SELECTORS.Descrizione, css));
|
|
159
174
|
for (const el of ELEMENTS) {
|
|
160
175
|
const sEntry = ELEMENT_SELECTORS[el];
|
|
161
176
|
const selList = Array.isArray(sEntry) ? sEntry : [sEntry];
|
|
162
177
|
for (const state of STATES) {
|
|
163
178
|
const key = el + state;
|
|
164
179
|
const defaultVal = DEFAULT_FIELD_STYLES[key];
|
|
165
|
-
const userVal = css
|
|
180
|
+
const userVal = readStyleCss(css, key);
|
|
166
181
|
if (!defaultVal?.trim() && !userVal?.trim())
|
|
167
182
|
continue;
|
|
168
183
|
for (const s of selList) {
|
|
@@ -174,6 +189,10 @@ export class NumericFieldTemplateComponent {
|
|
|
174
189
|
lines.push(`${selector} { ${defaultVal} }`);
|
|
175
190
|
if (userVal?.trim())
|
|
176
191
|
lines.push(`${selector} { ${userVal} }`);
|
|
192
|
+
if (userVal?.trim() && el === 'Descrizione') {
|
|
193
|
+
if (cssSetsTop(userVal))
|
|
194
|
+
lines.push(this.getSelector(uid, el, state, s + LABEL_FLOATING_SUFFIX, sub) + ' { top: 0; }');
|
|
195
|
+
}
|
|
177
196
|
if (el === 'Container') {
|
|
178
197
|
const outlineSel = this.getOutlineSelector(uid, state);
|
|
179
198
|
if (outlineSel) {
|
|
@@ -303,7 +322,7 @@ export class NumericFieldTemplateComponent {
|
|
|
303
322
|
}
|
|
304
323
|
}
|
|
305
324
|
NumericFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NumericFieldTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
306
|
-
NumericFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div [id]=\"fieldUid\" class=\"eqp-nf-wrapper\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\"\r\n [class.has-prefix-icon]=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\" matPrefix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (ngModelChange)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition == NumericFieldIconPositionEnum.Destra\" matSuffix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n </mat-form-field>\r\n</div>\r\n", styles: ["::ng-deep .mat-form-field-label{font-size:x-large}::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mat-form-field-label,::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mdc-floating-label{padding-left:50px}\n"], dependencies: [{ kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.TmwNumericMaskDirective, selector: "[tmwNumericMask]", inputs: ["options"] }, { kind: "component", type: i6.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }] });
|
|
325
|
+
NumericFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, viewQueries: [{ propertyName: "formField", first: true, predicate: MatFormField, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [id]=\"fieldUid\" class=\"eqp-nf-wrapper\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\"\r\n [class.has-prefix-icon]=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\" matPrefix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (ngModelChange)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition == NumericFieldIconPositionEnum.Destra\" matSuffix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n </mat-form-field>\r\n</div>\r\n", styles: ["::ng-deep .mat-form-field-label{font-size:x-large}::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mat-form-field-label,::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mdc-floating-label{padding-left:50px}\n"], dependencies: [{ kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.TmwNumericMaskDirective, selector: "[tmwNumericMask]", inputs: ["options"] }, { kind: "component", type: i6.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }] });
|
|
307
326
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NumericFieldTemplateComponent, decorators: [{
|
|
308
327
|
type: Component,
|
|
309
328
|
args: [{ selector: 'numeric-field-template', template: "<div [id]=\"fieldUid\" class=\"eqp-nf-wrapper\">\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\"\r\n [class.has-prefix-icon]=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\" matPrefix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (ngModelChange)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n </mat-error>\r\n <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition == NumericFieldIconPositionEnum.Destra\" matSuffix\r\n [name]=\"field.IconName\">\r\n </tmw-icon>\r\n </mat-form-field>\r\n</div>\r\n", styles: ["::ng-deep .mat-form-field-label{font-size:x-large}::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mat-form-field-label,::ng-deep .has-prefix-icon:not(.mat-form-field-should-float) .mdc-floating-label{padding-left:50px}\n"] }]
|
|
@@ -317,9 +336,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
317
336
|
type: Input
|
|
318
337
|
}], styleVersion: [{
|
|
319
338
|
type: Input
|
|
339
|
+
}], formField: [{
|
|
340
|
+
type: ViewChild,
|
|
341
|
+
args: [MatFormField]
|
|
320
342
|
}], forceState: [{
|
|
321
343
|
type: Input
|
|
322
344
|
}], recordChange: [{
|
|
323
345
|
type: Output
|
|
324
346
|
}] } });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQWdCLDRCQUE0QixFQUF3QixNQUFNLDhDQUE4QyxDQUFDO0FBRWhJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFHeEUsd0VBQXdFO0FBQ3hFLG9DQUFvQztBQUNwQyxNQUFNLGlCQUFpQixHQUF5QztJQUM5RCxTQUFTLEVBQUUsOEJBQThCO0lBQ3pDLEtBQUssRUFBRSw0QkFBNEI7SUFDbkMsV0FBVyxFQUFFLCtCQUErQjtJQUM1QyxLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxrQ0FBa0MsQ0FBQztJQUMvRSxNQUFN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LENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQzs7MkhBaFRVLDZCQUE2QjsrR0FBN0IsNkJBQTZCLDBSQ2pDMUMsazBDQWtCQTs0RkRlYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0Usd0JBQXdCO2dHQU16QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVG13TnVtZXJpY0lucHV0TW9kZSwgVG13TnVtZXJpY09wdGlvbnMgfSBmcm9tICd0bXctbnVtZXJpYyc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQsIE51bWVyaWNGaWVsZEljb25Qb3NpdGlvbkVudW0sIE51bWVyaWNGaWVsZFN0eWxlQ1NTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbi8vIFNlbGV0dG9yaSBDU1MgTURDIChBbmd1bGFyIE1hdGVyaWFsIDE1KSDigJQgc3Rlc3NvIHNjaGVtYSBkaSBUZXh0RmllbGQuXHJcbi8vIE51bWVyaWNGaWVsZCBub24gaGEgaWwgTWljcm9mb25vLlxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge1xyXG4gIENvbnRhaW5lcjogJyAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXInLFxyXG4gIElucHV0OiAnIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXgnLFxyXG4gIERlc2NyaXppb25lOiAnIGxhYmVsLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG4gIEljb25hOiBbJyAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4JywgJyAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4J10sXHJcbiAgRXJyb3JlOiAnIG1hdC1lcnJvcicsXHJcbn07XHJcbmNvbnN0IEVMRU1FTlRTID0gT2JqZWN0LmtleXMoRUxFTUVOVF9TRUxFQ1RPUlMpO1xyXG5jb25zdCBTVEFURVMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ0ZvY3VzZWQnLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuXHJcbmNvbnN0IERFRkFVTFRfRklFTERfU1RZTEVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lck5vcm1hbGU6ICdib3JkZXItcmFkaXVzOiA0cHg7JyxcclxuICBJbnB1dE5vcm1hbGU6ICdwYWRkaW5nLWxlZnQ6IDVweDsnLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdudW1lcmljLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljRmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTnVtZXJpY0ZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqIEluY3JlbWVudGEgZGFsbCdlc3Rlcm5vIHBlciBmb3J6YXJlIGlsIHJpY2FsY29sbyBkZWdsaSBzdGlsaSBDU1MgKGVzLiBkYWwgY29uZmlndXJhdG9yZSkgKi9cclxuICBASW5wdXQoKSBzdHlsZVZlcnNpb246IG51bWJlciA9IDA7XHJcbiAgLyoqIEZvcnphIHZpc2l2YW1lbnRlIHVubyBzdGF0byBzcGVjaWZpY28gbmVsbCdhbnRlcHJpbWEgZGVsIGNvbmZpZ3VyYXRvcmUgKi9cclxuICBASW5wdXQoKSBmb3JjZVN0YXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgdmFsaWRhdG9yc0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGVxcE51bWVyaWNPcHRpb25zOiBQYXJ0aWFsPFRtd051bWVyaWNPcHRpb25zPiA9IHt9O1xyXG4gIE51bWVyaWNGaWVsZEljb25Qb3NpdGlvbkVudW0gPSBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtO1xyXG5cclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBpc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZpZWxkVWlkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdHlsZUVsOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWVsZFVpZCA9ICduZi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy5jb25maWd1cmVFcXBOdW1lcmljT3B0aW9ucygpO1xyXG4gICAgdGhpcy5jb25maWd1cmVDb250cm9sbGVycygpO1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgICB0aGlzLmluamVjdE51bWVyaWNGaWVsZFN0eWxlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3ROdW1lcmljRmllbGRTdHlsZXMoKTtcclxuICAgICAgaWYgKHRoaXMuaW5Db25maWcpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRm9ybVN0YXR1cygpO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlQ29udHJvbGxlcnMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ZvcmNlU3RhdGUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZVxyXG4gICAgICAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0eWxlRWw/LnBhcmVudE5vZGUpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5MYWJlbHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5MYWJlbHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJpZ2VuZXJhIGlsIHRhZyA8c3R5bGU+IGNvbiBkZWZhdWx0cyArIHJlZ29sZSB1dGVudGUsIGVudHJhbWJpIHNjb3BlZCBwZXIgI3VpZCAqL1xyXG4gIGluamVjdE51bWVyaWNGaWVsZFN0eWxlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY3NzID0gKHRoaXMuZmllbGQgYXMgTnVtZXJpY0ZpZWxkKT8uTnVtZXJpY0ZpZWxkU3R5bGVDU1MgPz8gKHt9IGFzIE51bWVyaWNGaWVsZFN0eWxlQ1NTKTtcclxuICAgIGxldCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKHRoaXMuaW5Db25maWcpIHtcclxuICAgICAgcnVsZXMgKz0gYFxcbiMke3RoaXMuZmllbGRVaWR9IC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIgeyBkaXNwbGF5OiBub25lOyB9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuc3R5bGVFbCkge1xyXG4gICAgICB0aGlzLnN0eWxlRWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJykgYXMgSFRNTFN0eWxlRWxlbWVudDtcclxuICAgICAgdGhpcy5zdHlsZUVsLmlkID0gJ3N0eWxlLScgKyB0aGlzLmZpZWxkVWlkO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0eWxlRWwudGV4dENvbnRlbnQgPSBydWxlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0b3IodWlkOiBzdHJpbmcsIF9lbDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBzOiBzdHJpbmcsIF9zdWI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogICByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnRm9jdXNlZCc6ICAgcmV0dXJuIGAjJHt1aWR9OmZvY3VzLXdpdGhpbiR7c30sICMke3VpZH0uZXFwLXN0YXRlLWZvY3VzZWQke3N9YDtcclxuICAgICAgY2FzZSAnTm90VmFsaWQnOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1pbnZhbGlkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1JlYWRvbmx5JzogIHJldHVybiBgIyR7dWlkfS5lcXAtcmVhZG9ubHkke3N9YDtcclxuICAgICAgZGVmYXVsdDogICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Qm9yZGVyVG9PdXRsaW5lKHNlbGVjdG9yOiBzdHJpbmcsIGNzczogc3RyaW5nLCBsaW5lczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGlmICghY3NzPy50cmltKCkpIHJldHVybjtcclxuICAgIGNvbnN0IGRlY2xzID0gY3NzLnNwbGl0KCc7JykubWFwKGQgPT4gZC50cmltKCkpLmZpbHRlcihkID0+IC9eYm9yZGVyL2kudGVzdChkKSAmJiBkLmxlbmd0aCA+IDApO1xyXG4gICAgaWYgKCFkZWNscy5sZW5ndGgpIHJldHVybjtcclxuICAgIGlmIChkZWNscy5zb21lKGQgPT4gL15ib3JkZXIoPyEtKGNvbG9yfHJhZGl1cykpL2kudGVzdChkKSkpIHtcclxuICAgICAgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OyB9YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjb2xvckRlY2xzID0gZGVjbHMuZmlsdGVyKGQgPT4gL15ib3JkZXItY29sb3IvaS50ZXN0KGQpKS5qb2luKCc7ICcpO1xyXG4gICAgICBpZiAoY29sb3JEZWNscy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtjb2xvckRlY2xzfTsgfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPdXRsaW5lU2VsZWN0b3IodWlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHNlZ3MgPSAocHJlZjogc3RyaW5nKSA9PiBbXHJcbiAgICAgIGAjJHt1aWR9JHtwcmVmfSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ2AsXHJcbiAgICAgIGAjJHt1aWR9JHtwcmVmfSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2hgLFxyXG4gICAgICBgIyR7dWlkfSR7cHJlZn0gLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nYCxcclxuICAgIF0uam9pbignLCAnKTtcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSAnTm9ybWFsZSc6ICAgcmV0dXJuIHNlZ3MoJycpO1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOiByZXR1cm4gYCR7c2VncygnOmhvdmVyJyl9LCAke3NlZ3MoJy5lcXAtc3RhdGUtaG92ZXInKX1gO1xyXG4gICAgICBjYXNlICdGb2N1c2VkJzogICByZXR1cm4gYCR7c2VncygnOmZvY3VzLXdpdGhpbicpfSwgJHtzZWdzKCcuZXFwLXN0YXRlLWZvY3VzZWQnKX1gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICByZXR1cm4gc2VncygnLmVxcC1pbnZhbGlkJyk7XHJcbiAgICAgIGNhc2UgJ1JlYWRvbmx5JzogIHJldHVybiBzZWdzKCcuZXFwLXJlYWRvbmx5Jyk7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZENzc1J1bGVzKHVpZDogc3RyaW5nLCBjc3M6IE51bWVyaWNGaWVsZFN0eWxlQ1NTKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5mID0gdGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQ7XHJcbiAgICBjb25zdCBoYXNQcmVmaXggPSAhIShuZi5JY29uTmFtZSAmJiBuZi5JY29uUG9zaXRpb24gIT09IE51bWVyaWNGaWVsZEljb25Qb3NpdGlvbkVudW0uRGVzdHJhKTtcclxuICAgIGNvbnN0IGhhc1N1ZmZpeCA9ICEhKG5mLkljb25OYW1lICYmIG5mLkljb25Qb3NpdGlvbiA9PT0gTnVtZXJpY0ZpZWxkSWNvblBvc2l0aW9uRW51bS5EZXN0cmEpO1xyXG5cclxuICAgIGxpbmVzLnB1c2goXHJcbiAgICAgIGAjJHt1aWR9IG1hdC1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1zdWZmaXggLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyYCArXHJcbiAgICAgIGAgeyBwYWRkaW5nLWxlZnQ6IDA7IH1gXHJcbiAgICApO1xyXG4gICAgbGluZXMucHVzaChcclxuICAgICAgYCMke3VpZH0gbWF0LWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJgICtcclxuICAgICAgYCB7IHBhZGRpbmctcmlnaHQ6IDA7IH1gXHJcbiAgICApO1xyXG4gICAgbGluZXMucHVzaChcclxuICAgICAgYCMke3VpZH0gLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCB7ICR7aGFzUHJlZml4XHJcbiAgICAgICAgPyAnYWxpZ24tc2VsZjogc3RyZXRjaDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgcGFkZGluZzogMDsnXHJcbiAgICAgICAgOiAnZGlzcGxheTogbm9uZTsnfSB9YFxyXG4gICAgKTtcclxuICAgIGxpbmVzLnB1c2goXHJcbiAgICAgIGAjJHt1aWR9IC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXggeyAke2hhc1N1ZmZpeFxyXG4gICAgICAgID8gJ2FsaWduLXNlbGY6IHN0cmV0Y2g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDA7J1xyXG4gICAgICAgIDogJ2Rpc3BsYXk6IG5vbmU7J30gfWBcclxuICAgICk7XHJcbiAgICBsaW5lcy5wdXNoKGAjJHt1aWR9IC5tZGMtbm90Y2hlZC1vdXRsaW5lIHsgYm9yZGVyOiAwOyB9YCk7XHJcbiAgICBsaW5lcy5wdXNoKGAjJHt1aWR9IGlucHV0Lm1hdC1tZGMtaW5wdXQtZWxlbWVudCB7IGNvbG9yOiBpbmhlcml0OyB9YCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbCBvZiBFTEVNRU5UUykge1xyXG4gICAgICBjb25zdCBzRW50cnkgPSBFTEVNRU5UX1NFTEVDVE9SU1tlbF07XHJcbiAgICAgIGNvbnN0IHNlbExpc3QgPSBBcnJheS5pc0FycmF5KHNFbnRyeSkgPyBzRW50cnkgOiBbc0VudHJ5XTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgU1RBVEVTKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZWwgKyBzdGF0ZTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBERUZBVUxUX0ZJRUxEX1NUWUxFU1trZXldO1xyXG4gICAgICAgIGNvbnN0IHVzZXJWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChjc3MgYXMgYW55KVtrZXldO1xyXG5cclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBzIG9mIHNlbExpc3QpIHtcclxuICAgICAgICAgIGNvbnN0IHN1YiA9IHMudHJpbSgpO1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgZWwsIHN0YXRlLCBzLCBzdWIpO1xyXG4gICAgICAgICAgaWYgKCFzZWxlY3RvcikgY29udGludWU7XHJcblxyXG4gICAgICAgICAgaWYgKGRlZmF1bHRWYWw/LnRyaW0oKSkgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2RlZmF1bHRWYWx9IH1gKTtcclxuICAgICAgICAgIGlmICh1c2VyVmFsPy50cmltKCkpICAgIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHt1c2VyVmFsfSB9YCk7XHJcblxyXG4gICAgICAgICAgaWYgKGVsID09PSAnQ29udGFpbmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRsaW5lU2VsID0gdGhpcy5nZXRPdXRsaW5lU2VsZWN0b3IodWlkLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmIChvdXRsaW5lU2VsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBseUJvcmRlclRvT3V0bGluZShvdXRsaW5lU2VsLCBkZWZhdWx0VmFsID8/ICcnLCBsaW5lcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBseUJvcmRlclRvT3V0bGluZShvdXRsaW5lU2VsLCB1c2VyVmFsID8/ICcnLCBsaW5lcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLWhvdmVyJywgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1mb2N1c2VkJywgdGhpcy5mb3JjZVN0YXRlID09PSAnRm9jdXNlZCcpO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdOb3RWYWxpZCcpIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JjZVN0YXRlID09PSAnUmVhZG9ubHknKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIHRydWUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ05vcm1hbGUnIHx8IHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ01vdXNlb3ZlcicgfHwgdGhpcy5mb3JjZVN0YXRlID09PSAnRm9jdXNlZCcpIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlzUmVhZG9ubHkgPSB0aGlzLmZpZWxkLlJlYWRvbmx5IHx8ICh0aGlzLmZpZWxkLkZvcm11bGEgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkZvcm11bGEgIT09ICcnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGlzUmVhZG9ubHkpO1xyXG5cclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXA/LmNvbnRyb2xzPy5bdGhpcy5maWVsZC5OYW1lXTtcclxuICAgIGlmIChjdHJsPy50b3VjaGVkKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmludmFsaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUNsYXNzKGVsOiBFbGVtZW50LCBjbHM6IHN0cmluZywgY29uZGl0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsLCBjbHMpO1xyXG4gICAgZWxzZSB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBjbHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXR1c1N1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIGlmICh0aGlzLmZpZWxkPy5Gb3JtRm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViID0gdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuUmVhZG9ubHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlJlYWRvbmx5SWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKCh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgfHwgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5Gb3JtdWxhKSAmJiB0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuRm9ybXVsYSwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuaW5Db25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb250cm9sbGVycygpO1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQuTmFtZSk/Lm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XHJcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUVxcE51bWVyaWNPcHRpb25zKCkge1xyXG4gICAgLy8gYWxpZ24vbnVsbGFibGUvbWluL21heDogcmVwbGljYW5vIGkgZGVmYXVsdCBnbG9iYWxpIGRlbCB2ZWNjaGlvIEVxcE51bWVyaWNNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgLy8gY2hlIHRtdy1udW1lcmljIG5vbiBoYSAobmVzc3VuIGZvclJvb3QpIOKAlCB2YW5ubyBpbXBvc3RhdGkgZXNwbGljaXRhbWVudGUgcGVyIG5vbiBjYW1iaWFyZVxyXG4gICAgLy8gY29tcG9ydGFtZW50byBzaWxlbnppb3NhbWVudGUuXHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLmFsaWduID0gXCJsZWZ0XCI7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLm51bGxhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMubWluID0gbnVsbDtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMubWF4ID0gbnVsbDtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMuc3VmZml4ID0gdGhpcy5maWVsZC5NZWFzdXJlVW5pdCA/IFwiICBcIiArIHRoaXMuZmllbGQuTWVhc3VyZVVuaXQgKyBcIiAgXCIgOiBcIlwiO1xyXG4gICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5wcmVmaXggPSB0aGlzLmZpZWxkLkN1cnJlbmN5U3ltYm9sID8gdGhpcy5maWVsZC5DdXJyZW5jeVN5bWJvbCArIFwiIFwiIDogXCJcIjtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMuaW5wdXRNb2RlID0gdGhpcy5maWVsZC5DdXJyZW5jeVN5bWJvbCA/IFRtd051bWVyaWNJbnB1dE1vZGUuRklOQU5DSUFMIDogVG13TnVtZXJpY0lucHV0TW9kZS5OQVRVUkFMO1xyXG4gICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5hbGxvd05lZ2F0aXZlID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRlY2ltYWxTZXBhcmF0b3IgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRlY2ltYWxTZXBhcmF0b3IgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLmRlY2ltYWwgPSB0aGlzLmZpZWxkLkRlY2ltYWxTZXBhcmF0b3I7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMuZGVjaW1hbCA9IFwiLlwiO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yICE9IG51bGwgJiYgdGhpcy5maWVsZC5UaG91c2FuZHNTZXBhcmF0b3IgIT0gdW5kZWZpbmVkICYmIHRoaXMuZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnRob3VzYW5kcyA9IHRoaXMuZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuSXNJbnRlZ2VyID09IGZhbHNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkRlY2ltYWxQcmVjaXNpb24gIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkRlY2ltYWxQcmVjaXNpb24gIT0gdW5kZWZpbmVkKSB7IHRoaXMuZXFwTnVtZXJpY09wdGlvbnMucHJlY2lzaW9uID0gdGhpcy5maWVsZC5EZWNpbWFsUHJlY2lzaW9uOyB9XHJcbiAgICAgIGVsc2UgeyB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnByZWNpc2lvbiA9IDI7IH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMucHJlY2lzaW9uID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlQ29udHJvbGxlcnMoKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRvcnNBcnJheSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuTWluVmFsdWUgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLk1pblZhbHVlICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy52YWxpZGF0b3JzQXJyYXkucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmZpZWxkLk1pblZhbHVlKSk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5NYXhWYWx1ZSAhPSBudWxsICYmIHRoaXMuZmllbGQuTWF4VmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLnZhbGlkYXRvcnNBcnJheS5wdXNoKFZhbGlkYXRvcnMubWF4KHRoaXMuZmllbGQuTWF4VmFsdWUpKTtcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuZ2V0KFt0aGlzLmZpZWxkLk5hbWVdKTtcclxuICAgIGN0cmwuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRvcnNBcnJheSk7XHJcbiAgICBjdHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlydHkoKSB7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtpZF09XCJmaWVsZFVpZFwiIGNsYXNzPVwiZXFwLW5mLXdyYXBwZXJcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgW2Zvcm1Hcm91cF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgW2NsYXNzLmhhcy1wcmVmaXgtaWNvbl09XCJmaWVsZC5JY29uTmFtZSAmJiBmaWVsZC5JY29uUG9zaXRpb24gIT0gTnVtZXJpY0ZpZWxkSWNvblBvc2l0aW9uRW51bS5EZXN0cmFcIj5cclxuICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJwdC0xXCIgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiPnt7ZmllbGQuRGVzY3JpcHRpb259fTwvbWF0LWxhYmVsPlxyXG4gICAgPHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiAqbmdJZj1cImZpZWxkLkljb25OYW1lICYmIGZpZWxkLkljb25Qb3NpdGlvbiAhPSBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtLkRlc3RyYVwiIG1hdFByZWZpeFxyXG4gICAgICBbbmFtZV09XCJmaWVsZC5JY29uTmFtZVwiPlxyXG4gICAgPC90bXctaWNvbj5cclxuICAgIDxpbnB1dCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgbWF0SW5wdXQgdG13TnVtZXJpY01hc2sgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCIgW3JlYWRvbmx5XT1cImZpZWxkLlJlYWRvbmx5XCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiIFtvcHRpb25zXT1cImVxcE51bWVyaWNPcHRpb25zXCJcclxuICAgICAgICBbc3RlcF09XCJmaWVsZC5Jc0ludGVnZXIgPyAxIDogbnVsbFwiIChibHVyKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiIChrZXlwcmVzcyk9XCJzZXREaXJ0eSgpXCIgLz5cclxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCIhZmllbGQuRm9ybUZvcm1Hcm91cC52YWxpZCAmJiBmaWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLk5hbWVdLnRvdWNoZWQgJiYgIWZpZWxkLlJlYWRvbmx5XCI+XHJcbiAgICAgICAgTWluOiB7e2ZpZWxkLk1pblZhbHVlfX0gLSBNYXg6IHt7ZmllbGQuTWF4VmFsdWV9fVxyXG4gICAgPC9tYXQtZXJyb3I+XHJcbiAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiICpuZ0lmPVwiZmllbGQuSWNvbk5hbWUgJiYgZmllbGQuSWNvblBvc2l0aW9uID09IE51bWVyaWNGaWVsZEljb25Qb3NpdGlvbkVudW0uRGVzdHJhXCIgbWF0U3VmZml4XHJcbiAgICAgIFtuYW1lXT1cImZpZWxkLkljb25OYW1lXCI+XHJcbiAgICA8L3Rtdy1pY29uPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQTRCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2SSxPQUFPLEVBQUUsbUJBQW1CLEVBQXFCLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRW5GLE9BQU8sRUFBZ0IsNEJBQTRCLEVBQXdCLE1BQU0sOENBQThDLENBQUM7QUFFaEksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFv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QUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7OzJIQWhVVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixnVEFRN0IsWUFBWSxxRUMvQ3pCLGswQ0FrQkE7NEZEcUJhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx3QkFBd0I7Z0dBTXpCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ21CLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFFZCxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IHJlZnJlc2hPdXRsaW5lTm90Y2gsIHdhdGNoT3V0bGluZU5vdGNoIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvcmVmcmVzaC1vdXRsaW5lLW5vdGNoJztcclxuaW1wb3J0IHsgYnVpbGRGbG9hdGluZ0xhYmVsQmFzZVJ1bGVzLCBjc3NTZXRzVG9wLCBMQUJFTF9GTE9BVElOR19TVUZGSVgsIHJlYWRTdHlsZUNzcyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2Zsb2F0aW5nLWxhYmVsLXN0eWxlcyc7XHJcbmltcG9ydCB7IFRtd051bWVyaWNJbnB1dE1vZGUsIFRtd051bWVyaWNPcHRpb25zIH0gZnJvbSAndG13LW51bWVyaWMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkLCBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtLCBOdW1lcmljRmllbGRTdHlsZUNTUyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vLyBTZWxldHRvcmkgQ1NTIE1EQyAoQW5ndWxhciBNYXRlcmlhbCAxNSkg4oCUIHN0ZXNzbyBzY2hlbWEgZGkgVGV4dEZpZWxkLlxyXG4vLyBOdW1lcmljRmllbGQgbm9uIGhhIGlsIE1pY3JvZm9uby5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSA9IHtcclxuICBDb250YWluZXI6ICcgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyJyxcclxuICBJbnB1dDogJyAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4JyxcclxuICBEZXNjcml6aW9uZTogJyBsYWJlbC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVsJyxcclxuICAvLyBEZXNjcml6aW9uZTogZ3JhZmljYSBiYXNlIGRlbGxhIGxhYmVsLCBzZW1wcmUgdmFsaWRhLiBTb2xsZXZhdGEgKHZpcnR1YWxlLCBzYWx2YXRhIGRlbnRyb1xyXG4gIC8vIERlc2NyaXppb25lKTogb3ZlcnJpZGUgcXVhbmRvIMOoIHN1bCBib3Jkb1xyXG4gIERlc2NyaXppb25lU29sbGV2YXRhOiAnIGxhYmVsLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwnICsgTEFCRUxfRkxPQVRJTkdfU1VGRklYLFxyXG4gIEljb25hOiBbJyAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4JywgJyAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4J10sXHJcbiAgRXJyb3JlOiAnIG1hdC1lcnJvcicsXHJcbn07XHJcbmNvbnN0IEVMRU1FTlRTID0gT2JqZWN0LmtleXMoRUxFTUVOVF9TRUxFQ1RPUlMpO1xyXG5jb25zdCBTVEFURVMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ0ZvY3VzZWQnLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuXHJcbmNvbnN0IERFRkFVTFRfRklFTERfU1RZTEVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lck5vcm1hbGU6ICdib3JkZXItcmFkaXVzOiA0cHg7JyxcclxuICBJbnB1dE5vcm1hbGU6ICdwYWRkaW5nLWxlZnQ6IDVweDsnLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdudW1lcmljLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdW1lcmljRmllbGRUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBmaWVsZDogTnVtZXJpY0ZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqIEluY3JlbWVudGEgZGFsbCdlc3Rlcm5vIHBlciBmb3J6YXJlIGlsIHJpY2FsY29sbyBkZWdsaSBzdGlsaSBDU1MgKGVzLiBkYWwgY29uZmlndXJhdG9yZSkgKi9cclxuICBASW5wdXQoKSBzdHlsZVZlcnNpb246IG51bWJlciA9IDA7XHJcbiAgQFZpZXdDaGlsZChNYXRGb3JtRmllbGQpIGZvcm1GaWVsZDogTWF0Rm9ybUZpZWxkO1xyXG4gIC8qKiBGb3J6YSB2aXNpdmFtZW50ZSB1bm8gc3RhdG8gc3BlY2lmaWNvIG5lbGwnYW50ZXByaW1hIGRlbCBjb25maWd1cmF0b3JlICovXHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIHZhbGlkYXRvcnNBcnJheTogYW55W10gPSBbXTtcclxuICBlcXBOdW1lcmljT3B0aW9uczogUGFydGlhbDxUbXdOdW1lcmljT3B0aW9ucz4gPSB7fTtcclxuICBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtID0gTnVtZXJpY0ZpZWxkSWNvblBvc2l0aW9uRW51bTtcclxuXHJcbiAgRmllbGRzdHlsZU9iajogYW55O1xyXG4gIExhYmVsc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgaXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgc3RhdHVzU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBub3RjaE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkVWlkID0gJ25mLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUVxcE51bWVyaWNPcHRpb25zKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUNvbnRyb2xsZXJzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICAgIHRoaXMuaW5qZWN0TnVtZXJpY0ZpZWxkU3R5bGVzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRm9ybVN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddICYmICFjaGFuZ2VzWydzdHlsZVZlcnNpb24nXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmluamVjdE51bWVyaWNGaWVsZFN0eWxlcygpO1xyXG4gICAgICBpZiAodGhpcy5pbkNvbmZpZykge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVDb250cm9sbGVycygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZm9yY2VTdGF0ZSddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10gfHwgY2hhbmdlc1snZm9yY2VTdGF0ZSddKSB7XHJcbiAgICAgIHJlZnJlc2hPdXRsaW5lTm90Y2godGhpcy5mb3JtRmllbGQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZVxyXG4gICAgICAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5vdGNoT2JzZXJ2ZXIgPSB3YXRjaE91dGxpbmVOb3RjaCh0aGlzLmZvcm1GaWVsZCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubm90Y2hPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG4gICAgaWYgKHRoaXMuc3R5bGVFbD8ucGFyZW50Tm9kZSkge1xyXG4gICAgICB0aGlzLnN0eWxlRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0dXNTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICAvKiogUmlnZW5lcmEgaWwgdGFnIDxzdHlsZT4gY29uIGRlZmF1bHRzICsgcmVnb2xlIHV0ZW50ZSwgZW50cmFtYmkgc2NvcGVkIHBlciAjdWlkICovXHJcbiAgaW5qZWN0TnVtZXJpY0ZpZWxkU3R5bGVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkVWlkKSByZXR1cm47XHJcbiAgICBjb25zdCBjc3MgPSAodGhpcy5maWVsZCBhcyBOdW1lcmljRmllbGQpPy5OdW1lcmljRmllbGRTdHlsZUNTUyA/PyAoe30gYXMgTnVtZXJpY0ZpZWxkU3R5bGVDU1MpO1xyXG4gICAgbGV0IHJ1bGVzID0gdGhpcy5idWlsZENzc1J1bGVzKHRoaXMuZmllbGRVaWQsIGNzcyk7XHJcbiAgICBpZiAodGhpcy5pbkNvbmZpZykge1xyXG4gICAgICBydWxlcyArPSBgXFxuIyR7dGhpcy5maWVsZFVpZH0gLm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciB7IGRpc3BsYXk6IG5vbmU7IH1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zdHlsZUVsKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xyXG4gICAgICB0aGlzLnN0eWxlRWwuaWQgPSAnc3R5bGUtJyArIHRoaXMuZmllbGRVaWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgdGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3R5bGVFbC50ZXh0Q29udGVudCA9IHJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgX2VsOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIHM6IHN0cmluZywgX3N1Yjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgIHJldHVybiBgIyR7dWlkfSR7c31gO1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOiByZXR1cm4gYCMke3VpZH06aG92ZXIke3N9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICBjYXNlICdGb2N1c2VkJzogICByZXR1cm4gYCMke3VpZH06Zm9jdXMtd2l0aGluJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtZm9jdXNlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICByZXR1cm4gYCMke3VpZH0uZXFwLWludmFsaWQke3N9YDtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlCb3JkZXJUb091dGxpbmUoc2VsZWN0b3I6IHN0cmluZywgY3NzOiBzdHJpbmcsIGxpbmVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFjc3M/LnRyaW0oKSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZGVjbHMgPSBjc3Muc3BsaXQoJzsnKS5tYXAoZCA9PiBkLnRyaW0oKSkuZmlsdGVyKGQgPT4gL15ib3JkZXIvaS50ZXN0KGQpICYmIGQubGVuZ3RoID4gMCk7XHJcbiAgICBpZiAoIWRlY2xzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgaWYgKGRlY2xzLnNvbWUoZCA9PiAvXmJvcmRlcig/IS0oY29sb3J8cmFkaXVzKSkvaS50ZXN0KGQpKSkge1xyXG4gICAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7IGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IH1gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbG9yRGVjbHMgPSBkZWNscy5maWx0ZXIoZCA9PiAvXmJvcmRlci1jb2xvci9pLnRlc3QoZCkpLmpvaW4oJzsgJyk7XHJcbiAgICAgIGlmIChjb2xvckRlY2xzLnRyaW0oKSkgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2NvbG9yRGVjbHN9OyB9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dGxpbmVTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3Qgc2VncyA9IChwcmVmOiBzdHJpbmcpID0+IFtcclxuICAgICAgYCMke3VpZH0ke3ByZWZ9IC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nYCxcclxuICAgICAgYCMke3VpZH0ke3ByZWZ9IC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaGAsXHJcbiAgICAgIGAjJHt1aWR9JHtwcmVmfSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmdgLFxyXG4gICAgXS5qb2luKCcsICcpO1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogICByZXR1cm4gc2VncygnJyk7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6IHJldHVybiBgJHtzZWdzKCc6aG92ZXInKX0sICR7c2VncygnLmVxcC1zdGF0ZS1ob3ZlcicpfWA7XHJcbiAgICAgIGNhc2UgJ0ZvY3VzZWQnOiAgIHJldHVybiBgJHtzZWdzKCc6Zm9jdXMtd2l0aGluJyl9LCAke3NlZ3MoJy5lcXAtc3RhdGUtZm9jdXNlZCcpfWA7XHJcbiAgICAgIGNhc2UgJ05vdFZhbGlkJzogIHJldHVybiBzZWdzKCcuZXFwLWludmFsaWQnKTtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIHNlZ3MoJy5lcXAtcmVhZG9ubHknKTtcclxuICAgICAgZGVmYXVsdDogICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogTnVtZXJpY0ZpZWxkU3R5bGVDU1MpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3QgbmYgPSB0aGlzLmZpZWxkIGFzIE51bWVyaWNGaWVsZDtcclxuICAgIGNvbnN0IGhhc1ByZWZpeCA9ICEhKG5mLkljb25OYW1lICYmIG5mLkljb25Qb3NpdGlvbiAhPT0gTnVtZXJpY0ZpZWxkSWNvblBvc2l0aW9uRW51bS5EZXN0cmEpO1xyXG4gICAgY29uc3QgaGFzU3VmZml4ID0gISEobmYuSWNvbk5hbWUgJiYgbmYuSWNvblBvc2l0aW9uID09PSBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtLkRlc3RyYSk7XHJcblxyXG4gICAgbGluZXMucHVzaChcclxuICAgICAgYCMke3VpZH0gbWF0LWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJgICtcclxuICAgICAgYCB7IHBhZGRpbmctbGVmdDogMDsgfWBcclxuICAgICk7XHJcbiAgICBsaW5lcy5wdXNoKFxyXG4gICAgICBgIyR7dWlkfSBtYXQtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tcHJlZml4IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcmAgK1xyXG4gICAgICBgIHsgcGFkZGluZy1yaWdodDogMDsgfWBcclxuICAgICk7XHJcbiAgICBsaW5lcy5wdXNoKFxyXG4gICAgICBgIyR7dWlkfSAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4IHsgJHtoYXNQcmVmaXhcclxuICAgICAgICA/ICdhbGlnbi1zZWxmOiBzdHJldGNoOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBwYWRkaW5nOiAwOydcclxuICAgICAgICA6ICdkaXNwbGF5OiBub25lOyd9IH1gXHJcbiAgICApO1xyXG4gICAgbGluZXMucHVzaChcclxuICAgICAgYCMke3VpZH0gLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeCB7ICR7aGFzU3VmZml4XHJcbiAgICAgICAgPyAnYWxpZ24tc2VsZjogc3RyZXRjaDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgcGFkZGluZzogMDsnXHJcbiAgICAgICAgOiAnZGlzcGxheTogbm9uZTsnfSB9YFxyXG4gICAgKTtcclxuICAgIGxpbmVzLnB1c2goYCMke3VpZH0gLm1kYy1ub3RjaGVkLW91dGxpbmUgeyBib3JkZXI6IDA7IH1gKTtcclxuICAgIGxpbmVzLnB1c2goYCMke3VpZH0gaW5wdXQubWF0LW1kYy1pbnB1dC1lbGVtZW50IHsgY29sb3I6IGluaGVyaXQ7IH1gKTtcclxuXHJcbiAgICBsaW5lcy5wdXNoKC4uLmJ1aWxkRmxvYXRpbmdMYWJlbEJhc2VSdWxlcyh1aWQsIEVMRU1FTlRfU0VMRUNUT1JTLkRlc2NyaXppb25lIGFzIHN0cmluZywgY3NzIGFzIGFueSkpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZWwgb2YgRUxFTUVOVFMpIHtcclxuICAgICAgY29uc3Qgc0VudHJ5ID0gRUxFTUVOVF9TRUxFQ1RPUlNbZWxdO1xyXG4gICAgICBjb25zdCBzZWxMaXN0ID0gQXJyYXkuaXNBcnJheShzRW50cnkpID8gc0VudHJ5IDogW3NFbnRyeV07XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWFkU3R5bGVDc3MoY3NzIGFzIGFueSwga2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VmFsPy50cmltKCkgJiYgIXVzZXJWYWw/LnRyaW0oKSkgY29udGludWU7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBzZWxMaXN0KSB7XHJcbiAgICAgICAgICBjb25zdCBzdWIgPSBzLnRyaW0oKTtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIGVsLCBzdGF0ZSwgcywgc3ViKTtcclxuICAgICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgICBpZiAodXNlclZhbD8udHJpbSgpKSAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7dXNlclZhbH0gfWApO1xyXG4gICAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSAmJiBlbCA9PT0gJ0Rlc2NyaXppb25lJykge1xyXG4gICAgICAgICAgICBpZiAoY3NzU2V0c1RvcCh1c2VyVmFsKSkgbGluZXMucHVzaCh0aGlzLmdldFNlbGVjdG9yKHVpZCwgZWwsIHN0YXRlLCBzICsgTEFCRUxfRkxPQVRJTkdfU1VGRklYLCBzdWIpICsgJyB7IHRvcDogMDsgfScpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0NvbnRhaW5lcicpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0bGluZVNlbCA9IHRoaXMuZ2V0T3V0bGluZVNlbGVjdG9yKHVpZCwgc3RhdGUpO1xyXG4gICAgICAgICAgICBpZiAob3V0bGluZVNlbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlCb3JkZXJUb091dGxpbmUob3V0bGluZVNlbCwgZGVmYXVsdFZhbCA/PyAnJywgbGluZXMpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlCb3JkZXJUb091dGxpbmUob3V0bGluZVNlbCwgdXNlclZhbCA/PyAnJywgbGluZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUNsYXNzZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpZWxkVWlkKTtcclxuICAgIGlmICghd3JhcHBlcikgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1ob3ZlcicsICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTW91c2VvdmVyJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtZm9jdXNlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ0ZvY3VzZWQnKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1JlYWRvbmx5Jykge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCBmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdOb3JtYWxlJyB8fCB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInIHx8IHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ0ZvY3VzZWQnKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgZmFsc2UpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCBmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc1JlYWRvbmx5ID0gdGhpcy5maWVsZC5SZWFkb25seSB8fCAodGhpcy5maWVsZC5Gb3JtdWxhICE9IG51bGwgJiYgdGhpcy5maWVsZC5Gb3JtdWxhICE9PSAnJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCBpc1JlYWRvbmx5KTtcclxuXHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwPy5jb250cm9scz8uW3RoaXMuZmllbGQuTmFtZV07XHJcbiAgICBpZiAoY3RybD8udG91Y2hlZCkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5pbnZhbGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXNTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLnN0YXR1c1N1YiA9IHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgaWYgKCF0aGlzLmZpZWxkLkluTGlzdFZpZXcgJiYgIXRoaXMuZmllbGQuTWFpbnRhaW5fVmFsdWUpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmluQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29udHJvbGxlcnMoKTtcclxuICAgICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmdldCh0aGlzLmZpZWxkLk5hbWUpPy5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgaWYgKCF0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xyXG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVFcXBOdW1lcmljT3B0aW9ucygpIHtcclxuICAgIC8vIGFsaWduL251bGxhYmxlL21pbi9tYXg6IHJlcGxpY2FubyBpIGRlZmF1bHQgZ2xvYmFsaSBkZWwgdmVjY2hpbyBFcXBOdW1lcmljTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIC8vIGNoZSB0bXctbnVtZXJpYyBub24gaGEgKG5lc3N1biBmb3JSb290KSDigJQgdmFubm8gaW1wb3N0YXRpIGVzcGxpY2l0YW1lbnRlIHBlciBub24gY2FtYmlhcmVcclxuICAgIC8vIGNvbXBvcnRhbWVudG8gc2lsZW56aW9zYW1lbnRlLlxyXG4gICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5hbGlnbiA9IFwibGVmdFwiO1xyXG4gICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5udWxsYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLm1pbiA9IG51bGw7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLm1heCA9IG51bGw7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnN1ZmZpeCA9IHRoaXMuZmllbGQuTWVhc3VyZVVuaXQgPyBcIiAgXCIgKyB0aGlzLmZpZWxkLk1lYXN1cmVVbml0ICsgXCIgIFwiIDogXCJcIjtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMucHJlZml4ID0gdGhpcy5maWVsZC5DdXJyZW5jeVN5bWJvbCA/IHRoaXMuZmllbGQuQ3VycmVuY3lTeW1ib2wgKyBcIiBcIiA6IFwiXCI7XHJcbiAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLmlucHV0TW9kZSA9IHRoaXMuZmllbGQuQ3VycmVuY3lTeW1ib2wgPyBUbXdOdW1lcmljSW5wdXRNb2RlLkZJTkFOQ0lBTCA6IFRtd051bWVyaWNJbnB1dE1vZGUuTkFUVVJBTDtcclxuICAgIHRoaXMuZXFwTnVtZXJpY09wdGlvbnMuYWxsb3dOZWdhdGl2ZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5maWVsZC5EZWNpbWFsU2VwYXJhdG9yICE9IG51bGwgJiYgdGhpcy5maWVsZC5EZWNpbWFsU2VwYXJhdG9yICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5kZWNpbWFsID0gdGhpcy5maWVsZC5EZWNpbWFsU2VwYXJhdG9yO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLmRlY2ltYWwgPSBcIi5cIjtcclxuICAgIGlmICh0aGlzLmZpZWxkLlRob3VzYW5kc1NlcGFyYXRvciAhPSBudWxsICYmIHRoaXMuZmllbGQuVGhvdXNhbmRzU2VwYXJhdG9yICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZpZWxkLlRob3VzYW5kc1NlcGFyYXRvci50cmltKCkubGVuZ3RoID4gMClcclxuICAgICAgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy50aG91c2FuZHMgPSB0aGlzLmZpZWxkLlRob3VzYW5kc1NlcGFyYXRvcjtcclxuICAgIGlmICh0aGlzLmZpZWxkLklzSW50ZWdlciA9PSBmYWxzZSkge1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EZWNpbWFsUHJlY2lzaW9uICE9IG51bGwgJiYgdGhpcy5maWVsZC5EZWNpbWFsUHJlY2lzaW9uICE9IHVuZGVmaW5lZCkgeyB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnByZWNpc2lvbiA9IHRoaXMuZmllbGQuRGVjaW1hbFByZWNpc2lvbjsgfVxyXG4gICAgICBlbHNlIHsgdGhpcy5lcXBOdW1lcmljT3B0aW9ucy5wcmVjaXNpb24gPSAyOyB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxcE51bWVyaWNPcHRpb25zLnByZWNpc2lvbiA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbnRyb2xsZXJzKCkge1xyXG4gICAgdGhpcy52YWxpZGF0b3JzQXJyYXkgPSBbXTtcclxuICAgIGlmICh0aGlzLmZpZWxkLk1pblZhbHVlICE9IG51bGwgJiYgdGhpcy5maWVsZC5NaW5WYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMudmFsaWRhdG9yc0FycmF5LnB1c2goVmFsaWRhdG9ycy5taW4odGhpcy5maWVsZC5NaW5WYWx1ZSkpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQuTWF4VmFsdWUgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLk1heFZhbHVlICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy52YWxpZGF0b3JzQXJyYXkucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmZpZWxkLk1heFZhbHVlKSk7XHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmdldChbdGhpcy5maWVsZC5OYW1lXSk7XHJcbiAgICBjdHJsLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0b3JzQXJyYXkpO1xyXG4gICAgY3RybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHNldERpcnR5KCkge1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiZmllbGRVaWRcIiBjbGFzcz1cImVxcC1uZi13cmFwcGVyXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgIFtjbGFzcy5oYXMtcHJlZml4LWljb25dPVwiZmllbGQuSWNvbk5hbWUgJiYgZmllbGQuSWNvblBvc2l0aW9uICE9IE51bWVyaWNGaWVsZEljb25Qb3NpdGlvbkVudW0uRGVzdHJhXCI+XHJcbiAgICA8bWF0LWxhYmVsIGNsYXNzPVwicHQtMVwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj57e2ZpZWxkLkRlc2NyaXB0aW9ufX08L21hdC1sYWJlbD5cclxuICAgIDx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgKm5nSWY9XCJmaWVsZC5JY29uTmFtZSAmJiBmaWVsZC5JY29uUG9zaXRpb24gIT0gTnVtZXJpY0ZpZWxkSWNvblBvc2l0aW9uRW51bS5EZXN0cmFcIiBtYXRQcmVmaXhcclxuICAgICAgW25hbWVdPVwiZmllbGQuSWNvbk5hbWVcIj5cclxuICAgIDwvdG13LWljb24+XHJcbiAgICA8aW5wdXQgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIG1hdElucHV0IHRtd051bWVyaWNNYXNrIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiIFtyZWFkb25seV09XCJmaWVsZC5SZWFkb25seVwiXHJcbiAgICAgICAgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbb3B0aW9uc109XCJlcXBOdW1lcmljT3B0aW9uc1wiXHJcbiAgICAgICAgW3N0ZXBdPVwiZmllbGQuSXNJbnRlZ2VyID8gMSA6IG51bGxcIiAoYmx1cik9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIiAoa2V5cHJlc3MpPVwic2V0RGlydHkoKVwiIC8+XHJcbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiIWZpZWxkLkZvcm1Gb3JtR3JvdXAudmFsaWQgJiYgZmllbGQuRm9ybUZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5OYW1lXS50b3VjaGVkICYmICFmaWVsZC5SZWFkb25seVwiPlxyXG4gICAgICAgIE1pbjoge3tmaWVsZC5NaW5WYWx1ZX19IC0gTWF4OiB7e2ZpZWxkLk1heFZhbHVlfX1cclxuICAgIDwvbWF0LWVycm9yPlxyXG4gICAgPHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiAqbmdJZj1cImZpZWxkLkljb25OYW1lICYmIGZpZWxkLkljb25Qb3NpdGlvbiA9PSBOdW1lcmljRmllbGRJY29uUG9zaXRpb25FbnVtLkRlc3RyYVwiIG1hdFN1ZmZpeFxyXG4gICAgICBbbmFtZV09XCJmaWVsZC5JY29uTmFtZVwiPlxyXG4gICAgPC90bXctaWNvbj5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Rpdj5cclxuIl19
|