@rangertechnologies/ngnxt 2.1.81 → 2.1.83
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/esm2022/lib/components/custom-radio/custom-radio.component.mjs +3 -3
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +5 -3
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +3 -4
- package/esm2022/lib/pages/booklet/booklet.component.mjs +3 -3
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +28 -3
- package/fesm2022/rangertechnologies-ngnxt.mjs +35 -11
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/file-upload/file-upload.component.d.ts +0 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +1 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.83.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.81.tgz +0 -0
|
@@ -61,6 +61,31 @@ export class QuestionbookComponent {
|
|
|
61
61
|
langDirection = 'ltr';
|
|
62
62
|
bookStyle;
|
|
63
63
|
subscription;
|
|
64
|
+
// RS 17JAN2025
|
|
65
|
+
//Formats and returns file upload requirements from a JSON string
|
|
66
|
+
getFileRequirements(fieldsMeta) {
|
|
67
|
+
try {
|
|
68
|
+
const metaData = JSON.parse(fieldsMeta);
|
|
69
|
+
const fileConfig = metaData[0];
|
|
70
|
+
if (!fileConfig)
|
|
71
|
+
return '';
|
|
72
|
+
const requirements = [];
|
|
73
|
+
if (fileConfig.allowedTypes?.length) {
|
|
74
|
+
requirements.push(`Accepted formats: ${fileConfig.allowedTypes.join(', ')}`);
|
|
75
|
+
}
|
|
76
|
+
if (fileConfig.maxFileSize) {
|
|
77
|
+
requirements.push(`Maximum size per file: ${fileConfig.maxFileSize / 1048576}MB`);
|
|
78
|
+
}
|
|
79
|
+
if (fileConfig.maxFiles) {
|
|
80
|
+
requirements.push(`Maximum number of files: ${fileConfig.maxFiles}`);
|
|
81
|
+
}
|
|
82
|
+
return requirements.map(req => req.trim()).join('\n');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('Error parsing fieldsMeta:', error);
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
64
89
|
hadleDropDownDependent = new EventEmitter();
|
|
65
90
|
// VD 06Sep24 calendar changes
|
|
66
91
|
handleCalendarDate = new EventEmitter();
|
|
@@ -390,11 +415,11 @@ export class QuestionbookComponent {
|
|
|
390
415
|
this.isCalendarModalOpen = false;
|
|
391
416
|
}
|
|
392
417
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
393
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" class=\"icon\" [matTooltip]=\"ques?.helpText\">i</div></span>\r\n </div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}\n"], dependencies: [{ kind: "component", type: i6.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i12.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i13.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i14.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i15.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i17.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i18.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "component", type: i19.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i20.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i22.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i23.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i24.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i25.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i26.CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: i27.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i28.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i29.I18nPipe, name: "i18n" }] });
|
|
418
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"], dependencies: [{ kind: "component", type: i6.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i12.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i13.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i14.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i15.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i17.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i18.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "component", type: i19.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i20.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i22.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i23.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i24.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i25.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i26.CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: i27.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i28.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i29.I18nPipe, name: "i18n" }] });
|
|
394
419
|
}
|
|
395
420
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
|
|
396
421
|
type: Component,
|
|
397
|
-
args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" class=\"icon\" [matTooltip]=\"ques?.helpText\">i</div></span>\r\n </div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}\n"] }]
|
|
422
|
+
args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\r\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\r\n<!-- HA 18JAN24 Added class for styling -->\r\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\r\n <div class=\"form-row\">\r\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\r\n <!-- RA09DEC24 Changed keys-->\r\n <div\r\n [class]=\"'col-lg-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\r\n <!-- Sub Question Label -->\r\n <!-- HA 20DEC23 Label Style from salesforce -->\r\n <!-- VD 09May24 is hide field change-->\r\n <div *ngIf=\"!ques.isHidden\">\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n \r\n </div>\r\n <!-- VD 20JUN24 - help text changes-->\r\n <!-- VD 01Aug24 - validation change-->\r\n <!-- // VD 02Aug24 - label value style-->\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\" *ngIf=\"ques.style?.showLabel ? ques.style?.showLabel : true\" [style]=\"ques.style?.labelStyle\">\r\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\">{{ removeCharacters(ques?.questionText) }}\r\n <div *ngIf=\"ques.isOptional\" style=\"color: red;\">*</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips help text -->\r\n <div *ngIf=\"ques.questionText && ques?.helpText\" \r\n class=\"icon\" \r\n [matTooltip]=\"ques?.helpText\"\r\n matTooltipClass=\"white-tooltip\">i</div>\r\n <!-- RS 17JAN2025 -->\r\n <!-- Displays icons with tooltips for file requirements -->\r\n <div \r\n class=\"icon\" \r\n *ngIf=\"ques.fieldsMeta\"\r\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\"\r\n matTooltipClass=\"white-tooltip\"\r\n style=\"margin-left: 4px;\"\r\n >i</div>\r\n </span>\r\n</div>\r\n <!-- // VD 12Jun24 - readonly change-->\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n \r\n <!-- Date-->\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date>\r\n </div>\r\n \r\n <!-- Time-->\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.errorMessage\" [readOnly]=\"ques.isReadOnly\" (timeChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-time>\r\n </div>\r\n <!-- calendar -->\r\n <div *ngIf=\"ques.type === 'Calendar'\">\r\n <app-custom-calendar\r\n [question]=\"ques\"\r\n (eventSelected)=\"getCalendarEvent($event)\"\r\n (dateSelected)=\"getCurrentCalendar($event)\"\r\n (openModal)=\"openCalendarModal($event)\"\r\n (closeModal)=\"closeCalendarModal($event)\"\r\n ></app-custom-calendar>\r\n <!-- model used in calendar component -->\r\n <app-custom-model *ngIf=\"isCalendarModalOpen\"\r\n [modalTitle]=\"calendarModalTitle\"\r\n [isModalOpen]=\"isCalendarModalOpen\"\r\n [modalSize]=\"calendarModalSize\"\r\n [saveButtonValue]=\"calendarSaveButtonValue\"\r\n [modalFooter]=\"modalCalendarModalFooter\"\r\n (saveButtonEmit)=\"onCalendarModalSave()\"\r\n (cancelButtonEmit)=\"closeCalendarModal($event)\"\r\n >\r\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n </app-custom-model>\r\n </div>\r\n <!-- Text -->\r\n <div *ngIf=\"ques.type === 'Text' || ques.type === 'Link'\" >\r\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [idValue]=\"ques.trackingId\" [focusEvent]=\"clearSQError(ques.id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <!-- VD 21DEC23 - dependent field change -->\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n \r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text editor -->\r\n <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n <app-custom-rich-text \r\n [question]=\"ques\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [value]=\"ques.input || ''\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.question\"\r\n (textValueChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-rich-text>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" readOnly=\"ques.isReadOnly\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n \r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.subText\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n \r\n <!-- Table Appendix -->\r\n <div *ngIf=\"ques.type === 'TableAppendix'\" class=\"\">\r\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-table-appendix>\r\n </div>\r\n <!-- list -->\r\n <!-- VD 20Aug24 used correct attribute -->\r\n <div *ngIf=\"ques.type === 'List'\" class=\"\">\r\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [placeHolderText]=\"ques.question\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\r\n </lib-search-box>\r\n </div>\r\n \r\n <!-- Dropdown -->\r\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\r\n <div *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" class=\"\">\r\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\r\n <app-custom-dropdown [options]=\"ques.options\"\r\n [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\r\n [selectedValue]=\"ques.selectedValue\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n <!-- // VD 02Aug24 custom-radio component -->\r\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\r\n <app-custom-radio [options]=\"ques.options\" [token]=\"token\"\r\n [apiMeta]=\"ques.subText\" [id]=\"ques.id\" [selectedValue]=\"ques.selectedValue\"\r\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\r\n [referenceField]=\"ques.referenceField\"\r\n [readOnly]=\"ques.isReadOnly\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-radio>\r\n </div>\r\n \r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.type === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n <div *ngIf=\"ques.type === 'PopUpMessage'\" class=\"\">\r\n <app-dependent-table [alertMessage]=\"ques.errorMessage\">\r\n </app-dependent-table>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Label'\" class=\"\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <!-- // VD 02Aug24 image component -->\r\n <div *ngIf=\"ques.type === 'Image'\" class=\"\">\r\n <app-custom-image [question]=\"ques\">\r\n </app-custom-image>\r\n </div>\r\n <!-- 08NOV23 - button type question added -->\r\n <!-- Button -->\r\n <div *ngIf=\"ques.type === 'Button'\" class=\"\">\r\n <app-custom-button [height]=\"'50px'\"\r\n [width]=\"'150px'\"\r\n [buttonText]=\"ques?.question\"\r\n [value]=\"ques?.question\"\r\n (buttonValue)=\"childEventCapture($event, ques)\"\r\n >\r\n </app-custom-button>\r\n </div>\r\n <!-- HA 20DEC23 This is to load book type questions-->\r\n <div *ngIf=\"ques.type === 'Book'\">\r\n <!-- HA 09FEB24 Added ternary operator -->\r\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.subQuestions\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 06-09-24 for calendar type-->\r\n<!-- <ng-template dynamicComponentHost></ng-template> -->", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}\n"] }]
|
|
398
423
|
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
399
424
|
type: Inject,
|
|
400
425
|
args: [DOCUMENT]
|
|
@@ -425,4 +450,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
425
450
|
}], handleCalendarEvent: [{
|
|
426
451
|
type: Output
|
|
427
452
|
}] } });
|
|
428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQU9sSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyxxQkFBcUI7SUEyQlo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ2tCO0lBaENuQixNQUFNLENBQWU7SUFDckIsWUFBWSxDQUFXO0lBQ3ZCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQSxDQUFFLG1DQUFtQztJQUNyRSxTQUFTLENBQWE7SUFDdEIsWUFBWSxDQUFLO0lBQ2pCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVEsQ0FBQyxzQ0FBc0M7SUFDbkQsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFDLG9DQUFvQztJQUNqRyxZQUFZLENBQUs7SUFDMUIsMkZBQTJGO0lBQzNGLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JELHVFQUF1RTtJQUN2RSxLQUFLLENBQWU7SUFDcEIsaURBQWlEO0lBQ2pELEtBQUssQ0FBTTtJQUNYLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsU0FBUyxDQUFNO0lBQ2YsWUFBWSxDQUFlO0lBQ2pCLHNCQUFzQixHQUFxQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hFLDhCQUE4QjtJQUNwQixrQkFBa0IsR0FBcUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMxRCxtQkFBbUIsR0FBcUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM5RCxnQkFBZ0IsR0FBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pDLFlBQW9CLFNBQTRCLEVBQ3RDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQy9CLFdBQXdCLEVBQ3ZCLEdBQXNCLEVBQ0osUUFBa0I7UUFOMUIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0osYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUU5QyxDQUFDO0lBRUQsUUFBUTtRQUNOLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUM1RCxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ1osSUFBRyxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUEscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMzQixXQUFXO1FBQ1QsMERBQTBEO1FBQzFELDJCQUEyQjtRQUMzQixJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFDckIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRS9GLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFF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LEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDcEQsQ0FBQztJQUdELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7d0dBclhVLHFCQUFxQixxTUFpQ3RCLFFBQVE7NEZBakNQLHFCQUFxQix1ZkNuQmxDLGtoWEFnTXlELGkwSEQ3SzVDLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQXFDekIsTUFBTTsyQkFBQyxRQUFRO3lDQWhDVCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQVlJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcclxuICBASW5wdXQoKSB0cmFuc2xhdGVkUXVlc3Rpb25zIDogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOmFueTtcclxuICBASW5wdXQoKSBsYWJlbFZhbHVlOnN0cmluZzsgXHJcbiAgQElucHV0KCkgdG9rZW46c3RyaW5nOyAvLyBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dFxyXG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cclxuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6YW55O1xyXG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcclxuICBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXHJcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcclxuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXHJcbiAgc3R5bGU6IGFueTtcclxuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XHJcbiAgYm9va1N0eWxlOiBhbnk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRGF0ZTpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLCBcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XHJcbiAgICApIHsgXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xyXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xyXG4gICAgLy8gVkQgc2VwMTMyNCBjaGFuZ2VzIC0gcHJvY2VzcyBkYXRhIHdoZW4gZGF0YWJpbmQgdmFsdWUgY2hhbmdlXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jdXN0b21DaGFuZ2UkLnN1YnNjcmliZShcclxuICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSA9PSAnZGF0YUJpbmQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcclxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICBwcm9jZXNzRGF0YSgpe1xyXG4gICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIEJvb2sgU3R5bGluZyhTbGFlc2ZvcmNlKVxyXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XHJcbiAgICBpZih0aGlzLnFiSXRlbT8uc3R5bGUpe1xyXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHR5cGVvZiB0aGlzLnFiSXRlbS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK3RoaXMucWJJdGVtPy5zdHlsZSkgOiB0aGlzLnFiSXRlbS5zdHlsZTtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5zaG93TGFiZWwgPSB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICBpZih0aGlzLnFiSXRlbSl7XHJcbiAgICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB7XHJcbiAgICAgICAgICBcImxhYmVsQ2xhc3NcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImxhYmVsU3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcImxhYmVsVmFsdWVTdHlsZVwiIDogXCJcIixcclxuICAgICAgICAgIFwiaW5wdXRDbGFzc1wiIDogXCJcIixcclxuICAgICAgICAgIFwiaW5wdXRTdHlsZVwiIDogXCJcIixcclxuICAgICAgICAgIFwiYm9va1N0eWxlXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJzaG93TGFiZWxcIjogdHJ1ZSxcclxuICAgICAgICAgIFwiZGlyZWN0aW9uXCIgOiBcImx0clwiLFxyXG4gICAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnFiSXRlbS5zdHlsZS5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LnN0eWxlLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xyXG4gICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0uc3R5bGUuZGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gPyB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA6ICdsdHInO1xyXG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmJvb2tTdHlsZTtcclxuICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHZhciBodG1sRWxlbWVudCA9IGVsZW1lbnQ/LnF1ZXN0aW9uVGV4dCA7XHJcbiAgICAgIHZhciB0ZXh0T25seSA9IGh0bWxFbGVtZW50Py5yZXBsYWNlKC88W14+XSo+L2csICcnKVxyXG4gICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IHRleHRPbmx5O1xyXG4gICAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gU3R5bGluZyhTbGFlc2ZvcmNlKVxyXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT09ICdCb29rJyl7XHJcbiAgICAgICAgaWYoZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSl7XHJcbiAgICAgICAgICB2YXIgcWIgPSBKU09OLnBhcnNlKGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pO1xyXG4gICAgICAgICAgaWYocWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKXtcclxuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdHlwZW9mIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK3FiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBCb29rIHR5cGUgcXVlc3Rpb24gc3R5bGluZ1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsQ2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fPy5sYWJlbFZhbHVlU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5ib29rU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5xdWVzdGlvblN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuICAgICAgICAgIHFiWydsYW5nRGlyZWN0aW9uJ10gPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuZGlyZWN0aW9uID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIExvb3AgZm9yIGVhY2ggcXVlc3Rpb24gaW4gdGhlIGJvb2tcclxuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdWJRdWVzdGlvbnMuZm9yRWFjaChxdWVzdGlvbkZyb21Cb29rID0+IHtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsQ2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuaW5wdXRTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0U3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5ib29rU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUucXVlc3Rpb25TdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9va1snbGFuZ0RpcmVjdGlvbiddID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBlbGVtZW50WydxYkl0ZW0nXSA9IHFiWydxdWVzdGlvbmJvb2snXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxlbWVudC5zdHlsZSA9IGVsZW1lbnQuc3R5bGUgPyB0eXBlb2YgZWxlbWVudC5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK2VsZW1lbnQ/LnN0eWxlKSA6IGVsZW1lbnQ/LnN0eWxlIDogdGhpcy5xYkl0ZW0/LnN0eWxlO1xyXG5cclxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbENsYXNzID0gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlID8gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gZWxlbWVudC5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0Q2xhc3MgPSBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzID8gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA9IGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmJvb2tTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmJvb2tTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2hvd0xhYmVsID0gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsID8gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcclxuICAgICAgZWxlbWVudC5zdHlsZS5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xyXG5cclxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uID8gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xyXG5cclxuXHJcbiAgICAgIC8vVkQgMDJBdWcyNCBkZXBlbmRlbnQgZmllbGQgc2hvdy9oaWRlIGNoYW5nZXNcclxuICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgICAgaWYoZWxlbWVudC5yZWZlcmVuY2VGaWVsZCl7XHJcbiAgICAgICAgZWxlbWVudC5kZXBlbmRlbnRSZWYgPSBlbGVtZW50LnJlZmVyZW5jZUZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGVsZW1lbnQuc3ViVGV4dCl7XHJcbiAgICAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IEpTT04ucGFyc2UoZWxlbWVudC5zdWJUZXh0KTtcclxuICAgICAgICAgaWYoZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKXtcclxuICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgLy8gVkQgMjBBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXHJcbiAgICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkICYmIGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudC5pc0hpZGRlbkZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgaWYoZGVwZW5kZW5jeU9iai5kZXBlbmRlbnRWYWx1ZSA9PSBjaGFuZ2VWYWx1ZS52YWx1ZU9iail7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdW5kYXkgY29tbWVudFxyXG4gICAgICAvLyBpZiAoZWxlbWVudC50eXBlID09PSAnQ2FsZW5kYXInKSB7XHJcbiAgICAgIC8vICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKTtcclxuICAgIHRoaXMucHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKTsgXHJcbiAgfVxyXG4vLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcclxuICBoaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudElkKSB7XHJcbiAgICBsZXQgZWxlbWVudHNUb0hpZGUgPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgIGlmIChlbC5zdWJUZXh0KSB7XHJcbiAgICAgICAgICAgIGxldCBkZXBPYmogPSBKU09OLnBhcnNlKGVsLnN1YlRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVwT2JqLnNvdXJjZVF1ZXN0aW9uSWQgPT0gZWxlbWVudElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICBlbGVtZW50c1RvSGlkZS5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICBlbC5pc0hpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgZWwuaW5wdXQgPSAnJztcclxuICAgICAgICBlbC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsKTtcclxuICAgICAgICAvLyBSZWN1cnNpdmVseSBoaWRlIGVsZW1lbnRzIGRlcGVuZGVudCBvbiB0aGlzIG9uZVxyXG4gICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsLmlkKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcclxuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09IHF1ZXNJZCk7XHJcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcclxuICAgICAgc3EuZXJyb3IgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgcHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKXtcclxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMgJiYgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaCgob3JnUXVlc3Rpb246IGFueSk9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMuZm9yRWFjaCgodHJhbnNRdWVzdGlvbjphbnkpID0+IHtcclxuICAgICAgICAgICAgIGlmKG9yZ1F1ZXN0aW9uLnVuaXF1ZUlkZW50aWZpZXIgPT0gdHJhbnNRdWVzdGlvbi5pZGVudGlmaWVyKXtcclxuICAgICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb25UZXh0ID0gdHJhbnNRdWVzdGlvbi5sYWJlbDtcclxuICAgICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb24gPSB0cmFuc1F1ZXN0aW9uLnBsYWNlSG9sZGVyO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gIGNvbnNvbGUubG9nKCdvcmlnaW5hbFF1ZXN0aW9uJyArIHRoaXMucXVlc3Rpb25zKTtcclxuICAgIC8vICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xyXG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcclxuICB9XHJcblxyXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcclxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86YW55KSB7XHJcbiAgICBsZXQgZHJvcGRvd25EYXRhID0gIHt9O1xyXG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcclxuICAgIGlmKHF1ZXMpe1xyXG4gICAgICBpZihxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fHF1ZXMudHlwZSA9PSAnUmFkaW8nICkge1xyXG4gICAgICAgIC8vIEhBIDE5SkFOMjQgQ29ycmVjdGlvbiBvZiBkcm9wZG93biB2YWx1ZXNcclxuICAgICAgICBxdWVzLnNlbGVjdGVkT2JqID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnNlbGVjdGVkT2JqID8gZXZlbnQuc2VsZWN0ZWRPYmogOiBldmVudC52YWx1ZU9iajtcclxuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcclxuICAgICAgICAvLyBlbWl0IHRoZSBkcm9wZG93biBkYXRhIHRvIHBhcmVudFxyXG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xyXG4gICAgICAgIGRyb3Bkb3duRGF0YVsncXVlcyddID0gcXVlcztcclxuICAgICAgICBpZihkcm9wZG93bkRhdGFbJ2V2ZW50J10pe1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVEcm9wRG93bi5lbWl0KGRyb3Bkb3duRGF0YSk7XHJcbiAgICAgICAgfSAgLy8gVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2VcclxuICAgICAgfSBlbHNlIGlmKHF1ZXMudHlwZSA9PSAnTG9jYXRpb24nKXtcclxuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XHJcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmouYWRkcmVzcztcclxuICAgICAgfWVsc2UgaWYocXVlcy50eXBlID09ICdGaWxlJyl7IFxyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcclxuXHJcblxyXG4gLy8gSGFuZGxlIGZpbGUgdmFsaWRhdGlvbiBlcnJvcnNcclxuIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPT09IDApIHtcclxuICAvLyBObyBmaWxlcyB1cGxvYWRlZCB3aGVuIHJlcXVpcmVkXHJcbiAgcXVlcy5lcnJvciA9IHF1ZXMuRXJyb3JfTWVzc2FnZV9fYyA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XHJcbn0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xyXG4gIC8vIEZpbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXHJcbiAgcXVlcy5lcnJvciA9IG51bGw7XHJcbn1cclxuXHJcbi8vIElmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSB0aGUgZmlsZSB1cGxvYWQgY29tcG9uZW50XHJcbmlmIChldmVudC52YWxpZGF0aW9uRXJyb3JzICYmIGV2ZW50LnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgcXVlcy5lcnJvci5tZXNzYWdlID0gZXZlbnQudmFsaWRhdGlvbkVycm9yc1swXTsgLy8gVXNlIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGVycm9yXHJcbn1cclxuXHJcbiAgICAgIH1lbHNlIGlmKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXHJcbiAgICAgICAgIGlmKGV2ZW50LnZhbHVlKXtcclxuICAgICAgICAgIGxldCBkID0gbmV3IERhdGUoZXZlbnQudmFsdWUpO1xyXG4gICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQ/LnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICBxdWVzLmlucHV0ID0gdXRjU3RyaW5nO1xyXG4gICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XHJcbiAgICAgICAgIH1cclxuICAgICAgfWVsc2UgaWYocXVlcy50eXBlID09ICdMaXN0Jyl7XHJcbiAgICAgICAgLy8gVkQgMjBBdWcyNCBoYW5kbGluZyB0aGUgbGlzdCB0eXBlICBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0IHZhbHVlc1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGV2ZW50LnZhbHVlT2JqLGV2ZW50LmZpZWxkKTtcclxuICAgICAgfS8vUlMgMDZKQU4yNVxyXG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnKSB7ICAgICAgICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JpY2hUZXh0QXJlYSBldmVudDonLCBldmVudCk7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50IHx8ICcnO1xyXG4gICAgICB9IGVsc2V7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xyXG4gICAgICB9XHJcbiAgICAgIC8vUlMgMDZKQU4yNVxyXG4gICAgICAvLyBWYWxpZGF0ZSBlcnJvciBtZXNzYWdlIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHJpY2ggdGV4dFxyXG4gICAgICAgICAgY29uc3QgaGFzRXJyb3IgPSBxdWVzLkVycm9yX01lc3NhZ2VfX2MgJiYgKFxyXG4gICAgICAgICAgICAocXVlcy50eXBlID09PSAnRmlsZScgJiYgcXVlcy5pbnB1dC5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgICAgICAgIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnICYmICghcXVlcy5pbnB1dCB8fCBxdWVzLmlucHV0LnRyaW0oKSA9PT0gJycpKSB8fFxyXG4gICAgICAgICAgICAocXVlcy50eXBlICE9PSAnRmlsZScgJiYgcXVlcy5UeXBlX19jICE9PSAnUmljaFRleHRBcmVhJyAmJiAhcXVlcy5pbnB1dClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xyXG4gICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xyXG4gICAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XHJcbiAgICAgIC8vIFZEIDE5SnVsMDEgLSBnZXQgdXBkYXRlZCBxdWVzdGlvblxyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6YW55KXtcclxuICAgIGNvbnNvbGUubG9nKCdmaWxlREFUQScsZmlsZURhdGEpXHJcbiAgfVxyXG4gIGdldERyb3BEb3duKGV2ZW50OmFueSl7XHJcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG4vLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBnZXRDdXJyZW50Q2FsZW5kYXIoZXZlbnQ6YW55KXtcclxuICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJEYXRlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsZW5kYXJFdmVudChldmVudDphbnkpe1xyXG4gICAgaWYoZXZlbnQpe1xyXG4gICAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIC8vIFZEIDA2U2VwMjQgcmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXHJcbiAgLy8gZnJvbSB0aGUgcXVlc3Rpb25UZXh0XHJcbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6c3RyaW5nKXtcclxuICAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xyXG4gICAgIHJldHVybiB1cGRhdGVkVGV4dDtcclxuICB9XHJcblxyXG4vLyBzdW5kYXkgY29tbWVudFxyXG4gIC8vIG9wZW5DYWxlbmRhckNvbXBvbmVudChxdWVzKSB7XHJcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xyXG4gIC8vICAgaWYodmlld0NvbnRhaW5lclJlZil7XHJcbiAgLy8gICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAvLyAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQpO1xyXG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb24gPSBxdWVzO1xyXG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGF0ZVNlbGVjdGVkLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gdGhpcy5nZXRDdXJyZW50Q2FsZW5kYXIoZXZlbnQpKTtcclxuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmV2ZW50U2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDphbnkpID0+IHRoaXMuZ2V0Q2FsZW5kYXJFdmVudChldmVudCkpXHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBpc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgY2FsZW5kYXJNb2RhbFRpdGxlOmFueTtcclxuICBjYWxlbmRhck1vZGFsU2l6ZTphbnk7XHJcbiAgY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWU6IGFueTtcclxuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcclxuICBxYlJlZnJlbmNlQm9vazphbnk7XHJcbiAgbW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyOmFueTtcclxuXHJcbiAgb3BlbkNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcclxuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLnFiUmVmcmVuY2VCb29rID0gZXZlbnQucWJSZWZyZW5jZUJvb2s7XHJcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnJlZmVyZW5jZVF1ZXN0aW9ucztcclxuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFRpdGxlID0gZXZlbnQubW9kYWxUaXRsZTtcclxuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFNpemUgPSBldmVudC5tb2RhbFNpemU7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlID0gZXZlbnQuc2F2ZUJ1dHRvblZhbHVlO1xyXG4gICAgdGhpcy5tb2RhbENhbGVuZGFyTW9kYWxGb290ZXIgPSBldmVudC5tb2RhbEZvb3RlcjtcclxuICB9XHJcblxyXG5cclxuICBvbkNhbGVuZGFyTW9kYWxTYXZlKCl7XHJcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuZGF0YUNoYW5nZXMoJ2NhbGVuZGFyLW1vZGFsLXNhdmUnKTtcclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KXtcclxuICAgIGNvbnNvbGUubG9nKCdoYW5kbGUgcXVlc3Rpb24gaGVyZScpO1xyXG4gIH1cclxuIFxyXG4gIGNsb3NlQ2FsZW5kYXJNb2RhbChldmVudCl7XHJcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gSEEgMjBERUMyMyBCb29rIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cclxuPCEtLSBIQSAyOERFQzIzICBSZW1vdmVkIElzU2hlbmdlbChyZW1vdmFsIG9mIHNoZW5nZWwgdmFsdWVzIGFwcGxpZXMgZm9yIHRoaXMgcmVhc29uKSBhbmQgZGlyZWN0IHN0eWxpbmcgb2YgYm9va3MgdG8gYXZvaWQgc3R5bGluZyBpc3N1ZXMtLT5cclxuPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cclxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XHJcbiAgICAgICAgPCEtLSBSQTA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiJ2NvbC1sZy0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBxdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLmlkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cclxuICAgICAgICAgICAgPCEtLSBTdWIgUXVlc3Rpb24gTGFiZWwgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBMYWJlbCBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XHJcbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxyXG4gICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNIaWRkZW5cIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxyXG4gXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFZEIDIwSlVOMjQgLSBoZWxwIHRleHQgY2hhbmdlcy0tPlxyXG4gICAgICAgICAgICA8IS0tIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZS0tPlxyXG4gICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgLSBsYWJlbCB2YWx1ZSBzdHlsZS0tPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gcXVlcy5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZVwiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCIgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZVwiPnt7IHJlbW92ZUNoYXJhY3RlcnMocXVlcz8ucXVlc3Rpb25UZXh0KSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwicXVlcy5pc09wdGlvbmFsXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5xdWVzdGlvblRleHQgJiYgcXVlcz8uaGVscFRleHRcIiBjbGFzcz1cImljb25cIiBbbWF0VG9vbHRpcF09XCJxdWVzPy5oZWxwVGV4dFwiPmk8L2Rpdj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cclxuICAgICAgICAgICAgPCEtLSBEYXRlVGltZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgICA8IS0tIERhdGUtLT5cclxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZSAgW2RhdGVdPVwicXVlcy5pbnB1dFwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgIDwhLS0gVGltZS0tPlxyXG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10aW1lICBbdGltZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiICh0aW1lQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10aW1lPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tY2FsZW5kYXJcclxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImdldEN1cnJlbnRDYWxlbmRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChvcGVuTW9kYWwpPVwib3BlbkNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcHAtY3VzdG9tLWNhbGVuZGFyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtb2RlbCB1c2VkIGluIGNhbGVuZGFyIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsVGl0bGVdPVwiY2FsZW5kYXJNb2RhbFRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsU2l6ZV09XCJjYWxlbmRhck1vZGFsU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNhbmNlbEJ1dHRvbkVtaXQpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgIFtxYkl0ZW1dPVwicWJSZWZyZW5jZUJvb2tcIiBbcXVlc3Rpb25zXT1cInJlZmVyZW5jZVF1ZXN0aW9uc1wiIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdMaW5rJ1wiID5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NWYWx1ZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5wcm9ncmVzc0JhclxyXG4gICAgICAgICAgICAgICAgICAgIH1cIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbaWRWYWx1ZV09XCJxdWVzLnRyYWNraW5nSWRcIiBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb25cIiAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gICBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxyXG4gICAgICAgICAgICA8IS0tIEhBMTAwMTIwMjQgQWRkZWQgQXBpIGtleSBhcyBpbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnYXBpS2V5J11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb24gXCJcclxuICAgICAgICAgICAgICAgICAgICAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gUlMgMDZKQU4yNSAtLT5cclxuICAgICAgICAgICA8IS0tIGZvciByaWNoIHRleHQgZWRpdG9yIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmljaC10ZXh0IFxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAodGV4dFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yaWNoLXRleHQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFbWFpbCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0VtYWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHJlYWRPbmx5PVwicXVlcy5pc1JlYWRPbmx5XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBUYWJsZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbcXVlc3Rpb25dPVwicXVlc1wiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgICA8IS0tIFRhYmxlIEFwcGVuZGl4IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZUFwcGVuZGl4J1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRhYmxlLWFwcGVuZGl4IFtxdWVzdGlvbl09XCJxdWVzXCIgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYXBwZW5kaXg+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxyXG4gICAgICAgICAgICAgPCEtLSBWRCAyMEF1ZzI0IHVzZWQgY29ycmVjdCBhdHRyaWJ1dGUgLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGlzdCdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWFyY2gtYm94IFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uXCIgIFtmaWx0ZXJOYW1lXT1cInF1ZXMuaW5wdXRcIiAoc2VhcmNoVmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItc2VhcmNoLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzPy50eXBlID09PSAnRHJvcGRvd24nICYmIHF1ZXM/Lm9wdGlvbnNcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Rva2VuXT1cInRva2VuXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXM/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1yYWRpbyBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCIgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gQXR0YWNobWVudCAvIEZpbGVzIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiBbdGFibGVGaWxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVEYXRhKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIiAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbaXNEZWxldGVGaWxlQnV0dG9uVmlzaWJsZV09XCJ0cnVlXCI+PC9hcHAtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnUG9wVXBNZXNzYWdlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWRlcGVuZGVudC10YWJsZSBbYWxlcnRNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1kZXBlbmRlbnQtdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGFiZWwnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFN0eWxlXT1cInF1ZXMudGl0bGVcIiBbbGFiZWxWYWx1ZV09XCJxdWVzLnF1ZXN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGltYWdlIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ltYWdlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbWFnZSBbcXVlc3Rpb25dPVwicXVlc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWltYWdlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSAwOE5PVjIzIC0gYnV0dG9uIHR5cGUgcXVlc3Rpb24gYWRkZWQgLS0+XHJcbiAgICAgICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0J1dHRvbidcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tYnV0dG9uIFtoZWlnaHRdPVwiJzUwcHgnXCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTUwcHgnXCJcclxuICAgICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cInF1ZXM/LnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5xdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uVmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzICBUaGlzIGlzIHRvIGxvYWQgYm9vayB0eXBlIHF1ZXN0aW9ucy0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQm9vaydcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIC0tPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25zXT1cInF1ZXMucWJJdGVtPy5zdWJRdWVzdGlvbnNcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwhLS0gMDYtMDktMjQgZm9yIGNhbGVuZGFyIHR5cGUtLT5cclxuPCEtLSA8bmctdGVtcGxhdGUgZHluYW1pY0NvbXBvbmVudEhvc3Q+PC9uZy10ZW1wbGF0ZT4gLS0+Il19
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE2RCxNQUFNLGVBQWUsQ0FBQztBQU9sSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyxxQkFBcUI7SUF5RFo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ2tCO0lBOURuQixNQUFNLENBQWU7SUFDckIsWUFBWSxDQUFXO0lBQ3ZCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQSxDQUFFLG1DQUFtQztJQUNyRSxTQUFTLENBQWE7SUFDdEIsWUFBWSxDQUFLO0lBQ2pCLFVBQVUsQ0FBUTtJQUNsQixLQUFLLENBQVEsQ0FBQyxzQ0FBc0M7SUFDbkQsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFDLG9DQUFvQztJQUNqRyxZQUFZLENBQUs7SUFDMUIsMkZBQTJGO0lBQzNGLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsY0FBYyxH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QUUsS0FBSyxFQUFDLENBQUM7WUFDckIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFB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S0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRS9GLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FB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LENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7d0dBblpVLHFCQUFxQixxTUErRHRCLFFBQVE7NEZBL0RQLHFCQUFxQix1ZkNuQmxDLDhtWUErTXlELHMxSUQ1TDVDLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQW1FekIsTUFBTTsyQkFBQyxRQUFRO3lDQTlEVCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQTBDSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgU2ltcGxlQ2hhbmdlcywgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcclxuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEZXBlbmRlbmN5TWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGVwZW5kZW5jeU1ldGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb25ib29rJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xdWVzdGlvbmJvb2suY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XHJcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9ucyA6IGFueVtdID0gW10gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBRdWVzdGlvbltdO1xyXG4gIEBJbnB1dCgpIGVycm9yRmllbGRJZDphbnk7XHJcbiAgQElucHV0KCkgbGFiZWxWYWx1ZTpzdHJpbmc7IFxyXG4gIEBJbnB1dCgpIHRva2VuOnN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcclxuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXHJcbiAgQElucHV0KCkgZHJvcERvd25EYXRhOmFueTtcclxuICAvL0BWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XHJcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xyXG4gIHNlbGVjdGVkRmlsZURhdGE6IGFueVtdID0gW107XHJcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxyXG4gIHFiUmVmOiBRdWVzdGlvbkJvb2s7XHJcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xyXG4gIHN0eWxlOiBhbnk7XHJcbiAgbGFuZ0RpcmVjdGlvbiA9ICdsdHInO1xyXG4gIGJvb2tTdHlsZTogYW55O1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuLy8gUlMgMTdKQU4yMDI1XHJcbi8vRm9ybWF0cyBhbmQgcmV0dXJucyBmaWxlIHVwbG9hZCByZXF1aXJlbWVudHMgZnJvbSBhIEpTT04gc3RyaW5nXHJcbiAgZ2V0RmlsZVJlcXVpcmVtZW50cyhmaWVsZHNNZXRhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbWV0YURhdGEgPSBKU09OLnBhcnNlKGZpZWxkc01ldGEpO1xyXG4gICAgICBjb25zdCBmaWxlQ29uZmlnID0gbWV0YURhdGFbMF07XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIWZpbGVDb25maWcpIHJldHVybiAnJztcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IFtdO1xyXG4gICAgICBcclxuICAgICAgaWYgKGZpbGVDb25maWcuYWxsb3dlZFR5cGVzPy5sZW5ndGgpIHtcclxuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgQWNjZXB0ZWQgZm9ybWF0czogJHtmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcy5qb2luKCcsICcpfWApO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIHNpemUgcGVyIGZpbGU6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSAvIDEwNDg1NzZ9TUJgKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKGZpbGVDb25maWcubWF4RmlsZXMpIHtcclxuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBudW1iZXIgb2YgZmlsZXM6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlc31gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlcXVpcmVtZW50cy5tYXAocmVxID0+IHJlcS50cmltKCkpLmpvaW4oJ1xcbicpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBmaWVsZHNNZXRhOicsIGVycm9yKTtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckV2ZW50OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcclxuICAgICkgeyBcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXHJcbiAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAvLyBWRCBzZXAxMzI0IGNoYW5nZXMgLSBwcm9jZXNzIGRhdGEgd2hlbiBkYXRhYmluZCB2YWx1ZSBjaGFuZ2VcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmN1c3RvbUNoYW5nZSQuc3Vic2NyaWJlKFxyXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xyXG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIHByb2Nlc3NEYXRhKCl7XHJcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXHJcbiAgICAvLyBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnlcclxuICAgIGlmKHRoaXMucWJJdGVtPy5zdHlsZSl7XHJcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0gdHlwZW9mIHRoaXMucWJJdGVtLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrdGhpcy5xYkl0ZW0/LnN0eWxlKSA6IHRoaXMucWJJdGVtLnN0eWxlO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmxhYmVsU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcclxuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xyXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGlmKHRoaXMucWJJdGVtKXtcclxuICAgICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHtcclxuICAgICAgICAgIFwibGFiZWxDbGFzc1wiIDogXCJcIixcclxuICAgICAgICAgIFwibGFiZWxTdHlsZVwiIDogXCJcIixcclxuICAgICAgICAgIFwibGFiZWxWYWx1ZVN0eWxlXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJpbnB1dENsYXNzXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJpbnB1dFN0eWxlXCIgOiBcIlwiLFxyXG4gICAgICAgICAgXCJib29rU3R5bGVcIiA6IFwiXCIsXHJcbiAgICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxyXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIiA6IFwibHRyXCIsXHJcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucWJJdGVtLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyB0aGlzLnFiSXRlbT8uc3R5bGUucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5zdHlsZS5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uIDogJ2x0cic7XHJcbiAgICB0aGlzLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8uYm9va1N0eWxlO1xyXG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8ucXVlc3Rpb25UZXh0IDtcclxuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXHJcbiAgICAgIGVsZW1lbnQucXVlc3Rpb25UZXh0ID0gdGV4dE9ubHk7XHJcbiAgICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBTdHlsaW5nKFNsYWVzZm9yY2UpXHJcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKXtcclxuICAgICAgICBpZihlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKXtcclxuICAgICAgICAgIHZhciBxYiA9IEpTT04ucGFyc2UoZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSk7XHJcbiAgICAgICAgICBpZihxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpe1xyXG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0eXBlb2YgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEJvb2sgdHlwZSBxdWVzdGlvbiBzdHlsaW5nXHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX18/LmxhYmVsVmFsdWVTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0Q2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmJvb2tTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnNob3dMYWJlbCA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgcWJbJ2xhbmdEaXJlY3Rpb24nXSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5kaXJlY3Rpb24gPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xyXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUubGFiZWxDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuaW5wdXRDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmJvb2tTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUuc2hvd0xhYmVsID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uc2hvd0xhYmVsID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcclxuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xyXG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rWydsYW5nRGlyZWN0aW9uJ10gPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGVsZW1lbnRbJ3FiSXRlbSddID0gcWJbJ3F1ZXN0aW9uYm9vayddO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LnN0eWxlID0gZWxlbWVudC5zdHlsZSA/IHR5cGVvZiBlbGVtZW50LnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrZWxlbWVudD8uc3R5bGUpIDogZWxlbWVudD8uc3R5bGUgOiB0aGlzLnFiSXRlbT8uc3R5bGU7XHJcblxyXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsQ2xhc3MgPSBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzID8gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGFiZWxTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgPyBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5pbnB1dFN0eWxlID0gZWxlbWVudC5zdHlsZS5pbnB1dFN0eWxlID8gZWxlbWVudC5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuYm9va1N0eWxlID0gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlID8gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcclxuICAgICAgZWxlbWVudC5zdHlsZS5zaG93TGFiZWwgPSBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgPyBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XHJcblxyXG4gICAgICBlbGVtZW50WydsYW5nRGlyZWN0aW9uJ10gPSBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gPyBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XHJcblxyXG5cclxuICAgICAgLy9WRCAwMkF1ZzI0IGRlcGVuZGVudCBmaWVsZCBzaG93L2hpZGUgY2hhbmdlc1xyXG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gICAgICBpZihlbGVtZW50LnJlZmVyZW5jZUZpZWxkKXtcclxuICAgICAgICBlbGVtZW50LmRlcGVuZGVudFJlZiA9IGVsZW1lbnQucmVmZXJlbmNlRmllbGQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZWxlbWVudC5zdWJUZXh0KXtcclxuICAgICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IERlcGVuZGVuY3lNZXRhID0gSlNPTi5wYXJzZShlbGVtZW50LnN1YlRleHQpO1xyXG4gICAgICAgICBpZihkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpe1xyXG4gICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgfVxyXG4gICAgICAgIC8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcclxuICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50LmlzSGlkZGVuRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBpZihkZXBlbmRlbmN5T2JqLmRlcGVuZGVudFZhbHVlID09IGNoYW5nZVZhbHVlLnZhbHVlT2JqKXtcclxuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBkZXBlbmRlbnQgc2VsZWN0aW9uIHJlbW92ZSB0aGUgcmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHN1bmRheSBjb21tZW50XHJcbiAgICAgIC8vIGlmIChlbGVtZW50LnR5cGUgPT09ICdDYWxlbmRhcicpIHtcclxuICAgICAgLy8gICB0aGlzLm9wZW5DYWxlbmRhckNvbXBvbmVudChlbGVtZW50KTtcclxuICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgdGhpcy5wcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpOyBcclxuICB9XHJcbi8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxyXG4gIGhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50SWQpIHtcclxuICAgIGxldCBlbGVtZW50c1RvSGlkZSA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcihlbCA9PiB7XHJcbiAgICAgICAgaWYgKGVsLnN1YlRleHQpIHtcclxuICAgICAgICAgICAgbGV0IGRlcE9iaiA9IEpTT04ucGFyc2UoZWwuc3ViVGV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXBPYmouc291cmNlUXVlc3Rpb25JZCA9PSBlbGVtZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnRzVG9IaWRlLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIGVsLmlzSGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICBlbC5pbnB1dCA9ICcnO1xyXG4gICAgICAgIGVsLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWwpO1xyXG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGhpZGUgZWxlbWVudHMgZGVwZW5kZW50IG9uIHRoaXMgb25lXHJcbiAgICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWwuaWQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xyXG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcclxuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xyXG4gICAgICBzcS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICBwcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpe1xyXG4gICAgaWYgKHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucyAmJiB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKChvcmdRdWVzdGlvbjogYW55KT0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5mb3JFYWNoKCh0cmFuc1F1ZXN0aW9uOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgaWYob3JnUXVlc3Rpb24udW5pcXVlSWRlbnRpZmllciA9PSB0cmFuc1F1ZXN0aW9uLmlkZW50aWZpZXIpe1xyXG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0cmFuc1F1ZXN0aW9uLmxhYmVsO1xyXG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvbiA9IHRyYW5zUXVlc3Rpb24ucGxhY2VIb2xkZXI7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAvLyAgY29uc29sZS5sb2coJ29yaWdpbmFsUXVlc3Rpb24nICsgdGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgLy8gIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XHJcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxyXG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcclxuICAgIGxldCBkcm9wZG93bkRhdGEgPSAge307XHJcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xyXG4gICAgaWYocXVlcyl7XHJcbiAgICAgIGlmKHF1ZXMudHlwZSA9PSAnRHJvcGRvd24nIHx8cXVlcy50eXBlID09ICdSYWRpbycgKSB7XHJcbiAgICAgICAgLy8gSEEgMTlKQU4yNCBDb3JyZWN0aW9uIG9mIGRyb3Bkb3duIHZhbHVlc1xyXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcclxuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQuc2VsZWN0ZWRPYmogPyBldmVudC5zZWxlY3RlZE9iaiA6IGV2ZW50LnZhbHVlT2JqO1xyXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xyXG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XHJcbiAgICAgICAgZHJvcGRvd25EYXRhWydldmVudCddID0gZXZlbnQudmFsdWVPYmo7XHJcbiAgICAgICAgZHJvcGRvd25EYXRhWydxdWVzJ10gPSBxdWVzO1xyXG4gICAgICAgIGlmKGRyb3Bkb3duRGF0YVsnZXZlbnQnXSl7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcclxuICAgICAgICB9ICAvLyBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZVxyXG4gICAgICB9IGVsc2UgaWYocXVlcy50eXBlID09ICdMb2NhdGlvbicpe1xyXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcclxuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iai5hZGRyZXNzO1xyXG4gICAgICB9ZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0ZpbGUnKXsgXHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50O1xyXG5cclxuXHJcbiAvLyBIYW5kbGUgZmlsZSB2YWxpZGF0aW9uIGVycm9yc1xyXG4gaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA9PT0gMCkge1xyXG4gIC8vIE5vIGZpbGVzIHVwbG9hZGVkIHdoZW4gcmVxdWlyZWRcclxuICBxdWVzLmVycm9yID0gcXVlcy5FcnJvcl9NZXNzYWdlX19jID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcclxufSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPiAwKSB7XHJcbiAgLy8gRmlsZXMgd2VyZSBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcclxuICBxdWVzLmVycm9yID0gbnVsbDtcclxufVxyXG5cclxuLy8gSWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHRoZSBmaWxlIHVwbG9hZCBjb21wb25lbnRcclxuaWYgKGV2ZW50LnZhbGlkYXRpb25FcnJvcnMgJiYgZXZlbnQudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgcXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICBxdWVzLmVycm9yLm1lc3NhZ2UgPSBldmVudC52YWxpZGF0aW9uRXJyb3JzWzBdOyAvLyBVc2UgdGhlIGZpcnN0IHZhbGlkYXRpb24gZXJyb3JcclxufVxyXG5cclxuICAgICAgfWVsc2UgaWYocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJyl7IC8vIEhBIDI0SkFOMjQgQ29udmVydGluZyBEYXRlIGFuZCBEYXRlVGltZSB0byBVVENcclxuICAgICAgICAgaWYoZXZlbnQudmFsdWUpe1xyXG4gICAgICAgICAgbGV0IGQgPSBuZXcgRGF0ZShldmVudC52YWx1ZSk7XHJcbiAgICAgICAgICBsZXQgdXRjU3RyaW5nID0gZD8udG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XHJcbiAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcclxuICAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZihxdWVzLnR5cGUgPT0gJ0xpc3QnKXtcclxuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQudmFsdWVPYmosZXZlbnQuZmllbGQpO1xyXG4gICAgICB9Ly9SUyAwNkpBTjI1XHJcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScpIHsgICAgICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZygnUmljaFRleHRBcmVhIGV2ZW50OicsIGV2ZW50KTtcclxuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQgfHwgJyc7XHJcbiAgICAgIH0gZWxzZXtcclxuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgLy9SUyAwNkpBTjI1XHJcbiAgICAgIC8vIFZhbGlkYXRlIGVycm9yIG1lc3NhZ2UgLSBtb2RpZmllZCB0byBoYW5kbGUgcmljaCB0ZXh0XHJcbiAgICAgICAgICBjb25zdCBoYXNFcnJvciA9IHF1ZXMuRXJyb3JfTWVzc2FnZV9fYyAmJiAoXHJcbiAgICAgICAgICAgIChxdWVzLnR5cGUgPT09ICdGaWxlJyAmJiBxdWVzLmlucHV0Lmxlbmd0aCA9PT0gMCkgfHxcclxuICAgICAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgJiYgKCFxdWVzLmlucHV0IHx8IHF1ZXMuaW5wdXQudHJpbSgpID09PSAnJykpIHx8XHJcbiAgICAgICAgICAgIChxdWVzLnR5cGUgIT09ICdGaWxlJyAmJiBxdWVzLlR5cGVfX2MgIT09ICdSaWNoVGV4dEFyZWEnICYmICFxdWVzLmlucHV0KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XHJcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XHJcbiAgICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShxdWVzKTtcclxuICAgICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzKTtcclxuICAgIH1cclxuICB9XHJcbiAgZGVsZXRlRmlsZShmaWxlRGF0YTphbnkpe1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbGVEQVRBJyxmaWxlRGF0YSlcclxuICB9XHJcbiAgZ2V0RHJvcERvd24oZXZlbnQ6YW55KXtcclxuICAgIHRoaXMuaGFkbGVEcm9wRG93bkRlcGVuZGVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbi8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gIGdldEN1cnJlbnRDYWxlbmRhcihldmVudDphbnkpe1xyXG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OmFueSl7XHJcbiAgICBpZihldmVudCl7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gLy8gVkQgMDZTZXAyNCByZW1vdmUgdGhlIHNwZWNpYWwgY2hhcmVjdGVycyBhbmQgdGFncyBcclxuICAvLyBmcm9tIHRoZSBxdWVzdGlvblRleHRcclxuICByZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uVGV4dDpzdHJpbmcpe1xyXG4gICAgIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XHJcbiAgICAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xyXG4gIH1cclxuXHJcbi8vIHN1bmRheSBjb21tZW50XHJcbiAgLy8gb3BlbkNhbGVuZGFyQ29tcG9uZW50KHF1ZXMpIHtcclxuICAvLyAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmR5bmFtaWNIb3N0LnZpZXdDb250YWluZXJSZWY7XHJcbiAgLy8gICBpZih2aWV3Q29udGFpbmVyUmVmKXtcclxuICAvLyAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gIC8vICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChDdXN0b21DYWxlbmRhckNvbXBvbmVudCk7XHJcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5xdWVzdGlvbiA9IHF1ZXM7XHJcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xyXG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZXZlbnRTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OmFueSkgPT4gdGhpcy5nZXRDYWxlbmRhckV2ZW50KGV2ZW50KSlcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcclxuICBjYWxlbmRhck1vZGFsVGl0bGU6YW55O1xyXG4gIGNhbGVuZGFyTW9kYWxTaXplOmFueTtcclxuICBjYWxlbmRhclNhdmVCdXR0b25WYWx1ZTogYW55O1xyXG4gIHJlZmVyZW5jZVF1ZXN0aW9ucyA9IFtdO1xyXG4gIHFiUmVmcmVuY2VCb29rOmFueTtcclxuICBtb2RhbENhbGVuZGFyTW9kYWxGb290ZXI6YW55O1xyXG5cclxuICBvcGVuQ2FsZW5kYXJNb2RhbChldmVudCkge1xyXG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBldmVudC5xYlJlZnJlbmNlQm9vaztcclxuICAgIHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zID0gZXZlbnQucmVmZXJlbmNlUXVlc3Rpb25zO1xyXG4gICAgdGhpcy5jYWxlbmRhck1vZGFsVGl0bGUgPSBldmVudC5tb2RhbFRpdGxlO1xyXG4gICAgdGhpcy5jYWxlbmRhck1vZGFsU2l6ZSA9IGV2ZW50Lm1vZGFsU2l6ZTtcclxuICAgIHRoaXMuY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWUgPSBldmVudC5zYXZlQnV0dG9uVmFsdWU7XHJcbiAgICB0aGlzLm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlciA9IGV2ZW50Lm1vZGFsRm9vdGVyO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uQ2FsZW5kYXJNb2RhbFNhdmUoKXtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5kYXRhQ2hhbmdlcygnY2FsZW5kYXItbW9kYWwtc2F2ZScpO1xyXG4gIH1cclxuXHJcblxyXG4gIGhhbmRsZVF1ZXN0aW9uRXZlbnQoZXZlbnQpe1xyXG4gICAgY29uc29sZS5sb2coJ2hhbmRsZSBxdWVzdGlvbiBoZXJlJyk7XHJcbiAgfVxyXG4gXHJcbiAgY2xvc2VDYWxlbmRhck1vZGFsKGV2ZW50KXtcclxuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPCEtLSBIQSAyMERFQzIzIEJvb2sgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxyXG48IS0tIEhBIDI4REVDMjMgIFJlbW92ZWQgSXNTaGVuZ2VsKHJlbW92YWwgb2Ygc2hlbmdlbCB2YWx1ZXMgYXBwbGllcyBmb3IgdGhpcyByZWFzb24pIGFuZCBkaXJlY3Qgc3R5bGluZyBvZiBib29rcyB0byBhdm9pZCBzdHlsaW5nIGlzc3Vlcy0tPlxyXG48IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxyXG48ZGl2IFtzdHlsZV09XCJib29rU3R5bGVcIiBjbGFzcz1cImNvbnRlbnQtYm94IGZvcm0tZ3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cclxuICAgICAgICA8IS0tIFJBMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuaWRcIiBbZGlyXT1cInF1ZXMubGFuZ0RpcmVjdGlvblwiIFtzdHlsZV09XCJxdWVzPy5zdHlsZT8ucXVlc3Rpb25TdHlsZVwiPlxyXG4gICAgICAgICAgICA8IS0tIFN1YiBRdWVzdGlvbiBMYWJlbCAtLT5cclxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIExhYmVsIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cclxuICAgICAgICAgICAgPCEtLSBWRCAwOU1heTI0IGlzIGhpZGUgZmllbGQgY2hhbmdlLS0+XHJcbiAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pc0hpZGRlblwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZVRpbWUnXCI+XHJcbiBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gVkQgMjBKVU4yNCAtIGhlbHAgdGV4dCBjaGFuZ2VzLS0+XHJcbiAgICAgICAgICAgIDwhLS0gVkQgMDFBdWcyNCAtIHZhbGlkYXRpb24gY2hhbmdlLS0+XHJcbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCAtIGxhYmVsIHZhbHVlIHN0eWxlLS0+XHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgKm5nSWY9XCJxdWVzLnN0eWxlPy5zaG93TGFiZWwgPyBxdWVzLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlXCIgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsU3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3ICdcIiBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlXCI+e3sgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJxdWVzLmlzT3B0aW9uYWxcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+KjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBoZWxwIHRleHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMucXVlc3Rpb25UZXh0ICYmIHF1ZXM/LmhlbHBUZXh0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJxdWVzPy5oZWxwVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIj5pPC9kaXY+XHJcbiAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XHJcbiAgICAgICAgPCEtLSAgRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBmb3IgZmlsZSByZXF1aXJlbWVudHMgLS0+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJpY29uXCIgXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcy5maWVsZHNNZXRhXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0RmlsZVJlcXVpcmVtZW50cyhxdWVzLmZpZWxkc01ldGEpXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDRweDtcIlxyXG4gICAgICAgID5pPC9kaXY+XHJcbiAgICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cclxuICAgICAgICAgICAgPCEtLSBEYXRlVGltZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgICA8IS0tIERhdGUtLT5cclxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZSAgW2RhdGVdPVwicXVlcy5pbnB1dFwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgIDwhLS0gVGltZS0tPlxyXG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10aW1lICBbdGltZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiICh0aW1lQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10aW1lPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tY2FsZW5kYXJcclxuICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImdldEN1cnJlbnRDYWxlbmRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChvcGVuTW9kYWwpPVwib3BlbkNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcHAtY3VzdG9tLWNhbGVuZGFyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtb2RlbCB1c2VkIGluIGNhbGVuZGFyIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsVGl0bGVdPVwiY2FsZW5kYXJNb2RhbFRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsU2l6ZV09XCJjYWxlbmRhck1vZGFsU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNhbmNlbEJ1dHRvbkVtaXQpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgIFtxYkl0ZW1dPVwicWJSZWZyZW5jZUJvb2tcIiBbcXVlc3Rpb25zXT1cInJlZmVyZW5jZVF1ZXN0aW9uc1wiIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdMaW5rJ1wiID5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NWYWx1ZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5wcm9ncmVzc0JhclxyXG4gICAgICAgICAgICAgICAgICAgIH1cIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbaWRWYWx1ZV09XCJxdWVzLnRyYWNraW5nSWRcIiBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb25cIiAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gICBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxyXG4gICAgICAgICAgICA8IS0tIEhBMTAwMTIwMjQgQWRkZWQgQXBpIGtleSBhcyBpbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnYXBpS2V5J11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb24gXCJcclxuICAgICAgICAgICAgICAgICAgICAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gUlMgMDZKQU4yNSAtLT5cclxuICAgICAgICAgICA8IS0tIGZvciByaWNoIHRleHQgZWRpdG9yIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmljaC10ZXh0IFxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAodGV4dFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yaWNoLXRleHQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFbWFpbCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0VtYWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHJlYWRPbmx5PVwicXVlcy5pc1JlYWRPbmx5XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBUYWJsZSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbcXVlc3Rpb25dPVwicXVlc1wiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgICA8IS0tIFRhYmxlIEFwcGVuZGl4IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZUFwcGVuZGl4J1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRhYmxlLWFwcGVuZGl4IFtxdWVzdGlvbl09XCJxdWVzXCIgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYXBwZW5kaXg+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxyXG4gICAgICAgICAgICAgPCEtLSBWRCAyMEF1ZzI0IHVzZWQgY29ycmVjdCBhdHRyaWJ1dGUgLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGlzdCdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWFyY2gtYm94IFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uXCIgIFtmaWx0ZXJOYW1lXT1cInF1ZXMuaW5wdXRcIiAoc2VhcmNoVmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItc2VhcmNoLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiBcclxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzPy50eXBlID09PSAnRHJvcGRvd24nICYmIHF1ZXM/Lm9wdGlvbnNcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT4gPCEtLSBWRCAxOUpBTjI0IC0gZ2V0dGluZyB0b2tlbiBhcyBpbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Rva2VuXT1cInRva2VuXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXM/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1yYWRpbyBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiIFtpZF09XCJxdWVzLmlkXCIgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgIDwhLS0gQXR0YWNobWVudCAvIEZpbGVzIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiBbdGFibGVGaWxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVEYXRhKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIiAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbaXNEZWxldGVGaWxlQnV0dG9uVmlzaWJsZV09XCJ0cnVlXCI+PC9hcHAtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnUG9wVXBNZXNzYWdlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWRlcGVuZGVudC10YWJsZSBbYWxlcnRNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1kZXBlbmRlbnQtdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGFiZWwnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFN0eWxlXT1cInF1ZXMudGl0bGVcIiBbbGFiZWxWYWx1ZV09XCJxdWVzLnF1ZXN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGltYWdlIGNvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ltYWdlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbWFnZSBbcXVlc3Rpb25dPVwicXVlc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWltYWdlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSAwOE5PVjIzIC0gYnV0dG9uIHR5cGUgcXVlc3Rpb24gYWRkZWQgLS0+XHJcbiAgICAgICAgICAgICA8IS0tIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0J1dHRvbidcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tYnV0dG9uIFtoZWlnaHRdPVwiJzUwcHgnXCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTUwcHgnXCJcclxuICAgICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cInF1ZXM/LnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5xdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uVmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzICBUaGlzIGlzIHRvIGxvYWQgYm9vayB0eXBlIHF1ZXN0aW9ucy0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQm9vaydcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5IG9wZXJhdG9yIC0tPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25zXT1cInF1ZXMucWJJdGVtPy5zdWJRdWVzdGlvbnNcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwhLS0gMDYtMDktMjQgZm9yIGNhbGVuZGFyIHR5cGUtLT5cclxuPCEtLSA8bmctdGVtcGxhdGUgZHluYW1pY0NvbXBvbmVudEhvc3Q+PC9uZy10ZW1wbGF0ZT4gLS0+Il19
|