ngx-histaff-alpha 4.7.0 → 4.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/esm2022/lib/app/libraries/core-date-picker/core-date-picker/core-date-picker.component.mjs +3 -3
  2. package/esm2022/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.mjs +3 -3
  3. package/esm2022/lib/app/libraries/core-form-lite/core-form-lite.component.mjs +3 -3
  4. package/esm2022/lib/app/libraries/core-navigation-tracker/core-navigation-tracker/core-navigation-tracker.component.mjs +5 -2
  5. package/esm2022/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.mjs +3 -3
  6. package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +1 -1
  7. package/esm2022/lib/app/libraries/core-root-menu-item-picker/core-root-menu-item-picker.component.mjs +3 -3
  8. package/esm2022/lib/app/libraries/core-route-accumulator/core-route-accumulator.component.mjs +133 -0
  9. package/esm2022/lib/app/root/sys-route-access/sys-route-access.component.mjs +94 -0
  10. package/esm2022/lib/app/services/app.service.mjs +3 -2
  11. package/esm2022/lib/app/services/client.service.mjs +1 -1
  12. package/esm2022/public-api.mjs +3 -1
  13. package/fesm2022/ngx-histaff-alpha.mjs +233 -13
  14. package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
  15. package/lib/app/libraries/core-page-list/core-page-list.component.d.ts +1 -1
  16. package/lib/app/libraries/core-route-accumulator/core-route-accumulator.component.d.ts +17 -0
  17. package/lib/app/root/sys-route-access/sys-route-access.component.d.ts +17 -0
  18. package/lib/app/services/client.service.d.ts +6 -5
  19. package/package.json +1 -1
  20. package/public-api.d.ts +2 -0
@@ -442,7 +442,7 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
442
442
  multi: true,
443
443
  useExisting: CoreDatePickerComponent
444
444
  }
445
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }] }); }
445
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track $index) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }] }); }
446
446
  }
447
447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoreDatePickerComponent, decorators: [{
448
448
  type: Component,
@@ -459,7 +459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
459
459
  multi: true,
460
460
  useExisting: CoreDatePickerComponent
461
461
  }
462
- ], template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"] }]
462
+ ], template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track $index) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"] }]
463
463
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomService }, { type: i2.CoreDatetimeService }, { type: i3.MultiLanguageService }, { type: i4.AlertService }], propDecorators: { enableTimeZoneConverter: [{
464
464
  type: Input
465
465
  }], showPlaceholder: [{
@@ -489,4 +489,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
489
489
  type: ViewChild,
490
490
  args: ['calendarBody']
491
491
  }] } });
