igniteui-angular 17.2.21 → 17.2.23
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/query-builder/query-builder.component.mjs +3 -3
- 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 +118 -72
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -0
- package/lib/core/styles/components/input/_input-group-theme.scss +1 -0
- package/lib/core/styles/components/query-builder/_query-builder-theme.scss +4 -14
- 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/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
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -404,7 +404,7 @@ export class IgxDaysViewComponent extends IgxCalendarBaseDirective {
|
|
|
404
404
|
provide: NG_VALUE_ACCESSOR,
|
|
405
405
|
useExisting: IgxDaysViewComponent
|
|
406
406
|
},
|
|
407
|
-
], viewQueries: [{ propertyName: "dates", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: "<div role=\"row\" class=\"igx-days-view__row\">\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>Wk</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 (
|
|
407
|
+
], viewQueries: [{ propertyName: "dates", predicate: IgxDayItemComponent, descendants: true, read: IgxDayItemComponent }], usesInheritance: true, ngImport: i0, template: "<div role=\"row\" class=\"igx-days-view__row\">\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>Wk</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 }); }
|
|
408
408
|
}
|
|
409
409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxDaysViewComponent, decorators: [{
|
|
410
410
|
type: Component,
|
|
@@ -414,7 +414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
414
414
|
provide: NG_VALUE_ACCESSOR,
|
|
415
415
|
useExisting: IgxDaysViewComponent
|
|
416
416
|
},
|
|
417
|
-
], selector: 'igx-days-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, NgFor, IgxDayItemComponent, TitleCasePipe], template: "<div role=\"row\" class=\"igx-days-view__row\">\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>Wk</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 (
|
|
417
|
+
], selector: 'igx-days-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, NgFor, IgxDayItemComponent, TitleCasePipe], template: "<div role=\"row\" class=\"igx-days-view__row\">\n <div\n role=\"columnheader\"\n *ngIf=\"showWeekNumbers\"\n class=\"igx-days-view__label igx-days-view__label--week-number\"\n >\n <span>Wk</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" }]
|
|
418
418
|
}], ctorParameters: () => [{ type: i1.PlatformUtil }, { type: undefined, decorators: [{
|
|
419
419
|
type: Inject,
|
|
420
420
|
args: [LOCALE_ID]
|
|
@@ -502,4 +502,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
502
502
|
type: HostListener,
|
|
503
503
|
args: ['blur']
|
|
504
504
|
}] } });
|
|
505
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFHaEIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixjQUFjLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFN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LG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVVuQyxjQUFjO3NCQUZ2QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3hDLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUvQixhQUFhO3NCQUR0QixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQjlCLFlBQVk7c0JBRHJCLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdCN0IsV0FBVztzQkFEcEIsWUFBWTt1QkFBQyxPQUFPO2dCQVVYLFVBQVU7c0JBRG5CLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIExPQ0FMRV9JRCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhclNlbGVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4RGF5SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZGF5LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVSYW5nZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2NhbGVuZGFyLWJhc2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsLCBpbnRvQ2h1bmtzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJVmlld0NoYW5naW5nRXZlbnRBcmdzIH0gZnJvbSAnLi9kYXlzLXZpZXcuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgYXJlU2FtZU1vbnRoLFxuICAgIGdlbmVyYXRlTW9udGgsXG4gICAgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsXG4gICAgZ2V0TmV4dEFjdGl2ZURhdGUsXG4gICAgZ2V0UHJldmlvdXNBY3RpdmVEYXRlLFxuICAgIGlzRGF0ZUluUmFuZ2VzLFxufSBmcm9tIFwiLi4vY29tbW9uL2hlbHBlcnNcIjtcbmltcG9ydCB7IENhbGVuZGFyRGF5IH0gZnJvbSAnLi4vY29tbW9uL21vZGVsJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hEYXlzVmlld0NvbXBvbmVudFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF5cy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RheXMtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIElneERheUl0ZW1Db21wb25lbnQsIFRpdGxlQ2FzZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneERheXNWaWV3Q29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIHtcbiAgICAjc3RhbmRhbG9uZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGRheXMgdmlldy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LWRheXMtdmlldy0wXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRheXMtdmlldyBpZD1cIm15LWRheXMtdmlld1wiPjwvaWd4LWRheXMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRheXNWaWV3SWQgPSB0aGlzLmRheXNWaWV3LmlkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRheXMtdmlldy0ke05FWFRfSUQrK31gO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYkluZGV4JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0YWJJbmRleCA9IDA7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm9sZSA9ICdncmlkJztcblxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kYXlzLXZpZXcnKVxuXHRwdWJsaWMgcmVhZG9ubHkgdmlld0NsYXNzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRheXMtdmlldy0tc3RhbmRhbG9uZScpXG5cdHB1YmxpYyBnZXQgc3RhbmRhbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YW5kYWxvbmU7XG4gICAgfVxuXG5cdHB1YmxpYyBzZXQgc3RhbmRhbG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLiNzdGFuZGFsb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYWN0aXZlRGVzY2VuZGFudCcpXG4gICAgcHJvdGVjdGVkIGdldCBhY3RpdmVEZXNjZW5kYW50KCkge1xuICAgICAgICBpZiAodGhpcy50YWJJbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRheXMtdmlldyBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1kYXlzLXZpZXc+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmVEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VQcmV2aWV3UmFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZURhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlID8/IHRoaXMudmlld0RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBwcmV2aWV3UmFuZ2VEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX3ByZXZpZXdSYW5nZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJldmlld1JhbmdlRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdSYW5nZURhdGU7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBoaWRlTGVhZGluZ0RheXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZUxlYWRpbmdEYXlzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVMZWFkaW5nRGF5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVMZWFkaW5nRGF5cyA/PyB0aGlzLmhpZGVPdXRzaWRlRGF5cztcbiAgICB9XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IGhpZGVUcmFpbGluZ0RheXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZVRyYWlsaW5nRGF5cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlVHJhaWxpbmdEYXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZVRyYWlsaW5nRGF5cyA/PyB0aGlzLmhpZGVPdXRzaWRlRGF5cztcbiAgICB9XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IHNob3dBY3RpdmVEYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2hvd0FjdGl2ZURheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBY3RpdmVEYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJVmlld0NoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwcmV2aWV3UmFuZ2VEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hEYXlJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IElneERheUl0ZW1Db21wb25lbnQgfSlcbiAgICBwdWJsaWMgZGF0ZXM6IFF1ZXJ5TGlzdDxJZ3hEYXlJdGVtQ29tcG9uZW50PjtcblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfcHJldmlld1JhbmdlRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9oaWRlTGVhZGluZ0RheXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfaGlkZVRyYWlsaW5nRGF5czogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9zaG93QWN0aXZlRGF5OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHBsYXRmb3JtLCBfbG9jYWxlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWFyZVNhbWVNb250aCh0aGlzLmFjdGl2ZURhdGUsIGRhdGUubmF0aXZlKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogZGVsdGEgPiAwID8gU2Nyb2xsRGlyZWN0aW9uLk5FWFQgOiBTY3JvbGxEaXJlY3Rpb24uUFJFVixcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZS5uYXRpdmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5uYXRpdmU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVByZXZpZXdSYW5nZShkYXRlLm5hdGl2ZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC03KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2UnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleWRvd25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldE5leHRBY3RpdmVEYXRlKFxuICAgICAgICAgICAgZmlyc3Quc2V0KHsgZGF0ZTogMSB9KSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKS5uYXRpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldFByZXZpb3VzQWN0aXZlRGF0ZShcbiAgICAgICAgICAgIGxhc3Quc2V0KHsgbW9udGg6IGxhc3QubW9udGggKyAxLCBkYXRlOiAwIH0pLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgICApLm5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHByb3RlY3RlZCBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3UmFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZURhdGVDbGljayhpdGVtOiBJZ3hEYXlJdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBpdGVtLmRhdGUubmF0aXZlO1xuXG4gICAgICAgIGlmIChpdGVtLmlzUHJldmlvdXNNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLlBSRVYsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5pc05leHRNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLk5FWFQsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gaXRlbS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY2FsZW5kYXJNb250aCgpOiBDYWxlbmRhckRheVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZ2VuZXJhdGVNb250aCh0aGlzLnZpZXdEYXRlLCB0aGlzLndlZWtTdGFydCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbW9udGhXZWVrcygpOiBDYWxlbmRhckRheVtdW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnRvQ2h1bmtzKHRoaXMuY2FsZW5kYXJNb250aCwgNykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdlZWsgbnVtYmVyIGJ5IGRhdGVcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2Vla051bWJlcihkYXRlOiBDYWxlbmRhckRheSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLndlZWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGluIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5mb3JtYXRWaWV3cy5kYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlckRheS5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdlZWtIZWFkZXJMYWJlbHMoKToge2xvbmc6IHN0cmluZywgZm9ybWF0dGVkOiBzdHJpbmd9W10ge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXkgb2YgdGhpcy5tb250aFdlZWtzLmF0KDApKSB7XG4gICAgICAgICAgICB3ZWVrZGF5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsb25nOiByYXdGb3JtYXR0ZXIuZm9ybWF0KGRheS5uYXRpdmUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXkubmF0aXZlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2Vla2RheXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByb3dUcmFja2VyKGluZGV4OiBudW1iZXIsIGl0ZW06IENhbGVuZGFyRGF5W10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aXRlbVtpbmRleF0ubW9udGh9JHtpdGVtW2luZGV4XS5kYXRlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRlVHJhY2tlcihfOiBudW1iZXIsIGl0ZW06IENhbGVuZGFyRGF5KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubW9udGh9LS0ke2l0ZW0uZGF0ZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZChkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmFsdWUgYXMgRGF0ZVtdO1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IHRoaXMudmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDEpO1xuXG4gICAgICAgIGlmIChpc0RhdGVJblJhbmdlcyhkYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRSkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZSAmJiBkYXRlLmVxdWFsVG8odGhpcy52YWx1ZSBhcyBEYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gQ2FsZW5kYXJTZWxlY3Rpb24uTVVMVEkgJiYgZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuU3BlY2lmaWMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGVSYW5nZTogZGF0ZXMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRSAmJiBkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSwgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IFtkYXRlcy5hdCgwKSwgZGF0ZXMuYXQoLTEpXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzRmlyc3RJblJhbmdlKGRhdGU6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uIHx8IGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IGRhdGVzLmF0KDApO1xuXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdSYW5nZURhdGUgJiYgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlIDwgdGFyZ2V0KSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLnByZXZpZXdSYW5nZURhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZS5lcXVhbFRvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0xhc3RJblJhbmdlKGRhdGU6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uIHx8IGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IGRhdGVzLmF0KC0xKTtcblxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3UmFuZ2VEYXRlICYmIHRoaXMucHJldmlld1JhbmdlRGF0ZSA+IHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5wcmV2aWV3UmFuZ2VEYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGUuZXF1YWxUbyh0YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNBY3RpdmVEYXRlKGRheTogQ2FsZW5kYXJEYXkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBY3RpdmVEYXkgJiYgZGF5LmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzV2l0aGluUmFuZ2UoZGF0ZTogRGF0ZSwgY2hlY2tGb3JSYW5nZTogYm9vbGVhbiwgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAoY2hlY2tGb3JSYW5nZSAmJiAhKEFycmF5LmlzQXJyYXkoZGF0ZXMpICYmIGRhdGVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBtaW4gPSBtaW4gPyBtaW4gOiBkYXRlcy5hdCgwKTtcbiAgICAgICAgbWF4ID0gbWF4ID8gbWF4IDogZGF0ZXMuYXQoLTEpO1xuXG4gICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IFttaW4sIG1heF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzV2l0aGluUHJldmlld1JhbmdlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAncmFuZ2UnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG5cbiAgICAgICAgaWYgKCEoZGF0ZXMubGVuZ3RoID4gMCAmJiB0aGlzLnByZXZpZXdSYW5nZURhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgIGRhdGVSYW5nZTogW2RhdGVzLmF0KDApLCB0aGlzLnByZXZpZXdSYW5nZURhdGVdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldCBpc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uICE9PSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VQcmV2aWV3UmFuZ2UoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmFsdWUgYXMgRGF0ZVtdO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gJ3JhbmdlJyAmJiBkYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlcy5hdCgwKSk7XG5cbiAgICAgICAgICAgIGlmICghZmlyc3QuZXF1YWxUbyhkYXRlKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFByZXZpZXdSYW5nZURhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhclByZXZpZXdSYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1JhbmdlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcmV2aWV3UmFuZ2VEYXRlKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByZXZpZXdSYW5nZURhdGUodmFsdWU/OiBEYXRlKSB7XG4gICAgICAgIHRoaXMucHJldmlld1JhbmdlRGF0ZSA9IHZhbHVlO1xuICAgIH1cbn1cbiIsIjxkaXYgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWRheXMtdmlld19fcm93XCI+XG4gICAgPGRpdlxuICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgKm5nSWY9XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2xhYmVsIGlneC1kYXlzLXZpZXdfX2xhYmVsLS13ZWVrLW51bWJlclwiXG4gICAgPlxuICAgICAgICA8c3Bhbj5Xazwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhblxuICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXlOYW1lLmxvbmdcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF5TmFtZSBvZiB3ZWVrSGVhZGVyTGFiZWxzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbFwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2xhYmVsLWlubmVyXCI+XG4gICAgICAgICAgICB7eyBkYXlOYW1lLmZvcm1hdHRlZCB8IHRpdGxlY2FzZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IHdlZWsgb2YgbW9udGhXZWVrcztcbiAgICAgICAgbGFzdCBhcyBpc0xhc3Q7XG4gICAgICAgIGluZGV4IGFzIGk7XG4gICAgICAgIHRyYWNrQnk6IHJvd1RyYWNrZXJcbiAgICBcIlxuICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fcm93XCJcbiAgICByb2xlPVwicm93XCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19kYXRlIGlneC1kYXlzLXZpZXdfX2RhdGUtLXdlZWstbnVtYmVyXCJcbiAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICByb2xlPVwicm93aGVhZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZS1pbm5lciBpZ3gtZGF5cy12aWV3X19kYXRlLWlubmVyLS13ZWVrLW51bWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGdldFdlZWtOdW1iZXIod2Vla1swXSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGlneC1kYXktaXRlbVxuICAgICAgICAjaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWs7IHRyYWNrQnk6IGRhdGVUcmFja2VyXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19kYXRlXCJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiaXRlbS5pc0N1cnJlbnRNb250aCAmJiBkYXkudGltZXN0YW1wXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGF0ZURpc2FibGVkKGRheS5uYXRpdmUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGlzRmlyc3RJblJhbmdlKGRheSlcbiAgICAgICAgICAgICAgICA/IGRheS5uYXRpdmUudG9EYXRlU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3N0YXJ0XG4gICAgICAgICAgICAgICAgOiBpc0xhc3RJblJhbmdlKGRheSlcbiAgICAgICAgICAgICAgICAgID8gZGF5Lm5hdGl2ZS50b0RhdGVTdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX2VuZFxuICAgICAgICAgICAgICAgICAgOiBkYXkubmF0aXZlLnRvRGF0ZVN0cmluZygpXG4gICAgICAgIFwiXG4gICAgICAgIFtkYXRlXT1cImRheVwiXG4gICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZURhdGUoZGF5KVwiXG4gICAgICAgIFtpc0xhc3RJblJhbmdlXT1cImlzTGFzdEluUmFuZ2UoZGF5KVwiXG4gICAgICAgIFtpc0ZpcnN0SW5SYW5nZV09XCJpc0ZpcnN0SW5SYW5nZShkYXkpXCJcbiAgICAgICAgW2lzV2l0aGluUmFuZ2VdPVwiaXNXaXRoaW5SYW5nZShkYXkubmF0aXZlLCB0cnVlKVwiXG4gICAgICAgIFtpc1dpdGhpblByZXZpZXdSYW5nZV09XCJpc1dpdGhpblByZXZpZXdSYW5nZShkYXkubmF0aXZlKVwiXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZUxlYWRpbmdEYXlzXCJcbiAgICAgICAgW2hpZGVUcmFpbGluZ0RheXNdPVwiaGlkZVRyYWlsaW5nRGF5c1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgKG1vdXNlRG93bik9XCJoYW5kbGVEYXRlQ2xpY2soaXRlbSlcIlxuICAgICAgICAobW91c2VFbnRlcik9XCJjaGFuZ2VQcmV2aWV3UmFuZ2UoZGF5Lm5hdGl2ZSlcIlxuICAgICAgICAobW91c2VMZWF2ZSk9XCJjbGVhclByZXZpZXdSYW5nZSgpXCJcbiAgICA+XG4gICAgICAgIHt7IGZvcm1hdHRlZERhdGUoZGF5Lm5hdGl2ZSkgfX1cbiAgICA8L2lneC1kYXktaXRlbT5cbjwvZGl2PlxuIl19
|
|
505
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5cy12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFHaEIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RCxPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixjQUFjLEdBQ2pCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFN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LG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVVuQyxjQUFjO3NCQUZ2QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3hDLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVUvQixhQUFhO3NCQUR0QixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQjlCLFlBQVk7c0JBRHJCLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdCN0IsV0FBVztzQkFEcEIsWUFBWTt1QkFBQyxPQUFPO2dCQVVYLFVBQVU7c0JBRG5CLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIExPQ0FMRV9JRCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhclNlbGVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4RGF5SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZGF5LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVSYW5nZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2NhbGVuZGFyLWJhc2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsLCBpbnRvQ2h1bmtzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJVmlld0NoYW5naW5nRXZlbnRBcmdzIH0gZnJvbSAnLi9kYXlzLXZpZXcuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgYXJlU2FtZU1vbnRoLFxuICAgIGdlbmVyYXRlTW9udGgsXG4gICAgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsXG4gICAgZ2V0TmV4dEFjdGl2ZURhdGUsXG4gICAgZ2V0UHJldmlvdXNBY3RpdmVEYXRlLFxuICAgIGlzRGF0ZUluUmFuZ2VzLFxufSBmcm9tIFwiLi4vY29tbW9uL2hlbHBlcnNcIjtcbmltcG9ydCB7IENhbGVuZGFyRGF5IH0gZnJvbSAnLi4vY29tbW9uL21vZGVsJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hEYXlzVmlld0NvbXBvbmVudFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF5cy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RheXMtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIElneERheUl0ZW1Db21wb25lbnQsIFRpdGxlQ2FzZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneERheXNWaWV3Q29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIHtcbiAgICAjc3RhbmRhbG9uZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGRheXMgdmlldy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LWRheXMtdmlldy0wXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRheXMtdmlldyBpZD1cIm15LWRheXMtdmlld1wiPjwvaWd4LWRheXMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRheXNWaWV3SWQgPSB0aGlzLmRheXNWaWV3LmlkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRheXMtdmlldy0ke05FWFRfSUQrK31gO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYkluZGV4JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0YWJJbmRleCA9IDA7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm9sZSA9ICdncmlkJztcblxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kYXlzLXZpZXcnKVxuXHRwdWJsaWMgcmVhZG9ubHkgdmlld0NsYXNzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRheXMtdmlldy0tc3RhbmRhbG9uZScpXG5cdHB1YmxpYyBnZXQgc3RhbmRhbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YW5kYWxvbmU7XG4gICAgfVxuXG5cdHB1YmxpYyBzZXQgc3RhbmRhbG9uZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLiNzdGFuZGFsb25lID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYWN0aXZlRGVzY2VuZGFudCcpXG4gICAgcHJvdGVjdGVkIGdldCBhY3RpdmVEZXNjZW5kYW50KCkge1xuICAgICAgICBpZiAodGhpcy50YWJJbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRheXMtdmlldyBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1kYXlzLXZpZXc+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmVEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VQcmV2aWV3UmFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZURhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlID8/IHRoaXMudmlld0RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBwcmV2aWV3UmFuZ2VEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX3ByZXZpZXdSYW5nZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJldmlld1JhbmdlRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZpZXdSYW5nZURhdGU7XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNldCBoaWRlTGVhZGluZ0RheXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZUxlYWRpbmdEYXlzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVMZWFkaW5nRGF5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVMZWFkaW5nRGF5cyA/PyB0aGlzLmhpZGVPdXRzaWRlRGF5cztcbiAgICB9XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IGhpZGVUcmFpbGluZ0RheXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZVRyYWlsaW5nRGF5cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlVHJhaWxpbmdEYXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZVRyYWlsaW5nRGF5cyA/PyB0aGlzLmhpZGVPdXRzaWRlRGF5cztcbiAgICB9XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2V0IHNob3dBY3RpdmVEYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2hvd0FjdGl2ZURheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBY3RpdmVEYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJVmlld0NoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwcmV2aWV3UmFuZ2VEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hEYXlJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IElneERheUl0ZW1Db21wb25lbnQgfSlcbiAgICBwdWJsaWMgZGF0ZXM6IFF1ZXJ5TGlzdDxJZ3hEYXlJdGVtQ29tcG9uZW50PjtcblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfcHJldmlld1JhbmdlRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9oaWRlTGVhZGluZ0RheXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfaGlkZVRyYWlsaW5nRGF5czogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9zaG93QWN0aXZlRGF5OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIG92ZXJyaWRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHBsYXRmb3JtLCBfbG9jYWxlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWFyZVNhbWVNb250aCh0aGlzLmFjdGl2ZURhdGUsIGRhdGUubmF0aXZlKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogZGVsdGEgPiAwID8gU2Nyb2xsRGlyZWN0aW9uLk5FWFQgOiBTY3JvbGxEaXJlY3Rpb24uUFJFVixcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZS5uYXRpdmVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gZGF0ZS5uYXRpdmU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVByZXZpZXdSYW5nZShkYXRlLm5hdGl2ZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93dXAnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcnJvd0tleWRvd24oZXZlbnQsIC03KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbkFycm93RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2UnLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleWRvd25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldE5leHRBY3RpdmVEYXRlKFxuICAgICAgICAgICAgZmlyc3Quc2V0KHsgZGF0ZTogMSB9KSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKS5uYXRpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW5kJywgWyckZXZlbnQnXSlcbiAgICBwcm90ZWN0ZWQgb25LZXlkb3duRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGxhc3QgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGdldFByZXZpb3VzQWN0aXZlRGF0ZShcbiAgICAgICAgICAgIGxhc3Quc2V0KHsgbW9udGg6IGxhc3QubW9udGggKyAxLCBkYXRlOiAwIH0pLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLFxuICAgICAgICApLm5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5fc2hvd0FjdGl2ZURheSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlUHJldmlld1JhbmdlKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHByb3RlY3RlZCBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3UmFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZURhdGVDbGljayhpdGVtOiBJZ3hEYXlJdGVtQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBpdGVtLmRhdGUubmF0aXZlO1xuXG4gICAgICAgIGlmIChpdGVtLmlzUHJldmlvdXNNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLlBSRVYsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5pc05leHRNb250aCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBtb250aEFjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLk5FWFQsXG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgICAgICBuZXh0RGF0ZTogZGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gaXRlbS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3RpdmVEYXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBY3RpdmVEYXRlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZpZXdSYW5nZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY2FsZW5kYXJNb250aCgpOiBDYWxlbmRhckRheVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZ2VuZXJhdGVNb250aCh0aGlzLnZpZXdEYXRlLCB0aGlzLndlZWtTdGFydCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgbW9udGhXZWVrcygpOiBDYWxlbmRhckRheVtdW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnRvQ2h1bmtzKHRoaXMuY2FsZW5kYXJNb250aCwgNykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHdlZWsgbnVtYmVyIGJ5IGRhdGVcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2Vla051bWJlcihkYXRlOiBDYWxlbmRhckRheSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLndlZWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRlIGluIHRoZSBkYXlzIHZpZXcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5mb3JtYXRWaWV3cy5kYXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlckRheS5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdlZWtIZWFkZXJMYWJlbHMoKToge2xvbmc6IHN0cmluZywgZm9ybWF0dGVkOiBzdHJpbmd9W10ge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXkgb2YgdGhpcy5tb250aFdlZWtzLmF0KDApKSB7XG4gICAgICAgICAgICB3ZWVrZGF5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsb25nOiByYXdGb3JtYXR0ZXIuZm9ybWF0KGRheS5uYXRpdmUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZDogdGhpcy5mb3JtYXR0ZXJXZWVrZGF5LmZvcm1hdChkYXkubmF0aXZlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2Vla2RheXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByb3dUcmFja2VyKGluZGV4OiBudW1iZXIsIGl0ZW06IENhbGVuZGFyRGF5W10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7aXRlbVtpbmRleF0ubW9udGh9JHtpdGVtW2luZGV4XS5kYXRlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRlVHJhY2tlcihfOiBudW1iZXIsIGl0ZW06IENhbGVuZGFyRGF5KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubW9udGh9LS0ke2l0ZW0uZGF0ZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZChkYXRlOiBDYWxlbmRhckRheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmFsdWUgYXMgRGF0ZVtdO1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IHRoaXMudmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDEpO1xuXG4gICAgICAgIGlmIChpc0RhdGVJblJhbmdlcyhkYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IENhbGVuZGFyU2VsZWN0aW9uLlNJTkdMRSkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZSAmJiBkYXRlLmVxdWFsVG8odGhpcy52YWx1ZSBhcyBEYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gQ2FsZW5kYXJTZWxlY3Rpb24uTVVMVEkgJiYgZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZUluUmFuZ2VzKGRhdGUsIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuU3BlY2lmaWMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGVSYW5nZTogZGF0ZXMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRSAmJiBkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSwgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IFtkYXRlcy5hdCgwKSwgZGF0ZXMuYXQoLTEpXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzRmlyc3RJblJhbmdlKGRhdGU6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uIHx8IGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IGRhdGVzLmF0KDApO1xuXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdSYW5nZURhdGUgJiYgdGhpcy5wcmV2aWV3UmFuZ2VEYXRlIDwgdGFyZ2V0KSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLnByZXZpZXdSYW5nZURhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZS5lcXVhbFRvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0xhc3RJblJhbmdlKGRhdGU6IENhbGVuZGFyRGF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uIHx8IGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IGRhdGVzLmF0KC0xKTtcblxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3UmFuZ2VEYXRlICYmIHRoaXMucHJldmlld1JhbmdlRGF0ZSA+IHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5wcmV2aWV3UmFuZ2VEYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGUuZXF1YWxUbyh0YXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNBY3RpdmVEYXRlKGRheTogQ2FsZW5kYXJEYXkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dBY3RpdmVEYXkgJiYgZGF5LmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzV2l0aGluUmFuZ2UoZGF0ZTogRGF0ZSwgY2hlY2tGb3JSYW5nZTogYm9vbGVhbiwgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblxuICAgICAgICBpZiAoY2hlY2tGb3JSYW5nZSAmJiAhKEFycmF5LmlzQXJyYXkoZGF0ZXMpICYmIGRhdGVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBtaW4gPSBtaW4gPyBtaW4gOiBkYXRlcy5hdCgwKTtcbiAgICAgICAgbWF4ID0gbWF4ID8gbWF4IDogZGF0ZXMuYXQoLTEpO1xuXG4gICAgICAgIHJldHVybiBpc0RhdGVJblJhbmdlcyhkYXRlLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZXR3ZWVuLFxuICAgICAgICAgICAgICAgICAgICBkYXRlUmFuZ2U6IFttaW4sIG1heF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzV2l0aGluUHJldmlld1JhbmdlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAncmFuZ2UnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXM7XG5cbiAgICAgICAgaWYgKCEoZGF0ZXMubGVuZ3RoID4gMCAmJiB0aGlzLnByZXZpZXdSYW5nZURhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNEYXRlSW5SYW5nZXMoZGF0ZSwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IERhdGVSYW5nZVR5cGUuQmV0d2VlbixcbiAgICAgICAgICAgIGRhdGVSYW5nZTogW2RhdGVzLmF0KDApLCB0aGlzLnByZXZpZXdSYW5nZURhdGVdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldCBpc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uICE9PSBDYWxlbmRhclNlbGVjdGlvbi5SQU5HRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VQcmV2aWV3UmFuZ2UoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmFsdWUgYXMgRGF0ZVtdO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gJ3JhbmdlJyAmJiBkYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlcy5hdCgwKSk7XG5cbiAgICAgICAgICAgIGlmICghZmlyc3QuZXF1YWxUbyhkYXRlKSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFByZXZpZXdSYW5nZURhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhclByZXZpZXdSYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1JhbmdlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQcmV2aWV3UmFuZ2VEYXRlKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByZXZpZXdSYW5nZURhdGUodmFsdWU/OiBEYXRlKSB7XG4gICAgICAgIHRoaXMucHJldmlld1JhbmdlRGF0ZSA9IHZhbHVlO1xuICAgIH1cbn1cbiIsIjxkaXYgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWRheXMtdmlld19fcm93XCI+XG4gICAgPGRpdlxuICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgKm5nSWY9XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2xhYmVsIGlneC1kYXlzLXZpZXdfX2xhYmVsLS13ZWVrLW51bWJlclwiXG4gICAgPlxuICAgICAgICA8c3Bhbj5Xazwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhblxuICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXlOYW1lLmxvbmdcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF5TmFtZSBvZiB3ZWVrSGVhZGVyTGFiZWxzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19sYWJlbFwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1kYXlzLXZpZXdfX2xhYmVsLWlubmVyXCI+XG4gICAgICAgICAgICB7eyBkYXlOYW1lLmZvcm1hdHRlZCB8IHRpdGxlY2FzZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IHdlZWsgb2YgbW9udGhXZWVrcztcbiAgICAgICAgbGFzdCBhcyBpc0xhc3Q7XG4gICAgICAgIGluZGV4IGFzIGk7XG4gICAgICAgIHRyYWNrQnk6IHJvd1RyYWNrZXJcbiAgICBcIlxuICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fcm93XCJcbiAgICByb2xlPVwicm93XCJcbj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19kYXRlIGlneC1kYXlzLXZpZXdfX2RhdGUtLXdlZWstbnVtYmVyXCJcbiAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICByb2xlPVwicm93aGVhZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWRheXMtdmlld19fZGF0ZS1pbm5lciBpZ3gtZGF5cy12aWV3X19kYXRlLWlubmVyLS13ZWVrLW51bWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGdldFdlZWtOdW1iZXIod2Vla1swXSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGlneC1kYXktaXRlbVxuICAgICAgICAjaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWs7IHRyYWNrQnk6IGRhdGVUcmFja2VyXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZGF5cy12aWV3X19kYXRlXCJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiaXRlbS5pc0N1cnJlbnRNb250aCAmJiBkYXkudGltZXN0YW1wXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGF0ZURpc2FibGVkKGRheS5uYXRpdmUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGlzRmlyc3RJblJhbmdlKGRheSlcbiAgICAgICAgICAgICAgICA/IGRheS5uYXRpdmUudG9EYXRlU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3N0YXJ0XG4gICAgICAgICAgICAgICAgOiBpc0xhc3RJblJhbmdlKGRheSlcbiAgICAgICAgICAgICAgICAgID8gZGF5Lm5hdGl2ZS50b0RhdGVTdHJpbmcoKSArXG4gICAgICAgICAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX2VuZFxuICAgICAgICAgICAgICAgICAgOiBkYXkubmF0aXZlLnRvRGF0ZVN0cmluZygpXG4gICAgICAgIFwiXG4gICAgICAgIFtkYXRlXT1cImRheVwiXG4gICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZURhdGUoZGF5KVwiXG4gICAgICAgIFtpc0xhc3RJblJhbmdlXT1cImlzTGFzdEluUmFuZ2UoZGF5KVwiXG4gICAgICAgIFtpc0ZpcnN0SW5SYW5nZV09XCJpc0ZpcnN0SW5SYW5nZShkYXkpXCJcbiAgICAgICAgW2lzV2l0aGluUmFuZ2VdPVwiaXNXaXRoaW5SYW5nZShkYXkubmF0aXZlLCB0cnVlKVwiXG4gICAgICAgIFtpc1dpdGhpblByZXZpZXdSYW5nZV09XCJpc1dpdGhpblByZXZpZXdSYW5nZShkYXkubmF0aXZlKVwiXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZUxlYWRpbmdEYXlzXCJcbiAgICAgICAgW2hpZGVUcmFpbGluZ0RheXNdPVwiaGlkZVRyYWlsaW5nRGF5c1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZURhdGVDbGljayhpdGVtKVwiXG4gICAgICAgIChtb3VzZUVudGVyKT1cImNoYW5nZVByZXZpZXdSYW5nZShkYXkubmF0aXZlKVwiXG4gICAgICAgIChtb3VzZUxlYXZlKT1cImNsZWFyUHJldmlld1JhbmdlKClcIlxuICAgID5cbiAgICAgICAge3sgZm9ybWF0dGVkRGF0ZShkYXkubmF0aXZlKSB9fVxuICAgIDwvaWd4LWRheS1pdGVtPlxuPC9kaXY+XG4iXX0=
|