@coreui/angular-pro 5.0.0-alpha.10 → 5.0.0-alpha.11

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.
@@ -143,7 +143,7 @@ export class DateRangePickerComponent {
143
143
  * @type Partial<Options>
144
144
  */
145
145
  this.popperjsOptions = {
146
- strategy: 'fixed'
146
+ strategy: 'absolute'
147
147
  };
148
148
  /**
149
149
  * Set whether days in adjacent months shown before or after the current month are selectable. This only applies if the `showAdjacentDays` option is set to true.
@@ -547,7 +547,7 @@ export class DateRangePickerComponent {
547
547
  useExisting: forwardRef(() => DateRangePickerComponent),
548
548
  multi: true
549
549
  }
550
- ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "startDateElementRef", first: true, predicate: ["startDateElementRef"], descendants: true }, { propertyName: "endDateElementRef", first: true, predicate: ["endDateElementRef"], descendants: true }], exportAs: ["cDateRangePicker"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"range && separator !== false\" class=\"date-picker-separator\"></div>\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"indicator\" class=\"date-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"date-picker-cleaner\" role=\"button\">\n </div>\n\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!showRanges\">\n <div *ngIf=\"ranges && customRanges.length > 0\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{customRange | customRangeKey}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays", "selectionType", "showWeekNumber", "weekNumbersLabel"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: CustomRangeKeyPipe, name: "customRangeKey" }] }); }
550
+ ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "startDateElementRef", first: true, predicate: ["startDateElementRef"], descendants: true }, { propertyName: "endDateElementRef", first: true, predicate: ["endDateElementRef"], descendants: true }], exportAs: ["cDateRangePicker"], usesOnChanges: true, ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"range && separator !== false\" class=\"date-picker-separator\"></div>\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"indicator\" class=\"date-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"date-picker-cleaner\" role=\"button\">\n </div>\n\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!showRanges\">\n <div *ngIf=\"ranges && customRanges.length > 0\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{customRange | customRangeKey}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter", "selectAdjacentDays", "showAdjacentDays", "selectionType", "showWeekNumber", "weekNumbersLabel"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "component", type: TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "valid", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "pipe", type: CustomRangeKeyPipe, name: "customRangeKey" }] }); }
551
551
  }
552
552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DateRangePickerComponent, decorators: [{
553
553
  type: Component,
@@ -573,7 +573,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
573
573
  useExisting: forwardRef(() => DateRangePickerComponent),
574
574
  multi: true
575
575
  }
576
- ], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"range && separator !== false\" class=\"date-picker-separator\"></div>\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"indicator\" class=\"date-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"date-picker-cleaner\" role=\"button\">\n </div>\n\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!showRanges\">\n <div *ngIf=\"ranges && customRanges.length > 0\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{customRange | customRangeKey}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n" }]
576
+ ], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\" [ngClass]=\"datePickerClasses\"\n [(visible)]=\"visible\" [popperOptions]=\"popperjsOptions\">\n <div [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n cDropdownToggle\n class=\"date-picker-input-group\"\n >\n <input #startDateElementRef\n (change)=\"handleStartDateInputChange($event)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"range ? undefined : valid\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"range && separator !== false\" class=\"date-picker-separator\"></div>\n <input #endDateElementRef\n (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder\"\n [readonly]=\"inputReadOnly ?? null\"\n [valid]=\"valid ?? undefined\"\n cFormControl\n class=\"date-picker-input\"\n pattern=\"[1-9]*\"\n >\n <div *ngIf=\"indicator\" class=\"date-picker-indicator\"></div>\n <div (click)=\"!disabled && handleClear($event)\"\n *ngIf=\"cleaner && startDateElementRef.value && !disabled\"\n class=\"date-picker-cleaner\" role=\"button\">\n </div>\n\n </div>\n <div cDropdownMenu class=\"date-picker-dropdown py-0\">\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!showRanges\">\n <div *ngIf=\"ranges && customRanges.length > 0\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{customRange | customRangeKey}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n [selectAdjacentDays]=\"selectAdjacentDays\"\n [showAdjacentDays]=\"showAdjacentDays\"\n [showWeekNumber]=\"showWeekNumber\"\n [selectionType]=\"selectionType\"\n [weekNumbersLabel]=\"weekNumbersLabel\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n (timeChange)=\"handleStartTimeChange($event)\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n (timeChange)=\"handleEndTimeChange($event)\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"date-picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", styles: [".form-control.date-picker-input:focus{box-shadow:0 0}\n"] }]
577
577
  }], ctorParameters: () => [{ type: i1.BreakpointObserver }], propDecorators: { dayFormat: [{
578
578
  type: Input
579
579
  }], calendars: [{
@@ -697,4 +697,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
697
697
  type: HostBinding,
698
698
  args: ['class']
699
699
  }] } });
700
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBRUwsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxt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Z0IsRUFBRTtnQkFFN0IsVUFBVTtzQkFBbEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBY2xDLEtBQUs7c0JBRFIsS0FBSztnQkFnQ0csYUFBYTtzQkFBckIsS0FBSztnQkFNa0IsZUFBZTtzQkFBdEMsS0FBSzt1QkFBQyxlQUFlO2dCQVVrQixrQkFBa0I7c0JBQXpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUUUsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVE3QixhQUFhO3NCQUFyQixLQUFLO2dCQVFrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVE3QixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRWEsV0FBVztzQkFBN0IsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHMkIsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDQSxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUcrQixnQkFBZ0I7c0JBQTVFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQXNCakMsTUFBTTtzQkFBL0IsWUFBWTt1QkFBQyxVQUFVO2dCQTRFcEIsaUJBQWlCO3NCQURwQixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IGdldExvY2FsRGF0ZUZyb21TdHJpbmcsIGlzRGF0ZURpc2FibGVkLCBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzJztcbmltcG9ydCB7IERhdGVGaWx0ZXJUeXBlLCBEYXlGb3JtYXRUeXBlLCBXZWVrZGF5Rm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDb2xvcnMgfSBmcm9tICcuLi8uLi9jb3JldWkudHlwZXMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RpbWUtcGlja2VyJztcbmltcG9ydCB7IEN1c3RvbVJhbmdlS2V5UGlwZSB9IGZyb20gJy4vY3VzdG9tLXJhbmdlLWtleS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FsZW5kYXJSYW5nZXMge1xuICBba2V5OiBzdHJpbmddOiBEYXRlW107XG59XG5cbmV4cG9ydCB0eXBlIFRDdXN0b21SYW5nZSA9IFtzdHJpbmcsIERhdGVbXV1cblxuLyoqIE11c3QgYmUgYSB2YWxpZCBkYXRlIHN0cmluZyAqL1xuLy8gdG9kbzogdmFsaWRhdGlvblxuLy8gZXhwb3J0IGZ1bmN0aW9uIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKGxvY2FsZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuLy8gICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbi8vICAgICAvLyBjb25zdCB2YWxpZERhdGUgPSAhaXNOYU4oRGF0ZS5wYXJzZShjb250cm9sLnZhbHVlKSk7XG4vLyAgICAgc3RyaW5nVG9EYXRlQ29udmVydChjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IGRhdGVTaGltID0gY3Z0RGF0ZShjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIC8vIEB0cy1pZ25vcmVcbi8vICAgICAvLyBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGRhdGVTaGltLnllYXIsIGRhdGVTaGltLm1vbnRoLCBkYXRlU2hpbS5kYXkpKVxuLy8gICAgIGNvbnNvbGUubG9nKCdkYXRlU2hpbScsIGRhdGVTaGltLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpO1xuLy8gICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcicsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIHZhbGlkRGF0ZSk7XG4vLyAgICAgcmV0dXJuIHZhbGlkRGF0ZSA/IHsgaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3I6IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcbi8vICAgfTtcbi8vIH1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1kYXRlLXJhbmdlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGV4cG9ydEFzOiAnY0RhdGVSYW5nZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cFRleHREaXJlY3RpdmUsXG4gICAgQ3VzdG9tUmFuZ2VLZXlQaXBlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAZGVmYXVsdCAnbnVtZXJpYydcbiAgICogQHR5cGUgRGF5Rm9ybWF0VHlwZVxuICAgKi9cbiAgQElucHV0KCkgZGF5Rm9ybWF0OiBEYXlGb3JtYXRUeXBlID0gJ251bWVyaWMnO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNhbGVuZGFycyB0aGF0IHJlbmRlciBvbiBkZXNrdG9wIGRldmljZXMuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjYWxlbmRhcnM6IG51bWJlciA9IDI7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgY2xlYW5lciBidXR0b24uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFuZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgdmFsdWUgc2V0dGluZy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IGRhdGUgZm9ybWF0LlxuICAgKiBXZSB1c2UgQW5ndWxhciBmb3JtYXREYXRlKCkgZnVuY3Rpb24sIHNlZTpcbiAgICogLSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9mb3JtYXREYXRlXG4gICAqIC0gaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGF0ZVBpcGUjcHJlLWRlZmluZWQtZm9ybWF0LW9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBpbnB1dCBpbmRpY2F0b3IuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgaW50byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjdXN0b20gZm9ybWF0LlxuICAgKiBAc2luY2UgdjUuMC4wXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dERhdGVGb3JtYXQ/OiAoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gcGFyc2UgdGhlIGlucHV0IHZhbHVlIGludG8gYSB2YWxpZCBEYXRlIG9iamVjdC5cbiAgICogQHNpbmNlIHY1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgaW5wdXREYXRlUGFyc2U/OiAoZGF0ZTogc3RyaW5nIHwgRGF0ZSkgPT4gRGF0ZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBpbnB1dFJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jaW5wdXRSZWFkT25seSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlucHV0UmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2lucHV0UmVhZE9ubHkgfHwgdHlwZW9mIHRoaXMuZm9ybWF0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gICNpbnB1dFJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJlb3JkZXIgeWVhci1tb250aCBuYXZpZ2F0aW9uLCBhbmQgcmVuZGVyIHllYXIgZmlyc3QuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBuYXZZZWFyRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHNob3J0IGhpbnRzIHRoYXQgYXJlIHZpc2libGUgaW4gc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGUgaW5wdXRzLlxuICAgKiB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHN0cmluZ1tdID0gWydTdGFydCBkYXRlJywgJ0VuZCBkYXRlJ107XG5cbiAgLyoqXG4gICAqIFByZWRlZmluZWQgZGF0ZSByYW5nZXMgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tLlxuICAgKiBAdHlwZSBJQ2FsZW5kYXJSYW5nZXNcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlcz86IElDYWxlbmRhclJhbmdlcztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgY2FuY2VsIGJ1dHRvbiB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxuICAgKiBAdHlwZSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2RhcmsnIHwgJ2xpZ2h0JyB8IHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnc2Vjb25kYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc0NvbG9yPzogQ29sb3JzID0gJ3NlY29uZGFyeSc7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIHJhbmdlcyBidXR0b24gc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJydcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNTaXplOiAnc20nIHwgJ2xnJyB8ICcnID0gJyc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmFuZ2VzIGJ1dHRvbiB2YXJpYW50IHRvIGFuIG91dGxpbmVkIGJ1dHRvbiBvciBhIGdob3N0IGJ1dHRvbi5cbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1ZhcmlhbnQ/OiAnb3V0bGluZScgfCAnZ2hvc3QnID0gJ2dob3N0JztcblxuICAvKipcbiAgICogRGVmYXVsdCBpY29uIG9yIGNoYXJhY3RlciB0aGF0IHNlcGFyYXRlcyB0d28gZGF0ZXMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlcGFyYXRvciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYWRkaXRpb25hbCB0aW1lIHNlbGVjdGlvbiBieSBhZGRpbmcgc2VsZWN0IGJveGVzIHRvIGNob29zZSB0aW1lLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHRpbWVwaWNrZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiN0aW1lcGlja2VyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGltZXBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gcmV0dXJuIHRoaXMuI3RpbWVwaWNrZXI7XG4gIH1cblxuICAjdGltZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gZGF0ZS1waWNrZXIgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGFydERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBwcmV2RGF0ZSA9IHRoaXMuX3N0YXJ0RGF0ZSA/IG5ldyBEYXRlKHRoaXMuX3N0YXJ0RGF0ZSkgOiBudWxsO1xuICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbiAgICBpZiAocHJldkRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5fc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlQ2hhbmdlLmVtaXQodGhpcy5fc3RhcnREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhcnREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydERhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fZW5kRGF0ZSA/IG5ldyBEYXRlKHRoaXMuX2VuZERhdGUgPz8gMCkgOiBudWxsO1xuICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgaWYgKHByZXZEYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuX2VuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fZW5kRGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVDaGFuZ2UuZW1pdCh0aGlzLl9lbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZW5kRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VuZERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKSBjYWxlbmRhckRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCBEYXRlW11bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZXQgZmlyc3QgZGF5IG9mIHdlZWsuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxIChNb25kYXkpXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBmaXJzdERheU9mV2VlazogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNob3cgY2FsZW5kYXIgbmF2aWdhdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFsbG93IHJhbmdlIHNlbGVjdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJhbmdlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkYXRlRmlsdGVyPzogRGF0ZUZpbHRlclR5cGU7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLnN0YXJ0RGF0ZUlucHV0LmRpc2FibGUoKSA6IHRoaXMuc3RhcnREYXRlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLmVuZERhdGVJbnB1dC5kaXNhYmxlKCkgOiB0aGlzLmVuZERhdGVJbnB1dC5lbmFibGUoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWQ7XG4gIH1cblxuICAjZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yYW5nZSA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl92YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKG5ld1ZhbHVlLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG5ld1ZhbHVlLmVuZERhdGUgPz8gbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShuZXdWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB0aGlzLnJhbmdlID8gISEodGhpcy52YWx1ZS5zdGFydERhdGUgJiYgdGhpcy52YWx1ZS5lbmREYXRlKSA6ICEhdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gIWhhc1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIFNldCBsZW5ndGggb3IgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAdHlwZSBXZWVrZGF5Rm9ybWF0VHlwZVxuICAgKiBAZGVmYXVsdCAnc2hvcnQnXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrZGF5Rm9ybWF0OiBXZWVrZGF5Rm9ybWF0VHlwZSA9ICdzaG9ydCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoJ3BvcHBlck9wdGlvbnMnKSBwb3BwZXJqc09wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gICAgc3RyYXRlZ3k6ICdmaXhlZCdcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgZGF5cyBpbiBhZGphY2VudCBtb250aHMgc2hvd24gYmVmb3JlIG9yIGFmdGVyIHRoZSBjdXJyZW50IG1vbnRoIGFyZSBzZWxlY3RhYmxlLiBUaGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgYHNob3dBZGphY2VudERheXNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0QWRqYWNlbnREYXlzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZXMgaW4gYWRqYWNlbnQgbW9udGhzIChub24tc2VsZWN0YWJsZSkgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FkamFjZW50RGF5czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHR5cGUgb2YgZGF0ZSBzZWxlY3Rpb24gYXMgZGF5LCB3ZWVrLCBtb250aCwgb3IgeWVhci5cbiAgICogQHR5cGUgJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG4gICAqIEBkZWZhdWx0ICdkYXknXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgd2VlayBudW1iZXJzIGluIHRoZSBjYWxlbmRhci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNS4wLjBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93V2Vla051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBkaXNwbGF5ZWQgb3ZlciB3ZWVrIG51bWJlcnMgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgd2Vla051bWJlcnNMYWJlbD86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBEYXRlW10gfCB1bmRlZmluZWQ+KCk7XG5cbiAgQE91dHB1dCgpIGNhbGVuZGFyQ2VsbEhvdmVyOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNhbGVuZGFyRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICBAT3V0cHV0KCkgZW5kRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBzdGFydERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpIGNhbGVuZGFyQ29tcG9uZW50ITogQ2FsZW5kYXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUVsZW1lbnRSZWYnKSBzdGFydERhdGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUVsZW1lbnRSZWYnKSBlbmREYXRlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgcHJvdGVjdGVkIGRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVEYXRlQ2hhbmdlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAvLyB0b2RvXG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLnN0YXJ0RGF0ZSA9IG5leHQ7XG4gICAgICAvLyAgIHRoaXMub25DaGFuZ2UobmV4dCk7XG4gICAgICAvLyB9KSk7XG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLmVuZERhdGUgPSBuZXh0O1xuICAgICAgLy8gICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgLy8gfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0Jykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XG4gIHB1YmxpYyBzaG93UmFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGFydERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG5cbiAgc2V0IGVuZERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbmREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX2VuZERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgX2VuZERhdGVWYWx1ZTogc3RyaW5nID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG5cbiAgcHVibGljIGdldCBzdGFydERhdGVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGxhY2Vob2xkZXIpID8gdGhpcy5wbGFjZWhvbGRlclswXSA6IHRoaXMucGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgcHVibGljIGdldCBlbmREYXRlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnBsYWNlaG9sZGVyKSA/IHRoaXMucGxhY2Vob2xkZXJbMV0gOiB0aGlzLnBsYWNlaG9sZGVyO1xuICB9O1xuXG4gIHByaXZhdGUgbGF5b3V0Q2hhbmdlcyE6IFN1YnNjcmlwdGlvbjtcblxuICAvLyB0b2RvOiB2YWxpZGF0aW9uXG4gIHN0YXJ0RGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuc3RhcnREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZW5kRGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZW5kRGF0ZVZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LCBbXG4gICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgIC8vIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxuICAgIC8vIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSxcbiAgICAvLyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcih0aGlzLmxvY2FsZSlcbiAgXSk7XG4gIGRhdGVSYW5nZUdyb3VwITogRm9ybUdyb3VwO1xuXG4gIHNldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRTdGFydEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5wdXRTdGFydEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBzZXQgaW5wdXRFbmRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRFbmRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRFbmRIb3ZlclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dEVuZEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGRhdGVQaWNrZXJDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnZGF0ZS1waWNrZXInOiB0cnVlLFxuICAgICAgW2BkYXRlLXBpY2tlci0ke3RoaXMuc2l6ZX1gXTogdGhpcy5zaXplLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZVxuICAgIH07XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICFkYXRlIHx8ICFpc1ZhbGlkRGF0ZShkYXRlKSA/ICcnIDpcbiAgICAgICAgICAgdHlwZW9mIHRoaXMuaW5wdXREYXRlRm9ybWF0ID09PSAnZnVuY3Rpb24nID8gdGhpcy5pbnB1dERhdGVGb3JtYXQoZGF0ZSkgOlxuICAgICAgICAgICAoISF0aGlzLmZvcm1hdCAmJiAhIXRoaXMubG9jYWxlICYmIHRoaXMubG9jYWxlICE9PSAnZGVmYXVsdCcpID8gZm9ybWF0RGF0ZShkYXRlLCB0aGlzLmZvcm1hdCwgdGhpcy5sb2NhbGUpIDpcbiAgICAgICAgICAgdGhpcy50aW1lcGlja2VyID8gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSkgOlxuICAgICAgICAgICBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSk7XG4gIH1cblxuICByZWFkb25seSAjYnJlYWtwb2ludHMgPSB7XG4gICAgT25lQ2FsZW5kYXJSYW5nZXM6ICcobWluLXdpZHRoOiA0ODBweCknLFxuICAgIFR3b0NhbGVuZGFyczogJyhtYXgtd2lkdGg6IDY1MHB4KScsXG4gICAgVHdvQ2FsZW5kYXJzUmFuZ2VzOiAnKG1heC13aWR0aDogODEwcHgpJ1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VzdG9tUmFuZ2VzID0gdGhpcy5yYW5nZXMgPyBPYmplY3QuZW50cmllcyh0aGlzLnJhbmdlcykgOiBbXTtcblxuICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gdGhpcy4jYnJlYWtwb2ludHM7XG5cbiAgICB0aGlzLmxheW91dENoYW5nZXMgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcbiAgICAgIGJyZWFrcG9pbnRzLk9uZUNhbGVuZGFyUmFuZ2VzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9ICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCAmJiByZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXSkgfHwgcmVzdWx0LmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRzLlR3b0NhbGVuZGFyc107XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2hvd1JhbmdlcyA9ICFyZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuT25lQ2FsZW5kYXJSYW5nZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VzPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZShmYWxzZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0ZSddKSB7XG4gICAgICAvLyBmb3IgZGF0ZS1waWNrZXIgY29tcG9uZW50XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZSA/PyB0aGlzLmNhbGVuZGFyRGF0ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snc3RhcnREYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlID8/IHRoaXMuY2FsZW5kYXJEYXRlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5kRGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZW5kRGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydsb2NhbGUnXSkge1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRWYWx1ZVRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0UGFyc2UodmFsdWUpID8/IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPz8gbnVsbDtcbiAgfVxuXG4gIGlucHV0UGFyc2UoZGF0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmlucHV0RGF0ZVBhcnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5pbnB1dERhdGVQYXJzZShkYXRlKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZShwYXJzZWREYXRlKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldExvY2FsRGF0ZUZyb21TdHJpbmcoZGF0ZSwgdGhpcy5sb2NhbGUsIHRoaXMudGltZXBpY2tlcik7XG4gIH1cblxuICBnZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgcmV0dXJuIGN1c3RvbVJhbmdlWzBdO1xuICB9XG5cbiAgc2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2U6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpO1xuICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGN1c3RvbVJhbmdlWzFdWzBdKTtcbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoY3VzdG9tUmFuZ2VbMV1bMV0pO1xuICB9XG5cbiAgaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50OiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuY2FsZW5kYXJDZWxsSG92ZXIuZW1pdCgkZXZlbnQpO1xuICAgIGlmICghdGhpcy5zdGFydERhdGUpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnN0YXJ0RGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gJGV2ZW50O1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsIG51bGwpO1xuICAgICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9ICRldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50OiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJEYXRlLmdldFRpbWUoKSAhPT0gJGV2ZW50LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZSA/PyBudWxsO1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmdlID8geyBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmVuZERhdGUgfSA6IHRoaXMuc3RhcnREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoZGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLmVuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5kRGF0ZSA9IGRhdGUgPz8gbnVsbDtcbiAgICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgc3RhcnREYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5lbmREYXRlIH0gOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGVhcigkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gdGhpcy5jYWxlbmRhckNvbXBvbmVudC5jbGVhckRhdGVzKCk7XG4gICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG51bGwpO1xuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXRQYXJzZShpbnB1dFZhbHVlKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIHRoaXMuY2FsZW5kYXJDb21wb25lbnQuY2xlYXJEYXRlcygpO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlIDwgZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSh0aGlzLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pbnB1dFBhcnNlKGlucHV0VmFsdWUpO1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuc3RhcnREYXRlICYmIHRoaXMuc3RhcnREYXRlID4gZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKHRoaXMuZW5kRGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGZvcmJpZGRlbkRhdGUoZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiBpc0RhdGVEaXNhYmxlZChkYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSB8fCAodGhpcy5kYXRlRmlsdGVyID8gIXRoaXMuZGF0ZUZpbHRlcihkYXRlKSA6IGZhbHNlKTtcbiAgfVxuXG4gIHNldElucHV0VmFsdWUgPSAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGF0ZTogRGF0ZSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWVsZW1lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5mb3JtYXREYXRlKGRhdGUpO1xuICAgIC8vIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZUFzRGF0ZSA9IGRhdGU7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmFuZ2UgPyB7IC4uLnZhbHVlIH0gOiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTdGFydFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc3RhcnREYXRlID0gdGltZSA/PyB0aGlzLnN0YXJ0RGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUVuZFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuZERhdGUgPSB0aW1lID8/IHRoaXMuZW5kRGF0ZTtcbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBjbGFzcz1cImRhdGUtcGlja2VyIHBpY2tlclwiIFtuZ0NsYXNzXT1cImRhdGVQaWNrZXJDbGFzc2VzXCJcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlcmpzT3B0aW9uc1wiPlxuICA8ZGl2IFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkID8/IGRyb3Bkb3duLnZpc2libGVcIlxuICAgICAgIGNEcm9wZG93blRvZ2dsZVxuICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXQtZ3JvdXBcIlxuICA+XG4gICAgPGlucHV0ICNzdGFydERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInN0YXJ0RGF0ZUlucHV0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0U3RhcnRIb3ZlclZhbHVlfVwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICBbdmFsaWRdPVwicmFuZ2UgPyB1bmRlZmluZWQgOiB2YWxpZFwiXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgPlxuICAgIDxkaXYgKm5nSWY9XCJyYW5nZSAmJiBzZXBhcmF0b3IgIT09IGZhbHNlXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICA8aW5wdXQgI2VuZERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kRGF0ZUlucHV0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0RW5kSG92ZXJWYWx1ZX1cIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgIFt2YWxpZF09XCJ2YWxpZCA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcbiAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1pbnB1dFwiXG4gICAgICAgICAgIHBhdHRlcm49XCJbMS05XSpcIlxuICAgID5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5kaWNhdG9yXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1pbmRpY2F0b3JcIj48L2Rpdj5cbiAgICA8ZGl2IChjbGljayk9XCIhZGlzYWJsZWQgJiYgaGFuZGxlQ2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAqbmdJZj1cImNsZWFuZXIgJiYgc3RhcnREYXRlRWxlbWVudFJlZi52YWx1ZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuICA8ZGl2IGNEcm9wZG93bk1lbnUgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93biBweS0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWJvZHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2hvd1Jhbmdlc1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmFuZ2VzICYmIGN1c3RvbVJhbmdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1yYW5nZXNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZSlcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbVJhbmdlIG9mIGN1c3RvbVJhbmdlc1wiXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicmFuZ2VzQnV0dG9uc0NvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzaXplXT1cInJhbmdlc0J1dHRvbnNTaXplXCJcbiAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cInJhbmdlc0J1dHRvbnNWYXJpYW50XCJcbiAgICAgICAgICAgICAgICAgIGNCdXR0b24+XG4gICAgICAgICAgICB7e2N1c3RvbVJhbmdlIHwgY3VzdG9tUmFuZ2VLZXl9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8Yy1jYWxlbmRhclxuICAgICAgICAoY2FsZW5kYXJDZWxsSG92ZXIpPVwiaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgIChjYWxlbmRhckRhdGVDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZW5kRGF0ZUNoYW5nZSk9XCJoYW5kbGVFbmREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc3RhcnREYXRlQ2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2NhbGVuZGFyRGF0ZV09XCJjYWxlbmRhckRhdGVcIlxuICAgICAgICBbY2FsZW5kYXJzXT1cImlzTW9iaWxlID8gMSA6IGNhbGVuZGFyc1wiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZVwiXG4gICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgW3JhbmdlXT1cInJhbmdlXCJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGVcIlxuICAgICAgICBbbmF2WWVhckZpcnN0XT1cIm5hdlllYXJGaXJzdFwiXG4gICAgICAgIFtkYXlGb3JtYXRdPVwiZGF5Rm9ybWF0XCJcbiAgICAgICAgW3dlZWtkYXlGb3JtYXRdPVwid2Vla2RheUZvcm1hdFwiXG4gICAgICAgIFtzZWxlY3RBZGphY2VudERheXNdPVwic2VsZWN0QWRqYWNlbnREYXlzXCJcbiAgICAgICAgW3Nob3dBZGphY2VudERheXNdPVwic2hvd0FkamFjZW50RGF5c1wiXG4gICAgICAgIFtzaG93V2Vla051bWJlcl09XCJzaG93V2Vla051bWJlclwiXG4gICAgICAgIFtzZWxlY3Rpb25UeXBlXT1cInNlbGVjdGlvblR5cGVcIlxuICAgICAgICBbd2Vla051bWJlcnNMYWJlbF09XCJ3ZWVrTnVtYmVyc0xhYmVsXCJcbiAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhcnNcIlxuICAgICAgPjwvYy1jYWxlbmRhcj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmYWxzZSAmJiB0aW1lcGlja2VyXCIgY2xhc3M9XCJkYXRlLXBpY2tlci10aW1lcGlja2Vyc1wiPlxuICAgICAgICA8IS0tIHRvZG8tLT5cbiAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdGFydERhdGVcIlxuICAgICAgICAgIFt0aW1lXT1cInN0YXJ0RGF0ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICh0aW1lQ2hhbmdlKT1cImhhbmRsZVN0YXJ0VGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYy10aW1lLXBpY2tlcj5cbiAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlXCJcbiAgICAgICAgICBbdGltZV09XCJlbmREYXRlID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKHRpbWVDaGFuZ2UpPVwiaGFuZGxlRW5kVGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYy10aW1lLXBpY2tlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ0ZW1wbGF0ZXM/LmRhdGVQaWNrZXJGb290ZXJcIiBjbGFzcz1cImRhdGUtcGlja2VyLWZvb3RlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlcz8uZGF0ZVBpY2tlckZvb3RlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZHJvcGRvd259XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2MtZHJvcGRvd24+XG4iXX0=
700
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RixPQUFPLEVBRUwsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFNeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxt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Z0IsRUFBRTtnQkFFN0IsVUFBVTtzQkFBbEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBY2xDLEtBQUs7c0JBRFIsS0FBSztnQkFnQ0csYUFBYTtzQkFBckIsS0FBSztnQkFNa0IsZUFBZTtzQkFBdEMsS0FBSzt1QkFBQyxlQUFlO2dCQVVrQixrQkFBa0I7c0JBQXpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUUUsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVE3QixhQUFhO3NCQUFyQixLQUFLO2dCQVFrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVE3QixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRWEsV0FBVztzQkFBN0IsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHMkIsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDQSxpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUcrQixnQkFBZ0I7c0JBQTVFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQXNCakMsTUFBTTtzQkFBL0IsWUFBWTt1QkFBQyxVQUFVO2dCQTRFcEIsaUJBQWlCO3NCQURwQixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IGdldExvY2FsRGF0ZUZyb21TdHJpbmcsIGlzRGF0ZURpc2FibGVkLCBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnV0aWxzJztcbmltcG9ydCB7IERhdGVGaWx0ZXJUeXBlLCBEYXlGb3JtYXRUeXBlLCBXZWVrZGF5Rm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jYWxlbmRhcic7XG5pbXBvcnQgeyBDb2xvcnMgfSBmcm9tICcuLi8uLi9jb3JldWkudHlwZXMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQsIERyb3Bkb3duTWVudURpcmVjdGl2ZSwgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kcm9wZG93bic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbERpcmVjdGl2ZSwgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cFRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RpbWUtcGlja2VyJztcbmltcG9ydCB7IEN1c3RvbVJhbmdlS2V5UGlwZSB9IGZyb20gJy4vY3VzdG9tLXJhbmdlLWtleS5waXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FsZW5kYXJSYW5nZXMge1xuICBba2V5OiBzdHJpbmddOiBEYXRlW107XG59XG5cbmV4cG9ydCB0eXBlIFRDdXN0b21SYW5nZSA9IFtzdHJpbmcsIERhdGVbXV1cblxuLyoqIE11c3QgYmUgYSB2YWxpZCBkYXRlIHN0cmluZyAqL1xuLy8gdG9kbzogdmFsaWRhdGlvblxuLy8gZXhwb3J0IGZ1bmN0aW9uIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKGxvY2FsZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuLy8gICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbi8vICAgICAvLyBjb25zdCB2YWxpZERhdGUgPSAhaXNOYU4oRGF0ZS5wYXJzZShjb250cm9sLnZhbHVlKSk7XG4vLyAgICAgc3RyaW5nVG9EYXRlQ29udmVydChjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IGRhdGVTaGltID0gY3Z0RGF0ZShjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xuLy8gICAgIC8vIEB0cy1pZ25vcmVcbi8vICAgICAvLyBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGRhdGVTaGltLnllYXIsIGRhdGVTaGltLm1vbnRoLCBkYXRlU2hpbS5kYXkpKVxuLy8gICAgIGNvbnNvbGUubG9nKCdkYXRlU2hpbScsIGRhdGVTaGltLCBsb2NhbGUpO1xuLy8gICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpO1xuLy8gICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcicsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIHZhbGlkRGF0ZSk7XG4vLyAgICAgcmV0dXJuIHZhbGlkRGF0ZSA/IHsgaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3I6IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcbi8vICAgfTtcbi8vIH1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1kYXRlLXJhbmdlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnY0RhdGVSYW5nZVBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdGb3JPZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25NZW51RGlyZWN0aXZlLFxuICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgSW5wdXRHcm91cFRleHREaXJlY3RpdmUsXG4gICAgQ3VzdG9tUmFuZ2VLZXlQaXBlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAZGVmYXVsdCAnbnVtZXJpYydcbiAgICogQHR5cGUgRGF5Rm9ybWF0VHlwZVxuICAgKi9cbiAgQElucHV0KCkgZGF5Rm9ybWF0OiBEYXlGb3JtYXRUeXBlID0gJ251bWVyaWMnO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNhbGVuZGFycyB0aGF0IHJlbmRlciBvbiBkZXNrdG9wIGRldmljZXMuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjYWxlbmRhcnM6IG51bWJlciA9IDI7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgY2xlYW5lciBidXR0b24uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFuZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGRyb3Bkb3duIHNob3VsZCBiZSBjbG9zZWQgYWZ0ZXIgdmFsdWUgc2V0dGluZy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IGRhdGUgZm9ybWF0LlxuICAgKiBXZSB1c2UgQW5ndWxhciBmb3JtYXREYXRlKCkgZnVuY3Rpb24sIHNlZTpcbiAgICogLSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9mb3JtYXREYXRlXG4gICAqIC0gaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vRGF0ZVBpcGUjcHJlLWRlZmluZWQtZm9ybWF0LW9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBpbnB1dCBpbmRpY2F0b3IuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluZGljYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgaW50byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjdXN0b20gZm9ybWF0LlxuICAgKiBAc2luY2UgdjUuMC4wXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dERhdGVGb3JtYXQ/OiAoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gcGFyc2UgdGhlIGlucHV0IHZhbHVlIGludG8gYSB2YWxpZCBEYXRlIG9iamVjdC5cbiAgICogQHNpbmNlIHY1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgaW5wdXREYXRlUGFyc2U/OiAoZGF0ZTogc3RyaW5nIHwgRGF0ZSkgPT4gRGF0ZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBpbnB1dFJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy4jaW5wdXRSZWFkT25seSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlucHV0UmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2lucHV0UmVhZE9ubHkgfHwgdHlwZW9mIHRoaXMuZm9ybWF0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gICNpbnB1dFJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJlb3JkZXIgeWVhci1tb250aCBuYXZpZ2F0aW9uLCBhbmQgcmVuZGVyIHllYXIgZmlyc3QuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBuYXZZZWFyRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHNob3J0IGhpbnRzIHRoYXQgYXJlIHZpc2libGUgaW4gc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGUgaW5wdXRzLlxuICAgKiB0eXBlIHN0cmluZ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHN0cmluZ1tdID0gWydTdGFydCBkYXRlJywgJ0VuZCBkYXRlJ107XG5cbiAgLyoqXG4gICAqIFByZWRlZmluZWQgZGF0ZSByYW5nZXMgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tLlxuICAgKiBAdHlwZSBJQ2FsZW5kYXJSYW5nZXNcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlcz86IElDYWxlbmRhclJhbmdlcztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgY2FuY2VsIGJ1dHRvbiB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxuICAgKiBAdHlwZSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2RhcmsnIHwgJ2xpZ2h0JyB8IHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnc2Vjb25kYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc0NvbG9yPzogQ29sb3JzID0gJ3NlY29uZGFyeSc7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIHJhbmdlcyBidXR0b24gc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJydcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNTaXplOiAnc20nIHwgJ2xnJyB8ICcnID0gJyc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmFuZ2VzIGJ1dHRvbiB2YXJpYW50IHRvIGFuIG91dGxpbmVkIGJ1dHRvbiBvciBhIGdob3N0IGJ1dHRvbi5cbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1ZhcmlhbnQ/OiAnb3V0bGluZScgfCAnZ2hvc3QnID0gJ2dob3N0JztcblxuICAvKipcbiAgICogRGVmYXVsdCBpY29uIG9yIGNoYXJhY3RlciB0aGF0IHNlcGFyYXRlcyB0d28gZGF0ZXMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlcGFyYXRvciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYWRkaXRpb25hbCB0aW1lIHNlbGVjdGlvbiBieSBhZGRpbmcgc2VsZWN0IGJveGVzIHRvIGNob29zZSB0aW1lLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHRpbWVwaWNrZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiN0aW1lcGlja2VyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGltZXBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gcmV0dXJuIHRoaXMuI3RpbWVwaWNrZXI7XG4gIH1cblxuICAjdGltZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gZGF0ZS1waWNrZXIgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdGFydERhdGUodmFsdWUpIHtcbiAgICBjb25zdCBwcmV2RGF0ZSA9IHRoaXMuX3N0YXJ0RGF0ZSA/IG5ldyBEYXRlKHRoaXMuX3N0YXJ0RGF0ZSkgOiBudWxsO1xuICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbiAgICBpZiAocHJldkRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5fc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlQ2hhbmdlLmVtaXQodGhpcy5fc3RhcnREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RhcnREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydERhdGU7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZW5kRGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHByZXZEYXRlID0gdGhpcy5fZW5kRGF0ZSA/IG5ldyBEYXRlKHRoaXMuX2VuZERhdGUgPz8gMCkgOiBudWxsO1xuICAgIHRoaXMuX2VuZERhdGUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgaWYgKHByZXZEYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuX2VuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy5fZW5kRGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVDaGFuZ2UuZW1pdCh0aGlzLl9lbmREYXRlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZW5kRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VuZERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICBASW5wdXQoKSBjYWxlbmRhckRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCBEYXRlW11bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZXQgZmlyc3QgZGF5IG9mIHdlZWsuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxIChNb25kYXkpXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBmaXJzdERheU9mV2VlazogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNob3cgY2FsZW5kYXIgbmF2aWdhdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFsbG93IHJhbmdlIHNlbGVjdGlvbi5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJhbmdlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBkYXRlRmlsdGVyPzogRGF0ZUZpbHRlclR5cGU7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuI2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLnN0YXJ0RGF0ZUlucHV0LmRpc2FibGUoKSA6IHRoaXMuc3RhcnREYXRlSW5wdXQuZW5hYmxlKCk7XG4gICAgdGhpcy4jZGlzYWJsZWQgPyB0aGlzLmVuZERhdGVJbnB1dC5kaXNhYmxlKCkgOiB0aGlzLmVuZERhdGVJbnB1dC5lbmFibGUoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWQ7XG4gIH1cblxuICAjZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yYW5nZSA/IHsgLi4udmFsdWUgfSA6IHZhbHVlO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl92YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKG5ld1ZhbHVlLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG5ld1ZhbHVlLmVuZERhdGUgPz8gbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShuZXdWYWx1ZSA/PyBudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB0aGlzLnJhbmdlID8gISEodGhpcy52YWx1ZS5zdGFydERhdGUgJiYgdGhpcy52YWx1ZS5lbmREYXRlKSA6ICEhdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gIWhhc1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIFNldCBsZW5ndGggb3IgZm9ybWF0IG9mIGRheSBuYW1lLlxuICAgKiBAdHlwZSBXZWVrZGF5Rm9ybWF0VHlwZVxuICAgKiBAZGVmYXVsdCAnc2hvcnQnXG4gICAqL1xuICBASW5wdXQoKSB3ZWVrZGF5Rm9ybWF0OiBXZWVrZGF5Rm9ybWF0VHlwZSA9ICdzaG9ydCc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBvcHBlciBPcHRpb25zIG9iamVjdFxuICAgKiBAdHlwZSBQYXJ0aWFsPE9wdGlvbnM+XG4gICAqL1xuICBASW5wdXQoJ3BvcHBlck9wdGlvbnMnKSBwb3BwZXJqc09wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgZGF5cyBpbiBhZGphY2VudCBtb250aHMgc2hvd24gYmVmb3JlIG9yIGFmdGVyIHRoZSBjdXJyZW50IG1vbnRoIGFyZSBzZWxlY3RhYmxlLiBUaGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgYHNob3dBZGphY2VudERheXNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2VsZWN0QWRqYWNlbnREYXlzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZXMgaW4gYWRqYWNlbnQgbW9udGhzIChub24tc2VsZWN0YWJsZSkgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAc2luY2UgNC40LjEwXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FkamFjZW50RGF5czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHR5cGUgb2YgZGF0ZSBzZWxlY3Rpb24gYXMgZGF5LCB3ZWVrLCBtb250aCwgb3IgeWVhci5cbiAgICogQHR5cGUgJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG4gICAqIEBkZWZhdWx0ICdkYXknXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFNldCB3aGV0aGVyIHRvIGRpc3BsYXkgd2VlayBudW1iZXJzIGluIHRoZSBjYWxlbmRhci5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNS4wLjBcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93V2Vla051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBkaXNwbGF5ZWQgb3ZlciB3ZWVrIG51bWJlcnMgaW4gdGhlIGNhbGVuZGFyLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBzaW5jZSA1LjAuMFxuICAgKi9cbiAgQElucHV0KCkgd2Vla051bWJlcnNMYWJlbD86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBEYXRlW10gfCB1bmRlZmluZWQ+KCk7XG5cbiAgQE91dHB1dCgpIGNhbGVuZGFyQ2VsbEhvdmVyOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNhbGVuZGFyRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICBAT3V0cHV0KCkgZW5kRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBzdGFydERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQpIGNhbGVuZGFyQ29tcG9uZW50ITogQ2FsZW5kYXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUVsZW1lbnRSZWYnKSBzdGFydERhdGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUVsZW1lbnRSZWYnKSBlbmREYXRlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgcHJvdGVjdGVkIGRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVEYXRlQ2hhbmdlKHN1YnNjcmliZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAvLyB0b2RvXG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLnN0YXJ0RGF0ZSA9IG5leHQ7XG4gICAgICAvLyAgIHRoaXMub25DaGFuZ2UobmV4dCk7XG4gICAgICAvLyB9KSk7XG4gICAgICAvLyB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGFydERhdGVDaGFuZ2Uuc3Vic2NyaWJlKG5leHQgPT4ge1xuICAgICAgLy8gICB0aGlzLmVuZERhdGUgPSBuZXh0O1xuICAgICAgLy8gICB0aGlzLm9uQ2hhbmdlKG5leHQpO1xuICAgICAgLy8gfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGVDaGFuZ2VTdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0Jykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XG4gIHB1YmxpYyBzaG93UmFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGFydERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG5cbiAgc2V0IGVuZERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbmREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX2VuZERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbmREYXRlVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgX2VuZERhdGVWYWx1ZTogc3RyaW5nID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG5cbiAgcHVibGljIGdldCBzdGFydERhdGVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGxhY2Vob2xkZXIpID8gdGhpcy5wbGFjZWhvbGRlclswXSA6IHRoaXMucGxhY2Vob2xkZXI7XG4gIH07XG5cbiAgcHVibGljIGdldCBlbmREYXRlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnBsYWNlaG9sZGVyKSA/IHRoaXMucGxhY2Vob2xkZXJbMV0gOiB0aGlzLnBsYWNlaG9sZGVyO1xuICB9O1xuXG4gIHByaXZhdGUgbGF5b3V0Q2hhbmdlcyE6IFN1YnNjcmlwdGlvbjtcblxuICAvLyB0b2RvOiB2YWxpZGF0aW9uXG4gIHN0YXJ0RGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuc3RhcnREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZW5kRGF0ZUlucHV0ID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZW5kRGF0ZVZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LCBbXG4gICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgIC8vIFZhbGlkYXRvcnMubWluTGVuZ3RoKDgpLFxuICAgIC8vIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSxcbiAgICAvLyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcih0aGlzLmxvY2FsZSlcbiAgXSk7XG4gIGRhdGVSYW5nZUdyb3VwITogRm9ybUdyb3VwO1xuXG4gIHNldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRTdGFydEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0U3RhcnRIb3ZlclZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5wdXRTdGFydEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBzZXQgaW5wdXRFbmRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRFbmRIb3ZlclZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5wdXRFbmRIb3ZlclZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dEVuZEhvdmVyVmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGRhdGVQaWNrZXJDbGFzc2VzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnZGF0ZS1waWNrZXInOiB0cnVlLFxuICAgICAgW2BkYXRlLXBpY2tlci0ke3RoaXMuc2l6ZX1gXTogdGhpcy5zaXplLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZVxuICAgIH07XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICFkYXRlIHx8ICFpc1ZhbGlkRGF0ZShkYXRlKSA/ICcnIDpcbiAgICAgICAgICAgdHlwZW9mIHRoaXMuaW5wdXREYXRlRm9ybWF0ID09PSAnZnVuY3Rpb24nID8gdGhpcy5pbnB1dERhdGVGb3JtYXQoZGF0ZSkgOlxuICAgICAgICAgICAoISF0aGlzLmZvcm1hdCAmJiAhIXRoaXMubG9jYWxlICYmIHRoaXMubG9jYWxlICE9PSAnZGVmYXVsdCcpID8gZm9ybWF0RGF0ZShkYXRlLCB0aGlzLmZvcm1hdCwgdGhpcy5sb2NhbGUpIDpcbiAgICAgICAgICAgdGhpcy50aW1lcGlja2VyID8gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSkgOlxuICAgICAgICAgICBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSk7XG4gIH1cblxuICByZWFkb25seSAjYnJlYWtwb2ludHMgPSB7XG4gICAgT25lQ2FsZW5kYXJSYW5nZXM6ICcobWluLXdpZHRoOiA0ODBweCknLFxuICAgIFR3b0NhbGVuZGFyczogJyhtYXgtd2lkdGg6IDY1MHB4KScsXG4gICAgVHdvQ2FsZW5kYXJzUmFuZ2VzOiAnKG1heC13aWR0aDogODEwcHgpJ1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VzdG9tUmFuZ2VzID0gdGhpcy5yYW5nZXMgPyBPYmplY3QuZW50cmllcyh0aGlzLnJhbmdlcykgOiBbXTtcblxuICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gdGhpcy4jYnJlYWtwb2ludHM7XG5cbiAgICB0aGlzLmxheW91dENoYW5nZXMgPSB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFtcbiAgICAgIGJyZWFrcG9pbnRzLk9uZUNhbGVuZGFyUmFuZ2VzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzLFxuICAgICAgYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0Lm1hdGNoZXMpIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9ICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCAmJiByZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuVHdvQ2FsZW5kYXJzUmFuZ2VzXSkgfHwgcmVzdWx0LmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRzLlR3b0NhbGVuZGFyc107XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJhbmdlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2hvd1JhbmdlcyA9ICFyZXN1bHQuYnJlYWtwb2ludHNbYnJlYWtwb2ludHMuT25lQ2FsZW5kYXJSYW5nZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VzPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlRGF0ZUNoYW5nZShmYWxzZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0ZSddKSB7XG4gICAgICAvLyBmb3IgZGF0ZS1waWNrZXIgY29tcG9uZW50XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZSA/PyB0aGlzLmNhbGVuZGFyRGF0ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snc3RhcnREYXRlJ10/LmN1cnJlbnRWYWx1ZSkgPz8gbnVsbDtcbiAgICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlID8/IHRoaXMuY2FsZW5kYXJEYXRlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW5kRGF0ZSddKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jb252ZXJ0VmFsdWVUb0RhdGUoY2hhbmdlc1snZW5kRGF0ZSddPy5jdXJyZW50VmFsdWUpID8/IG51bGw7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydsb2NhbGUnXSkge1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmVuZERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRWYWx1ZVRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0UGFyc2UodmFsdWUpID8/IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPz8gbnVsbDtcbiAgfVxuXG4gIGlucHV0UGFyc2UoZGF0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmlucHV0RGF0ZVBhcnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5pbnB1dERhdGVQYXJzZShkYXRlKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZShwYXJzZWREYXRlKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldExvY2FsRGF0ZUZyb21TdHJpbmcoZGF0ZSwgdGhpcy5sb2NhbGUsIHRoaXMudGltZXBpY2tlcik7XG4gIH1cblxuICBnZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgcmV0dXJuIGN1c3RvbVJhbmdlWzBdO1xuICB9XG5cbiAgc2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2U6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpO1xuICAgIHRoaXMuaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGN1c3RvbVJhbmdlWzFdWzBdKTtcbiAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UoY3VzdG9tUmFuZ2VbMV1bMV0pO1xuICB9XG5cbiAgaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50OiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuY2FsZW5kYXJDZWxsSG92ZXIuZW1pdCgkZXZlbnQpO1xuICAgIGlmICghdGhpcy5zdGFydERhdGUpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnN0YXJ0RGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gJGV2ZW50O1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsIG51bGwpO1xuICAgICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZUVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9ICRldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50OiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJEYXRlLmdldFRpbWUoKSAhPT0gJGV2ZW50LmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5jYWxlbmRhckRhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuc3RhcnREYXRlPy5nZXRUaW1lKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZSA/PyBudWxsO1xuICAgICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJhbmdlID8geyBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmVuZERhdGUgfSA6IHRoaXMuc3RhcnREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZTogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAoZGF0ZT8uZ2V0VGltZSgpICE9PSB0aGlzLmVuZERhdGU/LmdldFRpbWUoKSkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5kRGF0ZSA9IGRhdGUgPz8gbnVsbDtcbiAgICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZW5kRGF0ZSk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5yYW5nZSA/IHsgc3RhcnREYXRlOiB0aGlzLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5lbmREYXRlIH0gOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDbGVhcigkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gdGhpcy5jYWxlbmRhckNvbXBvbmVudC5jbGVhckRhdGVzKCk7XG4gICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKG51bGwpO1xuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuaW5wdXRQYXJzZShpbnB1dFZhbHVlKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIHRoaXMuY2FsZW5kYXJDb21wb25lbnQuY2xlYXJEYXRlcygpO1xuICAgICAgdGhpcy5oYW5kbGVTdGFydERhdGVDaGFuZ2UobnVsbCk7XG4gICAgICB0aGlzLmhhbmRsZUVuZERhdGVDaGFuZ2UobnVsbCk7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlIDwgZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSh0aGlzLnN0YXJ0RGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pbnB1dFBhcnNlKGlucHV0VmFsdWUpO1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuc3RhcnREYXRlICYmIHRoaXMuc3RhcnREYXRlID4gZGF0ZSkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFbmREYXRlQ2hhbmdlKHRoaXMuZW5kRGF0ZSA/PyBudWxsKTtcbiAgfVxuXG4gIGZvcmJpZGRlbkRhdGUoZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiBpc0RhdGVEaXNhYmxlZChkYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSB8fCAodGhpcy5kYXRlRmlsdGVyID8gIXRoaXMuZGF0ZUZpbHRlcihkYXRlKSA6IGZhbHNlKTtcbiAgfVxuXG4gIHNldElucHV0VmFsdWUgPSAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGF0ZTogRGF0ZSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWVsZW1lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5mb3JtYXREYXRlKGRhdGUpO1xuICAgIC8vIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZUFzRGF0ZSA9IGRhdGU7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmFuZ2UgPyB7IC4uLnZhbHVlIH0gOiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTdGFydFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc3RhcnREYXRlID0gdGltZSA/PyB0aGlzLnN0YXJ0RGF0ZTtcbiAgfVxuXG4gIGhhbmRsZUVuZFRpbWVDaGFuZ2UodGltZTogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuZERhdGUgPSB0aW1lID8/IHRoaXMuZW5kRGF0ZTtcbiAgfVxufVxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBjbGFzcz1cImRhdGUtcGlja2VyIHBpY2tlclwiIFtuZ0NsYXNzXT1cImRhdGVQaWNrZXJDbGFzc2VzXCJcbiAgICAgICAgICAgIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtwb3BwZXJPcHRpb25zXT1cInBvcHBlcmpzT3B0aW9uc1wiPlxuICA8ZGl2IFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkID8/IGRyb3Bkb3duLnZpc2libGVcIlxuICAgICAgIGNEcm9wZG93blRvZ2dsZVxuICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItaW5wdXQtZ3JvdXBcIlxuICA+XG4gICAgPGlucHV0ICNzdGFydERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU3RhcnREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInN0YXJ0RGF0ZUlucHV0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0U3RhcnRIb3ZlclZhbHVlfVwiXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzdGFydERhdGVQbGFjZWhvbGRlclwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgICAgICAgICBbdmFsaWRdPVwicmFuZ2UgPyB1bmRlZmluZWQgOiB2YWxpZFwiXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWlucHV0XCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgPlxuICAgIDxkaXYgKm5nSWY9XCJyYW5nZSAmJiBzZXBhcmF0b3IgIT09IGZhbHNlXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICA8aW5wdXQgI2VuZERhdGVFbGVtZW50UmVmXG4gICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kRGF0ZUlucHV0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0RW5kSG92ZXJWYWx1ZX1cIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZW5kRGF0ZVBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlucHV0UmVhZE9ubHkgPz8gbnVsbFwiXG4gICAgICAgICAgIFt2YWxpZF09XCJ2YWxpZCA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcbiAgICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1pbnB1dFwiXG4gICAgICAgICAgIHBhdHRlcm49XCJbMS05XSpcIlxuICAgID5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5kaWNhdG9yXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1pbmRpY2F0b3JcIj48L2Rpdj5cbiAgICA8ZGl2IChjbGljayk9XCIhZGlzYWJsZWQgJiYgaGFuZGxlQ2xlYXIoJGV2ZW50KVwiXG4gICAgICAgICAqbmdJZj1cImNsZWFuZXIgJiYgc3RhcnREYXRlRWxlbWVudFJlZi52YWx1ZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1jbGVhbmVyXCIgcm9sZT1cImJ1dHRvblwiPlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuICA8ZGl2IGNEcm9wZG93bk1lbnUgY2xhc3M9XCJkYXRlLXBpY2tlci1kcm9wZG93biBweS0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWJvZHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2hvd1Jhbmdlc1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmFuZ2VzICYmIGN1c3RvbVJhbmdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJkYXRlLXBpY2tlci1yYW5nZXNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZSlcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1c3RvbVJhbmdlIG9mIGN1c3RvbVJhbmdlc1wiXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicmFuZ2VzQnV0dG9uc0NvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzaXplXT1cInJhbmdlc0J1dHRvbnNTaXplXCJcbiAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cInJhbmdlc0J1dHRvbnNWYXJpYW50XCJcbiAgICAgICAgICAgICAgICAgIGNCdXR0b24+XG4gICAgICAgICAgICB7e2N1c3RvbVJhbmdlIHwgY3VzdG9tUmFuZ2VLZXl9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8Yy1jYWxlbmRhclxuICAgICAgICAoY2FsZW5kYXJDZWxsSG92ZXIpPVwiaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgIChjYWxlbmRhckRhdGVDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZW5kRGF0ZUNoYW5nZSk9XCJoYW5kbGVFbmREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc3RhcnREYXRlQ2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2NhbGVuZGFyRGF0ZV09XCJjYWxlbmRhckRhdGVcIlxuICAgICAgICBbY2FsZW5kYXJzXT1cImlzTW9iaWxlID8gMSA6IGNhbGVuZGFyc1wiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZVwiXG4gICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgW3JhbmdlXT1cInJhbmdlXCJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGVcIlxuICAgICAgICBbbmF2WWVhckZpcnN0XT1cIm5hdlllYXJGaXJzdFwiXG4gICAgICAgIFtkYXlGb3JtYXRdPVwiZGF5Rm9ybWF0XCJcbiAgICAgICAgW3dlZWtkYXlGb3JtYXRdPVwid2Vla2RheUZvcm1hdFwiXG4gICAgICAgIFtzZWxlY3RBZGphY2VudERheXNdPVwic2VsZWN0QWRqYWNlbnREYXlzXCJcbiAgICAgICAgW3Nob3dBZGphY2VudERheXNdPVwic2hvd0FkamFjZW50RGF5c1wiXG4gICAgICAgIFtzaG93V2Vla051bWJlcl09XCJzaG93V2Vla051bWJlclwiXG4gICAgICAgIFtzZWxlY3Rpb25UeXBlXT1cInNlbGVjdGlvblR5cGVcIlxuICAgICAgICBbd2Vla051bWJlcnNMYWJlbF09XCJ3ZWVrTnVtYmVyc0xhYmVsXCJcbiAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhcnNcIlxuICAgICAgPjwvYy1jYWxlbmRhcj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmYWxzZSAmJiB0aW1lcGlja2VyXCIgY2xhc3M9XCJkYXRlLXBpY2tlci10aW1lcGlja2Vyc1wiPlxuICAgICAgICA8IS0tIHRvZG8tLT5cbiAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdGFydERhdGVcIlxuICAgICAgICAgIFt0aW1lXT1cInN0YXJ0RGF0ZSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICh0aW1lQ2hhbmdlKT1cImhhbmRsZVN0YXJ0VGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYy10aW1lLXBpY2tlcj5cbiAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlXCJcbiAgICAgICAgICBbdGltZV09XCJlbmREYXRlID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgKHRpbWVDaGFuZ2UpPVwiaGFuZGxlRW5kVGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYy10aW1lLXBpY2tlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ0ZW1wbGF0ZXM/LmRhdGVQaWNrZXJGb290ZXJcIiBjbGFzcz1cImRhdGUtcGlja2VyLWZvb3RlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlcz8uZGF0ZVBpY2tlckZvb3RlcjsgY29udGV4dDogeyRpbXBsaWNpdDogZHJvcGRvd259XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2MtZHJvcGRvd24+XG4iXX0=