igniteui-angular 18.1.16 → 18.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/calendar/calendar.component.mjs +3 -10
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
- package/esm2022/lib/combo/combo.common.mjs +17 -7
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/date-common/picker-base.directive.mjs +12 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +10 -7
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +9 -2
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +7 -7
- package/esm2022/lib/grids/grid-base.directive.mjs +11 -3
- package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
- package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +5 -5
- package/esm2022/lib/slider/slider.component.mjs +4 -38
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +55 -2
- package/esm2022/lib/time-picker/time-picker.component.mjs +4 -1
- package/fesm2022/igniteui-angular.mjs +133 -79
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -0
- package/lib/date-common/picker-base.directive.d.ts +6 -0
- package/lib/date-picker/date-picker.component.d.ts +2 -0
- package/lib/date-range-picker/date-range-picker.component.d.ts +2 -0
- package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +1 -1
- package/lib/grids/grid-base.directive.d.ts +3 -1
- package/lib/grids/selection/selection.service.d.ts +1 -1
- package/lib/slider/slider.component.d.ts +0 -16
- package/lib/slider/thumb/thumb-slider.component.d.ts +12 -1
- package/lib/time-picker/time-picker.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -417,7 +417,7 @@ export class IgxDaysViewComponent extends IgxCalendarBaseDirective {
|
|
|
417
417
|
provide: NG_VALUE_ACCESSOR,
|
|
418
418
|
useExisting: IgxDaysViewComponent
|
|
419
419
|
},
|
|
420
|
-
], viewQueries: [{ propertyName: "dates", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: "<div\n role=\"row\"\n class=\"igx-days-view__row\"\n [title]=\"weekNumberHeader.long | titlecase\"\n>\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>\n <i>{{ weekNumberHeader.short | titlecase }}</i>\n </span>\n </div>\n <span\n role=\"columnheader\"\n [attr.aria-label]=\"dayName.long\"\n *ngFor=\"let dayName of weekHeaderLabels\"\n class=\"igx-days-view__label\"\n >\n <span class=\"igx-days-view__label-inner\">\n {{ dayName.formatted | titlecase }}\n </span>\n </span>\n</div>\n\n<div\n *ngFor=\"\n let week of monthWeeks;\n last as isLast;\n index as i;\n trackBy: rowTracker\n \"\n class=\"igx-days-view__row\"\n role=\"row\"\n>\n <div\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__date igx-days-view__date--week-number\"\n >\n <span\n role=\"rowheader\"\n class=\"igx-days-view__date-inner igx-days-view__date-inner--week-number\"\n >\n {{ getWeekNumber(week[0]) }}\n </span>\n </div>\n\n <igx-day-item\n #item\n *ngFor=\"let day of week; trackBy: dateTracker\"\n class=\"igx-days-view__date\"\n role=\"gridcell\"\n [attr.id]=\"item.isCurrentMonth && day.timestamp\"\n [attr.aria-selected]=\"isSelected(day)\"\n [attr.aria-disabled]=\"isDateDisabled(day.native)\"\n [attr.aria-label]=\"\n isFirstInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_start\n : isLastInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_end\n : day.native.toDateString()\n \"\n [date]=\"day\"\n [viewDate]=\"viewDate\"\n [selection]=\"selection\"\n [selected]=\"isSelected(day)\"\n [isActive]=\"isActiveDate(day)\"\n [isLastInRange]=\"isLastInRange(day)\"\n [isFirstInRange]=\"isFirstInRange(day)\"\n [isWithinRange]=\"isWithinRange(day.native, true)\"\n [isWithinPreviewRange]=\"isWithinPreviewRange(day.native)\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideLeadingDays]=\"hideLeadingDays\"\n [hideTrailingDays]=\"hideTrailingDays\"\n [attr.tabindex]=\"-1\"\n (
|
|
420
|
+
], viewQueries: [{ propertyName: "dates", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: "<div\n role=\"row\"\n class=\"igx-days-view__row\"\n [title]=\"weekNumberHeader.long | titlecase\"\n>\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>\n <i>{{ weekNumberHeader.short | titlecase }}</i>\n </span>\n </div>\n <span\n role=\"columnheader\"\n [attr.aria-label]=\"dayName.long\"\n *ngFor=\"let dayName of weekHeaderLabels\"\n class=\"igx-days-view__label\"\n >\n <span class=\"igx-days-view__label-inner\">\n {{ dayName.formatted | titlecase }}\n </span>\n </span>\n</div>\n\n<div\n *ngFor=\"\n let week of monthWeeks;\n last as isLast;\n index as i;\n trackBy: rowTracker\n \"\n class=\"igx-days-view__row\"\n role=\"row\"\n>\n <div\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__date igx-days-view__date--week-number\"\n >\n <span\n role=\"rowheader\"\n class=\"igx-days-view__date-inner igx-days-view__date-inner--week-number\"\n >\n {{ getWeekNumber(week[0]) }}\n </span>\n </div>\n\n <igx-day-item\n #item\n *ngFor=\"let day of week; trackBy: dateTracker\"\n class=\"igx-days-view__date\"\n role=\"gridcell\"\n [attr.id]=\"item.isCurrentMonth && day.timestamp\"\n [attr.aria-selected]=\"isSelected(day)\"\n [attr.aria-disabled]=\"isDateDisabled(day.native)\"\n [attr.aria-label]=\"\n isFirstInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_start\n : isLastInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_end\n : day.native.toDateString()\n \"\n [date]=\"day\"\n [viewDate]=\"viewDate\"\n [selection]=\"selection\"\n [selected]=\"isSelected(day)\"\n [isActive]=\"isActiveDate(day)\"\n [isLastInRange]=\"isLastInRange(day)\"\n [isFirstInRange]=\"isFirstInRange(day)\"\n [isWithinRange]=\"isWithinRange(day.native, true)\"\n [isWithinPreviewRange]=\"isWithinPreviewRange(day.native)\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideLeadingDays]=\"hideLeadingDays\"\n [hideTrailingDays]=\"hideTrailingDays\"\n [attr.tabindex]=\"-1\"\n (click)=\"handleDateClick(item)\"\n (mouseEnter)=\"changePreviewRange(day.native)\"\n (mouseLeave)=\"clearPreviewRange()\"\n >\n {{ formattedDate(day.native) }}\n </igx-day-item>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDayItemComponent, selector: "igx-day-item", inputs: ["date", "viewDate", "selection", "selected", "disabledDates", "specialDates", "hideOutsideDays", "isLastInRange", "isFirstInRange", "isWithinRange", "isWithinPreviewRange", "hideLeadingDays", "hideTrailingDays", "isActive"], outputs: ["dateSelection", "mouseEnter", "mouseLeave", "mouseDown"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
421
421
|
}
|
|
422
422
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxDaysViewComponent, decorators: [{
|
|
423
423
|
type: Component,
|
|
@@ -427,7 +427,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
427
427
|
provide: NG_VALUE_ACCESSOR,
|
|
428
428
|
useExisting: IgxDaysViewComponent
|
|
429
429
|
},
|
|
430
|
-
], selector: 'igx-days-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, NgFor, IgxDayItemComponent, TitleCasePipe], template: "<div\n role=\"row\"\n class=\"igx-days-view__row\"\n [title]=\"weekNumberHeader.long | titlecase\"\n>\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>\n <i>{{ weekNumberHeader.short | titlecase }}</i>\n </span>\n </div>\n <span\n role=\"columnheader\"\n [attr.aria-label]=\"dayName.long\"\n *ngFor=\"let dayName of weekHeaderLabels\"\n class=\"igx-days-view__label\"\n >\n <span class=\"igx-days-view__label-inner\">\n {{ dayName.formatted | titlecase }}\n </span>\n </span>\n</div>\n\n<div\n *ngFor=\"\n let week of monthWeeks;\n last as isLast;\n index as i;\n trackBy: rowTracker\n \"\n class=\"igx-days-view__row\"\n role=\"row\"\n>\n <div\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__date igx-days-view__date--week-number\"\n >\n <span\n role=\"rowheader\"\n class=\"igx-days-view__date-inner igx-days-view__date-inner--week-number\"\n >\n {{ getWeekNumber(week[0]) }}\n </span>\n </div>\n\n <igx-day-item\n #item\n *ngFor=\"let day of week; trackBy: dateTracker\"\n class=\"igx-days-view__date\"\n role=\"gridcell\"\n [attr.id]=\"item.isCurrentMonth && day.timestamp\"\n [attr.aria-selected]=\"isSelected(day)\"\n [attr.aria-disabled]=\"isDateDisabled(day.native)\"\n [attr.aria-label]=\"\n isFirstInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_start\n : isLastInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_end\n : day.native.toDateString()\n \"\n [date]=\"day\"\n [viewDate]=\"viewDate\"\n [selection]=\"selection\"\n [selected]=\"isSelected(day)\"\n [isActive]=\"isActiveDate(day)\"\n [isLastInRange]=\"isLastInRange(day)\"\n [isFirstInRange]=\"isFirstInRange(day)\"\n [isWithinRange]=\"isWithinRange(day.native, true)\"\n [isWithinPreviewRange]=\"isWithinPreviewRange(day.native)\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideLeadingDays]=\"hideLeadingDays\"\n [hideTrailingDays]=\"hideTrailingDays\"\n [attr.tabindex]=\"-1\"\n (
|
|
430
|
+
], selector: 'igx-days-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, NgFor, IgxDayItemComponent, TitleCasePipe], template: "<div\n role=\"row\"\n class=\"igx-days-view__row\"\n [title]=\"weekNumberHeader.long | titlecase\"\n>\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>\n <i>{{ weekNumberHeader.short | titlecase }}</i>\n </span>\n </div>\n <span\n role=\"columnheader\"\n [attr.aria-label]=\"dayName.long\"\n *ngFor=\"let dayName of weekHeaderLabels\"\n class=\"igx-days-view__label\"\n >\n <span class=\"igx-days-view__label-inner\">\n {{ dayName.formatted | titlecase }}\n </span>\n </span>\n</div>\n\n<div\n *ngFor=\"\n let week of monthWeeks;\n last as isLast;\n index as i;\n trackBy: rowTracker\n \"\n class=\"igx-days-view__row\"\n role=\"row\"\n>\n <div\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__date igx-days-view__date--week-number\"\n >\n <span\n role=\"rowheader\"\n class=\"igx-days-view__date-inner igx-days-view__date-inner--week-number\"\n >\n {{ getWeekNumber(week[0]) }}\n </span>\n </div>\n\n <igx-day-item\n #item\n *ngFor=\"let day of week; trackBy: dateTracker\"\n class=\"igx-days-view__date\"\n role=\"gridcell\"\n [attr.id]=\"item.isCurrentMonth && day.timestamp\"\n [attr.aria-selected]=\"isSelected(day)\"\n [attr.aria-disabled]=\"isDateDisabled(day.native)\"\n [attr.aria-label]=\"\n isFirstInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_start\n : isLastInRange(day)\n ? day.native.toDateString() +\n ', ' +\n resourceStrings.igx_calendar_range_end\n : day.native.toDateString()\n \"\n [date]=\"day\"\n [viewDate]=\"viewDate\"\n [selection]=\"selection\"\n [selected]=\"isSelected(day)\"\n [isActive]=\"isActiveDate(day)\"\n [isLastInRange]=\"isLastInRange(day)\"\n [isFirstInRange]=\"isFirstInRange(day)\"\n [isWithinRange]=\"isWithinRange(day.native, true)\"\n [isWithinPreviewRange]=\"isWithinPreviewRange(day.native)\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideLeadingDays]=\"hideLeadingDays\"\n [hideTrailingDays]=\"hideTrailingDays\"\n [attr.tabindex]=\"-1\"\n (click)=\"handleDateClick(item)\"\n (mouseEnter)=\"changePreviewRange(day.native)\"\n (mouseLeave)=\"clearPreviewRange()\"\n >\n {{ formattedDate(day.native) }}\n </igx-day-item>\n</div>\n" }]
|
|
431
431
|
}], ctorParameters: () => [{ type: i1.PlatformUtil }, { type: undefined, decorators: [{
|
|
432
432
|
type: Inject,
|
|
433
433
|
args: [LOCALE_ID]
|
|
@@ -515,4 +515,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
515
515
|
type: HostListener,
|
|
516
516
|
args: ['blur']
|
|
517
517
|
}] } });
|
|
518
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFHaEIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixjQUFjLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFN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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBMT0NBTEVfSUQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdJZiwgTmdGb3IsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyJztcbmltcG9ydCB7IElneERheUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2RheS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jYWxlbmRhci1iYXNlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCwgaW50b0NodW5rcyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICAgIGFyZVNhbWVNb250aCxcbiAgICBnZW5lcmF0ZU1vbnRoLFxuICAgIGdldENsb3Nlc3RBY3RpdmVEYXRlLFxuICAgIGdldE5leHRBY3RpdmVEYXRlLFxuICAgIGdldFByZXZpb3VzQWN0aXZlRGF0ZSxcbiAgICBpc0RhdGVJblJhbmdlcyxcbn0gZnJvbSBcIi4uL2NvbW1vbi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4uL2NvbW1vbi9tb2RlbCc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogSWd4RGF5c1ZpZXdDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWRheXMtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICdkYXlzLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nRm9yLCBJZ3hEYXlJdGVtQ29tcG9uZW50LCBUaXRsZUNhc2VQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hEYXlzVmlld0NvbXBvbmVudCBleHRlbmRzIElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB7XG4gICAgI3N0YW5kYWxvbmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBkYXlzIHZpZXcuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1kYXlzLXZpZXctMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXlzLXZpZXcgaWQ9XCJteS1kYXlzLXZpZXdcIj48L2lneC1kYXlzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkYXlzVmlld0lkID0gdGhpcy5kYXlzVmlldy5pZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1kYXlzLXZpZXctJHtORVhUX0lEKyt9YDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJJbmRleCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFiSW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvbGUgPSAnZ3JpZCc7XG5cblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZGF5cy12aWV3Jylcblx0cHVibGljIHJlYWRvbmx5IHZpZXdDbGFzcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kYXlzLXZpZXctLXN0YW5kYWxvbmUnKVxuXHRwdWJsaWMgZ2V0IHN0YW5kYWxvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdGFuZGFsb25lO1xuICAgIH1cblxuXHRwdWJsaWMgc2V0IHN0YW5kYWxvbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy4jc3RhbmRhbG9uZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZURlc2NlbmRhbnQnKVxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFiSW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXlzLXZpZXcgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtZGF5cy12aWV3PlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZSA/PyB0aGlzLnZpZXdEYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcHJldmlld1JhbmdlRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9wcmV2aWV3UmFuZ2VEYXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucHJldmlld1JhbmdlRGF0ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByZXZpZXdSYW5nZURhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2aWV3UmFuZ2VEYXRlO1xuICAgIH1cblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzZXQgaGlkZUxlYWRpbmdEYXlzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVMZWFkaW5nRGF5cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlTGVhZGluZ0RheXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlTGVhZGluZ0RheXMgPz8gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBoaWRlVHJhaWxpbmdEYXlzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVUcmFpbGluZ0RheXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZVRyYWlsaW5nRGF5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVUcmFpbGluZ0RheXMgPz8gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBzaG93QWN0aXZlRGF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dBY3RpdmVEYXkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVZpZXdDaGFuZ2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcHJldmlld1JhbmdlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4RGF5SXRlbUNvbXBvbmVudCwgeyByZWFkOiBJZ3hEYXlJdGVtQ29tcG9uZW50IH0pXG4gICAgcHVibGljIGRhdGVzOiBRdWVyeUxpc3Q8SWd4RGF5SXRlbUNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIF9hY3RpdmVEYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3ByZXZpZXdSYW5nZURhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfaGlkZUxlYWRpbmdEYXlzOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2hpZGVUcmFpbGluZ0RheXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfc2hvd0FjdGl2ZURheTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIF9sb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge1xuICAgICAgICBzdXBlcihwbGF0Zm9ybSwgX2xvY2FsZUlkLCBudWxsLCBjZHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWFyZVNhbWVNb250aCh0aGlzLmFjdGl2ZURhdGUsIGRhdGUubmF0aXZlKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogZGVsdGEgPiAwID8gU2Nyb2xsRGlyZWN0aW9uLk5FWFQgOiBTY3JvbGxEaXJlY3Rpb24uUFJFVixcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZS5uYXRpdmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5uYXRpdmU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVByZXZpZXdSYW5nZShkYXRlLm5hdGl2ZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC03KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2UnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleWRvd25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldE5leHRBY3RpdmVEYXRlKFxuICAgICAgICAgICAgZmlyc3Quc2V0KHsgZGF0ZTogMSB9KSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKS5uYXRpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldFByZXZpb3VzQWN0aXZlRGF0ZShcbiAgICAgICAgICAgIGxhc3Quc2V0KHsgbW9udGg6IGxhc3QubW9udGggKyAxLCBkYXRlOiAwIH0pLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgICApLm5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHByb3RlY3RlZCBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3UmFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZURhdGVDbGljayhpdGVtOiBJZ3hEYXlJdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBpdGVtLmRhdGUubmF0aXZlO1xuXG4gICAgICAgIGlmIChpdGVtLmlzUHJldmlvdXNNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLlBSRVYsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5pc05leHRNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLk5FWFQsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gaXRlbS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY2FsZW5kYXJNb250aCgpOiBDYWxlbmRhckRheVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZ2VuZXJhdGVNb250aCh0aGlzLnZpZXdEYXRlLCB0aGlzLndlZWtTdGFydCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbW9udGhXZWVrcygpOiBDYWxlbmRhckRheVtdW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnRvQ2h1bmtzKHRoaXMuY2FsZW5kYXJNb250aCwgNykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdlZWsgbnVtYmVyIGJ5IGRhdGVcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2Vla051bWJlcihkYXRlOiBDYWxlbmRhckRheSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLndlZWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGluIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5mb3JtYXRWaWV3cy5kYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlckRheS5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdlZWtIZWFkZXJMYWJlbHMoKToge2xvbmc6IHN0cmluZywgZm9ybWF0dGVkOiBzdHJpbmd9W10ge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXkgb2YgdGhpcy5tb250aFdlZWtzLmF0KDApKSB7XG4gICAgICAgICAgICB3ZWVrZGF5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsb25nOiByYXdGb3JtYXR0ZXIuZm9ybWF0KGRheS5uYXRpdmUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXkubmF0aXZlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2Vla2RheXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCB3ZWVrTnVtYmVySGVhZGVyKCk6IHsgc2hvcnQ6IHN0cmluZywgbG9uZzogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCB3ZWVrT2ZZZWFyID0gKHN0eWxlOiAnbmFycm93JyB8ICdsb25nJykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG4gPSBuZXcgSW50bC5EaXNwbGF5TmFtZXModGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZVRpbWVGaWVsZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGRuLm9mKCd3ZWVrT2ZZZWFyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvcnQ6IHdlZWtPZlllYXIoJ25hcnJvdycpLnN1YnN0cmluZygwLCAxKSxcbiAgICAgICAgICAgIGxvbmc6IHdlZWtPZlllYXIoJ2xvbmcnKSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcm93VHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBDYWxlbmRhckRheVtdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW1baW5kZXhdLm1vbnRofSR7aXRlbVtpbmRleF0uZGF0ZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0ZVRyYWNrZXIoXzogbnVtYmVyLCBpdGVtOiBDYWxlbmRhckRheSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLm1vbnRofS0tJHtpdGVtLmRhdGV9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGlzU2VsZWN0ZWQoZGF0ZTogQ2FsZW5kYXJEYXkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZhbHVlIGFzIERhdGVbXTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB0aGlzLnZhbHVlIHx8IChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAxKTtcblxuICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZXMoZGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMudmFsdWUgJiYgZGF0ZS5lcXVhbFRvKHRoaXMudmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLk1VTFRJICYmIGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBEYXRlUmFuZ2VUeXBlLlNwZWNpZmljLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IGRhdGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0UgJiYgZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiBbZGF0ZXMuYXQoMCksIGRhdGVzLmF0KC0xKV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0ZpcnN0SW5SYW5nZShkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbiB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXQgPSBkYXRlcy5hdCgwKTtcblxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3UmFuZ2VEYXRlICYmIHRoaXMucHJldmlld1JhbmdlRGF0ZSA8IHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5wcmV2aWV3UmFuZ2VEYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGUuZXF1YWxUbyh0YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNMYXN0SW5SYW5nZShkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbiB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXQgPSBkYXRlcy5hdCgtMSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlld1JhbmdlRGF0ZSAmJiB0aGlzLnByZXZpZXdSYW5nZURhdGUgPiB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMucHJldmlld1JhbmdlRGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlLmVxdWFsVG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzQWN0aXZlRGF0ZShkYXk6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5ICYmIGRheS5lcXVhbFRvKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1dpdGhpblJhbmdlKGRhdGU6IERhdGUsIGNoZWNrRm9yUmFuZ2U6IGJvb2xlYW4sIG1pbj86IERhdGUsIG1heD86IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG5cbiAgICAgICAgaWYgKGNoZWNrRm9yUmFuZ2UgJiYgIShBcnJheS5pc0FycmF5KGRhdGVzKSAmJiBkYXRlcy5sZW5ndGggPiAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWluID0gbWluID8gbWluIDogZGF0ZXMuYXQoMCk7XG4gICAgICAgIG1heCA9IG1heCA/IG1heCA6IGRhdGVzLmF0KC0xKTtcblxuICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiBbbWluLCBtYXhdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc1dpdGhpblByZXZpZXdSYW5nZShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gJ3JhbmdlJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICghKGRhdGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sXG4gICAgICAgICAgICBkYXRlUmFuZ2U6IFtkYXRlcy5hdCgwKSwgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgaXNTaW5nbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbiAhPT0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hhbmdlUHJldmlld1JhbmdlKGRhdGU6IERhdGUpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZhbHVlIGFzIERhdGVbXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgZGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZXMuYXQoMCkpO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0LmVxdWFsVG8oZGF0ZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRQcmV2aWV3UmFuZ2VEYXRlKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJQcmV2aWV3UmFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdSYW5nZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJldmlld1JhbmdlRGF0ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcmV2aWV3UmFuZ2VEYXRlKHZhbHVlPzogRGF0ZSkge1xuICAgICAgICB0aGlzLnByZXZpZXdSYW5nZURhdGUgPSB2YWx1ZTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgcm9sZT1cInJvd1wiXG4gICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19yb3dcIlxuICAgIFt0aXRsZV09XCJ3ZWVrTnVtYmVySGVhZGVyLmxvbmcgfCB0aXRsZWNhc2VcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICpuZ0lmPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbCBpZ3gtZGF5cy12aWV3X19sYWJlbC0td2Vlay1udW1iZXJcIlxuICAgID5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8aT57eyB3ZWVrTnVtYmVySGVhZGVyLnNob3J0IHwgdGl0bGVjYXNlIH19PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW5cbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5TmFtZS5sb25nXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheU5hbWUgb2Ygd2Vla0hlYWRlckxhYmVsc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fbGFiZWxcIlxuICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbC1pbm5lclwiPlxuICAgICAgICAgICAge3sgZGF5TmFtZS5mb3JtYXR0ZWQgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvZGl2PlxuXG48ZGl2XG4gICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCB3ZWVrIG9mIG1vbnRoV2Vla3M7XG4gICAgICAgIGxhc3QgYXMgaXNMYXN0O1xuICAgICAgICBpbmRleCBhcyBpO1xuICAgICAgICB0cmFja0J5OiByb3dUcmFja2VyXG4gICAgXCJcbiAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX3Jvd1wiXG4gICAgcm9sZT1cInJvd1wiXG4+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZSBpZ3gtZGF5cy12aWV3X19kYXRlLS13ZWVrLW51bWJlclwiXG4gICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cInJvd2hlYWRlclwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2RhdGUtaW5uZXIgaWd4LWRheXMtdmlld19fZGF0ZS1pbm5lci0td2Vlay1udW1iZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBnZXRXZWVrTnVtYmVyKHdlZWtbMF0pIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpZ3gtZGF5LWl0ZW1cbiAgICAgICAgI2l0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrOyB0cmFja0J5OiBkYXRlVHJhY2tlclwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZVwiXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgIFthdHRyLmlkXT1cIml0ZW0uaXNDdXJyZW50TW9udGggJiYgZGF5LnRpbWVzdGFtcFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0RhdGVEaXNhYmxlZChkYXkubmF0aXZlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBpc0ZpcnN0SW5SYW5nZShkYXkpXG4gICAgICAgICAgICAgICAgPyBkYXkubmF0aXZlLnRvRGF0ZVN0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9zdGFydFxuICAgICAgICAgICAgICAgIDogaXNMYXN0SW5SYW5nZShkYXkpXG4gICAgICAgICAgICAgICAgICA/IGRheS5uYXRpdmUudG9EYXRlU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9lbmRcbiAgICAgICAgICAgICAgICAgIDogZGF5Lm5hdGl2ZS50b0RhdGVTdHJpbmcoKVxuICAgICAgICBcIlxuICAgICAgICBbZGF0ZV09XCJkYXlcIlxuICAgICAgICBbdmlld0RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVEYXRlKGRheSlcIlxuICAgICAgICBbaXNMYXN0SW5SYW5nZV09XCJpc0xhc3RJblJhbmdlKGRheSlcIlxuICAgICAgICBbaXNGaXJzdEluUmFuZ2VdPVwiaXNGaXJzdEluUmFuZ2UoZGF5KVwiXG4gICAgICAgIFtpc1dpdGhpblJhbmdlXT1cImlzV2l0aGluUmFuZ2UoZGF5Lm5hdGl2ZSwgdHJ1ZSlcIlxuICAgICAgICBbaXNXaXRoaW5QcmV2aWV3UmFuZ2VdPVwiaXNXaXRoaW5QcmV2aWV3UmFuZ2UoZGF5Lm5hdGl2ZSlcIlxuICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgW3NwZWNpYWxEYXRlc109XCJzcGVjaWFsRGF0ZXNcIlxuICAgICAgICBbaGlkZUxlYWRpbmdEYXlzXT1cImhpZGVMZWFkaW5nRGF5c1wiXG4gICAgICAgIFtoaWRlVHJhaWxpbmdEYXlzXT1cImhpZGVUcmFpbGluZ0RheXNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgIChtb3VzZURvd24pPVwiaGFuZGxlRGF0ZUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgKG1vdXNlRW50ZXIpPVwiY2hhbmdlUHJldmlld1JhbmdlKGRheS5uYXRpdmUpXCJcbiAgICAgICAgKG1vdXNlTGVhdmUpPVwiY2xlYXJQcmV2aWV3UmFuZ2UoKVwiXG4gICAgPlxuICAgICAgICB7eyBmb3JtYXR0ZWREYXRlKGRheS5uYXRpdmUpIH19XG4gICAgPC9pZ3gtZGF5LWl0ZW0+XG48L2Rpdj5cbiJdfQ==
|
|
518
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFHaEIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixjQUFjLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFN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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBMT0NBTEVfSUQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdJZiwgTmdGb3IsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyJztcbmltcG9ydCB7IElneERheUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2RheS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jYWxlbmRhci1iYXNlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCwgaW50b0NodW5rcyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSVZpZXdDaGFuZ2luZ0V2ZW50QXJncyB9IGZyb20gJy4vZGF5cy12aWV3LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICAgIGFyZVNhbWVNb250aCxcbiAgICBnZW5lcmF0ZU1vbnRoLFxuICAgIGdldENsb3Nlc3RBY3RpdmVEYXRlLFxuICAgIGdldE5leHRBY3RpdmVEYXRlLFxuICAgIGdldFByZXZpb3VzQWN0aXZlRGF0ZSxcbiAgICBpc0RhdGVJblJhbmdlcyxcbn0gZnJvbSBcIi4uL2NvbW1vbi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4uL2NvbW1vbi9tb2RlbCc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogSWd4RGF5c1ZpZXdDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWRheXMtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICdkYXlzLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIE5nRm9yLCBJZ3hEYXlJdGVtQ29tcG9uZW50LCBUaXRsZUNhc2VQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hEYXlzVmlld0NvbXBvbmVudCBleHRlbmRzIElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB7XG4gICAgI3N0YW5kYWxvbmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBkYXlzIHZpZXcuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1kYXlzLXZpZXctMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXlzLXZpZXcgaWQ9XCJteS1kYXlzLXZpZXdcIj48L2lneC1kYXlzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkYXlzVmlld0lkID0gdGhpcy5kYXlzVmlldy5pZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1kYXlzLXZpZXctJHtORVhUX0lEKyt9YDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJJbmRleCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFiSW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvbGUgPSAnZ3JpZCc7XG5cblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZGF5cy12aWV3Jylcblx0cHVibGljIHJlYWRvbmx5IHZpZXdDbGFzcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kYXlzLXZpZXctLXN0YW5kYWxvbmUnKVxuXHRwdWJsaWMgZ2V0IHN0YW5kYWxvbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdGFuZGFsb25lO1xuICAgIH1cblxuXHRwdWJsaWMgc2V0IHN0YW5kYWxvbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy4jc3RhbmRhbG9uZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZURlc2NlbmRhbnQnKVxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFiSW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXlzLXZpZXcgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtZGF5cy12aWV3PlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dXZWVrTnVtYmVyczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZSA/PyB0aGlzLnZpZXdEYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcHJldmlld1JhbmdlRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9wcmV2aWV3UmFuZ2VEYXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucHJldmlld1JhbmdlRGF0ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByZXZpZXdSYW5nZURhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmV2aWV3UmFuZ2VEYXRlO1xuICAgIH1cblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzZXQgaGlkZUxlYWRpbmdEYXlzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVMZWFkaW5nRGF5cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlTGVhZGluZ0RheXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlTGVhZGluZ0RheXMgPz8gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBoaWRlVHJhaWxpbmdEYXlzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGVUcmFpbGluZ0RheXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZVRyYWlsaW5nRGF5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVUcmFpbGluZ0RheXMgPz8gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBzaG93QWN0aXZlRGF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dBY3RpdmVEYXkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVZpZXdDaGFuZ2luZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcHJldmlld1JhbmdlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4RGF5SXRlbUNvbXBvbmVudCwgeyByZWFkOiBJZ3hEYXlJdGVtQ29tcG9uZW50IH0pXG4gICAgcHVibGljIGRhdGVzOiBRdWVyeUxpc3Q8SWd4RGF5SXRlbUNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIF9hY3RpdmVEYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3ByZXZpZXdSYW5nZURhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfaGlkZUxlYWRpbmdEYXlzOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2hpZGVUcmFpbGluZ0RheXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfc2hvd0FjdGl2ZURheTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIF9sb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge1xuICAgICAgICBzdXBlcihwbGF0Zm9ybSwgX2xvY2FsZUlkLCBudWxsLCBjZHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWFyZVNhbWVNb250aCh0aGlzLmFjdGl2ZURhdGUsIGRhdGUubmF0aXZlKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogZGVsdGEgPiAwID8gU2Nyb2xsRGlyZWN0aW9uLk5FWFQgOiBTY3JvbGxEaXJlY3Rpb24uUFJFVixcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZS5uYXRpdmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5uYXRpdmU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVByZXZpZXdSYW5nZShkYXRlLm5hdGl2ZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC03KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2UnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleWRvd25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldE5leHRBY3RpdmVEYXRlKFxuICAgICAgICAgICAgZmlyc3Quc2V0KHsgZGF0ZTogMSB9KSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKS5uYXRpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldFByZXZpb3VzQWN0aXZlRGF0ZShcbiAgICAgICAgICAgIGxhc3Quc2V0KHsgbW9udGg6IGxhc3QubW9udGggKyAxLCBkYXRlOiAwIH0pLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgICApLm5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHByb3RlY3RlZCBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3UmFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZURhdGVDbGljayhpdGVtOiBJZ3hEYXlJdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBpdGVtLmRhdGUubmF0aXZlO1xuXG4gICAgICAgIGlmIChpdGVtLmlzUHJldmlvdXNNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLlBSRVYsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5pc05leHRNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLk5FWFQsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gaXRlbS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY2FsZW5kYXJNb250aCgpOiBDYWxlbmRhckRheVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZ2VuZXJhdGVNb250aCh0aGlzLnZpZXdEYXRlLCB0aGlzLndlZWtTdGFydCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbW9udGhXZWVrcygpOiBDYWxlbmRhckRheVtdW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnRvQ2h1bmtzKHRoaXMuY2FsZW5kYXJNb250aCwgNykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdlZWsgbnVtYmVyIGJ5IGRhdGVcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2Vla051bWJlcihkYXRlOiBDYWxlbmRhckRheSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLndlZWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGluIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5mb3JtYXRWaWV3cy5kYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlckRheS5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdlZWtIZWFkZXJMYWJlbHMoKToge2xvbmc6IHN0cmluZywgZm9ybWF0dGVkOiBzdHJpbmd9W10ge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXkgb2YgdGhpcy5tb250aFdlZWtzLmF0KDApKSB7XG4gICAgICAgICAgICB3ZWVrZGF5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsb25nOiByYXdGb3JtYXR0ZXIuZm9ybWF0KGRheS5uYXRpdmUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXkubmF0aXZlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2Vla2RheXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCB3ZWVrTnVtYmVySGVhZGVyKCk6IHsgc2hvcnQ6IHN0cmluZywgbG9uZzogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCB3ZWVrT2ZZZWFyID0gKHN0eWxlOiAnbmFycm93JyB8ICdsb25nJykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG4gPSBuZXcgSW50bC5EaXNwbGF5TmFtZXModGhpcy5sb2NhbGUsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZVRpbWVGaWVsZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGRuLm9mKCd3ZWVrT2ZZZWFyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvcnQ6IHdlZWtPZlllYXIoJ25hcnJvdycpLnN1YnN0cmluZygwLCAxKSxcbiAgICAgICAgICAgIGxvbmc6IHdlZWtPZlllYXIoJ2xvbmcnKSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcm93VHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBDYWxlbmRhckRheVtdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW1baW5kZXhdLm1vbnRofSR7aXRlbVtpbmRleF0uZGF0ZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0ZVRyYWNrZXIoXzogbnVtYmVyLCBpdGVtOiBDYWxlbmRhckRheSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLm1vbnRofS0tJHtpdGVtLmRhdGV9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGlzU2VsZWN0ZWQoZGF0ZTogQ2FsZW5kYXJEYXkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZhbHVlIGFzIERhdGVbXTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB0aGlzLnZhbHVlIHx8IChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAxKTtcblxuICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZXMoZGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBDYWxlbmRhclNlbGVjdGlvbi5TSU5HTEUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMudmFsdWUgJiYgZGF0ZS5lcXVhbFRvKHRoaXMudmFsdWUgYXMgRGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLk1VTFRJICYmIGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLCBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBEYXRlUmFuZ2VUeXBlLlNwZWNpZmljLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IGRhdGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0UgJiYgZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiBbZGF0ZXMuYXQoMCksIGRhdGVzLmF0KC0xKV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0ZpcnN0SW5SYW5nZShkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbiB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXQgPSBkYXRlcy5hdCgwKTtcblxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3UmFuZ2VEYXRlICYmIHRoaXMucHJldmlld1JhbmdlRGF0ZSA8IHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5wcmV2aWV3UmFuZ2VEYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGUuZXF1YWxUbyh0YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNMYXN0SW5SYW5nZShkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbiB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXQgPSBkYXRlcy5hdCgtMSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJldmlld1JhbmdlRGF0ZSAmJiB0aGlzLnByZXZpZXdSYW5nZURhdGUgPiB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMucHJldmlld1JhbmdlRGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlLmVxdWFsVG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzQWN0aXZlRGF0ZShkYXk6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5ICYmIGRheS5lcXVhbFRvKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc1dpdGhpblJhbmdlKGRhdGU6IERhdGUsIGNoZWNrRm9yUmFuZ2U6IGJvb2xlYW4sIG1pbj86IERhdGUsIG1heD86IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG5cbiAgICAgICAgaWYgKGNoZWNrRm9yUmFuZ2UgJiYgIShBcnJheS5pc0FycmF5KGRhdGVzKSAmJiBkYXRlcy5sZW5ndGggPiAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWluID0gbWluID8gbWluIDogZGF0ZXMuYXQoMCk7XG4gICAgICAgIG1heCA9IG1heCA/IG1heCA6IGRhdGVzLmF0KC0xKTtcblxuICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVJhbmdlOiBbbWluLCBtYXhdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc1dpdGhpblByZXZpZXdSYW5nZShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gJ3JhbmdlJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICghKGRhdGVzLmxlbmd0aCA+IDAgJiYgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJldHdlZW4sXG4gICAgICAgICAgICBkYXRlUmFuZ2U6IFtkYXRlcy5hdCgwKSwgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgaXNTaW5nbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbiAhPT0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2hhbmdlUHJldmlld1JhbmdlKGRhdGU6IERhdGUpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZhbHVlIGFzIERhdGVbXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgZGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZXMuYXQoMCkpO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0LmVxdWFsVG8oZGF0ZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRQcmV2aWV3UmFuZ2VEYXRlKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJQcmV2aWV3UmFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdSYW5nZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJldmlld1JhbmdlRGF0ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcmV2aWV3UmFuZ2VEYXRlKHZhbHVlPzogRGF0ZSkge1xuICAgICAgICB0aGlzLnByZXZpZXdSYW5nZURhdGUgPSB2YWx1ZTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgcm9sZT1cInJvd1wiXG4gICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19yb3dcIlxuICAgIFt0aXRsZV09XCJ3ZWVrTnVtYmVySGVhZGVyLmxvbmcgfCB0aXRsZWNhc2VcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICpuZ0lmPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbCBpZ3gtZGF5cy12aWV3X19sYWJlbC0td2Vlay1udW1iZXJcIlxuICAgID5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8aT57eyB3ZWVrTnVtYmVySGVhZGVyLnNob3J0IHwgdGl0bGVjYXNlIH19PC9pPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW5cbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5TmFtZS5sb25nXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheU5hbWUgb2Ygd2Vla0hlYWRlckxhYmVsc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fbGFiZWxcIlxuICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbC1pbm5lclwiPlxuICAgICAgICAgICAge3sgZGF5TmFtZS5mb3JtYXR0ZWQgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvZGl2PlxuXG48ZGl2XG4gICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCB3ZWVrIG9mIG1vbnRoV2Vla3M7XG4gICAgICAgIGxhc3QgYXMgaXNMYXN0O1xuICAgICAgICBpbmRleCBhcyBpO1xuICAgICAgICB0cmFja0J5OiByb3dUcmFja2VyXG4gICAgXCJcbiAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX3Jvd1wiXG4gICAgcm9sZT1cInJvd1wiXG4+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZSBpZ3gtZGF5cy12aWV3X19kYXRlLS13ZWVrLW51bWJlclwiXG4gICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cInJvd2hlYWRlclwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2RhdGUtaW5uZXIgaWd4LWRheXMtdmlld19fZGF0ZS1pbm5lci0td2Vlay1udW1iZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBnZXRXZWVrTnVtYmVyKHdlZWtbMF0pIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpZ3gtZGF5LWl0ZW1cbiAgICAgICAgI2l0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrOyB0cmFja0J5OiBkYXRlVHJhY2tlclwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZVwiXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgIFthdHRyLmlkXT1cIml0ZW0uaXNDdXJyZW50TW9udGggJiYgZGF5LnRpbWVzdGFtcFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0RhdGVEaXNhYmxlZChkYXkubmF0aXZlKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBpc0ZpcnN0SW5SYW5nZShkYXkpXG4gICAgICAgICAgICAgICAgPyBkYXkubmF0aXZlLnRvRGF0ZVN0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9zdGFydFxuICAgICAgICAgICAgICAgIDogaXNMYXN0SW5SYW5nZShkYXkpXG4gICAgICAgICAgICAgICAgICA/IGRheS5uYXRpdmUudG9EYXRlU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9lbmRcbiAgICAgICAgICAgICAgICAgIDogZGF5Lm5hdGl2ZS50b0RhdGVTdHJpbmcoKVxuICAgICAgICBcIlxuICAgICAgICBbZGF0ZV09XCJkYXlcIlxuICAgICAgICBbdmlld0RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVEYXRlKGRheSlcIlxuICAgICAgICBbaXNMYXN0SW5SYW5nZV09XCJpc0xhc3RJblJhbmdlKGRheSlcIlxuICAgICAgICBbaXNGaXJzdEluUmFuZ2VdPVwiaXNGaXJzdEluUmFuZ2UoZGF5KVwiXG4gICAgICAgIFtpc1dpdGhpblJhbmdlXT1cImlzV2l0aGluUmFuZ2UoZGF5Lm5hdGl2ZSwgdHJ1ZSlcIlxuICAgICAgICBbaXNXaXRoaW5QcmV2aWV3UmFuZ2VdPVwiaXNXaXRoaW5QcmV2aWV3UmFuZ2UoZGF5Lm5hdGl2ZSlcIlxuICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgW3NwZWNpYWxEYXRlc109XCJzcGVjaWFsRGF0ZXNcIlxuICAgICAgICBbaGlkZUxlYWRpbmdEYXlzXT1cImhpZGVMZWFkaW5nRGF5c1wiXG4gICAgICAgIFtoaWRlVHJhaWxpbmdEYXlzXT1cImhpZGVUcmFpbGluZ0RheXNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVEYXRlQ2xpY2soaXRlbSlcIlxuICAgICAgICAobW91c2VFbnRlcik9XCJjaGFuZ2VQcmV2aWV3UmFuZ2UoZGF5Lm5hdGl2ZSlcIlxuICAgICAgICAobW91c2VMZWF2ZSk9XCJjbGVhclByZXZpZXdSYW5nZSgpXCJcbiAgICA+XG4gICAgICAgIHt7IGZvcm1hdHRlZERhdGUoZGF5Lm5hdGl2ZSkgfX1cbiAgICA8L2lneC1kYXktaXRlbT5cbjwvZGl2PlxuIl19
|