tango-app-ui-manage-settings 3.7.29 → 3.7.31

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.
@@ -334,12 +334,12 @@ export class CustomReportScheduleComponent {
334
334
  });
335
335
  }
336
336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomReportScheduleComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.ClientApiService }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
337
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CustomReportScheduleComponent, selector: "lib-custom-report-schedule", inputs: { template: "template" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-6 d-flex align-items-center justify-content-between\">\n <span class=\"header\">Custom Report Configuration</span>\n <span class=\"cursor-pointer\" (click)=\"onCancel()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Enter Report Name <span class=\"alert-required\"></span></label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"reportName\" autocomplete=\"off\" placeholder=\"Enter Report Name\">\n <div *ngIf=\"nameError\" class=\"text-danger mt-3\">{{ nameError }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Schedule <span class=\"alert-required\"></span></label>\n <div class=\"d-flex align-items-start flex-wrap schedule-row\">\n <div class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"scheduleDropdown\" ngbDropdownToggle>\n {{ scheduleLabel }}\n </button>\n <ul class=\"dropdown-menu\" ngbDropdownMenu aria-labelledby=\"scheduleDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('daily')\">Daily</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('weekly')\">Weekly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('monthly')\">Monthly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('once')\">Does Not Repeat</a></li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'weekly'\" class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDayDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDayDropdown\">\n <li *ngFor=\"let day of dayOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" [id]=\"'day-' + day.value\"\n [checked]=\"isDaySelected(day.value)\" (change)=\"toggleDay(day.value)\">\n <label class=\"form-check-label\" [for]=\"'day-' + day.value\">{{ day.label }}</label>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'monthly' || frequency === 'once'\" class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDateDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDateDropdown\">\n <li *ngFor=\"let date of dateOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" [type]=\"frequency === 'once' ? 'radio' : 'checkbox'\"\n [name]=\"frequency === 'once' ? 'onceDate' : null\" [id]=\"'date-' + date\"\n [checked]=\"isDateSelected(date)\" (change)=\"toggleDate(date)\">\n <label class=\"form-check-label\" [for]=\"'date-' + date\">{{ date }}</label>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex align-items-center mb-3\">\n <span class=\"mx-2 at-label\">at</span>\n <select class=\"form-select time-input\" [(ngModel)]=\"time\">\n <option *ngFor=\"let opt of timeOptions\" [value]=\"opt.value\">{{ opt.label }}</option>\n </select>\n </div>\n </div>\n <div *ngIf=\"helperText\" class=\"helper-text mt-1\">{{ helperText }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\n <div class=\"dropdown\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control w-100 text-start\"\n id=\"fileTypeDropdown\" ngbDropdownToggle>\n {{ fileTypeLabel }}\n </button>\n <ul class=\"dropdown-menu w-100\" ngbDropdownMenu aria-labelledby=\"fileTypeDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('csv')\">CSV</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('xlsx')\">XLSX</a></li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-md-12 mb-5\">\n <label class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\n <div class=\"outer-container\">\n <div class=\"input-container form-control receivers-box\">\n <ng-container *ngFor=\"let email of emailList; let i = index\">\n <span class=\"chip\">\n <span class=\"me-3\">{{ email }}</span>\n <span (click)=\"removeChip(i)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </span>\n </ng-container>\n <input class=\"emailinput\" (keydown)=\"onKeyDown($event)\" type=\"text\">\n </div>\n </div>\n <div *ngIf=\"emailValidation.includes(false)\" class=\"text-danger mt-3\">Invalid Email Format</div>\n </div>\n\n <div class=\"col-12 mt-10\">\n <div class=\"row\">\n <div class=\"col\">\n <a type=\"button\" class=\"btn btn-outline w-100\" (click)=\"onCancel()\">Cancel</a>\n </div>\n <div class=\"col\">\n <button type=\"button\" class=\"btn btn-primary w-100 d-flex align-items-center justify-content-center\"\n (click)=\"onSubmit()\" [disabled]=\"isSaveDisabled\">\n <span class=\"me-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M14 5.33333V11.4667C14 12.5868 14 13.1469 13.7821 13.5747C13.5903 13.951 13.2843 14.257 12.9081 14.4488C12.4803 14.6667 11.9201 14.6667 10.8 14.6667H5.2C4.07989 14.6667 3.51984 14.6667 3.09202 14.4488C2.71569 14.257 2.40973 13.951 2.21799 13.5747C2 13.1469 2 12.5868 2 11.4667V4.53333C2 3.41323 2 2.85318 2.21799 2.42535C2.40973 2.04903 2.71569 1.74307 3.09202 1.55133C3.51984 1.33333 4.07989 1.33333 5.2 1.33333H9.33333M14 5.33333L9.33333 1.33333M14 5.33333H10.6667C9.93029 5.33333 9.33333 4.73638 9.33333 4V1.33333\"\n stroke=\"white\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Save</span>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{padding:1.5rem}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.emailinput{border:none;outline:none;background:none;box-shadow:none;min-height:44px!important}.emailinput:focus,.emailinput:active{border:none;outline:none;background:none;box-shadow:none}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled],.disabled{background-color:#f9fafb!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px;height:25px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.receivers-box{min-height:88px;align-content:flex-start}.schedule-row .schedule-select{min-width:160px;width:auto;text-align:left;display:inline-flex;align-items:center;justify-content:space-between}.schedule-row .at-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:500}.schedule-row .time-input{width:auto;min-width:110px}.helper-text{color:var(--Gray-500, #667085);font-size:13px;font-weight:400;line-height:18px}.checkbox-dropdown-menu{max-height:260px;overflow-y:auto;min-width:180px}.checkbox-dropdown-menu .form-check{display:flex;align-items:center;margin-bottom:0}.checkbox-dropdown-menu .form-check .form-check-input{margin-top:0;margin-right:.5rem;cursor:pointer}.checkbox-dropdown-menu .form-check .form-check-label{cursor:pointer}.dropdown-toggle:after{margin-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
337
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CustomReportScheduleComponent, selector: "lib-custom-report-schedule", inputs: { template: "template" }, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 mb-6 d-flex align-items-center justify-content-between\">\n <span class=\"header\">Custom Report Configuration</span>\n <span class=\"cursor-pointer\" (click)=\"onCancel()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Enter Report Name <span class=\"alert-required\"></span></label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"reportName\" autocomplete=\"off\" placeholder=\"Enter Report Name\">\n <div *ngIf=\"nameError\" class=\"text-danger mt-3\">{{ nameError }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Schedule <span class=\"alert-required\"></span></label>\n <div class=\"d-flex align-items-start flex-wrap schedule-row\">\n <div class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"scheduleDropdown\" ngbDropdownToggle>\n {{ scheduleLabel }}\n </button>\n <ul class=\"dropdown-menu\" ngbDropdownMenu aria-labelledby=\"scheduleDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('daily')\">Daily</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('weekly')\">Weekly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('monthly')\">Monthly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('once')\">Does Not Repeat</a></li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'weekly'\" class=\"dropdown me-3 mb-3\" ngbDropdown [autoClose]=\"'outside'\">\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDayDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDayDropdown\">\n <li *ngFor=\"let day of dayOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" [id]=\"'day-' + day.value\"\n [checked]=\"isDaySelected(day.value)\" (change)=\"toggleDay(day.value)\">\n <label class=\"form-check-label\" [for]=\"'day-' + day.value\">{{ day.label }}</label>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'monthly' || frequency === 'once'\" class=\"dropdown me-3 mb-3\" ngbDropdown [autoClose]=\"'outside'\">\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDateDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDateDropdown\">\n <li *ngFor=\"let date of dateOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" [type]=\"frequency === 'once' ? 'radio' : 'checkbox'\"\n [name]=\"frequency === 'once' ? 'onceDate' : null\" [id]=\"'date-' + date\"\n [checked]=\"isDateSelected(date)\" (change)=\"toggleDate(date)\">\n <label class=\"form-check-label\" [for]=\"'date-' + date\">{{ date }}</label>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex align-items-center mb-3\">\n <span class=\"mx-2 at-label\">at</span>\n <select class=\"form-select time-input\" [(ngModel)]=\"time\">\n <option *ngFor=\"let opt of timeOptions\" [value]=\"opt.value\">{{ opt.label }}</option>\n </select>\n </div>\n </div>\n <div *ngIf=\"helperText\" class=\"helper-text mt-1\">{{ helperText }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\n <div class=\"dropdown\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control w-100 text-start\"\n id=\"fileTypeDropdown\" ngbDropdownToggle>\n {{ fileTypeLabel }}\n </button>\n <ul class=\"dropdown-menu w-100\" ngbDropdownMenu aria-labelledby=\"fileTypeDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('csv')\">CSV</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('xlsx')\">XLSX</a></li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-md-12 mb-5\">\n <label class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\n <div class=\"outer-container\">\n <div class=\"input-container form-control receivers-box\">\n <ng-container *ngFor=\"let email of emailList; let i = index\">\n <span class=\"chip\">\n <span class=\"me-3\">{{ email }}</span>\n <span (click)=\"removeChip(i)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </span>\n </ng-container>\n <input class=\"emailinput\" (keydown)=\"onKeyDown($event)\" type=\"text\">\n </div>\n </div>\n <div *ngIf=\"emailValidation.includes(false)\" class=\"text-danger mt-3\">Invalid Email Format</div>\n </div>\n\n <div class=\"col-12 mt-10\">\n <div class=\"row\">\n <div class=\"col\">\n <a type=\"button\" class=\"btn btn-outline w-100\" (click)=\"onCancel()\">Cancel</a>\n </div>\n <div class=\"col\">\n <button type=\"button\" class=\"btn btn-primary w-100 d-flex align-items-center justify-content-center\"\n (click)=\"onSubmit()\" [disabled]=\"isSaveDisabled\">\n <span class=\"me-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M14 5.33333V11.4667C14 12.5868 14 13.1469 13.7821 13.5747C13.5903 13.951 13.2843 14.257 12.9081 14.4488C12.4803 14.6667 11.9201 14.6667 10.8 14.6667H5.2C4.07989 14.6667 3.51984 14.6667 3.09202 14.4488C2.71569 14.257 2.40973 13.951 2.21799 13.5747C2 13.1469 2 12.5868 2 11.4667V4.53333C2 3.41323 2 2.85318 2.21799 2.42535C2.40973 2.04903 2.71569 1.74307 3.09202 1.55133C3.51984 1.33333 4.07989 1.33333 5.2 1.33333H9.33333M14 5.33333L9.33333 1.33333M14 5.33333H10.6667C9.93029 5.33333 9.33333 4.73638 9.33333 4V1.33333\"\n stroke=\"white\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Save</span>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{padding:1.5rem}::ng-deep .custom-report-schedule-modal .modal-dialog{max-width:580px;width:90%}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.emailinput{border:none;outline:none;background:none;box-shadow:none;min-height:44px!important}.emailinput:focus,.emailinput:active{border:none;outline:none;background:none;box-shadow:none}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled],.disabled{background-color:#f9fafb!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px;height:25px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.receivers-box{min-height:88px;align-content:flex-start}.schedule-row .schedule-select{min-width:160px;width:auto;text-align:left;display:inline-flex;align-items:center;justify-content:space-between}.schedule-row .at-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:500}.schedule-row .time-input{width:auto;min-width:110px}.helper-text{color:var(--Gray-500, #667085);font-size:13px;font-weight:400;line-height:18px}.checkbox-dropdown-menu{max-height:260px;overflow-y:auto;min-width:180px;background:var(--White, #FFF);border:1px solid var(--Gray-200, #EAECF0);border-radius:8px;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808}.checkbox-dropdown-menu .form-check{display:flex;align-items:center;margin-bottom:0}.checkbox-dropdown-menu .form-check .form-check-input{margin-top:0;margin-right:.5rem;cursor:pointer}.checkbox-dropdown-menu .form-check .form-check-label{cursor:pointer}.dropdown-toggle:after{margin-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i1.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i1.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
338
338
  }
