@eqproject/eqp-dynamic-module 2.11.0 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +4 -4
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +4 -4
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +4 -4
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +1 -1
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +8 -8
- package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +12 -12
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +12 -12
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +9 -9
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +4 -4
- package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +1 -1
- package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +2 -2
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +2 -2
- package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +4 -4
- package/esm2020/lib/components/private/graphs/graphs.component.mjs +1 -1
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +4 -4
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +2 -2
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +2 -2
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +4 -4
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +2 -2
- package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +2 -2
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +71 -71
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +71 -71
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +1 -1
- package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +9 -9
- package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +9 -9
- package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +7 -7
- package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +1 -1
- package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +1 -1
- package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +1 -1
- package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +1 -1
- package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +1 -1
- package/package.json +2 -2
|
@@ -237,7 +237,7 @@ export class DateFieldTemplateComponent {
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
DateFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
240
|
-
DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-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}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
|
|
240
|
+
DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-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}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "haveFloatingLabel", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
|
|
241
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, decorators: [{
|
|
242
242
|
type: Component,
|
|
243
243
|
args: [{ selector: 'date-field-template', template: "<div id=\"{{fieldUid}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n" }]
|
|
@@ -12,10 +12,10 @@ import * as i5 from "@angular/forms";
|
|
|
12
12
|
import * as i6 from "@angular/common";
|
|
13
13
|
import * as i7 from "tmw-select";
|
|
14
14
|
const ELEMENT_SELECTORS_COMBO = {
|
|
15
|
-
Container: '
|
|
16
|
-
Label: '
|
|
17
|
-
CasellaTrigger: '
|
|
18
|
-
BottoneCancella: '
|
|
15
|
+
Container: ' tmw-select mat-form-field',
|
|
16
|
+
Label: ' tmw-select .mdc-floating-label',
|
|
17
|
+
CasellaTrigger: ' tmw-select .mat-mdc-form-field-infix',
|
|
18
|
+
BottoneCancella: ' tmw-select button[aria-label="Clear"]',
|
|
19
19
|
};
|
|
20
20
|
const ELEMENT_SELECTORS_RADIO = {
|
|
21
21
|
Container: ' .list-value-radio-container',
|
|
@@ -33,7 +33,7 @@ const ELEMENT_SELECTORS_BUTTON = {
|
|
|
33
33
|
};
|
|
34
34
|
const STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];
|
|
35
35
|
const DEFAULT_FIELD_STYLES = {};
|
|
36
|
-
// Elementi il cui CSS iniettato richiede !important per vincere sulle regole di
|
|
36
|
+
// Elementi il cui CSS iniettato richiede !important per vincere sulle regole di tmw-select.scss
|
|
37
37
|
const FORCE_IMPORTANT_ELEMENTS = new Set(['Label', 'BottoneCancella']);
|
|
38
38
|
export class ListValueFieldTemplateComponent {
|
|
39
39
|
constructor(renderer) {
|
|
@@ -138,13 +138,13 @@ export class ListValueFieldTemplateComponent {
|
|
|
138
138
|
lines.push(`${selector} { ${finalVal} }`);
|
|
139
139
|
// CasellaTrigger: inietta anche sul testo selezionato per proprietà di testo (color, font-*)
|
|
140
140
|
if (el === 'CasellaTrigger') {
|
|
141
|
-
const textSel = this.getSelector(uid, state, el, '
|
|
141
|
+
const textSel = this.getSelector(uid, state, el, ' tmw-select .mat-mdc-select-value');
|
|
142
142
|
if (textSel)
|
|
143
143
|
lines.push(`${textSel} { ${finalVal} }`);
|
|
144
144
|
}
|
|
145
145
|
// BottoneCancella: inietta anche sull'icona interna per color/font (override di .mat-icon.mat-icon)
|
|
146
146
|
if (el === 'BottoneCancella') {
|
|
147
|
-
const iconSel = this.getSelector(uid, state, el, '
|
|
147
|
+
const iconSel = this.getSelector(uid, state, el, ' tmw-select button[aria-label="Clear"] mat-icon');
|
|
148
148
|
if (iconSel)
|
|
149
149
|
lines.push(`${iconSel} { ${finalVal} }`);
|
|
150
150
|
}
|
|
@@ -397,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
397
397
|
}], recordChange: [{
|
|
398
398
|
type: Output
|
|
399
399
|
}] } });
|
|
400
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBRXhFLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBUSw0QkFBNEI7SUFDN0MsS0FBSyxFQUFZLGlDQUFpQztJQUNsRCxjQUFjLEVBQUcsdUNBQXVDO0lBQ3hELGVBQWUsRUFBRSx3Q0FBd0M7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBRSw4QkFBOEI7SUFDekMsS0FBSyxFQUFNLG9CQUFvQjtJQUMvQixP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QztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLHdGQUF3RjtRQUN4Rix5RkFBeUY7UUFDekYsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUM1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOzs2SEEvVlUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNlJDM0M1Qyw0aEdBa0RNOzRGRFBPLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwyQkFBMkI7Z0dBTTVCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFByZXNlbnRhdGlvbkVudW0sIExpc3RWYWx1ZUZpZWxkLCBMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IElCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2lCYXNlRmllbGRDb21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfQ09NQk86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAgICAgICAnIGVxcC1zZWxlY3QgbWF0LWZvcm0tZmllbGQnLFxyXG4gIExhYmVsOiAgICAgICAgICAgJyBlcXAtc2VsZWN0IC5tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG4gIENhc2VsbGFUcmlnZ2VyOiAgJyBlcXAtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXgnLFxyXG4gIEJvdHRvbmVDYW5jZWxsYTogJyBlcXAtc2VsZWN0IGJ1dHRvblthcmlhLWxhYmVsPVwiQ2xlYXJcIl0nLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfUkFESU86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAnIC5saXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lcicsXHJcbiAgTGFiZWw6ICAgICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAgICcgbWF0LXJhZGlvLWJ1dHRvbicsXHJcbiAgU2VsZXppb25lOiAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpbycsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBMYWJlbDogICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAnIG1hdC1jaGVja2JveCcsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT046IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgTGFiZWw6ICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgQm90dG9uZTogJyBidXR0b24uZGF0YS1idXR0b24nLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuLy8gRWxlbWVudGkgaWwgY3VpIENTUyBpbmlldHRhdG8gcmljaGllZGUgIWltcG9ydGFudCBwZXIgdmluY2VyZSBzdWxsZSByZWdvbGUgZGkgZXFwLXNlbGVjdC5zY3NzXHJcbmNvbnN0IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUyA9IG5ldyBTZXQoWydMYWJlbCcsICdCb3R0b25lQ2FuY2VsbGEnXSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IExpc3RWYWx1ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgYXJyYXlEYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9W10gPSBbXTtcclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnbHYtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuaW5qZWN0U3R5bGVzKCk7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNvbWJvYm94IGZpbGVkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgaW5pdGlhbHZhbHVlID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5MYWJlbF07XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnJlc2V0QXJyYXlEYXRhKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiAhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcblxyXG4gICAgaWYgKGluaXRpYWx2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhpbml0aWFsdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddICYmICFjaGFuZ2VzWydzdHlsZVZlcnNpb24nXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmluamVjdFN0eWxlcygpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkQXJyYXlEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBnZXRFbGVtZW50U2VsZWN0b3JzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbW9kZSA9IE51bWJlcih0aGlzLmZpZWxkPy5QcmVzZW50YXRpb25Nb2RlKTtcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19DT01CTztcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT047XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZD8uSXNNdWx0aUNob2ljaGUgPyBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWCA6IEVMRU1FTlRfU0VMRUNUT1JTX1JBRElPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uTGlzdFZhbHVlRmllbGRTdHlsZUNTUyA/PyAoe30gYXMgTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RvcnMgPSB0aGlzLmdldEVsZW1lbnRTZWxlY3RvcnMoKTtcclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBlbCBvZiBPYmplY3Qua2V5cyhzZWxlY3RvcnMpKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBzZWxlY3RvcnNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgY29uc3QgbmVlZHNJbXBvcnRhbnQgPSBGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMuaGFzKGVsKSB8fCAoZWwgPT09ICdCb3R0b25lJyAmJiBzdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICAgICAgICBjb25zdCBmaW5hbFZhbCA9IG5lZWRzSW1wb3J0YW50ID8gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKSA6IHVzZXJWYWw7XHJcbiAgICAgICAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIENhc2VsbGFUcmlnZ2VyOiBpbmlldHRhIGFuY2hlIHN1bCB0ZXN0byBzZWxlemlvbmF0byBwZXIgcHJvcHJpZXTDoCBkaSB0ZXN0byAoY29sb3IsIGZvbnQtKilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0Nhc2VsbGFUcmlnZ2VyJykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyBlcXAtc2VsZWN0IC5tYXQtbWRjLXNlbGVjdC12YWx1ZScpO1xyXG4gICAgICAgICAgICBpZiAodGV4dFNlbCkgbGluZXMucHVzaChgJHt0ZXh0U2VsfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJvdHRvbmVDYW5jZWxsYTogaW5pZXR0YSBhbmNoZSBzdWxsJ2ljb25hIGludGVybmEgcGVyIGNvbG9yL2ZvbnQgKG92ZXJyaWRlIGRpIC5tYXQtaWNvbi5tYXQtaWNvbilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmVDYW5jZWxsYScpIHtcclxuICAgICAgICAgICAgY29uc3QgaWNvblNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgZXFwLXNlbGVjdCBidXR0b25bYXJpYS1sYWJlbD1cIkNsZWFyXCJdIG1hdC1pY29uJyk7XHJcbiAgICAgICAgICAgIGlmIChpY29uU2VsKSBsaW5lcy5wdXNoKGAke2ljb25TZWx9IHsgJHtmaW5hbFZhbH0gfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT3B6aW9uZSAocmFkaW8pOiBpbCBjb2xvciB2YSBzdSBtYXQtcmFkaW8tYnV0dG9uIGxhYmVsIHBlciByYWdnaXVuZ2VyZSBpbCB0ZXN0byAoTWF0ZXJpYWwgc292cmFzY3JpdmUgaWwgY29sb3JlIHN1bCBjb250ZW5pdG9yZSlcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnICYmIHMgPT09ICcgbWF0LXJhZGlvLWJ1dHRvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiBsYWJlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChsYWJlbFNlbCkgbGluZXMucHVzaChgJHtsYWJlbFNlbH0geyBjb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBTZWxlemlvbmU6IGJhY2tncm91bmQtY29sb3IgdmEgc3UgLm1kYy1yYWRpbzsgY29sb3IgdmEgc3Ugb3V0ZXItY2lyY2xlL2lubmVyLWNpcmNsZSBFIENTUyB2YXJpYWJsZXMgTURDXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdTZWxlemlvbmUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3V0ZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19fb3V0ZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5uZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19faW5uZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmFkaW9CdG5TZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24nKTtcclxuICAgICAgICAgICAgICBpZiAob3V0ZXJTZWwpICAgIGxpbmVzLnB1c2goYCR7b3V0ZXJTZWx9IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgICAgaWYgKGlubmVyU2VsKSAgICBsaW5lcy5wdXNoKGAke2lubmVyU2VsfSB7IGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgICAvLyBDU1MgdmFyaWFibGVzIE1EQyBwZXIgaWwgZG90IGRpIHNlbGV6aW9uZSAoc292cmFzY3Jpdm9ubyBpbCB0ZW1hIE1hdGVyaWFsKVxyXG4gICAgICAgICAgICAgIGlmIChyYWRpb0J0blNlbCkgbGluZXMucHVzaChgJHtyYWRpb0J0blNlbH0geyAtLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyB9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzc1xyXG4gICAgICAuc3BsaXQoJzsnKVxyXG4gICAgICAubWFwKHBhcnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXJ0LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICAgIGlmICh0cmltbWVkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyFpbXBvcnRhbnQnKSkgcmV0dXJuIHBhcnQ7XHJcbiAgICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZSgvXFxzKyQvLCAnJykgKyAnICFpbXBvcnRhbnQnO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0Q3NzUHJvcFZhbHVlKGNzczogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKD86Xnw7KVxcXFxzKiR7cHJvcH1cXFxccyo6XFxcXHMqKFteOyFdKz8pKD86XFxcXHMqIWltcG9ydGFudCk/XFxcXHMqKD86O3wkKWAsICdpJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChyZSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzpcclxuICAgICAgICAvLyBPcHppb25lL1NlbGV6aW9uZS9Cb3R0b25lOiA6aG92ZXIgc3VsIHNpbmdvbG8gZWxlbWVudG8sIG5vbiBzdWwgY29udGVuaXRvcmVcclxuICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyB8fCBlbCA9PT0gJ1NlbGV6aW9uZScgfHwgZWwgPT09ICdCb3R0b25lJylcclxuICAgICAgICAgIHJldHVybiBgJHt0aGlzLmJ1aWxkUGVySXRlbUhvdmVyU2VsZWN0b3IodWlkLCBzKX0sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgICAgcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOlxyXG4gICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmUnKVxyXG4gICAgICAgICAgcmV0dXJuIGAjJHt1aWR9IGJ1dHRvbi5kYXRhLWJ1dHRvbi5zZWxlY3RlZC1idXR0b24sICMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgICAgLy8gUmFkaW8gT3B6aW9uZS9TZWxlemlvbmU6IGFnZ2l1bmdlIHNlbGV0dG9yZSBydW50aW1lIG1hdC1tZGMtcmFkaW8tY2hlY2tlZFxyXG4gICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnIHx8IGVsID09PSAnU2VsZXppb25lJykge1xyXG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdtYXQtcmFkaW8tYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJGaXJzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdtYXQtcmFkaW8tYnV0dG9uJy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCMke3VpZH0gbWF0LXJhZGlvLWJ1dHRvbi5tYXQtbWRjLXJhZGlvLWNoZWNrZWQke2FmdGVyRmlyc3R9LCAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ05vdFZhbGlkJzogIHJldHVybiBgIyR7dWlkfS5lcXAtaW52YWxpZCR7c31gO1xyXG4gICAgICBjYXNlICdSZWFkb25seSc6ICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBlckl0ZW1Ib3ZlclNlbGVjdG9yKHVpZDogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICBjb25zdCBzcGFjZUlkeCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgaWYgKHNwYWNlSWR4ID09PSAtMSkgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZH06aG92ZXJgO1xyXG4gICAgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpfTpob3ZlciR7dHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJZHgpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBMb2dpY2EgY2FtcG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seSkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXMoaW5pdGlhbHZhbHVlKSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLkxhYmVsXSA9IGluaXRpYWx2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCB1cGRhdGVGaWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIEZvcm11bGFcIiwgXCJmb3JtdWxhXCIpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyPy5EYXRhR2V0dGVyVHlwZSA9PT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgICAvLyBMYSBmb3JtdWxhIGNhbGNvbGEgaWwgVkFMT1JFIFNFTEVaSU9OQVRPIChub24gbGUgb3B6aW9uaSk6IGNvbXBvcnRhbWVudG8gYW5hbG9nbyBhbCBjYW1wbyBudW1lcmljby5cclxuICAgICAgICAvLyBMZSBvcHppb25pIHZlbmdvbm8gZGEgVmFsdWVTdHJpbmcvVmFsdWVQYWlycy4gTm9uIHNpIGNoaWFtYSByZXNldEFycmF5RGF0YSgpIHBlciBldml0YXJlIGxvb3AuXHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIExhIGZvcm11bGEgY2FsY29sYSBsZSBPUFpJT05JIChWYWx1ZVBhaXJzKSDigJQgY2FzbyBkJ3VzbyBvcmlnaW5hbGVcclxuICAgICAgICBjb25zdCB0ZW1wVmFsdWVQYWlycyA9IHRoaXMuZmllbGQuVmFsdWVQYWlycztcclxuICAgICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG4gICAgICAgIGlmICghKEpTT04uc3RyaW5naWZ5KHRlbXBWYWx1ZVBhaXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5WYWx1ZVBhaXJzKSkpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlUGFpcnNcIik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlU3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0aGlzLmZpZWxkLlZhbHVlU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nLCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9KSB7XHJcbiAgICBkYXRhLlNlbGVjdGVkID0gIWRhdGEuU2VsZWN0ZWQ7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkID0+IGQuS2V5ICE9IGRhdGEuS2V5ICYmIGQuVmFsdWUgIT0gZGF0YS5WYWx1ZSkuZm9yRWFjaChkID0+IGQuU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkKGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgLy8gU2luZ2xlLWNob2ljZTogdXNhIG51bGwgKG5vbiBbXSkgcXVhbmRvIG5lc3N1biB2YWxvcmUgw6ggc2VsZXppb25hdG8uXHJcbiAgICAvLyBbXSAhPT0gW10gaW4gSlMgKGNvbmZyb250byBwZXIgcmVmZXJlbnphKTogbWF0LXNlbGVjdC5fYXNzaWduVmFsdWUgdmVkZSBzZW1wcmUgdW4gXCJjYW1iaW9cIlxyXG4gICAgLy8gc3Ugb2duaSBjeWNsZSBkaSBDRCBlIHNjYXRlbmEgX29uQ2hhbmdlIOKGkiBuZ01vZGVsQ2hhbmdlIOKGkiBsb29wIGluZmluaXRvLlxyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGVcclxuICAgICAgPyBzZWxlY3RlZFZhbHVlc1xyXG4gICAgICA6IChzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRWYWx1ZXNbMF0gOiBudWxsKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEFycmF5RGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwpIHtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0aGlzLmZpZWxkLlZhbHVlUGFpcnNbT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKVswXV0pKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICAvLyBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ZmFsc2UgaW1wZWRpc2NlIGNoZSBGb3JtQ29udHJvbC5zZXRWYWx1ZSgpIG5vdGlmaWNoaSBpIGNhbGxiYWNrXHJcbiAgICAvLyBfb25DaGFuZ2UgcmVnaXN0cmF0aSBkYSBOZ01vZGVsICh2aWEgW2Zvcm1Db250cm9sTmFtZV0gc3VsIG1hdC1jaGVja2JveCksIGV2aXRhbmRvIGNoZVxyXG4gICAgLy8gTmdNb2RlbCBlbWV0dGEgbmdNb2RlbENoYW5nZSDihpIgdXBkYXRlU2VsZWN0ZWQoKSDihpIgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHJpY29yc2l2YW1lbnRlLlxyXG4gICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gICAgPHRtdy1zZWxlY3QgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIlxyXG4gICAgICAgIFthcnJheURhdGFdPVwiYXJyYXlEYXRhXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidLZXknXCJcclxuICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbElucHV0KV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbaXNNdWx0aVNlbGVjdF09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiXHJcbiAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgIDwvdG13LXNlbGVjdD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSAhPSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIiBbZm9ybUdyb3VwXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIj5cclxuXHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1yLTMgbGlzdC12YWx1ZS1sYWJlbFwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj4ge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIlxyXG4gICAgICAgICAgICA6IFwiXCIpfX0gPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgIWZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtcy0zIGQtYmxvY2tcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbdmFsdWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIChTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkIHx8IHRoaXMuZmllbGQuUmVhZG9ubHlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLlNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJbTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddXS5pbmNsdWRlcyhmaWVsZC5QcmVzZW50YXRpb25Nb2RlKVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1idXR0b24nOiBkYXRhLlNlbGVjdGVkID09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25TZWxlY3RDbGljayhkYXRhKVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFFLG9CQUFvQixFQUEwQyxNQUFNLGdEQUFnRCxDQUFDO0FBRTlILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7O0FBRXhFLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBUSw0QkFBNEI7SUFDN0MsS0FBSyxFQUFZLGlDQUFpQztJQUNsRCxjQUFjLEVBQUcsdUNBQXVDO0lBQ3hELGVBQWUsRUFBRSx3Q0FBd0M7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQThCO0lBQ3pELFNBQVMsRUFBRSw4QkFBOEI7SUFDekMsS0FBSyxFQUFNLG9CQUFvQjtJQUMvQixP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QztTQUMzRDtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLHdGQUF3RjtRQUN4Rix5RkFBeUY7UUFDekYsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUM1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOzs2SEEvVlUsK0JBQStCO2lIQUEvQiwrQkFBK0IsNlJDM0M1Qyw0aEdBa0RNOzRGRFBPLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwyQkFBMkI7Z0dBTTVCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFByZXNlbnRhdGlvbkVudW0sIExpc3RWYWx1ZUZpZWxkLCBMaXN0VmFsdWVGaWVsZFN0eWxlQ1NTIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IElCYXNlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2lCYXNlRmllbGRDb21wb25lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfQ09NQk86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAgICAgICAnIHRtdy1zZWxlY3QgbWF0LWZvcm0tZmllbGQnLFxyXG4gIExhYmVsOiAgICAgICAgICAgJyB0bXctc2VsZWN0IC5tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG4gIENhc2VsbGFUcmlnZ2VyOiAgJyB0bXctc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXgnLFxyXG4gIEJvdHRvbmVDYW5jZWxsYTogJyB0bXctc2VsZWN0IGJ1dHRvblthcmlhLWxhYmVsPVwiQ2xlYXJcIl0nLFxyXG59O1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlNfUkFESU86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAnIC5saXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lcicsXHJcbiAgTGFiZWw6ICAgICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAgICcgbWF0LXJhZGlvLWJ1dHRvbicsXHJcbiAgU2VsZXppb25lOiAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpbycsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBMYWJlbDogICAnIC5saXN0LXZhbHVlLWxhYmVsJyxcclxuICBPcHppb25lOiAnIG1hdC1jaGVja2JveCcsXHJcbn07XHJcblxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT046IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgTGFiZWw6ICAgJyAubGlzdC12YWx1ZS1sYWJlbCcsXHJcbiAgQm90dG9uZTogJyBidXR0b24uZGF0YS1idXR0b24nLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuLy8gRWxlbWVudGkgaWwgY3VpIENTUyBpbmlldHRhdG8gcmljaGllZGUgIWltcG9ydGFudCBwZXIgdmluY2VyZSBzdWxsZSByZWdvbGUgZGkgdG13LXNlbGVjdC5zY3NzXHJcbmNvbnN0IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUyA9IG5ldyBTZXQoWydMYWJlbCcsICdCb3R0b25lQ2FuY2VsbGEnXSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUZpZWxkVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQmFzZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ6IExpc3RWYWx1ZUZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIExpc3RQcmVzZW50YXRpb25FbnVtID0gTGlzdFByZXNlbnRhdGlvbkVudW07XHJcbiAgYXJyYXlEYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogYW55LCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9W10gPSBbXTtcclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcbiAgTGFiZWxzdHlsZU9iajogYW55O1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnbHYtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuaW5qZWN0U3R5bGVzKCk7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNvbWJvYm94IGZpbGVkXCIsIHRoaXMuZmllbGQpO1xyXG4gICAgY29uc3QgaW5pdGlhbHZhbHVlID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5MYWJlbF07XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLnJlc2V0QXJyYXlEYXRhKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiAhdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1Db250cm9sVmFsdWUoKTtcclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcblxyXG4gICAgaWYgKGluaXRpYWx2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhpbml0aWFsdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3N0eWxlVmVyc2lvbiddICYmICFjaGFuZ2VzWydzdHlsZVZlcnNpb24nXS5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLmluamVjdFN0eWxlcygpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkQXJyYXlEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgPT0gZmFsc2UgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBnZXRFbGVtZW50U2VsZWN0b3JzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgbW9kZSA9IE51bWJlcih0aGlzLmZpZWxkPy5QcmVzZW50YXRpb25Nb2RlKTtcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19DT01CTztcclxuICAgIGlmIChtb2RlID09PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUHVsc2FudGUgY29uIHRlc3RvJ10pIHJldHVybiBFTEVNRU5UX1NFTEVDVE9SU19CVVRUT047XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZD8uSXNNdWx0aUNob2ljaGUgPyBFTEVNRU5UX1NFTEVDVE9SU19DSEVDS0JPWCA6IEVMRU1FTlRfU0VMRUNUT1JTX1JBRElPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uTGlzdFZhbHVlRmllbGRTdHlsZUNTUyA/PyAoe30gYXMgTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogTGlzdFZhbHVlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RvcnMgPSB0aGlzLmdldEVsZW1lbnRTZWxlY3RvcnMoKTtcclxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBlbCBvZiBPYmplY3Qua2V5cyhzZWxlY3RvcnMpKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBzZWxlY3RvcnNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgY29uc3QgbmVlZHNJbXBvcnRhbnQgPSBGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMuaGFzKGVsKSB8fCAoZWwgPT09ICdCb3R0b25lJyAmJiBzdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICAgICAgICBjb25zdCBmaW5hbFZhbCA9IG5lZWRzSW1wb3J0YW50ID8gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKSA6IHVzZXJWYWw7XHJcbiAgICAgICAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIENhc2VsbGFUcmlnZ2VyOiBpbmlldHRhIGFuY2hlIHN1bCB0ZXN0byBzZWxlemlvbmF0byBwZXIgcHJvcHJpZXTDoCBkaSB0ZXN0byAoY29sb3IsIGZvbnQtKilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0Nhc2VsbGFUcmlnZ2VyJykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyB0bXctc2VsZWN0IC5tYXQtbWRjLXNlbGVjdC12YWx1ZScpO1xyXG4gICAgICAgICAgICBpZiAodGV4dFNlbCkgbGluZXMucHVzaChgJHt0ZXh0U2VsfSB7ICR7ZmluYWxWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEJvdHRvbmVDYW5jZWxsYTogaW5pZXR0YSBhbmNoZSBzdWxsJ2ljb25hIGludGVybmEgcGVyIGNvbG9yL2ZvbnQgKG92ZXJyaWRlIGRpIC5tYXQtaWNvbi5tYXQtaWNvbilcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmVDYW5jZWxsYScpIHtcclxuICAgICAgICAgICAgY29uc3QgaWNvblNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgdG13LXNlbGVjdCBidXR0b25bYXJpYS1sYWJlbD1cIkNsZWFyXCJdIG1hdC1pY29uJyk7XHJcbiAgICAgICAgICAgIGlmIChpY29uU2VsKSBsaW5lcy5wdXNoKGAke2ljb25TZWx9IHsgJHtmaW5hbFZhbH0gfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT3B6aW9uZSAocmFkaW8pOiBpbCBjb2xvciB2YSBzdSBtYXQtcmFkaW8tYnV0dG9uIGxhYmVsIHBlciByYWdnaXVuZ2VyZSBpbCB0ZXN0byAoTWF0ZXJpYWwgc292cmFzY3JpdmUgaWwgY29sb3JlIHN1bCBjb250ZW5pdG9yZSlcclxuICAgICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnICYmIHMgPT09ICcgbWF0LXJhZGlvLWJ1dHRvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUoZmluYWxWYWwsICdjb2xvcicpO1xyXG4gICAgICAgICAgICBpZiAoY29sb3JWYWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgbWF0LXJhZGlvLWJ1dHRvbiBsYWJlbCcpO1xyXG4gICAgICAgICAgICAgIGlmIChsYWJlbFNlbCkgbGluZXMucHVzaChgJHtsYWJlbFNlbH0geyBjb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBTZWxlemlvbmU6IGJhY2tncm91bmQtY29sb3IgdmEgc3UgLm1kYy1yYWRpbzsgY29sb3IgdmEgc3Ugb3V0ZXItY2lyY2xlL2lubmVyLWNpcmNsZSBFIENTUyB2YXJpYWJsZXMgTURDXHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdTZWxlemlvbmUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yVmFsID0gdGhpcy5leHRyYWN0Q3NzUHJvcFZhbHVlKGZpbmFsVmFsLCAnY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3V0ZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19fb3V0ZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5uZXJTZWwgICAgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24gLm1kYy1yYWRpb19faW5uZXItY2lyY2xlJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmFkaW9CdG5TZWwgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCAnIG1hdC1yYWRpby1idXR0b24nKTtcclxuICAgICAgICAgICAgICBpZiAob3V0ZXJTZWwpICAgIGxpbmVzLnB1c2goYCR7b3V0ZXJTZWx9IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgICAgICAgaWYgKGlubmVyU2VsKSAgICBsaW5lcy5wdXNoKGAke2lubmVyU2VsfSB7IGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICAgICAgICAvLyBDU1MgdmFyaWFibGVzIE1EQyBwZXIgaWwgZG90IGRpIHNlbGV6aW9uZSAoc292cmFzY3Jpdm9ubyBpbCB0ZW1hIE1hdGVyaWFsKVxyXG4gICAgICAgICAgICAgIGlmIChyYWRpb0J0blNlbCkgbGluZXMucHVzaChgJHtyYWRpb0J0blNlbH0geyAtLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOiAke2NvbG9yVmFsfTsgLS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjogJHtjb2xvclZhbH07IC0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyAtLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6ICR7Y29sb3JWYWx9OyB9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzc1xyXG4gICAgICAuc3BsaXQoJzsnKVxyXG4gICAgICAubWFwKHBhcnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXJ0LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICAgIGlmICh0cmltbWVkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJyFpbXBvcnRhbnQnKSkgcmV0dXJuIHBhcnQ7XHJcbiAgICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZSgvXFxzKyQvLCAnJykgKyAnICFpbXBvcnRhbnQnO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0Q3NzUHJvcFZhbHVlKGNzczogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKD86Xnw7KVxcXFxzKiR7cHJvcH1cXFxccyo6XFxcXHMqKFteOyFdKz8pKD86XFxcXHMqIWltcG9ydGFudCk/XFxcXHMqKD86O3wkKWAsICdpJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChyZSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzpcclxuICAgICAgICAvLyBPcHppb25lL1NlbGV6aW9uZS9Cb3R0b25lOiA6aG92ZXIgc3VsIHNpbmdvbG8gZWxlbWVudG8sIG5vbiBzdWwgY29udGVuaXRvcmVcclxuICAgICAgICBpZiAoZWwgPT09ICdPcHppb25lJyB8fCBlbCA9PT0gJ1NlbGV6aW9uZScgfHwgZWwgPT09ICdCb3R0b25lJylcclxuICAgICAgICAgIHJldHVybiBgJHt0aGlzLmJ1aWxkUGVySXRlbUhvdmVyU2VsZWN0b3IodWlkLCBzKX0sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgICAgcmV0dXJuIGAjJHt1aWR9OmhvdmVyJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtaG92ZXIke3N9YDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOlxyXG4gICAgICAgIGlmIChlbCA9PT0gJ0JvdHRvbmUnKVxyXG4gICAgICAgICAgcmV0dXJuIGAjJHt1aWR9IGJ1dHRvbi5kYXRhLWJ1dHRvbi5zZWxlY3RlZC1idXR0b24sICMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgICAgLy8gUmFkaW8gT3B6aW9uZS9TZWxlemlvbmU6IGFnZ2l1bmdlIHNlbGV0dG9yZSBydW50aW1lIG1hdC1tZGMtcmFkaW8tY2hlY2tlZFxyXG4gICAgICAgIGlmIChlbCA9PT0gJ09wemlvbmUnIHx8IGVsID09PSAnU2VsZXppb25lJykge1xyXG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdtYXQtcmFkaW8tYnV0dG9uJykpIHtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJGaXJzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdtYXQtcmFkaW8tYnV0dG9uJy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCMke3VpZH0gbWF0LXJhZGlvLWJ1dHRvbi5tYXQtbWRjLXJhZGlvLWNoZWNrZWQke2FmdGVyRmlyc3R9LCAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCMke3VpZH0uZXFwLXN0YXRlLXNlbGVjdGVkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ05vdFZhbGlkJzogIHJldHVybiBgIyR7dWlkfS5lcXAtaW52YWxpZCR7c31gO1xyXG4gICAgICBjYXNlICdSZWFkb25seSc6ICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBlckl0ZW1Ib3ZlclNlbGVjdG9yKHVpZDogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXlxccysvLCAnJyk7XHJcbiAgICBjb25zdCBzcGFjZUlkeCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgaWYgKHNwYWNlSWR4ID09PSAtMSkgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZH06aG92ZXJgO1xyXG4gICAgcmV0dXJuIGAjJHt1aWR9ICR7dHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJZHgpfTpob3ZlciR7dHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJZHgpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBMb2dpY2EgY2FtcG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIGNoZWNrUmVhZG9ubHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5SZWFkb25seSkge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuY29udHJvbHNbdGhpcy5maWVsZC5OYW1lXS5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXMoaW5pdGlhbHZhbHVlKSB7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLkxhYmVsXSA9IGluaXRpYWx2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgdGhpcy5jaGVja1JlYWRvbmx5KCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12YWx1ZS1maWVsZCB1cGRhdGVGaWVsZFwiLCB0aGlzLmZpZWxkKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIEZvcm11bGFcIiwgXCJmb3JtdWxhXCIpO1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyPy5EYXRhR2V0dGVyVHlwZSA9PT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpIHtcclxuICAgICAgICAvLyBMYSBmb3JtdWxhIGNhbGNvbGEgaWwgVkFMT1JFIFNFTEVaSU9OQVRPIChub24gbGUgb3B6aW9uaSk6IGNvbXBvcnRhbWVudG8gYW5hbG9nbyBhbCBjYW1wbyBudW1lcmljby5cclxuICAgICAgICAvLyBMZSBvcHppb25pIHZlbmdvbm8gZGEgVmFsdWVTdHJpbmcvVmFsdWVQYWlycy4gTm9uIHNpIGNoaWFtYSByZXNldEFycmF5RGF0YSgpIHBlciBldml0YXJlIGxvb3AuXHJcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9PSBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIExhIGZvcm11bGEgY2FsY29sYSBsZSBPUFpJT05JIChWYWx1ZVBhaXJzKSDigJQgY2FzbyBkJ3VzbyBvcmlnaW5hbGVcclxuICAgICAgICBjb25zdCB0ZW1wVmFsdWVQYWlycyA9IHRoaXMuZmllbGQuVmFsdWVQYWlycztcclxuICAgICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgICAgICBjb25zdCB0ZW1wOiBzdHJpbmcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICAgIHRoaXMuZmllbGQuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKHRlbXApO1xyXG4gICAgICAgIGlmICghKEpTT04uc3RyaW5naWZ5KHRlbXBWYWx1ZVBhaXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5WYWx1ZVBhaXJzKSkpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRBcnJheURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwgJiYgdGhpcy5maWVsZC5WYWx1ZVBhaXJzLmxlbmdodCA+IDApIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlUGFpcnNcIik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmFsdWUtZmllbGQgLSB1cGRhdGVGaWVsZCAtIFZhbHVlU3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLmZpZWxkLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycyh0aGlzLmZpZWxkLlZhbHVlU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5WaXNpYmxlSWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5WaXNpYmxlSWYsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b25TZWxlY3RDbGljayhkYXRhOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nLCBTZWxlY3RlZD86IGJvb2xlYW4sIEltZ1VybD86IHN0cmluZyB9KSB7XHJcbiAgICBkYXRhLlNlbGVjdGVkID0gIWRhdGEuU2VsZWN0ZWQ7XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkID0+IGQuS2V5ICE9IGRhdGEuS2V5ICYmIGQuVmFsdWUgIT0gZGF0YS5WYWx1ZSkuZm9yRWFjaChkID0+IGQuU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWMoZGF0YS5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gTnVtYmVyKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkKGVtaXRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuYXJyYXlEYXRhLmZpbHRlcihkYXRhID0+IGRhdGEuU2VsZWN0ZWQpLm1hcChkYXRhID0+IGRhdGEuVmFsdWUpO1xyXG4gICAgLy8gU2luZ2xlLWNob2ljZTogdXNhIG51bGwgKG5vbiBbXSkgcXVhbmRvIG5lc3N1biB2YWxvcmUgw6ggc2VsZXppb25hdG8uXHJcbiAgICAvLyBbXSAhPT0gW10gaW4gSlMgKGNvbmZyb250byBwZXIgcmVmZXJlbnphKTogbWF0LXNlbGVjdC5fYXNzaWduVmFsdWUgdmVkZSBzZW1wcmUgdW4gXCJjYW1iaW9cIlxyXG4gICAgLy8gc3Ugb2duaSBjeWNsZSBkaSBDRCBlIHNjYXRlbmEgX29uQ2hhbmdlIOKGkiBuZ01vZGVsQ2hhbmdlIOKGkiBsb29wIGluZmluaXRvLlxyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGVcclxuICAgICAgPyBzZWxlY3RlZFZhbHVlc1xyXG4gICAgICA6IChzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRWYWx1ZXNbMF0gOiBudWxsKTtcclxuICAgIHRoaXMuc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vblJlY29yZFZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICByZXNldEFycmF5RGF0YSgpIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKGZhbHNlKTtcclxuICAgIHRoaXMuc2V0QXJyYXlEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEFycmF5RGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXJyYXlEYXRhID0gW107XHJcbiAgICB0aGlzLnNldEFycmF5RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBcnJheURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZC5WYWx1ZVBhaXJzICE9IG51bGwpIHtcclxuICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0aGlzLmZpZWxkLlZhbHVlUGFpcnNbT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKVswXV0pKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVOdW1iZXJBcnJheURhdGFFbGVtZW50KGssIE51bWJlcih0aGlzLmZpZWxkLlZhbHVlUGFpcnNba10pKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZC5WYWx1ZVBhaXJzKS5mb3JFYWNoKGsgPT4gdGhpcy5jcmVhdGVBcnJheURhdGFFbGVtZW50KGssIHRoaXMuZmllbGQuVmFsdWVQYWlyc1trXSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU51bWJlckFycmF5RGF0YUVsZW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGltZ1VybDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgbGV0IGlzT3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5maWVsZC5Jc011bHRpQ2hvaWNoZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpc09wdGlvblNlbGVjdGVkID0gISF0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLmZpbmQodiA9PiB2ID09IHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09PSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlEYXRhLnB1c2goeyBLZXk6IGtleSwgVmFsdWU6IHZhbHVlLCBTZWxlY3RlZDogaXNPcHRpb25TZWxlY3RlZCwgSW1nVXJsOiBpbWdVcmwgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZvcm1Db250cm9sVmFsdWUoKSB7XHJcbiAgICAvLyBlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ZmFsc2UgaW1wZWRpc2NlIGNoZSBGb3JtQ29udHJvbC5zZXRWYWx1ZSgpIG5vdGlmaWNoaSBpIGNhbGxiYWNrXHJcbiAgICAvLyBfb25DaGFuZ2UgcmVnaXN0cmF0aSBkYSBOZ01vZGVsICh2aWEgW2Zvcm1Db250cm9sTmFtZV0gc3VsIG1hdC1jaGVja2JveCksIGV2aXRhbmRvIGNoZVxyXG4gICAgLy8gTmdNb2RlbCBlbWV0dGEgbmdNb2RlbENoYW5nZSDihpIgdXBkYXRlU2VsZWN0ZWQoKSDihpIgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpIHJpY29yc2l2YW1lbnRlLlxyXG4gICAgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMuZmllbGQuTmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gICAgPHRtdy1zZWxlY3QgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIlxyXG4gICAgICAgIFthcnJheURhdGFdPVwiYXJyYXlEYXRhXCIgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFtzaG93Q2FuY2VsQnV0dG9uXT1cInRydWVcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidLZXknXCJcclxuICAgICAgICBbZm9ybUdyb3VwSW5wdXRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIFtmb3JtQ29udHJvbE5hbWVJbnB1dF09XCJmaWVsZC5OYW1lXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbaW5jbHVkZUZ1bGxPYmplY3RdPVwiZmFsc2VcIiBbaXNSZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFtpc0Rpc2FibGVkXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXAuZGlzYWJsZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbElucHV0KV09XCJyZWNvcmRbZmllbGQuTmFtZV1cIiBbaXNNdWx0aVNlbGVjdF09XCJmaWVsZC5Jc011bHRpQ2hvaWNoZVwiXHJcbiAgICAgICAgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKClcIj5cclxuICAgIDwvdG13LXNlbGVjdD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSAhPSBMaXN0UHJlc2VudGF0aW9uRW51bVsnQ29tYm8gYm94J11cIiBbZm9ybUdyb3VwXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIj5cclxuXHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cIm1yLTMgbGlzdC12YWx1ZS1sYWJlbFwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj4ge3tmaWVsZC5EZXNjcmlwdGlvbiArIChmaWVsZC5SZXF1aXJlZCA/IFwiICpcIlxyXG4gICAgICAgICAgICA6IFwiXCIpfX0gPC9tYXQtbGFiZWw+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgUkFESU8gQlVUVE9OIChTRU5aQSBTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LXZhbHVlLXJhZGlvLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgIWZpZWxkLklzTXVsdGlDaG9pY2hlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQuRm9ybUZvcm1Hcm91cC5kaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFsobmdNb2RlbCldPVwicmVjb3JkW2ZpZWxkLk5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtcy0zIGQtYmxvY2tcIiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcnJheURhdGFcIiBbdmFsdWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIENIRUNLQk9YIChTRUxFWklPTkUgTVVMVElQTEEpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuUHJlc2VudGF0aW9uTW9kZSA9PSBMaXN0UHJlc2VudGF0aW9uRW51bVsnUmFkaW8gYnV0dG9uJ10gJiYgZmllbGQuSXNNdWx0aUNob2ljaGVcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJtci0yXCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkIHx8IHRoaXMuZmllbGQuUmVhZG9ubHlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLlNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAge3tkYXRhLktleX19XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFBVTFNBTlRJIChDT04gVEVTVE8gTyBJTU1BR0lOSSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJbTGlzdFByZXNlbnRhdGlvbkVudW1bJ1B1bHNhbnRlIGNvbiB0ZXN0byddXS5pbmNsdWRlcyhmaWVsZC5QcmVzZW50YXRpb25Nb2RlKVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtuZ1N0eWxlXT1cIkZpZWxkc3R5bGVPYmpcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLTEgZGF0YS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXJyYXlEYXRhXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1idXR0b24nOiBkYXRhLlNlbGVjdGVkID09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25TZWxlY3RDbGljayhkYXRhKVwiIFtkaXNhYmxlZF09XCJmaWVsZC5Gb3JtRm9ybUdyb3VwLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3tkYXRhLktleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
|