492
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUE0QixvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7QUE0Qm5FOzs7Ozs7Ozs7O0VBVUU7QUFDRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsNEJBQTRC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dCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFJlbmRlcmVyMiwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlRGF0ZXRpbWVTZXJ2aWNlLCBJRGF0YVJvdywgSU1vbnRoSWRlbnRpdHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWRhdGV0aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlWWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUteWVhci1waWNrZXIvY29yZS15ZWFyLXBpY2tlci9jb3JlLXllYXItcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVEYXRlUGlja2VyUmFuZ2Uge1xyXG4gIG1pbkRhdGU6IERhdGU7XHJcbiAgbWF4RGF0ZTogRGF0ZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjb3JlLWRhdGUtcGlja2VyJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIENvcmVZZWFyUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIFRvb2x0aXBEaXJlY3RpdmVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ29yZURhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF1cbn0pXHJcbi8qXHJcbiAgdGhpcyBjb21wb25lbnQgcmVuZGVycyBpdHMgbWFpbiBwYXJ0IGFuZCBwb3B1cCBwYXJ0XHJcbiAgdGhlIG1haW4gcGFydCBkZWFscyB3aXRoIHVzZXIgaW5wdXQgZnJvbSBwaHlzaWNhbCBrZXlib2FyZCBvciB0b3VjaCBrZXlib2FyZFxyXG4gIHRoZSBwb3B1cCBwYXJ0IGNvbnNpc3RzIG9mIDEpIG5hdmlnYXRvciAyKSBoZWFkZXIgMykgY2FsZW5kYXIgYm9keSBjb250YWluZXIgNCkgY2FsZW5kYXIgYm9keVxyXG4gIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZW0gaXM6XHJcbiAgICA0KSBjYWxlbmRhciBib2R5OlxyXG4gICAgICBkdWUgdmFyaWF0aW9ucyB0aGUgY2FsZW5kYXIgYm9keSBtYXkgcmVhY2ggdG8gNiByb3dzIG9mIHdlZWsgZGF5IHN1Yi1hcnJheVxyXG4gICAgLSBmb3IgdmlzdWFsLCBsb2dpYyBhbmQgY29kaW5nIHNpbXBsaWNpdHkgSSB3aWxsIGFsd2F5cyByZW5kZXIgYWxsIHRoZSA2IHJvd3NcclxuICAgIHNvIGNhbGVuZGFyIGJvZHkgZGltZW5zaW9uIHN0YXlzIHVuY2hhbmdlZFxyXG4gIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgQ29yZURhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlciE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcG9wdXBXaWR0aDogbnVtYmVyID0gMzAwO1xyXG4gIEBJbnB1dCgpIHBvcHVwWFBhZGRpbmc6IG51bWJlciA9IDEyO1xyXG4gIEBJbnB1dCgpIHBvcHVwQWxpZ24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmFuZ2VMaW1pdCE6IElDb3JlRGF0ZVBpY2tlclJhbmdlO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvdmVycmlkZSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcblxyXG5cclxuICBsaXN0ZW5lckZuITogKCkgPT4gdm9pZDtcclxuICBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgb3BlblN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbW9udGhQaWNrZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB5ZWFyUGlja2VyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNlbGxTaXplOiBudW1iZXIgPSAodGhpcy5wb3B1cFdpZHRoIC0gdGhpcy5wb3B1cFhQYWRkaW5nICogMikgLyA3O1xyXG5cclxuICBvdmVycmlkZSB2YWx1ZSE6IERhdGUgfCBudWxsO1xyXG4gIHBlbmRpbmdZZWFyITogbnVtYmVyO1xyXG4gIHBlbmRpbmdNb250aEluZGV4ITogbnVtYmVyO1xyXG4gIHBlbmRpbmdEYXk6IG51bWJlciA9IHRoaXMudmFsdWU/LmdldERhdGUoKSE7XHJcblxyXG4gIGN1cnJlbnRNb250aE9iamVjdCQhOiBCZWhhdmlvclN1YmplY3Q8SU1vbnRoSWRlbnRpdHk+O1xyXG4gIG5ld0RhdGUhOiBEYXRlO1xyXG5cclxuICBjdXJyZW50TW9udGhUZXh0ITogc3RyaW5nO1xyXG4gIGN1cnJlbnRIb3VycyE6IG51bWJlcjtcclxuICBjdXJyZW50TWludXRlcyE6IG51bWJlcjtcclxuICBjdXJyZW50U2Vjb25kcyE6IG51bWJlcjtcclxuICBjdXJyZW50TWlsbGlzZWNvbmRzITogbnVtYmVyO1xyXG5cclxuICBkYXRhITogSURhdGFSb3dbXTtcclxuICBoZWFkZXJXZWVrZGF5cyE6IHN0cmluZ1tdO1xyXG4gIGRpcmVjdGlvbjogbnVtYmVyID0gMTsgLy8gc3RhcnR1cCBkaXJlY3Rpb24gMSB8IC0xXHJcblxyXG4gIHRleHRWYWx1ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JhY2t3YXJkJykgYmFja3dhcmQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyQm9keScpIGNhbGVuZGFyQm9keSE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGlucHV0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBsYXN0VGV4dCE6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcmVEYXRldGltZVNlcnZpY2U6IENvcmVEYXRldGltZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5uZXdEYXRlID0gISF0aGlzLnJhbmdlTGltaXQgPyB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSA6IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5Pih7XHJcbiAgICAgIHllYXI6IHRoaXMudmFsdWU/LmdldEZ1bGxZZWFyKCkgfHwgdGhpcy5uZXdEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoSW5kZXg6IHRoaXMudmFsdWU/LmdldE1vbnRoKCkgfHwgdGhpcy5uZXdEYXRlLmdldE1vbnRoKClcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghISF0aGlzLnZhbHVlKSB7XHJcbiAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMubmV3RGF0ZTtcclxuICAgICAgdGhpcy5sYXN0VGV4dCA9IFwiXCJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGVuZGluZ1llYXIgPSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB0aGlzLnZhbHVlLmdldE1vbnRoKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0RheSA9IHRoaXMudmFsdWUuZ2V0RGF0ZSgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHRoaXMudmFsdWUuZ2V0SG91cnMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWludXRlcyA9IHRoaXMudmFsdWUuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHRoaXMudmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICApXHJcblxyXG4gICAgLypcclxuICAgIGlmICghISF0aGlzLmlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxyXG4gICAgICB3aXRoaW4gYSBwYWdlLCB0YW5sZWljYS1kYXRlLXBpY2tlciBuZWVkcyBhbiB1bmlxdWUgcHJvcGVydHkgaWQgdmFsdWUgdG8gd29yayBjb3JyZWN0bHlcclxuICAgICAgZm9yIGV4YW1wbGU6IDx0YW5sZWljYS1kYXRlLXBpY2tlciBpZD1cInN0YXJ0RGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVwiPjwvdGFubGVpY2EtZGF0ZS1waWNrZXI+XHJcbiAgICAgIGApXHJcbiAgICB9XHJcbiAgICAqL1xyXG4gICAgdGhpcy5oZWFkZXJXZWVrZGF5cyA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRTaG9ydFdlZWtkYXlzKHRoaXMubGFuZyk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgdHJpZ2dlciBhbmltYXRpb24gYnkgcmVmbG93IHRoZSBET01cclxuICAqL1xyXG4gIHRyaWdnZXJSZWZsb3coKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuY2FsZW5kYXJCb2R5Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAvL0RPTSBtYW5pcHVsYXRpb25cclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gMSkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwic2xpZGUtdXBcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwic2xpZGUtZG93blwiKTtcclxuICAgIH1cclxuICAgIGVsLm9mZnNldEhlaWdodDsgIC8qIHRyaWdnZXIgcmVmbG93IChhbHRlcm5hdGl2ZTogZWwub2Zmc2V0V2lkdGgpICovXHJcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKFwic2xpZGUtdXBcIiksIDApOyAvLyBwYXNzIHRoZSBjYWxsYmFjayB0byBDYWxsYmFjayBxdWV1ZSB0aHJvdWdoIFdlYkFQSXMsIHNvIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgRE9NIG1hbmlwdWxhdGlvbiBlbmRzXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGVsLmNsYXNzTGlzdC5hZGQoXCJzbGlkZS1kb3duXCIpLCAwKTsgLy8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gQ2FsbGJhY2sgcXVldWUgdGhyb3VnaCBXZWJBUElzLCBzbyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIERPTSBtYW5pcHVsYXRpb24gZW5kc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8qXHJcbiAgICAgIFRoaXMgZXZlbnRzIGdldCBjYWxsZWQgYnkgYWxsIGNsaWNrcyBvbiB0aGUgcGFnZVxyXG4gICAgKi9cclxuICAgIHRoaXMubGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcclxuICAgICAgLypcclxuICAgICAgICBoYW5kbGUgY2xpY2sgb3V0c2lkZVxyXG4gICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgISEhdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IG1heFpJbmRleCA9IHRoaXMuZG9tU2VydmljZS5nZXRNYXhaSW5kZXgoKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgaW5wdXRIZWlnaHQgPSByZWN0LmhlaWdodCB8fCAzNTtcclxuXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZGljYXRvci1oZWlnaHQnLCAoaW5wdXRIZWlnaHQgLSA2KSArICdweCcpXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcHVwLXotaW5kZXgnLCBtYXhaSW5kZXgpO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jZWxsLXNpemUnLCB0aGlzLmNlbGxTaXplICsgJ3B4JylcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgdGhpcy5idWlsZEJvZHkodmFsdWUueWVhciwgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVmbG93KCk7XHJcbiAgICAgIH0sIDApXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuaW5wdXRTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ2lucHV0Jyk7XHJcbiAgICB0aGlzLmlucHV0U3RyZWFtJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJDb3JlRGF0ZVBpY2tlckNvbXBvbmVudDogZXZlbnQuaW5wdXRUeXBlXCIsIGV2ZW50LmlucHV0VHlwZSlcclxuICAgICAgY29uc3QgaXNBbGxUZXh0U2VsZWN0ZWQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50Rm9yd2FyZCcpIHtcclxuICAgICAgICBpZiAoaXNBbGxUZXh0U2VsZWN0ZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3JlRGF0ZVBpY2tlckNvbXBvbmVudDogQWxsIHRleHQgd2FzIHNlbGVjdGVkIGJlZm9yZSBkZWxldGlvbicpO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgICAgIHRoaXMubGFzdFRleHQgPSAnJztcclxuICAgICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvcmVEYXRlUGlja2VyQ29tcG9uZW50OiBQYXJ0aWFsIG9yIG5vIHRleHQgc2VsZWN0ZWQgYmVmb3JlIGRlbGV0aW9uJyk7XHJcbiAgICAgICAgICB0aGlzLmxhc3RUZXh0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSAhPT0gJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCdcclxuICAgICAgICAmJiAnIzAjMSMyIzMjNCM1IzYjNyM4IzkjQmFja3NwYWNlI0RlbGV0ZScuaW5kZXhPZignIycgKyBldmVudC5kYXRhKSA8IDApIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLmxhc3RUZXh0O1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFzdFRleHQgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHYgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2Lm1hdGNoKC9eXFxkezJ9JC8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodi5tYXRjaCgvXlxcZHsyfVxcL1xcZHsyfSQvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdiArICcvJztcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdiArICcvJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudGV4dFZhbHVlLmxlbmd0aCA9PT0gMTApIHtcclxuICAgICAgICBjb25zdCBkaWdpdHMgPSB0aGlzLnRleHRWYWx1ZS5zcGxpdCgnLycpO1xyXG4gICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoZGlnaXRzWzJdKTtcclxuICAgICAgICBjb25zdCBtID0gTnVtYmVyKGRpZ2l0c1sxXSkgLSAxO1xyXG4gICAgICAgIGNvbnN0IGQgPSBOdW1iZXIoZGlnaXRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKHkgPD0gMCB8fCBtIDwgMCB8fCBtID4gMTEgfHwgZCA8IDEgfHwgZCA+IDMxKSB7XHJcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhyID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbW4gPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIGNvbnN0IHNkID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgICBjb25zdCBtcyA9IG5vdy5nZXRNaWxsaXNlY29uZHMoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcihkaWdpdHNbMl0pLCBOdW1iZXIoZGlnaXRzWzFdKSAtIDEsIE51bWJlcihkaWdpdHNbMF0pLCBociwgbW4sIHNkLCBtcyk7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKGRhdGUpO1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UoZGF0ZSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUoaW5wdXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlVUQyBpbnB1dCBcIiwgaW5wdXQpO1xyXG4gICAgbGV0IG9iajogYW55ID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZihpbnB1dCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgIG9iaiA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqID0gbmV3IERhdGUobmV3IERhdGUoaW5wdXQpLnNldEhvdXJzKDAsMCwwLDApKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YoaW5wdXQuZ2V0RnVsbFllYXIpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgb2JqID0gaW5wdXRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXRcIilcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUHJvcGVydGllcyA9ICh2YWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIGNvbnZlcnQgdG8gTG9jYWwgRGF0ZSBcIiwgdmFsdWUpO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodmFsdWUpXHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHZhbHVlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgbW9udGhJbmRleDogdmFsdWUuZ2V0TW9udGgoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgdGhpcy5wZW5kaW5nWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB2YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdEYXkgPSB2YWx1ZS5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgICAgbm93ID0gdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IG5vdy5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IG5vdy5nZXRNb250aCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyogQ29udmVydCBVVEMgZGF0ZSB0byBsb2NhbCBkYXRlICovXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKG9iaik7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC0gb2Zmc2V0ICogNjAwMDApO1xyXG4gICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgaWYgKHR5cGVvZiBvYmohLmdldEZ1bGxZZWFyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkYXRlVmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmlzRGF0ZVN0cmluZyhvYmopO1xyXG4gICAgICAgIGlmIChpc0RhdGUpIHtcclxuICAgICAgICAgIC8vY29uc3QgX29iaiA9IG5ldyBEYXRlKG9iaik7IC8vIGNvbnZlcnQgc3RyaW5nIHRvIGRhdGUgXHJcbiAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRhdGVWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXQ6IFwiLCBvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dDogXCIsIG9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGRhdGU6IERhdGUpIHtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICBpZiAoZGF0ZSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IGRhdGUgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBoID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICBjb25zdCBtID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgIGNvbnN0IHMgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICBkYXRlLnNldEhvdXJzKGgpO1xyXG4gICAgZGF0ZS5zZXRNaW51dGVzKG0pO1xyXG4gICAgZGF0ZS5zZXRTZWNvbmRzKHMpO1xyXG4gICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMobXMpO1xyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcoZGF0ZSk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSBkYXRlLmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdEYXkgPSBkYXRlLmdldERhdGUoKTtcclxuXHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG4gICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdvVG9kYXkoKSB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAoISF0aGlzLnJhbmdlTGltaXQpIHtcclxuICAgICAgaWYgKHRvZGF5IDwgdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGUgfHwgdG9kYXkgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodG9kYXkpO1xyXG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRvZGF5KTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMubGFzdFRleHQgPSAnJztcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb0JhY2t3YXJkKCkge1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSAtMTtcclxuICAgIHRoaXMuYmFja3dhcmQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgLSAxLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IDExXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgMTEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4IC0gMVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb0ZvcmV3YXJkKCkge1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSAxO1xyXG4gICAgdGhpcy5iYWNrd2FyZC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXNcclxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCA9PT0gMTEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyICsgMSxcclxuICAgICAgICBtb250aEluZGV4OiAwXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIsXHJcbiAgICAgICAgbW9udGhJbmRleDogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggKyAxXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogUHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uICovXHJcbiAgYnVpbGRCb2R5KHllYXI6IG51bWJlciwgbW9udGhJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBib2R5ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldENhbGVuZGFyQm9keSh5ZWFyLCBtb250aEluZGV4LCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB0aGlzLmRhdGEgPSBib2R5LnJvd3M7XHJcbiAgICBjb25zdCBzY3JvbGxEaXN0YW5jZSA9IChib2R5LnJvd3MubGVuZ3RoIC0gNikgKiB0aGlzLmNlbGxTaXplICsgJ3B4JztcclxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Nyb2xsLWRpc3RhbmNlJywgKGJvZHkucm93cy5sZW5ndGggLSA2KSAqIHRoaXMuY2VsbFNpemUgKyAncHgnKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubGlzdGVuZXJGbikgdGhpcy5saXN0ZW5lckZuKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZU9wZW4oKSB7XHJcbiAgICBpZiAoISF0aGlzLnJlYWRvbmx5KSByZXR1cm5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSAhdGhpcy5vcGVuU3RhdGU7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNb250aFBpY2tlckFjdGl2ZSgpIHtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSAhdGhpcy5tb250aFBpY2tlckFjdGl2ZTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhPYmplY3RDaGFuZ2UoYXJnczogSU1vbnRoSWRlbnRpdHkpIHtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgeWVhcjogYXJncy55ZWFyLFxyXG4gICAgICBtb250aEluZGV4OiBhcmdzLm1vbnRoSW5kZXhcclxuICAgIH0pXHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbk1vbnRoUGlja2VyWWVhckNsaWNrKGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy55ZWFyUGlja2VyQWN0aXZlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uWWVhclBpY2tlZChlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgeWVhcjogZSxcclxuICAgICAgbW9udGhJbmRleDogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXhcclxuICAgIH0pO1xyXG4gICAgdGhpcy55ZWFyUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMudGV4dFZhbHVlICYmICEhdGhpcy50ZXh0VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudGV4dFZhbHVlLnNwbGl0KFwiL1wiKTtcclxuICAgICAgaWYgKGFyci5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgaWYgKCEoYXJyWzBdLmxlbmd0aCA9PT0gMiAmJiBhcnJbMV0ubGVuZ3RoID09PSAyICYmIGFyclsyXS5sZW5ndGggPT09IDQpKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdGVzdFZhbCA9IG5ldyBEYXRlKE51bWJlcihhcnJbMl0pLCBOdW1iZXIoYXJyWzFdKSAtIDEsIE51bWJlcihhcnJbMF0pKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZih0ZXN0VmFsLmdldEZ1bGxZZWFyKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNFcnJvcikge1xyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgLy8gdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwib3BlblN0YXRlXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJtb250aFBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0ICNiYWNrd2FyZCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInRsLWRhdGVwaWNrZXItZGlyZWN0aW9uXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInAtcmVsYXRpdmVcIj5cclxuICAgICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwic2hvd1BsYWNlaG9sZGVyID8gJ2RkL21tL3l5eXknIDogJydcIlxyXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5oYXMtZXJyb3JdPVwiaGFzRXJyb3JcIiAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImljb25cIiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCI+PC9sYWJlbD4gLS0+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwcGVyXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNhbGVuZGFyXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGwtZGF0ZS1waWNrZXItcG9wdXBcIiBbY2xhc3Mub3Blbl09XCJvcGVuU3RhdGVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgbGVmdDogKCFwb3B1cEFsaWduIHx8ICBwb3B1cEFsaWduID09PSAnbGVmdCcpID8gJzBweCcgOiAnYXV0bycsXHJcbiAgICAgICAgcmlnaHQ6IChwb3B1cEFsaWduID09PSAncmlnaHQnKSA/ICcwcHgnIDogJ2F1dG8nLFxyXG4gICAgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1zZXNzaW9uXCIgW2NsYXNzLmQtbm9uZV09XCJtb250aFBpY2tlckFjdGl2ZSB8fCB5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXZpZ2F0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1vbnRoLWRyb3Bkb3duXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKClcIj57eyBjdXJyZW50TW9udGhUZXh0IH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tdXBcIiAoY2xpY2spPVwiZ29CYWNrd2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvLWRvd25cIiAoY2xpY2spPVwiZ29Gb3Jld2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRheSBvZiBoZWFkZXJXZWVrZGF5czsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtjbGFzcy50N109XCIkaW5kZXg9PT01XCIgW2NsYXNzLmNuXT1cIiRpbmRleD09PTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBkYXkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgI2NhbGVuZGFyQm9keSBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIiBbY2xhc3Muc2xpZGUtdXBdPVwiZGlyZWN0aW9uPT09MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNsaWRlLWRvd25dPVwiZGlyZWN0aW9uPT09LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yICh3ZWVrIG9mIGRhdGE7IHRyYWNrIHdlZWspIHtcclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygd2Vlay5pdGVtczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbYXBwVG9vbHRpcF09XCJpdGVtLmRhdGVWYWx1ZS50b0xvY2FsZURhdGVTdHJpbmcoKVwiIFtzaG93QW55d2F5XT1cImlzRGV2TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3Mub3V0LW9mLW1vbnRoXT1cIiEhIWl0ZW0uY3VycmVudE1vbnRoXCIgW2NsYXNzLnQ3XT1cIiRpbmRleD09PTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jbl09XCIkaW5kZXg9PT02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3V0LW9mLXJhbmdlXT1cIiEhcmFuZ2VMaW1pdCAmJiAhISEoKGl0ZW0uZGF0ZVZhbHVlPj1yYW5nZUxpbWl0Lm1pbkRhdGUpICYmIChyYW5nZUxpbWl0Lm1heERhdGU+PWl0ZW0uZGF0ZVZhbHVlKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXRlbS5kYXRlVmFsdWUuZ2V0RnVsbFllYXIoKT09PXBlbmRpbmdZZWFyICYmIGl0ZW0uZGF0ZVZhbHVlLmdldE1vbnRoKCk9PT1wZW5kaW5nTW9udGhJbmRleCAmJiBpdGVtLmRhdGVWYWx1ZS5nZXREYXRlKCk9PT1wZW5kaW5nRGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbS5kYXRlVmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5kYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuYWN0aXZlXT1cIm1vbnRoUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLW1vbnRoLXBpY2tlciBbbGFuZ109XCJsYW5nXCIgW21vbnRoT2JqZWN0JF09XCJjdXJyZW50TW9udGhPYmplY3QkXCJcclxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk1vbnRoT2JqZWN0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG9uWWVhckNsaWNrKT1cIm9uTW9udGhQaWNrZXJZZWFyQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1tb250aC1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInllYXItcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuYWN0aXZlXT1cInllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUteWVhci1waWNrZXIgW2xhbmddPVwibGFuZ1wiIChvbkNoYW5nZSk9XCJvblllYXJQaWNrZWQoJGV2ZW50KVwiPjwvY29yZS15ZWFyLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNkcC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhclwiIFtjbGFzcy5vcGFjaXR5LTBdPVwiISEhdGV4dFZhbHVlXCIgKGNsaWNrKT1cImNsZWFyKClcIj57eyAnVUkuQ09SRV9EQVRFX1BJQ0tFUl9DTEVBUicgfFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpZ2ktd2F0Y2hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2RheVwiIChjbGljayk9XCJnb1RvZGF5KClcIj57eyAnVUkuQ09SRV9EQVRFX1BJQ0tFUl9UT0RBWScgfCB0cmFuc2xhdGU6IGxhbmcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUE0QixvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7QUE0Qm5FOzs7Ozs7Ozs7O0VBVUU7QUFDRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsNEJBQTRC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dCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFJlbmRlcmVyMiwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlRGF0ZXRpbWVTZXJ2aWNlLCBJRGF0YVJvdywgSU1vbnRoSWRlbnRpdHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWRhdGV0aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlWWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUteWVhci1waWNrZXIvY29yZS15ZWFyLXBpY2tlci9jb3JlLXllYXItcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVEYXRlUGlja2VyUmFuZ2Uge1xyXG4gIG1pbkRhdGU6IERhdGU7XHJcbiAgbWF4RGF0ZTogRGF0ZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjb3JlLWRhdGUtcGlja2VyJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIENvcmVZZWFyUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIFRvb2x0aXBEaXJlY3RpdmVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ29yZURhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF1cbn0pXHJcbi8qXHJcbiAgdGhpcyBjb21wb25lbnQgcmVuZGVycyBpdHMgbWFpbiBwYXJ0IGFuZCBwb3B1cCBwYXJ0XHJcbiAgdGhlIG1haW4gcGFydCBkZWFscyB3aXRoIHVzZXIgaW5wdXQgZnJvbSBwaHlzaWNhbCBrZXlib2FyZCBvciB0b3VjaCBrZXlib2FyZFxyXG4gIHRoZSBwb3B1cCBwYXJ0IGNvbnNpc3RzIG9mIDEpIG5hdmlnYXRvciAyKSBoZWFkZXIgMykgY2FsZW5kYXIgYm9keSBjb250YWluZXIgNCkgY2FsZW5kYXIgYm9keVxyXG4gIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZW0gaXM6XHJcbiAgICA0KSBjYWxlbmRhciBib2R5OlxyXG4gICAgICBkdWUgdmFyaWF0aW9ucyB0aGUgY2FsZW5kYXIgYm9keSBtYXkgcmVhY2ggdG8gNiByb3dzIG9mIHdlZWsgZGF5IHN1Yi1hcnJheVxyXG4gICAgLSBmb3IgdmlzdWFsLCBsb2dpYyBhbmQgY29kaW5nIHNpbXBsaWNpdHkgSSB3aWxsIGFsd2F5cyByZW5kZXIgYWxsIHRoZSA2IHJvd3NcclxuICAgIHNvIGNhbGVuZGFyIGJvZHkgZGltZW5zaW9uIHN0YXlzIHVuY2hhbmdlZFxyXG4gIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgQ29yZURhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlciE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcG9wdXBXaWR0aDogbnVtYmVyID0gMzAwO1xyXG4gIEBJbnB1dCgpIHBvcHVwWFBhZGRpbmc6IG51bWJlciA9IDEyO1xyXG4gIEBJbnB1dCgpIHBvcHVwQWxpZ24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmFuZ2VMaW1pdCE6IElDb3JlRGF0ZVBpY2tlclJhbmdlO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvdmVycmlkZSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcblxyXG5cclxuICBsaXN0ZW5lckZuITogKCkgPT4gdm9pZDtcclxuICBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgb3BlblN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbW9udGhQaWNrZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB5ZWFyUGlja2VyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNlbGxTaXplOiBudW1iZXIgPSAodGhpcy5wb3B1cFdpZHRoIC0gdGhpcy5wb3B1cFhQYWRkaW5nICogMikgLyA3O1xyXG5cclxuICBvdmVycmlkZSB2YWx1ZSE6IERhdGUgfCBudWxsO1xyXG4gIHBlbmRpbmdZZWFyITogbnVtYmVyO1xyXG4gIHBlbmRpbmdNb250aEluZGV4ITogbnVtYmVyO1xyXG4gIHBlbmRpbmdEYXk6IG51bWJlciA9IHRoaXMudmFsdWU/LmdldERhdGUoKSE7XHJcblxyXG4gIGN1cnJlbnRNb250aE9iamVjdCQhOiBCZWhhdmlvclN1YmplY3Q8SU1vbnRoSWRlbnRpdHk+O1xyXG4gIG5ld0RhdGUhOiBEYXRlO1xyXG5cclxuICBjdXJyZW50TW9udGhUZXh0ITogc3RyaW5nO1xyXG4gIGN1cnJlbnRIb3VycyE6IG51bWJlcjtcclxuICBjdXJyZW50TWludXRlcyE6IG51bWJlcjtcclxuICBjdXJyZW50U2Vjb25kcyE6IG51bWJlcjtcclxuICBjdXJyZW50TWlsbGlzZWNvbmRzITogbnVtYmVyO1xyXG5cclxuICBkYXRhITogSURhdGFSb3dbXTtcclxuICBoZWFkZXJXZWVrZGF5cyE6IHN0cmluZ1tdO1xyXG4gIGRpcmVjdGlvbjogbnVtYmVyID0gMTsgLy8gc3RhcnR1cCBkaXJlY3Rpb24gMSB8IC0xXHJcblxyXG4gIHRleHRWYWx1ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2JhY2t3YXJkJykgYmFja3dhcmQhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyQm9keScpIGNhbGVuZGFyQm9keSE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGlucHV0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBsYXN0VGV4dCE6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcmVEYXRldGltZVNlcnZpY2U6IENvcmVEYXRldGltZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5uZXdEYXRlID0gISF0aGlzLnJhbmdlTGltaXQgPyB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSA6IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5Pih7XHJcbiAgICAgIHllYXI6IHRoaXMudmFsdWU/LmdldEZ1bGxZZWFyKCkgfHwgdGhpcy5uZXdEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoSW5kZXg6IHRoaXMudmFsdWU/LmdldE1vbnRoKCkgfHwgdGhpcy5uZXdEYXRlLmdldE1vbnRoKClcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgIGlmICghISF0aGlzLnZhbHVlKSB7XHJcbiAgICAgIC8vdGhpcy52YWx1ZSA9IHRoaXMubmV3RGF0ZTtcclxuICAgICAgdGhpcy5sYXN0VGV4dCA9IFwiXCJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGVuZGluZ1llYXIgPSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB0aGlzLnZhbHVlLmdldE1vbnRoKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0RheSA9IHRoaXMudmFsdWUuZ2V0RGF0ZSgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHRoaXMudmFsdWUuZ2V0SG91cnMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWludXRlcyA9IHRoaXMudmFsdWUuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHRoaXMudmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICApXHJcblxyXG4gICAgLypcclxuICAgIGlmICghISF0aGlzLmlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxyXG4gICAgICB3aXRoaW4gYSBwYWdlLCB0YW5sZWljYS1kYXRlLXBpY2tlciBuZWVkcyBhbiB1bmlxdWUgcHJvcGVydHkgaWQgdmFsdWUgdG8gd29yayBjb3JyZWN0bHlcclxuICAgICAgZm9yIGV4YW1wbGU6IDx0YW5sZWljYS1kYXRlLXBpY2tlciBpZD1cInN0YXJ0RGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVwiPjwvdGFubGVpY2EtZGF0ZS1waWNrZXI+XHJcbiAgICAgIGApXHJcbiAgICB9XHJcbiAgICAqL1xyXG4gICAgdGhpcy5oZWFkZXJXZWVrZGF5cyA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRTaG9ydFdlZWtkYXlzKHRoaXMubGFuZyk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgdHJpZ2dlciBhbmltYXRpb24gYnkgcmVmbG93IHRoZSBET01cclxuICAqL1xyXG4gIHRyaWdnZXJSZWZsb3coKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuY2FsZW5kYXJCb2R5Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAvL0RPTSBtYW5pcHVsYXRpb25cclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gMSkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwic2xpZGUtdXBcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwic2xpZGUtZG93blwiKTtcclxuICAgIH1cclxuICAgIGVsLm9mZnNldEhlaWdodDsgIC8qIHRyaWdnZXIgcmVmbG93IChhbHRlcm5hdGl2ZTogZWwub2Zmc2V0V2lkdGgpICovXHJcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKFwic2xpZGUtdXBcIiksIDApOyAvLyBwYXNzIHRoZSBjYWxsYmFjayB0byBDYWxsYmFjayBxdWV1ZSB0aHJvdWdoIFdlYkFQSXMsIHNvIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgRE9NIG1hbmlwdWxhdGlvbiBlbmRzXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGVsLmNsYXNzTGlzdC5hZGQoXCJzbGlkZS1kb3duXCIpLCAwKTsgLy8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gQ2FsbGJhY2sgcXVldWUgdGhyb3VnaCBXZWJBUElzLCBzbyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIERPTSBtYW5pcHVsYXRpb24gZW5kc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8qXHJcbiAgICAgIFRoaXMgZXZlbnRzIGdldCBjYWxsZWQgYnkgYWxsIGNsaWNrcyBvbiB0aGUgcGFnZVxyXG4gICAgKi9cclxuICAgIHRoaXMubGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcclxuICAgICAgLypcclxuICAgICAgICBoYW5kbGUgY2xpY2sgb3V0c2lkZVxyXG4gICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgISEhdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IG1heFpJbmRleCA9IHRoaXMuZG9tU2VydmljZS5nZXRNYXhaSW5kZXgoKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgaW5wdXRIZWlnaHQgPSByZWN0LmhlaWdodCB8fCAzNTtcclxuXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZGljYXRvci1oZWlnaHQnLCAoaW5wdXRIZWlnaHQgLSA2KSArICdweCcpXHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcHVwLXotaW5kZXgnLCBtYXhaSW5kZXgpO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jZWxsLXNpemUnLCB0aGlzLmNlbGxTaXplICsgJ3B4JylcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgdGhpcy5idWlsZEJvZHkodmFsdWUueWVhciwgdmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVmbG93KCk7XHJcbiAgICAgIH0sIDApXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuaW5wdXRTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ2lucHV0Jyk7XHJcbiAgICB0aGlzLmlucHV0U3RyZWFtJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJDb3JlRGF0ZVBpY2tlckNvbXBvbmVudDogZXZlbnQuaW5wdXRUeXBlXCIsIGV2ZW50LmlucHV0VHlwZSlcclxuICAgICAgY29uc3QgaXNBbGxUZXh0U2VsZWN0ZWQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcclxuXHJcbiAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50Rm9yd2FyZCcpIHtcclxuICAgICAgICBpZiAoaXNBbGxUZXh0U2VsZWN0ZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3JlRGF0ZVBpY2tlckNvbXBvbmVudDogQWxsIHRleHQgd2FzIHNlbGVjdGVkIGJlZm9yZSBkZWxldGlvbicpO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgICAgIHRoaXMubGFzdFRleHQgPSAnJztcclxuICAgICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvcmVEYXRlUGlja2VyQ29tcG9uZW50OiBQYXJ0aWFsIG9yIG5vIHRleHQgc2VsZWN0ZWQgYmVmb3JlIGRlbGV0aW9uJyk7XHJcbiAgICAgICAgICB0aGlzLmxhc3RUZXh0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSAhPT0gJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCdcclxuICAgICAgICAmJiAnIzAjMSMyIzMjNCM1IzYjNyM4IzkjQmFja3NwYWNlI0RlbGV0ZScuaW5kZXhPZignIycgKyBldmVudC5kYXRhKSA8IDApIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLmxhc3RUZXh0O1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFzdFRleHQgPSBldmVudC50YXJnZXQudmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHYgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgPT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2Lm1hdGNoKC9eXFxkezJ9JC8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodi5tYXRjaCgvXlxcZHsyfVxcL1xcZHsyfSQvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdiArICcvJztcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdiArICcvJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudGV4dFZhbHVlLmxlbmd0aCA9PT0gMTApIHtcclxuICAgICAgICBjb25zdCBkaWdpdHMgPSB0aGlzLnRleHRWYWx1ZS5zcGxpdCgnLycpO1xyXG4gICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoZGlnaXRzWzJdKTtcclxuICAgICAgICBjb25zdCBtID0gTnVtYmVyKGRpZ2l0c1sxXSkgLSAxO1xyXG4gICAgICAgIGNvbnN0IGQgPSBOdW1iZXIoZGlnaXRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKHkgPD0gMCB8fCBtIDwgMCB8fCBtID4gMTEgfHwgZCA8IDEgfHwgZCA+IDMxKSB7XHJcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhyID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbW4gPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIGNvbnN0IHNkID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgICBjb25zdCBtcyA9IG5vdy5nZXRNaWxsaXNlY29uZHMoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcihkaWdpdHNbMl0pLCBOdW1iZXIoZGlnaXRzWzFdKSAtIDEsIE51bWJlcihkaWdpdHNbMF0pLCBociwgbW4sIHNkLCBtcyk7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKGRhdGUpO1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UoZGF0ZSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUoaW5wdXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlVUQyBpbnB1dCBcIiwgaW5wdXQpO1xyXG4gICAgbGV0IG9iajogYW55ID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZihpbnB1dCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgIG9iaiA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb2JqID0gbmV3IERhdGUobmV3IERhdGUoaW5wdXQpLnNldEhvdXJzKDAsMCwwLDApKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YoaW5wdXQuZ2V0RnVsbFllYXIpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgb2JqID0gaW5wdXRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXRcIilcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUHJvcGVydGllcyA9ICh2YWx1ZTogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIGNvbnZlcnQgdG8gTG9jYWwgRGF0ZSBcIiwgdmFsdWUpO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodmFsdWUpXHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHZhbHVlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgbW9udGhJbmRleDogdmFsdWUuZ2V0TW9udGgoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IHZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgdGhpcy5wZW5kaW5nWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSB2YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdEYXkgPSB2YWx1ZS5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgICAgbm93ID0gdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IG5vdy5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IG5vdy5nZXRNb250aCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyogQ29udmVydCBVVEMgZGF0ZSB0byBsb2NhbCBkYXRlICovXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKG9iaik7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC0gb2Zmc2V0ICogNjAwMDApO1xyXG4gICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgaWYgKHR5cGVvZiBvYmohLmdldEZ1bGxZZWFyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkYXRlVmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmlzRGF0ZVN0cmluZyhvYmopO1xyXG4gICAgICAgIGlmIChpc0RhdGUpIHtcclxuICAgICAgICAgIC8vY29uc3QgX29iaiA9IG5ldyBEYXRlKG9iaik7IC8vIGNvbnZlcnQgc3RyaW5nIHRvIGRhdGUgXHJcbiAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRhdGVWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXQ6IFwiLCBvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dDogXCIsIG9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGRhdGU6IERhdGUpIHtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICBpZiAoZGF0ZSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IGRhdGUgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBoID0gbm93LmdldEhvdXJzKCk7XHJcbiAgICBjb25zdCBtID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgIGNvbnN0IHMgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICBkYXRlLnNldEhvdXJzKGgpO1xyXG4gICAgZGF0ZS5zZXRNaW51dGVzKG0pO1xyXG4gICAgZGF0ZS5zZXRTZWNvbmRzKHMpO1xyXG4gICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMobXMpO1xyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcoZGF0ZSk7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHRoaXMucGVuZGluZ01vbnRoSW5kZXggPSBkYXRlLmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdEYXkgPSBkYXRlLmdldERhdGUoKTtcclxuXHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG4gICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdvVG9kYXkoKSB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAoISF0aGlzLnJhbmdlTGltaXQpIHtcclxuICAgICAgaWYgKHRvZGF5IDwgdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGUgfHwgdG9kYXkgPiB0aGlzLnJhbmdlTGltaXQubWF4RGF0ZSkgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodG9kYXkpO1xyXG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRvZGF5KTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMubGFzdFRleHQgPSAnJztcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb0JhY2t3YXJkKCkge1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSAtMTtcclxuICAgIHRoaXMuYmFja3dhcmQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgLSAxLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IDExXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgMTEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4IC0gMVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb0ZvcmV3YXJkKCkge1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSAxO1xyXG4gICAgdGhpcy5iYWNrd2FyZC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIHRoaXNcclxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCA9PT0gMTEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyICsgMSxcclxuICAgICAgICBtb250aEluZGV4OiAwXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIsXHJcbiAgICAgICAgbW9udGhJbmRleDogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggKyAxXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogUHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9uICovXHJcbiAgYnVpbGRCb2R5KHllYXI6IG51bWJlciwgbW9udGhJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBib2R5ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldENhbGVuZGFyQm9keSh5ZWFyLCBtb250aEluZGV4LCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB0aGlzLmRhdGEgPSBib2R5LnJvd3M7XHJcbiAgICBjb25zdCBzY3JvbGxEaXN0YW5jZSA9IChib2R5LnJvd3MubGVuZ3RoIC0gNikgKiB0aGlzLmNlbGxTaXplICsgJ3B4JztcclxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Nyb2xsLWRpc3RhbmNlJywgKGJvZHkucm93cy5sZW5ndGggLSA2KSAqIHRoaXMuY2VsbFNpemUgKyAncHgnKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubGlzdGVuZXJGbikgdGhpcy5saXN0ZW5lckZuKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZU9wZW4oKSB7XHJcbiAgICBpZiAoISF0aGlzLnJlYWRvbmx5KSByZXR1cm5cclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSAhdGhpcy5vcGVuU3RhdGU7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNb250aFBpY2tlckFjdGl2ZSgpIHtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSAhdGhpcy5tb250aFBpY2tlckFjdGl2ZTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhPYmplY3RDaGFuZ2UoYXJnczogSU1vbnRoSWRlbnRpdHkpIHtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgeWVhcjogYXJncy55ZWFyLFxyXG4gICAgICBtb250aEluZGV4OiBhcmdzLm1vbnRoSW5kZXhcclxuICAgIH0pXHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbk1vbnRoUGlja2VyWWVhckNsaWNrKGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy55ZWFyUGlja2VyQWN0aXZlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uWWVhclBpY2tlZChlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgeWVhcjogZSxcclxuICAgICAgbW9udGhJbmRleDogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXhcclxuICAgIH0pO1xyXG4gICAgdGhpcy55ZWFyUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMudGV4dFZhbHVlICYmICEhdGhpcy50ZXh0VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudGV4dFZhbHVlLnNwbGl0KFwiL1wiKTtcclxuICAgICAgaWYgKGFyci5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgaWYgKCEoYXJyWzBdLmxlbmd0aCA9PT0gMiAmJiBhcnJbMV0ubGVuZ3RoID09PSAyICYmIGFyclsyXS5sZW5ndGggPT09IDQpKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdGVzdFZhbCA9IG5ldyBEYXRlKE51bWJlcihhcnJbMl0pLCBOdW1iZXIoYXJyWzFdKSAtIDEsIE51bWJlcihhcnJbMF0pKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZih0ZXN0VmFsLmdldEZ1bGxZZWFyKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNFcnJvcikge1xyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgLy8gdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwib3BlblN0YXRlXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJtb250aFBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgPGlucHV0ICNiYWNrd2FyZCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInRsLWRhdGVwaWNrZXItZGlyZWN0aW9uXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInAtcmVsYXRpdmVcIj5cclxuICAgICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwic2hvd1BsYWNlaG9sZGVyID8gJ2RkL21tL3l5eXknIDogJydcIlxyXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5oYXMtZXJyb3JdPVwiaGFzRXJyb3JcIiAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImljb25cIiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCI+PC9sYWJlbD4gLS0+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwcGVyXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNhbGVuZGFyXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGwtZGF0ZS1waWNrZXItcG9wdXBcIiBbY2xhc3Mub3Blbl09XCJvcGVuU3RhdGVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgbGVmdDogKCFwb3B1cEFsaWduIHx8ICBwb3B1cEFsaWduID09PSAnbGVmdCcpID8gJzBweCcgOiAnYXV0bycsXHJcbiAgICAgICAgcmlnaHQ6IChwb3B1cEFsaWduID09PSAncmlnaHQnKSA/ICcwcHgnIDogJ2F1dG8nLFxyXG4gICAgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1zZXNzaW9uXCIgW2NsYXNzLmQtbm9uZV09XCJtb250aFBpY2tlckFjdGl2ZSB8fCB5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXZpZ2F0b3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1vbnRoLWRyb3Bkb3duXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKClcIj57eyBjdXJyZW50TW9udGhUZXh0IH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tdXBcIiAoY2xpY2spPVwiZ29CYWNrd2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvLWRvd25cIiAoY2xpY2spPVwiZ29Gb3Jld2FyZCgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRheSBvZiBoZWFkZXJXZWVrZGF5czsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtjbGFzcy50N109XCIkaW5kZXg9PT01XCIgW2NsYXNzLmNuXT1cIiRpbmRleD09PTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBkYXkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgI2NhbGVuZGFyQm9keSBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIiBbY2xhc3Muc2xpZGUtdXBdPVwiZGlyZWN0aW9uPT09MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNsaWRlLWRvd25dPVwiZGlyZWN0aW9uPT09LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yICh3ZWVrIG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiB3ZWVrLml0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFthcHBUb29sdGlwXT1cIml0ZW0uZGF0ZVZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpXCIgW3Nob3dBbnl3YXldPVwiaXNEZXZNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5vdXQtb2YtbW9udGhdPVwiISEhaXRlbS5jdXJyZW50TW9udGhcIiBbY2xhc3MudDddPVwiJGluZGV4PT09NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNuXT1cIiRpbmRleD09PTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vdXQtb2YtcmFuZ2VdPVwiISFyYW5nZUxpbWl0ICYmICEhISgoaXRlbS5kYXRlVmFsdWU+PXJhbmdlTGltaXQubWluRGF0ZSkgJiYgKHJhbmdlTGltaXQubWF4RGF0ZT49aXRlbS5kYXRlVmFsdWUpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpPT09cGVuZGluZ1llYXIgJiYgaXRlbS5kYXRlVmFsdWUuZ2V0TW9udGgoKT09PXBlbmRpbmdNb250aEluZGV4ICYmIGl0ZW0uZGF0ZVZhbHVlLmdldERhdGUoKT09PXBlbmRpbmdEYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLmRhdGVWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwibW9udGhQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUtbW9udGgtcGlja2VyIFtsYW5nXT1cImxhbmdcIiBbbW9udGhPYmplY3QkXT1cImN1cnJlbnRNb250aE9iamVjdCRcIlxyXG4gICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhPYmplY3RDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25ZZWFyQ2xpY2spPVwib25Nb250aFBpY2tlclllYXJDbGljaygkZXZlbnQpXCI+PC9jb3JlLW1vbnRoLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwieWVhci1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgICAgICAgICA8Y29yZS15ZWFyLXBpY2tlciBbbGFuZ109XCJsYW5nXCIgKG9uQ2hhbmdlKT1cIm9uWWVhclBpY2tlZCgkZXZlbnQpXCI+PC9jb3JlLXllYXItcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2RwLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgW2NsYXNzLm9wYWNpdHktMF09XCIhISF0ZXh0VmFsdWVcIiAoY2xpY2spPVwiY2xlYXIoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX0NMRUFSJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlnaS13YXRjaFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZGF5XCIgKGNsaWNrKT1cImdvVG9kYXkoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX1RPREFZJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=