339
339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomReportScheduleComponent, decorators: [{
340
340
  type: Component,
341
- args: [{ selector: 'lib-custom-report-schedule', template: "<div class=\"row\">\n <div class=\"col-12 mb-6 d-flex align-items-center justify-content-between\">\n <span class=\"header\">Custom Report Configuration</span>\n <span class=\"cursor-pointer\" (click)=\"onCancel()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Enter Report Name <span class=\"alert-required\"></span></label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"reportName\" autocomplete=\"off\" placeholder=\"Enter Report Name\">\n <div *ngIf=\"nameError\" class=\"text-danger mt-3\">{{ nameError }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Schedule <span class=\"alert-required\"></span></label>\n <div class=\"d-flex align-items-start flex-wrap schedule-row\">\n <div class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"scheduleDropdown\" ngbDropdownToggle>\n {{ scheduleLabel }}\n </button>\n <ul class=\"dropdown-menu\" ngbDropdownMenu aria-labelledby=\"scheduleDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('daily')\">Daily</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('weekly')\">Weekly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('monthly')\">Monthly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('once')\">Does Not Repeat</a></li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'weekly'\" class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDayDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDayDropdown\">\n <li *ngFor=\"let day of dayOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" [id]=\"'day-' + day.value\"\n [checked]=\"isDaySelected(day.value)\" (change)=\"toggleDay(day.value)\">\n <label class=\"form-check-label\" [for]=\"'day-' + day.value\">{{ day.label }}</label>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'monthly' || frequency === 'once'\" class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDateDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDateDropdown\">\n <li *ngFor=\"let date of dateOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" [type]=\"frequency === 'once' ? 'radio' : 'checkbox'\"\n [name]=\"frequency === 'once' ? 'onceDate' : null\" [id]=\"'date-' + date\"\n [checked]=\"isDateSelected(date)\" (change)=\"toggleDate(date)\">\n <label class=\"form-check-label\" [for]=\"'date-' + date\">{{ date }}</label>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex align-items-center mb-3\">\n <span class=\"mx-2 at-label\">at</span>\n <select class=\"form-select time-input\" [(ngModel)]=\"time\">\n <option *ngFor=\"let opt of timeOptions\" [value]=\"opt.value\">{{ opt.label }}</option>\n </select>\n </div>\n </div>\n <div *ngIf=\"helperText\" class=\"helper-text mt-1\">{{ helperText }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\n <div class=\"dropdown\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control w-100 text-start\"\n id=\"fileTypeDropdown\" ngbDropdownToggle>\n {{ fileTypeLabel }}\n </button>\n <ul class=\"dropdown-menu w-100\" ngbDropdownMenu aria-labelledby=\"fileTypeDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('csv')\">CSV</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('xlsx')\">XLSX</a></li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-md-12 mb-5\">\n <label class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\n <div class=\"outer-container\">\n <div class=\"input-container form-control receivers-box\">\n <ng-container *ngFor=\"let email of emailList; let i = index\">\n <span class=\"chip\">\n <span class=\"me-3\">{{ email }}</span>\n <span (click)=\"removeChip(i)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </span>\n </ng-container>\n <input class=\"emailinput\" (keydown)=\"onKeyDown($event)\" type=\"text\">\n </div>\n </div>\n <div *ngIf=\"emailValidation.includes(false)\" class=\"text-danger mt-3\">Invalid Email Format</div>\n </div>\n\n <div class=\"col-12 mt-10\">\n <div class=\"row\">\n <div class=\"col\">\n <a type=\"button\" class=\"btn btn-outline w-100\" (click)=\"onCancel()\">Cancel</a>\n </div>\n <div class=\"col\">\n <button type=\"button\" class=\"btn btn-primary w-100 d-flex align-items-center justify-content-center\"\n (click)=\"onSubmit()\" [disabled]=\"isSaveDisabled\">\n <span class=\"me-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M14 5.33333V11.4667C14 12.5868 14 13.1469 13.7821 13.5747C13.5903 13.951 13.2843 14.257 12.9081 14.4488C12.4803 14.6667 11.9201 14.6667 10.8 14.6667H5.2C4.07989 14.6667 3.51984 14.6667 3.09202 14.4488C2.71569 14.257 2.40973 13.951 2.21799 13.5747C2 13.1469 2 12.5868 2 11.4667V4.53333C2 3.41323 2 2.85318 2.21799 2.42535C2.40973 2.04903 2.71569 1.74307 3.09202 1.55133C3.51984 1.33333 4.07989 1.33333 5.2 1.33333H9.33333M14 5.33333L9.33333 1.33333M14 5.33333H10.6667C9.93029 5.33333 9.33333 4.73638 9.33333 4V1.33333\"\n stroke=\"white\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Save</span>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{padding:1.5rem}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.emailinput{border:none;outline:none;background:none;box-shadow:none;min-height:44px!important}.emailinput:focus,.emailinput:active{border:none;outline:none;background:none;box-shadow:none}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled],.disabled{background-color:#f9fafb!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px;height:25px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.receivers-box{min-height:88px;align-content:flex-start}.schedule-row .schedule-select{min-width:160px;width:auto;text-align:left;display:inline-flex;align-items:center;justify-content:space-between}.schedule-row .at-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:500}.schedule-row .time-input{width:auto;min-width:110px}.helper-text{color:var(--Gray-500, #667085);font-size:13px;font-weight:400;line-height:18px}.checkbox-dropdown-menu{max-height:260px;overflow-y:auto;min-width:180px}.checkbox-dropdown-menu .form-check{display:flex;align-items:center;margin-bottom:0}.checkbox-dropdown-menu .form-check .form-check-input{margin-top:0;margin-right:.5rem;cursor:pointer}.checkbox-dropdown-menu .form-check .form-check-label{cursor:pointer}.dropdown-toggle:after{margin-left:.5rem}\n"] }]
341
+ args: [{ selector: 'lib-custom-report-schedule', template: "<div class=\"row\">\n <div class=\"col-12 mb-6 d-flex align-items-center justify-content-between\">\n <span class=\"header\">Custom Report Configuration</span>\n <span class=\"cursor-pointer\" (click)=\"onCancel()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Enter Report Name <span class=\"alert-required\"></span></label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"reportName\" autocomplete=\"off\" placeholder=\"Enter Report Name\">\n <div *ngIf=\"nameError\" class=\"text-danger mt-3\">{{ nameError }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">Schedule <span class=\"alert-required\"></span></label>\n <div class=\"d-flex align-items-start flex-wrap schedule-row\">\n <div class=\"dropdown me-3 mb-3\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"scheduleDropdown\" ngbDropdownToggle>\n {{ scheduleLabel }}\n </button>\n <ul class=\"dropdown-menu\" ngbDropdownMenu aria-labelledby=\"scheduleDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('daily')\">Daily</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('weekly')\">Weekly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('monthly')\">Monthly</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFrequency('once')\">Does Not Repeat</a></li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'weekly'\" class=\"dropdown me-3 mb-3\" ngbDropdown [autoClose]=\"'outside'\">\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDayDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDayDropdown\">\n <li *ngFor=\"let day of dayOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" type=\"checkbox\" [id]=\"'day-' + day.value\"\n [checked]=\"isDaySelected(day.value)\" (change)=\"toggleDay(day.value)\">\n <label class=\"form-check-label\" [for]=\"'day-' + day.value\">{{ day.label }}</label>\n </li>\n </ul>\n </div>\n\n <div *ngIf=\"frequency === 'monthly' || frequency === 'once'\" class=\"dropdown me-3 mb-3\" ngbDropdown [autoClose]=\"'outside'\">\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control schedule-select\"\n id=\"chooseDateDropdown\" ngbDropdownToggle>\n {{ multiSelectLabel }}\n </button>\n <ul class=\"dropdown-menu checkbox-dropdown-menu\" ngbDropdownMenu aria-labelledby=\"chooseDateDropdown\">\n <li *ngFor=\"let date of dateOptions\" class=\"form-check px-4 py-2\">\n <input class=\"form-check-input\" [type]=\"frequency === 'once' ? 'radio' : 'checkbox'\"\n [name]=\"frequency === 'once' ? 'onceDate' : null\" [id]=\"'date-' + date\"\n [checked]=\"isDateSelected(date)\" (change)=\"toggleDate(date)\">\n <label class=\"form-check-label\" [for]=\"'date-' + date\">{{ date }}</label>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex align-items-center mb-3\">\n <span class=\"mx-2 at-label\">at</span>\n <select class=\"form-select time-input\" [(ngModel)]=\"time\">\n <option *ngFor=\"let opt of timeOptions\" [value]=\"opt.value\">{{ opt.label }}</option>\n </select>\n </div>\n </div>\n <div *ngIf=\"helperText\" class=\"helper-text mt-1\">{{ helperText }}</div>\n </div>\n\n <div class=\"col-12 mb-5\">\n <label class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\n <div class=\"dropdown\" ngbDropdown>\n <button type=\"button\" class=\"btn btn-outline dropdown-toggle form-control w-100 text-start\"\n id=\"fileTypeDropdown\" ngbDropdownToggle>\n {{ fileTypeLabel }}\n </button>\n <ul class=\"dropdown-menu w-100\" ngbDropdownMenu aria-labelledby=\"fileTypeDropdown\">\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('csv')\">CSV</a></li>\n <li><a class=\"dropdown-item\" (click)=\"selectFileType('xlsx')\">XLSX</a></li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-md-12 mb-5\">\n <label class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\n <div class=\"outer-container\">\n <div class=\"input-container form-control receivers-box\">\n <ng-container *ngFor=\"let email of emailList; let i = index\">\n <span class=\"chip\">\n <span class=\"me-3\">{{ email }}</span>\n <span (click)=\"removeChip(i)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </span>\n </ng-container>\n <input class=\"emailinput\" (keydown)=\"onKeyDown($event)\" type=\"text\">\n </div>\n </div>\n <div *ngIf=\"emailValidation.includes(false)\" class=\"text-danger mt-3\">Invalid Email Format</div>\n </div>\n\n <div class=\"col-12 mt-10\">\n <div class=\"row\">\n <div class=\"col\">\n <a type=\"button\" class=\"btn btn-outline w-100\" (click)=\"onCancel()\">Cancel</a>\n </div>\n <div class=\"col\">\n <button type=\"button\" class=\"btn btn-primary w-100 d-flex align-items-center justify-content-center\"\n (click)=\"onSubmit()\" [disabled]=\"isSaveDisabled\">\n <span class=\"me-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M14 5.33333V11.4667C14 12.5868 14 13.1469 13.7821 13.5747C13.5903 13.951 13.2843 14.257 12.9081 14.4488C12.4803 14.6667 11.9201 14.6667 10.8 14.6667H5.2C4.07989 14.6667 3.51984 14.6667 3.09202 14.4488C2.71569 14.257 2.40973 13.951 2.21799 13.5747C2 13.1469 2 12.5868 2 11.4667V4.53333C2 3.41323 2 2.85318 2.21799 2.42535C2.40973 2.04903 2.71569 1.74307 3.09202 1.55133C3.51984 1.33333 4.07989 1.33333 5.2 1.33333H9.33333M14 5.33333L9.33333 1.33333M14 5.33333H10.6667C9.93029 5.33333 9.33333 4.73638 9.33333 4V1.33333\"\n stroke=\"white\" stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span>Save</span>\n </button>\n </div>\n </div>\n </div>\n</div>", styles: [":host{padding:1.5rem}::ng-deep .custom-report-schedule-modal .modal-dialog{max-width:580px;width:90%}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.emailinput{border:none;outline:none;background:none;box-shadow:none;min-height:44px!important}.emailinput:focus,.emailinput:active{border:none;outline:none;background:none;box-shadow:none}.form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled],.disabled{background-color:#f9fafb!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px;height:25px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.receivers-box{min-height:88px;align-content:flex-start}.schedule-row .schedule-select{min-width:160px;width:auto;text-align:left;display:inline-flex;align-items:center;justify-content:space-between}.schedule-row .at-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:500}.schedule-row .time-input{width:auto;min-width:110px}.helper-text{color:var(--Gray-500, #667085);font-size:13px;font-weight:400;line-height:18px}.checkbox-dropdown-menu{max-height:260px;overflow-y:auto;min-width:180px;background:var(--White, #FFF);border:1px solid var(--Gray-200, #EAECF0);border-radius:8px;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808}.checkbox-dropdown-menu .form-check{display:flex;align-items:center;margin-bottom:0}.checkbox-dropdown-menu .form-check .form-check-input{margin-top:0;margin-right:.5rem;cursor:pointer}.checkbox-dropdown-menu .form-check .form-check-label{cursor:pointer}.dropdown-toggle:after{margin-left:.5rem}\n"] }]
342
342
  }], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.ClientApiService }, { type: i3.ToastService }], propDecorators: { template: [{
343
343
  type: Input
344
344
  }] } });
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUvY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUvY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUt6RCxNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV6Rzs7aURBRWlEO0FBQ2pELE1BQU0scUJBQXFCLEdBQXVDLENBQUMsR0FBRyxFQUFFO0lBQ3RFLE1BQU0sT0FBTyxHQUF1QyxFQUFFLENBQUM7SUFDdkQsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFB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LEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksZ0NBQWdDLENBQUMsQ0FBQztZQUN6RyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F6VFUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsb0dDL0IxQyx1eVBBK0hNOzs0RkRoR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDRCQUE0Qjs2SUFLN0IsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xuXG5jb25zdCBEQVlfTkFNRVMgPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XG5jb25zdCBNT05USF9OQU1FUyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLyoqIFNjaGVkdWxlIHNlbmQtdGltZSBzbG90czogMzAtbWludXRlIHN0ZXBzLCByZXN0cmljdGVkIHRvIDA5OjAw4oCTMjE6MDAg4oCUIHRoZVxuICogIHNhbWUgcHJvZHVjdCBydWxlIGFzIHRoZSByZXBvcnRzIHBhZ2UncyBzY2hlZHVsZSBtb2RhbC4gVmFsdWVzIHN0YXkgSEg6bW1cbiAqICAodGhlIEFQSSBjb250cmFjdCk7IGxhYmVscyByZW5kZXIgMTItaG91ci4gKi9cbmNvbnN0IFNDSEVEVUxFX1RJTUVfT1BUSU9OUzogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9ICgoKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgZm9yIChsZXQgaG91ciA9IDk7IGhvdXIgPD0gMjE7IGhvdXIrKykge1xuICAgIGZvciAoY29uc3QgbWludXRlIG9mIGhvdXIgPT09IDIxID8gWzBdIDogWzAsIDMwXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBgJHtTdHJpbmcoaG91cikucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcobWludXRlKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICBjb25zdCBob3VyMTIgPSAoKGhvdXIgKyAxMSkgJSAxMikgKyAxO1xuICAgICAgb3B0aW9ucy5wdXNoKHsgdmFsdWUsIGxhYmVsOiBgJHtob3VyMTJ9OiR7U3RyaW5nKG1pbnV0ZSkucGFkU3RhcnQoMiwgJzAnKX0gJHtob3VyIDwgMTIgPyAnQU0nIDogJ1BNJ31gIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn0pKCk7XG5cbnR5cGUgRnJlcXVlbmN5ID0gJ2RhaWx5JyB8ICd3ZWVrbHknIHwgJ21vbnRobHknIHwgJ29uY2UnO1xudHlwZSBGaWxlVHlwZSA9ICdjc3YnIHwgJ3hsc3gnIHwgJyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tcmVwb3J0LXNjaGVkdWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVwb3J0U2NoZWR1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogYW55O1xuXG4gIHJlcG9ydE5hbWU6IHN0cmluZyA9ICcnO1xuICBuYW1lRXJyb3I6IHN0cmluZyA9ICcnO1xuXG4gIGZyZXF1ZW5jeTogRnJlcXVlbmN5ID0gJ2RhaWx5JztcbiAgdGltZTogc3RyaW5nID0gJzA5OjAwJztcbiAgZGF5c09mV2VlazogbnVtYmVyW10gPSBbXTtcbiAgZGF0ZXNPZk1vbnRoOiBudW1iZXJbXSA9IFtdO1xuICBvbmNlRGF0ZTogc3RyaW5nID0gJyc7XG4gIGZpbGVUeXBlOiBGaWxlVHlwZSA9ICd4bHN4JztcblxuICBlbWFpbExpc3Q6IGFueVtdID0gW107XG4gIGVtYWlsVmFsaWRhdGlvbjogYW55W10gPSBbXTtcbiAgc2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZGF5T3B0aW9ucyA9IERBWV9OQU1FUy5tYXAoKG5hbWUsIGluZGV4KSA9PiAoeyB2YWx1ZTogaW5kZXgsIGxhYmVsOiBuYW1lIH0pKTtcbiAgcmVhZG9ubHkgZGF0ZU9wdGlvbnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMSB9LCAoXywgaSkgPT4gaSArIDEpO1xuICByZWFkb25seSB0aW1lT3B0aW9ucyA9IFNDSEVEVUxFX1RJTUVfT1BUSU9OUztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCwgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcbiAgICAgIHRoaXMucmVwb3J0TmFtZSA9IHRoaXMudGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHNjaGVkdWxlID0gdGhpcy50ZW1wbGF0ZT8uc2NoZWR1bGUgfHwge307XG4gICAgICB0aGlzLmZyZXF1ZW5jeSA9IHNjaGVkdWxlLmZyZXF1ZW5jeSB8fCAnZGFpbHknO1xuICAgICAgLy8gQSBzdG9yZWQgdGltZSBvdXRzaWRlIHRoZSBhbGxvd2VkIHNsb3RzIChvbGRlciBzY2hlZHVsZXMsIGZyZWUtdHlwZWRcbiAgICAgIC8vIHZhbHVlcykgc25hcHMgYmFjayB0byB0aGUgZGVmYXVsdCByYXRoZXIgdGhhbiBzaG93aW5nIGFuIGVtcHR5IHNlbGVjdC5cbiAgICAgIGNvbnN0IHN0b3JlZFRpbWUgPSBzY2hlZHVsZS50aW1lIHx8ICcwOTowMCc7XG4gICAgICB0aGlzLnRpbWUgPSBTQ0hFRFVMRV9USU1FX09QVElPTlMuc29tZSgob3B0KSA9PiBvcHQudmFsdWUgPT09IHN0b3JlZFRpbWUpID8gc3RvcmVkVGltZSA6ICcwOTowMCc7XG4gICAgICB0aGlzLmRheXNPZldlZWsgPSBbLi4uKHNjaGVkdWxlLmRheXNPZldlZWsgfHwgW10pXTtcbiAgICAgIHRoaXMub25jZURhdGUgPSBzY2hlZHVsZS5vbmNlRGF0ZSB8fCAnJztcbiAgICAgIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ29uY2UnICYmIHRoaXMub25jZURhdGUpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKHRoaXMub25jZURhdGUuc3BsaXQoJy0nKVsyXSk7XG4gICAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gZGF5ID8gW2RheV0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gWy4uLihzY2hlZHVsZS5kYXRlc09mTW9udGggfHwgW10pXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZVR5cGUgPSBzY2hlZHVsZS5maWxlVHlwZSB8fCAneGxzeCc7XG4gICAgICB0aGlzLmVtYWlsTGlzdCA9IFsuLi4oc2NoZWR1bGUucmVjZWl2ZXJzIHx8IFtdKV07XG4gICAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbiA9IFtdO1xuICAgICAgdGhpcy5lbWFpbExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7IHRoaXMuZW1haWxWYWxpZGF0b3IoZWxlbWVudCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGVtYWlsVmFsaWRhdG9yKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIGNvbnN0IHZhbGlkID0gZW1haWxSZWdleC50ZXN0KHZhbHVlKTtcbiAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbi5wdXNoKHZhbGlkKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdCYWNrc3BhY2UnICYmIGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJycgJiYgdGhpcy5lbWFpbExpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVtYWlsTGlzdC5wb3AoKTtcbiAgICAgIHRoaXMuZW1haWxWYWxpZGF0aW9uLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcbiAgICAgIGNvbnN0IHZhbGlkID0gZW1haWxSZWdleC50ZXN0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgdGhpcy5lbWFpbExpc3QucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB0aGlzLmVtYWlsVmFsaWRhdG9yKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoJ1BsZWFzZSBFbnRlciBWYWxpZCBFbWFpbC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmVDaGlwKGk6IG51bWJlcikge1xuICAgIHRoaXMuZW1haWxMaXN0LnNwbGljZShpLCAxKTtcbiAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbiA9IFtdO1xuICAgIHRoaXMuZW1haWxMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4geyB0aGlzLmVtYWlsVmFsaWRhdG9yKGVsZW1lbnQpOyB9KTtcbiAgfVxuXG4gIHNlbGVjdEZyZXF1ZW5jeSh2YWx1ZTogRnJlcXVlbmN5KSB7XG4gICAgdGhpcy5mcmVxdWVuY3kgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzY2hlZHVsZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgY2FzZSAnZGFpbHknOiByZXR1cm4gJ0RhaWx5JztcbiAgICAgIGNhc2UgJ3dlZWtseSc6IHJldHVybiAnV2Vla2x5JztcbiAgICAgIGNhc2UgJ21vbnRobHknOiByZXR1cm4gJ01vbnRobHknO1xuICAgICAgY2FzZSAnb25jZSc6IHJldHVybiAnRG9lcyBOb3QgUmVwZWF0JztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnRGFpbHknO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURheShkYXk6IG51bWJlcikge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuZGF5c09mV2Vlay5pbmRleE9mKGRheSk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICB0aGlzLmRheXNPZldlZWsuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF5c09mV2Vlay5wdXNoKGRheSk7XG4gICAgfVxuICB9XG5cbiAgaXNEYXlTZWxlY3RlZChkYXk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheXNPZldlZWsuaW5jbHVkZXMoZGF5KTtcbiAgfVxuXG4gIHRvZ2dsZURhdGUoZGF0ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScpIHtcbiAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gW2RhdGVdO1xuICAgICAgdGhpcy5vbmNlRGF0ZSA9IHRoaXMuZGVyaXZlTmV4dE9jY3VycmVuY2UoZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IHRoaXMuZGF0ZXNPZk1vbnRoLmluZGV4T2YoZGF0ZSk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICB0aGlzLmRhdGVzT2ZNb250aC5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlc09mTW9udGgucHVzaChkYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBkYXktb2YtbW9udGggKDEtMzEpLCByZXR1cm5zIHRoZSBuZXh0IG9jY3VycmVuY2UgYXMgJ1lZWVktTU0tREQnLlxuICAgKiBUb2RheSBxdWFsaWZpZXMgaWYgaXQgaXMgdGhhdCBkYXk7IG90aGVyd2lzZSBhZHZhbmNlcyB0byB0aGUgbmV4dCBjYWxlbmRhclxuICAgKiBtb250aCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoYXQgZGF5IChlLmcuIDMxIGNob3NlbiBvbiBGZWIgMTAgLT4gTWFyIDMxKS5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlTmV4dE9jY3VycmVuY2UoZGF5T2ZNb250aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgICBpZiAodG9kYXkuZ2V0RGF0ZSgpID09PSBkYXlPZk1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy50b0lzb0RhdGUodG9kYXkpO1xuICAgIH1cblxuICAgIGxldCB5ZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcbiAgICBsZXQgbW9udGggPSB0b2RheS5nZXRNb250aCgpO1xuICAgIGlmICh0b2RheS5nZXREYXRlKCkgPiBkYXlPZk1vbnRoKSB7XG4gICAgICBtb250aCArPSAxO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF5c0luTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgICAgIGlmIChkYXlPZk1vbnRoIDw9IGRheXNJbk1vbnRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSXNvRGF0ZShuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCkpO1xuICAgICAgfVxuICAgICAgbW9udGggKz0gMTtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIG1vbnRoID0gMDtcbiAgICAgICAgeWVhciArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIHRvSXNvRGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG5cbiAgaXNEYXRlU2VsZWN0ZWQoZGF0ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXNPZk1vbnRoLmluY2x1ZGVzKGRhdGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpU2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICd3ZWVrbHknKSB7XG4gICAgICAvLyBTaG93cyBXSElDSCBkYXlzIGFyZSBzZWxlY3RlZCwgbm90IGp1c3QgaG93IG1hbnkg4oCUICdTdW5kYXksIE1vbmRheSc7XG4gICAgICAvLyBiZXlvbmQgdGhyZWUgZGF5cyBpdCBjb21wYWN0cyB0byAnU3VuZGF5LCBNb25kYXkgK04nIHRvIGZpdCB0aGUgdHJpZ2dlci5cbiAgICAgIGlmICghdGhpcy5kYXlzT2ZXZWVrLmxlbmd0aCkgcmV0dXJuICdDaG9vc2UgRGF5JztcbiAgICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXMuZGF5c09mV2Vla10uc29ydCgoYSwgYikgPT4gYSAtIGIpLm1hcCgoZCkgPT4gREFZX05BTUVTW2RdKTtcbiAgICAgIHJldHVybiBuYW1lcy5sZW5ndGggPD0gMyA/IG5hbWVzLmpvaW4oJywgJykgOiBgJHtuYW1lcy5zbGljZSgwLCAyKS5qb2luKCcsICcpfSArJHtuYW1lcy5sZW5ndGggLSAyfWA7XG4gICAgfVxuICAgIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ21vbnRobHknIHx8IHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScpIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5kYXRlc09mTW9udGgubGVuZ3RoO1xuICAgICAgaWYgKCFjb3VudCkgcmV0dXJuICdDaG9vc2UgRGF0ZSc7XG4gICAgICByZXR1cm4gYCR7Y291bnR9IERhdGUke2NvdW50ID4gMSA/ICdzJyA6ICcnfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNlbGVjdEZpbGVUeXBlKHZhbHVlOiBGaWxlVHlwZSkge1xuICAgIHRoaXMuZmlsZVR5cGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBmaWxlVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmlsZVR5cGUgPT09ICdjc3YnKSByZXR1cm4gJ0NTVic7XG4gICAgaWYgKHRoaXMuZmlsZVR5cGUgPT09ICd4bHN4JykgcmV0dXJuICdYTFNYJztcbiAgICByZXR1cm4gJ0Nob29zZSBGaWxlJztcbiAgfVxuXG4gIHByaXZhdGUgb3JkaW5hbChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcobikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuXG4gIGdldCBoZWxwZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgY2FzZSAnZGFpbHknOlxuICAgICAgICByZXR1cm4gJ1JlcG9ydCBzZW50IGRhaWx5JztcbiAgICAgIGNhc2UgJ3dlZWtseSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLmRheXNPZldlZWsubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLmRheXNPZldlZWtdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzb3J0ZWQubWFwKChkKSA9PiBEQVlfTkFNRVNbZF0pO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBuYW1lcy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtuYW1lcy5zbGljZSgwLCAtMSkuam9pbignLCAnKX0gYW5kICR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV19YFxuICAgICAgICAgIDogbmFtZXNbMF07XG4gICAgICAgIHJldHVybiBgUmVwb3J0IHdpbGwgYmUgc2VudCBldmVyeSAke2pvaW5lZH1gO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGhseSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGVzT2ZNb250aC5sZW5ndGgpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnRoaXMuZGF0ZXNPZk1vbnRoXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGNvbnN0IGpvaW5lZCA9IHNvcnRlZC5tYXAoKGQpID0+IGAke3RoaXMub3JkaW5hbChkKX0ke3RoaXMuZGF5U3VmZml4KGQpfWApLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiBgUmVwb3J0cyB3aWxsIGJlIHNlbnQgb24gJHtqb2luZWR9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uY2UnOiB7XG4gICAgICAgIGlmICghdGhpcy5vbmNlRGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gYFJlcG9ydCB3aWxsIGJlIHNlbnQgb25jZSBvbiAke3RoaXMuZm9ybWF0T25jZURhdGUodGhpcy5vbmNlRGF0ZSl9YDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRheVN1ZmZpeChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChuID49IDExICYmIG4gPD0gMTMpIHJldHVybiAndGgnO1xuICAgIHN3aXRjaCAobiAlIDEwKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiAnc3QnO1xuICAgICAgY2FzZSAyOiByZXR1cm4gJ25kJztcbiAgICAgIGNhc2UgMzogcmV0dXJuICdyZCc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ3RoJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE9uY2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIGRhdGVTdHI7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gcGFydHM7XG4gICAgY29uc3QgbW9udGhOYW1lID0gTU9OVEhfTkFNRVNbTnVtYmVyKG1vbnRoKSAtIDFdIHx8ICcnO1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGhOYW1lfSwgJHt5ZWFyfWA7XG4gIH1cblxuICBnZXQgaXNTYXZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMucmVwb3J0TmFtZT8udHJpbSgpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZmlsZVR5cGUpIHJldHVybiB0cnVlO1xuICAgIGlmICghdGhpcy5lbWFpbExpc3QubGVuZ3RoIHx8IHRoaXMuZW1haWxWYWxpZGF0aW9uLmluY2x1ZGVzKGZhbHNlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnd2Vla2x5JyAmJiAhdGhpcy5kYXlzT2ZXZWVrLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnbW9udGhseScgJiYgIXRoaXMuZGF0ZXNPZk1vbnRoLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScgJiYgIXRoaXMub25jZURhdGUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTY2hlZHVsZVBheWxvYWQoKTogYW55IHtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgZnJlcXVlbmN5OiB0aGlzLmZyZXF1ZW5jeSxcbiAgICAgIHRpbWU6IHRoaXMudGltZSB8fCAnMDk6MDAnLFxuICAgICAgZmlsZVR5cGU6IHRoaXMuZmlsZVR5cGUsXG4gICAgICByZWNlaXZlcnM6IHRoaXMuZW1haWxMaXN0XG4gICAgfTtcbiAgICBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICd3ZWVrbHknKSB7XG4gICAgICBwYXlsb2FkLmRheXNPZldlZWsgPSB0aGlzLmRheXNPZldlZWs7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ21vbnRobHknKSB7XG4gICAgICBwYXlsb2FkLmRhdGVzT2ZNb250aCA9IHRoaXMuZGF0ZXNPZk1vbnRoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICdvbmNlJykge1xuICAgICAgaWYgKHRoaXMuZGF0ZXNPZk1vbnRoLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9uY2VEYXRlID0gdGhpcy5kZXJpdmVOZXh0T2NjdXJyZW5jZSh0aGlzLmRhdGVzT2ZNb250aFswXSk7XG4gICAgICB9XG4gICAgICBwYXlsb2FkLm9uY2VEYXRlID0gdGhpcy5vbmNlRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBvblN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NhdmVEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm5hbWVFcnJvciA9ICcnO1xuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5hbWVDaGFuZ2VkID0gdGhpcy5yZXBvcnROYW1lLnRyaW0oKSAhPT0gKHRoaXMudGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB8fCAnJyk7XG4gICAgaWYgKG5hbWVDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlQ3VzdG9tUmVwb3J0VGVtcGxhdGUodGhpcy50ZW1wbGF0ZT8uX2lkLCB7IHRlbXBsYXRlTmFtZTogdGhpcy5yZXBvcnROYW1lLnRyaW0oKSB9KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zYXZlU2NoZWR1bGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGVycj8uc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZUVycm9yID0gJ1JlcG9ydCBuYW1lIGFscmVhZHkgZXhpc3RzLiBDaG9vc2UgYSBkaWZmZXJlbnQgbmFtZSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciB1cGRhdGluZyByZXBvcnQgbmFtZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2F2ZVNjaGVkdWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlU2NoZWR1bGUoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5idWlsZFNjaGVkdWxlUGF5bG9hZCgpO1xuICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVDdXN0b21SZXBvcnRTY2hlZHVsZSh0aGlzLnRlbXBsYXRlPy5faWQsIHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7IHR5cGU6ICdzYXZlJyB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciB1cGRhdGluZyByZXBvcnQgc2NoZWR1bGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlclwiPkN1c3RvbSBSZXBvcnQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDVMNSAxNU01IDVMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbnRlciBSZXBvcnQgTmFtZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJyZXBvcnROYW1lXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBSZXBvcnQgTmFtZVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibmFtZUVycm9yXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0zXCI+e3sgbmFtZUVycm9yIH19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlNjaGVkdWxlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj48L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LXdyYXAgc2NoZWR1bGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gbWUtMyBtYi0zXCIgbmdiRHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBzY2hlZHVsZS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInNjaGVkdWxlRHJvcGRvd25cIiBuZ2JEcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwic2NoZWR1bGVEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnZGFpbHknKVwiPkRhaWx5PC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0RnJlcXVlbmN5KCd3ZWVrbHknKVwiPldlZWtseTwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnbW9udGhseScpXCI+TW9udGhseTwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnb25jZScpXCI+RG9lcyBOb3QgUmVwZWF0PC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZnJlcXVlbmN5ID09PSAnd2Vla2x5J1wiIGNsYXNzPVwiZHJvcGRvd24gbWUtMyBtYi0zXCIgbmdiRHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBzY2hlZHVsZS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImNob29zZURheURyb3Bkb3duXCIgbmdiRHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0TGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGNoZWNrYm94LWRyb3Bkb3duLW1lbnVcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiY2hvb3NlRGF5RHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5T3B0aW9uc1wiIGNsYXNzPVwiZm9ybS1jaGVjayBweC00IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBbaWRdPVwiJ2RheS0nICsgZGF5LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0RheVNlbGVjdGVkKGRheS52YWx1ZSlcIiAoY2hhbmdlKT1cInRvZ2dsZURheShkYXkudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCInZGF5LScgKyBkYXkudmFsdWVcIj57eyBkYXkubGFiZWwgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZyZXF1ZW5jeSA9PT0gJ21vbnRobHknIHx8IGZyZXF1ZW5jeSA9PT0gJ29uY2UnXCIgY2xhc3M9XCJkcm9wZG93biBtZS0zIG1iLTNcIiBuZ2JEcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkcm9wZG93bi10b2dnbGUgZm9ybS1jb250cm9sIHNjaGVkdWxlLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2hvb3NlRGF0ZURyb3Bkb3duXCIgbmdiRHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0TGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGNoZWNrYm94LWRyb3Bkb3duLW1lbnVcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiY2hvb3NlRGF0ZURyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0ZSBvZiBkYXRlT3B0aW9uc1wiIGNsYXNzPVwiZm9ybS1jaGVjayBweC00IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBbdHlwZV09XCJmcmVxdWVuY3kgPT09ICdvbmNlJyA/ICdyYWRpbycgOiAnY2hlY2tib3gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmcmVxdWVuY3kgPT09ICdvbmNlJyA/ICdvbmNlRGF0ZScgOiBudWxsXCIgW2lkXT1cIidkYXRlLScgKyBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0RhdGVTZWxlY3RlZChkYXRlKVwiIChjaGFuZ2UpPVwidG9nZ2xlRGF0ZShkYXRlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiJ2RhdGUtJyArIGRhdGVcIj57eyBkYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgYXQtbGFiZWxcIj5hdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgdGltZS1pbnB1dFwiIFsobmdNb2RlbCldPVwidGltZVwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHRpbWVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiPnt7IG9wdC5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVscGVyVGV4dFwiIGNsYXNzPVwiaGVscGVyLXRleHQgbXQtMVwiPnt7IGhlbHBlclRleHQgfX08L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RmlsZSBUeXBlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj48L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgbmdiRHJvcGRvd24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkcm9wZG93bi10b2dnbGUgZm9ybS1jb250cm9sIHctMTAwIHRleHQtc3RhcnRcIlxuICAgICAgICAgICAgICAgIGlkPVwiZmlsZVR5cGVEcm9wZG93blwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxuICAgICAgICAgICAgICAgIHt7IGZpbGVUeXBlTGFiZWwgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMFwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJmaWxlVHlwZURyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJzZWxlY3RGaWxlVHlwZSgnY3N2JylcIj5DU1Y8L2E+PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZpbGVUeXBlKCd4bHN4JylcIj5YTFNYPC9hPjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWItNVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmVjZWl2ZXJzIEVtYWlsIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj48L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBmb3JtLWNvbnRyb2wgcmVjZWl2ZXJzLWJveFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVtYWlsIG9mIGVtYWlsTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtM1wiPnt7IGVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInJlbW92ZUNoaXAoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJlbWFpbGlucHV0XCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZW1haWxWYWxpZGF0aW9uLmluY2x1ZGVzKGZhbHNlKVwiIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtM1wiPkludmFsaWQgRW1haWwgRm9ybWF0PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTEwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDBcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImlzU2F2ZURpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNCA1LjMzMzMzVjExLjQ2NjdDMTQgMTIuNTg2OCAxNCAxMy4xNDY5IDEzLjc4MjEgMTMuNTc0N0MxMy41OTAzIDEzLjk1MSAxMy4yODQzIDE0LjI1NyAxMi45MDgxIDE0LjQ0ODhDMTIuNDgwMyAxNC42NjY3IDExLjkyMDEgMTQuNjY2NyAxMC44IDE0LjY2NjdINS4yQzQuMDc5ODkgMTQuNjY2NyAzLjUxOTg0IDE0LjY2NjcgMy4wOTIwMiAxNC40NDg4QzIuNzE1NjkgMTQuMjU3IDIuNDA5NzMgMTMuOTUxIDIuMjE3OTkgMTMuNTc0N0MyIDEzLjE0NjkgMiAxMi41ODY4IDIgMTEuNDY2N1Y0LjUzMzMzQzIgMy40MTMyMyAyIDIuODUzMTggMi4yMTc5OSAyLjQyNTM1QzIuNDA5NzMgMi4wNDkwMyAyLjcxNTY5IDEuNzQzMDcgMy4wOTIwMiAxLjU1MTMzQzMuNTE5ODQgMS4zMzMzMyA0LjA3OTg5IDEuMzMzMzMgNS4yIDEuMzMzMzNIOS4zMzMzM00xNCA1LjMzMzMzTDkuMzMzMzMgMS4zMzMzM00xNCA1LjMzMzMzSDEwLjY2NjdDOS45MzAyOSA1LjMzMzMzIDkuMzMzMzMgNC43MzYzOCA5LjMzMzMzIDRWMS4zMzMzM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS4zM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TYXZlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUvY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUvY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUt6RCxNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV6Rzs7aURBRWlEO0FBQ2pELE1BQU0scUJBQXFCLEdBQXVDLENBQUMsR0FBRyxFQUFFO0lBQ3RFLE1BQU0sT0FBTyxHQUF1QyxFQUFFLENBQUM7SUFDdkQsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFB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LEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksZ0NBQWdDLENBQUMsQ0FBQztZQUN6RyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F6VFUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsb0dDL0IxQywyMVBBK0hNOzs0RkRoR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDRCQUE0Qjs2SUFLN0IsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xuXG5jb25zdCBEQVlfTkFNRVMgPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XG5jb25zdCBNT05USF9OQU1FUyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLyoqIFNjaGVkdWxlIHNlbmQtdGltZSBzbG90czogMzAtbWludXRlIHN0ZXBzLCByZXN0cmljdGVkIHRvIDA5OjAw4oCTMjE6MDAg4oCUIHRoZVxuICogIHNhbWUgcHJvZHVjdCBydWxlIGFzIHRoZSByZXBvcnRzIHBhZ2UncyBzY2hlZHVsZSBtb2RhbC4gVmFsdWVzIHN0YXkgSEg6bW1cbiAqICAodGhlIEFQSSBjb250cmFjdCk7IGxhYmVscyByZW5kZXIgMTItaG91ci4gKi9cbmNvbnN0IFNDSEVEVUxFX1RJTUVfT1BUSU9OUzogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9ICgoKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgZm9yIChsZXQgaG91ciA9IDk7IGhvdXIgPD0gMjE7IGhvdXIrKykge1xuICAgIGZvciAoY29uc3QgbWludXRlIG9mIGhvdXIgPT09IDIxID8gWzBdIDogWzAsIDMwXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBgJHtTdHJpbmcoaG91cikucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcobWludXRlKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICBjb25zdCBob3VyMTIgPSAoKGhvdXIgKyAxMSkgJSAxMikgKyAxO1xuICAgICAgb3B0aW9ucy5wdXNoKHsgdmFsdWUsIGxhYmVsOiBgJHtob3VyMTJ9OiR7U3RyaW5nKG1pbnV0ZSkucGFkU3RhcnQoMiwgJzAnKX0gJHtob3VyIDwgMTIgPyAnQU0nIDogJ1BNJ31gIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn0pKCk7XG5cbnR5cGUgRnJlcXVlbmN5ID0gJ2RhaWx5JyB8ICd3ZWVrbHknIHwgJ21vbnRobHknIHwgJ29uY2UnO1xudHlwZSBGaWxlVHlwZSA9ICdjc3YnIHwgJ3hsc3gnIHwgJyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jdXN0b20tcmVwb3J0LXNjaGVkdWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUmVwb3J0U2NoZWR1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogYW55O1xuXG4gIHJlcG9ydE5hbWU6IHN0cmluZyA9ICcnO1xuICBuYW1lRXJyb3I6IHN0cmluZyA9ICcnO1xuXG4gIGZyZXF1ZW5jeTogRnJlcXVlbmN5ID0gJ2RhaWx5JztcbiAgdGltZTogc3RyaW5nID0gJzA5OjAwJztcbiAgZGF5c09mV2VlazogbnVtYmVyW10gPSBbXTtcbiAgZGF0ZXNPZk1vbnRoOiBudW1iZXJbXSA9IFtdO1xuICBvbmNlRGF0ZTogc3RyaW5nID0gJyc7XG4gIGZpbGVUeXBlOiBGaWxlVHlwZSA9ICd4bHN4JztcblxuICBlbWFpbExpc3Q6IGFueVtdID0gW107XG4gIGVtYWlsVmFsaWRhdGlvbjogYW55W10gPSBbXTtcbiAgc2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZGF5T3B0aW9ucyA9IERBWV9OQU1FUy5tYXAoKG5hbWUsIGluZGV4KSA9PiAoeyB2YWx1ZTogaW5kZXgsIGxhYmVsOiBuYW1lIH0pKTtcbiAgcmVhZG9ubHkgZGF0ZU9wdGlvbnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMSB9LCAoXywgaSkgPT4gaSArIDEpO1xuICByZWFkb25seSB0aW1lT3B0aW9ucyA9IFNDSEVEVUxFX1RJTUVfT1BUSU9OUztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCwgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcbiAgICAgIHRoaXMucmVwb3J0TmFtZSA9IHRoaXMudGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHNjaGVkdWxlID0gdGhpcy50ZW1wbGF0ZT8uc2NoZWR1bGUgfHwge307XG4gICAgICB0aGlzLmZyZXF1ZW5jeSA9IHNjaGVkdWxlLmZyZXF1ZW5jeSB8fCAnZGFpbHknO1xuICAgICAgLy8gQSBzdG9yZWQgdGltZSBvdXRzaWRlIHRoZSBhbGxvd2VkIHNsb3RzIChvbGRlciBzY2hlZHVsZXMsIGZyZWUtdHlwZWRcbiAgICAgIC8vIHZhbHVlcykgc25hcHMgYmFjayB0byB0aGUgZGVmYXVsdCByYXRoZXIgdGhhbiBzaG93aW5nIGFuIGVtcHR5IHNlbGVjdC5cbiAgICAgIGNvbnN0IHN0b3JlZFRpbWUgPSBzY2hlZHVsZS50aW1lIHx8ICcwOTowMCc7XG4gICAgICB0aGlzLnRpbWUgPSBTQ0hFRFVMRV9USU1FX09QVElPTlMuc29tZSgob3B0KSA9PiBvcHQudmFsdWUgPT09IHN0b3JlZFRpbWUpID8gc3RvcmVkVGltZSA6ICcwOTowMCc7XG4gICAgICB0aGlzLmRheXNPZldlZWsgPSBbLi4uKHNjaGVkdWxlLmRheXNPZldlZWsgfHwgW10pXTtcbiAgICAgIHRoaXMub25jZURhdGUgPSBzY2hlZHVsZS5vbmNlRGF0ZSB8fCAnJztcbiAgICAgIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ29uY2UnICYmIHRoaXMub25jZURhdGUpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKHRoaXMub25jZURhdGUuc3BsaXQoJy0nKVsyXSk7XG4gICAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gZGF5ID8gW2RheV0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gWy4uLihzY2hlZHVsZS5kYXRlc09mTW9udGggfHwgW10pXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZVR5cGUgPSBzY2hlZHVsZS5maWxlVHlwZSB8fCAneGxzeCc7XG4gICAgICB0aGlzLmVtYWlsTGlzdCA9IFsuLi4oc2NoZWR1bGUucmVjZWl2ZXJzIHx8IFtdKV07XG4gICAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbiA9IFtdO1xuICAgICAgdGhpcy5lbWFpbExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7IHRoaXMuZW1haWxWYWxpZGF0b3IoZWxlbWVudCk7IH0pO1xuICAgIH1cbiAgfVxuXG4gIGVtYWlsVmFsaWRhdG9yKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIGNvbnN0IHZhbGlkID0gZW1haWxSZWdleC50ZXN0KHZhbHVlKTtcbiAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbi5wdXNoKHZhbGlkKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdCYWNrc3BhY2UnICYmIGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJycgJiYgdGhpcy5lbWFpbExpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVtYWlsTGlzdC5wb3AoKTtcbiAgICAgIHRoaXMuZW1haWxWYWxpZGF0aW9uLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcbiAgICAgIGNvbnN0IHZhbGlkID0gZW1haWxSZWdleC50ZXN0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgdGhpcy5lbWFpbExpc3QucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB0aGlzLmVtYWlsVmFsaWRhdG9yKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoJ1BsZWFzZSBFbnRlciBWYWxpZCBFbWFpbC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmVDaGlwKGk6IG51bWJlcikge1xuICAgIHRoaXMuZW1haWxMaXN0LnNwbGljZShpLCAxKTtcbiAgICB0aGlzLmVtYWlsVmFsaWRhdGlvbiA9IFtdO1xuICAgIHRoaXMuZW1haWxMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4geyB0aGlzLmVtYWlsVmFsaWRhdG9yKGVsZW1lbnQpOyB9KTtcbiAgfVxuXG4gIHNlbGVjdEZyZXF1ZW5jeSh2YWx1ZTogRnJlcXVlbmN5KSB7XG4gICAgdGhpcy5mcmVxdWVuY3kgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzY2hlZHVsZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgY2FzZSAnZGFpbHknOiByZXR1cm4gJ0RhaWx5JztcbiAgICAgIGNhc2UgJ3dlZWtseSc6IHJldHVybiAnV2Vla2x5JztcbiAgICAgIGNhc2UgJ21vbnRobHknOiByZXR1cm4gJ01vbnRobHknO1xuICAgICAgY2FzZSAnb25jZSc6IHJldHVybiAnRG9lcyBOb3QgUmVwZWF0JztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnRGFpbHknO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURheShkYXk6IG51bWJlcikge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuZGF5c09mV2Vlay5pbmRleE9mKGRheSk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICB0aGlzLmRheXNPZldlZWsuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF5c09mV2Vlay5wdXNoKGRheSk7XG4gICAgfVxuICB9XG5cbiAgaXNEYXlTZWxlY3RlZChkYXk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheXNPZldlZWsuaW5jbHVkZXMoZGF5KTtcbiAgfVxuXG4gIHRvZ2dsZURhdGUoZGF0ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScpIHtcbiAgICAgIHRoaXMuZGF0ZXNPZk1vbnRoID0gW2RhdGVdO1xuICAgICAgdGhpcy5vbmNlRGF0ZSA9IHRoaXMuZGVyaXZlTmV4dE9jY3VycmVuY2UoZGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IHRoaXMuZGF0ZXNPZk1vbnRoLmluZGV4T2YoZGF0ZSk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICB0aGlzLmRhdGVzT2ZNb250aC5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRlc09mTW9udGgucHVzaChkYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBkYXktb2YtbW9udGggKDEtMzEpLCByZXR1cm5zIHRoZSBuZXh0IG9jY3VycmVuY2UgYXMgJ1lZWVktTU0tREQnLlxuICAgKiBUb2RheSBxdWFsaWZpZXMgaWYgaXQgaXMgdGhhdCBkYXk7IG90aGVyd2lzZSBhZHZhbmNlcyB0byB0aGUgbmV4dCBjYWxlbmRhclxuICAgKiBtb250aCB0aGF0IGFjdHVhbGx5IGNvbnRhaW5zIHRoYXQgZGF5IChlLmcuIDMxIGNob3NlbiBvbiBGZWIgMTAgLT4gTWFyIDMxKS5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlTmV4dE9jY3VycmVuY2UoZGF5T2ZNb250aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgICBpZiAodG9kYXkuZ2V0RGF0ZSgpID09PSBkYXlPZk1vbnRoKSB7XG4gICAgICByZXR1cm4gdGhpcy50b0lzb0RhdGUodG9kYXkpO1xuICAgIH1cblxuICAgIGxldCB5ZWFyID0gdG9kYXkuZ2V0RnVsbFllYXIoKTtcbiAgICBsZXQgbW9udGggPSB0b2RheS5nZXRNb250aCgpO1xuICAgIGlmICh0b2RheS5nZXREYXRlKCkgPiBkYXlPZk1vbnRoKSB7XG4gICAgICBtb250aCArPSAxO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF5c0luTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcbiAgICAgIGlmIChkYXlPZk1vbnRoIDw9IGRheXNJbk1vbnRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvSXNvRGF0ZShuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCkpO1xuICAgICAgfVxuICAgICAgbW9udGggKz0gMTtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIG1vbnRoID0gMDtcbiAgICAgICAgeWVhciArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcml2YXRlIHRvSXNvRGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG5cbiAgaXNEYXRlU2VsZWN0ZWQoZGF0ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXNPZk1vbnRoLmluY2x1ZGVzKGRhdGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpU2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICd3ZWVrbHknKSB7XG4gICAgICAvLyBTaG93cyBXSElDSCBkYXlzIGFyZSBzZWxlY3RlZCwgbm90IGp1c3QgaG93IG1hbnkg4oCUICdTdW5kYXksIE1vbmRheSc7XG4gICAgICAvLyBiZXlvbmQgdGhyZWUgZGF5cyBpdCBjb21wYWN0cyB0byAnU3VuZGF5LCBNb25kYXkgK04nIHRvIGZpdCB0aGUgdHJpZ2dlci5cbiAgICAgIGlmICghdGhpcy5kYXlzT2ZXZWVrLmxlbmd0aCkgcmV0dXJuICdDaG9vc2UgRGF5JztcbiAgICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXMuZGF5c09mV2Vla10uc29ydCgoYSwgYikgPT4gYSAtIGIpLm1hcCgoZCkgPT4gREFZX05BTUVTW2RdKTtcbiAgICAgIHJldHVybiBuYW1lcy5sZW5ndGggPD0gMyA/IG5hbWVzLmpvaW4oJywgJykgOiBgJHtuYW1lcy5zbGljZSgwLCAyKS5qb2luKCcsICcpfSArJHtuYW1lcy5sZW5ndGggLSAyfWA7XG4gICAgfVxuICAgIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ21vbnRobHknIHx8IHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScpIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5kYXRlc09mTW9udGgubGVuZ3RoO1xuICAgICAgaWYgKCFjb3VudCkgcmV0dXJuICdDaG9vc2UgRGF0ZSc7XG4gICAgICByZXR1cm4gYCR7Y291bnR9IERhdGUke2NvdW50ID4gMSA/ICdzJyA6ICcnfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNlbGVjdEZpbGVUeXBlKHZhbHVlOiBGaWxlVHlwZSkge1xuICAgIHRoaXMuZmlsZVR5cGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBmaWxlVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmlsZVR5cGUgPT09ICdjc3YnKSByZXR1cm4gJ0NTVic7XG4gICAgaWYgKHRoaXMuZmlsZVR5cGUgPT09ICd4bHN4JykgcmV0dXJuICdYTFNYJztcbiAgICByZXR1cm4gJ0Nob29zZSBGaWxlJztcbiAgfVxuXG4gIHByaXZhdGUgb3JkaW5hbChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcobikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuXG4gIGdldCBoZWxwZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgY2FzZSAnZGFpbHknOlxuICAgICAgICByZXR1cm4gJ1JlcG9ydCBzZW50IGRhaWx5JztcbiAgICAgIGNhc2UgJ3dlZWtseSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLmRheXNPZldlZWsubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLmRheXNPZldlZWtdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBzb3J0ZWQubWFwKChkKSA9PiBEQVlfTkFNRVNbZF0pO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBuYW1lcy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtuYW1lcy5zbGljZSgwLCAtMSkuam9pbignLCAnKX0gYW5kICR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV19YFxuICAgICAgICAgIDogbmFtZXNbMF07XG4gICAgICAgIHJldHVybiBgUmVwb3J0IHdpbGwgYmUgc2VudCBldmVyeSAke2pvaW5lZH1gO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGhseSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGVzT2ZNb250aC5sZW5ndGgpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnRoaXMuZGF0ZXNPZk1vbnRoXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGNvbnN0IGpvaW5lZCA9IHNvcnRlZC5tYXAoKGQpID0+IGAke3RoaXMub3JkaW5hbChkKX0ke3RoaXMuZGF5U3VmZml4KGQpfWApLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiBgUmVwb3J0cyB3aWxsIGJlIHNlbnQgb24gJHtqb2luZWR9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uY2UnOiB7XG4gICAgICAgIGlmICghdGhpcy5vbmNlRGF0ZSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gYFJlcG9ydCB3aWxsIGJlIHNlbnQgb25jZSBvbiAke3RoaXMuZm9ybWF0T25jZURhdGUodGhpcy5vbmNlRGF0ZSl9YDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRheVN1ZmZpeChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChuID49IDExICYmIG4gPD0gMTMpIHJldHVybiAndGgnO1xuICAgIHN3aXRjaCAobiAlIDEwKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiAnc3QnO1xuICAgICAgY2FzZSAyOiByZXR1cm4gJ25kJztcbiAgICAgIGNhc2UgMzogcmV0dXJuICdyZCc7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ3RoJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE9uY2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgcmV0dXJuIGRhdGVTdHI7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gcGFydHM7XG4gICAgY29uc3QgbW9udGhOYW1lID0gTU9OVEhfTkFNRVNbTnVtYmVyKG1vbnRoKSAtIDFdIHx8ICcnO1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGhOYW1lfSwgJHt5ZWFyfWA7XG4gIH1cblxuICBnZXQgaXNTYXZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMucmVwb3J0TmFtZT8udHJpbSgpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuZmlsZVR5cGUpIHJldHVybiB0cnVlO1xuICAgIGlmICghdGhpcy5lbWFpbExpc3QubGVuZ3RoIHx8IHRoaXMuZW1haWxWYWxpZGF0aW9uLmluY2x1ZGVzKGZhbHNlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnd2Vla2x5JyAmJiAhdGhpcy5kYXlzT2ZXZWVrLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnbW9udGhseScgJiYgIXRoaXMuZGF0ZXNPZk1vbnRoLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5ID09PSAnb25jZScgJiYgIXRoaXMub25jZURhdGUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTY2hlZHVsZVBheWxvYWQoKTogYW55IHtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgZnJlcXVlbmN5OiB0aGlzLmZyZXF1ZW5jeSxcbiAgICAgIHRpbWU6IHRoaXMudGltZSB8fCAnMDk6MDAnLFxuICAgICAgZmlsZVR5cGU6IHRoaXMuZmlsZVR5cGUsXG4gICAgICByZWNlaXZlcnM6IHRoaXMuZW1haWxMaXN0XG4gICAgfTtcbiAgICBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICd3ZWVrbHknKSB7XG4gICAgICBwYXlsb2FkLmRheXNPZldlZWsgPSB0aGlzLmRheXNPZldlZWs7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZyZXF1ZW5jeSA9PT0gJ21vbnRobHknKSB7XG4gICAgICBwYXlsb2FkLmRhdGVzT2ZNb250aCA9IHRoaXMuZGF0ZXNPZk1vbnRoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mcmVxdWVuY3kgPT09ICdvbmNlJykge1xuICAgICAgaWYgKHRoaXMuZGF0ZXNPZk1vbnRoLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9uY2VEYXRlID0gdGhpcy5kZXJpdmVOZXh0T2NjdXJyZW5jZSh0aGlzLmRhdGVzT2ZNb250aFswXSk7XG4gICAgICB9XG4gICAgICBwYXlsb2FkLm9uY2VEYXRlID0gdGhpcy5vbmNlRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBvblN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NhdmVEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm5hbWVFcnJvciA9ICcnO1xuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5hbWVDaGFuZ2VkID0gdGhpcy5yZXBvcnROYW1lLnRyaW0oKSAhPT0gKHRoaXMudGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB8fCAnJyk7XG4gICAgaWYgKG5hbWVDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlQ3VzdG9tUmVwb3J0VGVtcGxhdGUodGhpcy50ZW1wbGF0ZT8uX2lkLCB7IHRlbXBsYXRlTmFtZTogdGhpcy5yZXBvcnROYW1lLnRyaW0oKSB9KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zYXZlU2NoZWR1bGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGVycj8uc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZUVycm9yID0gJ1JlcG9ydCBuYW1lIGFscmVhZHkgZXhpc3RzLiBDaG9vc2UgYSBkaWZmZXJlbnQgbmFtZSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciB1cGRhdGluZyByZXBvcnQgbmFtZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2F2ZVNjaGVkdWxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlU2NoZWR1bGUoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5idWlsZFNjaGVkdWxlUGF5bG9hZCgpO1xuICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVDdXN0b21SZXBvcnRTY2hlZHVsZSh0aGlzLnRlbXBsYXRlPy5faWQsIHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7IHR5cGU6ICdzYXZlJyB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciB1cGRhdGluZyByZXBvcnQgc2NoZWR1bGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlclwiPkN1c3RvbSBSZXBvcnQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDVMNSAxNU01IDVMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi01XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbnRlciBSZXBvcnQgTmFtZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJyZXBvcnROYW1lXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBSZXBvcnQgTmFtZVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibmFtZUVycm9yXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0zXCI+e3sgbmFtZUVycm9yIH19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlNjaGVkdWxlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj48L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LXdyYXAgc2NoZWR1bGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gbWUtMyBtYi0zXCIgbmdiRHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBzY2hlZHVsZS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInNjaGVkdWxlRHJvcGRvd25cIiBuZ2JEcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgc2NoZWR1bGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwic2NoZWR1bGVEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnZGFpbHknKVwiPkRhaWx5PC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0RnJlcXVlbmN5KCd3ZWVrbHknKVwiPldlZWtseTwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnbW9udGhseScpXCI+TW9udGhseTwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeSgnb25jZScpXCI+RG9lcyBOb3QgUmVwZWF0PC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZnJlcXVlbmN5ID09PSAnd2Vla2x5J1wiIGNsYXNzPVwiZHJvcGRvd24gbWUtMyBtYi0zXCIgbmdiRHJvcGRvd24gW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkcm9wZG93bi10b2dnbGUgZm9ybS1jb250cm9sIHNjaGVkdWxlLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiY2hvb3NlRGF5RHJvcGRvd25cIiBuZ2JEcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3RMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY2hlY2tib3gtZHJvcGRvd24tbWVudVwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJjaG9vc2VEYXlEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlPcHRpb25zXCIgY2xhc3M9XCJmb3JtLWNoZWNrIHB4LTQgcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCInZGF5LScgKyBkYXkudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzRGF5U2VsZWN0ZWQoZGF5LnZhbHVlKVwiIChjaGFuZ2UpPVwidG9nZ2xlRGF5KGRheS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cIidkYXktJyArIGRheS52YWx1ZVwiPnt7IGRheS5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZnJlcXVlbmN5ID09PSAnbW9udGhseScgfHwgZnJlcXVlbmN5ID09PSAnb25jZSdcIiBjbGFzcz1cImRyb3Bkb3duIG1lLTMgbWItM1wiIG5nYkRyb3Bkb3duIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBzY2hlZHVsZS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cImNob29zZURhdGVEcm9wZG93blwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdExhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudSBjaGVja2JveC1kcm9wZG93bi1tZW51XCIgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImNob29zZURhdGVEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGUgb2YgZGF0ZU9wdGlvbnNcIiBjbGFzcz1cImZvcm0tY2hlY2sgcHgtNCBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW3R5cGVdPVwiZnJlcXVlbmN5ID09PSAnb25jZScgPyAncmFkaW8nIDogJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZnJlcXVlbmN5ID09PSAnb25jZScgPyAnb25jZURhdGUnIDogbnVsbFwiIFtpZF09XCInZGF0ZS0nICsgZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNEYXRlU2VsZWN0ZWQoZGF0ZSlcIiAoY2hhbmdlKT1cInRvZ2dsZURhdGUoZGF0ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cIidkYXRlLScgKyBkYXRlXCI+e3sgZGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yIGF0LWxhYmVsXCI+YXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHRpbWUtaW5wdXRcIiBbKG5nTW9kZWwpXT1cInRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiB0aW1lT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHQudmFsdWVcIj57eyBvcHQubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhlbHBlclRleHRcIiBjbGFzcz1cImhlbHBlci10ZXh0IG10LTFcIj57eyBoZWxwZXJUZXh0IH19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1iLTVcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZpbGUgVHlwZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiIG5nYkRyb3Bkb3duPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCB3LTEwMCB0ZXh0LXN0YXJ0XCJcbiAgICAgICAgICAgICAgICBpZD1cImZpbGVUeXBlRHJvcGRvd25cIiBuZ2JEcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAgICB7eyBmaWxlVHlwZUxhYmVsIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDBcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZmlsZVR5cGVEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0RmlsZVR5cGUoJ2NzdicpXCI+Q1NWPC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJzZWxlY3RGaWxlVHlwZSgneGxzeCcpXCI+WExTWDwvYT48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG1iLTVcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlJlY2VpdmVycyBFbWFpbCA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXIgZm9ybS1jb250cm9sIHJlY2VpdmVycy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbWFpbCBvZiBlbWFpbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIj57eyBlbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJyZW1vdmVDaGlwKGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZW1haWxpbnB1dFwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgdHlwZT1cInRleHRcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImVtYWlsVmFsaWRhdGlvbi5pbmNsdWRlcyhmYWxzZSlcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTNcIj5JbnZhbGlkIEVtYWlsIEZvcm1hdDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0xMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMTAwXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmVEaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgNS4zMzMzM1YxMS40NjY3QzE0IDEyLjU4NjggMTQgMTMuMTQ2OSAxMy43ODIxIDEzLjU3NDdDMTMuNTkwMyAxMy45NTEgMTMuMjg0MyAxNC4yNTcgMTIuOTA4MSAxNC40NDg4QzEyLjQ4MDMgMTQuNjY2NyAxMS45MjAxIDE0LjY2NjcgMTAuOCAxNC42NjY3SDUuMkM0LjA3OTg5IDE0LjY2NjcgMy41MTk4NCAxNC42NjY3IDMuMDkyMDIgMTQuNDQ4OEMyLjcxNTY5IDE0LjI1NyAyLjQwOTczIDEzLjk1MSAyLjIxNzk5IDEzLjU3NDdDMiAxMy4xNDY5IDIgMTIuNTg2OCAyIDExLjQ2NjdWNC41MzMzM0MyIDMuNDEzMjMgMiAyLjg1MzE4IDIuMjE3OTkgMi40MjUzNUMyLjQwOTczIDIuMDQ5MDMgMi43MTU2OSAxLjc0MzA3IDMuMDkyMDIgMS41NTEzM0MzLjUxOTg0IDEuMzMzMzMgNC4wNzk4OSAxLjMzMzMzIDUuMiAxLjMzMzMzSDkuMzMzMzNNMTQgNS4zMzMzM0w5LjMzMzMzIDEuMzMzMzNNMTQgNS4zMzMzM0gxMC42NjY3QzkuOTMwMjkgNS4zMzMzMyA5LjMzMzMzIDQuNzM2MzggOS4zMzMzMyA0VjEuMzMzMzNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2F2ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==