@fundamental-ngx/core 0.46.2-rc.1 → 0.46.2-rc.3
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/calendar/calendar-directives.d.ts +5 -9
- package/calendar/calendar-header/calendar-header.component.d.ts +7 -25
- package/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.d.ts +1 -20
- package/calendar/calendar-views/calendar-day-view/calendar-day-view.component.d.ts +6 -44
- package/calendar/calendar-views/calendar-month-view/calendar-month-view.component.d.ts +2 -21
- package/calendar/calendar-views/calendar-year-view/calendar-year-view.component.d.ts +3 -22
- package/calendar/calendar.component.d.ts +9 -9
- package/calendar/i18n/calendar-i18n-labels.d.ts +20 -22
- package/calendar/patch-deprecated-i18n-labels.d.ts +6 -0
- package/esm2022/calendar/calendar-directives.mjs +10 -18
- package/esm2022/calendar/calendar-header/calendar-header.component.mjs +30 -60
- package/esm2022/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.mjs +10 -35
- package/esm2022/calendar/calendar-views/calendar-day-view/calendar-day-view.component.mjs +13 -65
- package/esm2022/calendar/calendar-views/calendar-month-view/calendar-month-view.component.mjs +11 -36
- package/esm2022/calendar/calendar-views/calendar-year-view/calendar-year-view.component.mjs +12 -37
- package/esm2022/calendar/calendar.component.mjs +20 -10
- package/esm2022/calendar/i18n/calendar-i18n-labels.mjs +22 -28
- package/esm2022/calendar/patch-deprecated-i18n-labels.mjs +21 -0
- package/fesm2022/fundamental-ngx-core-calendar.mjs +150 -288
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fundamental-ngx-core-v0.46.2-rc.3.tgz +0 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.46.2-rc.1.tgz +0 -0
package/esm2022/calendar/calendar-views/calendar-month-view/calendar-month-view.component.mjs
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
|
|
5
|
+
import { NgFor } from '@angular/common';
|
|
6
|
+
import { ButtonModule } from '@fundamental-ngx/core/button';
|
|
7
|
+
import { FdTranslatePipe } from '@fundamental-ngx/i18n';
|
|
5
8
|
import { CalendarService } from '../../calendar.service';
|
|
6
9
|
import { DefaultCalendarActiveCellStrategy } from '../../models/common';
|
|
7
|
-
import { CalendarI18nLabels } from '../../i18n/calendar-i18n-labels';
|
|
8
|
-
import { ButtonModule } from '@fundamental-ngx/core/button';
|
|
9
|
-
import { NgFor } from '@angular/common';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "../../calendar.service";
|
|
12
12
|
import * as i2 from "@fundamental-ngx/core/datetime";
|
|
13
|
-
import * as i3 from "
|
|
14
|
-
import * as i4 from "@fundamental-ngx/core/button";
|
|
13
|
+
import * as i3 from "@fundamental-ngx/core/button";
|
|
15
14
|
/** Component representing the month view of the calendar. */
|
|
16
15
|
export class CalendarMonthViewComponent {
|
|
17
16
|
/** @hidden */
|
|
18
|
-
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter
|
|
17
|
+
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter) {
|
|
19
18
|
this._eRef = _eRef;
|
|
20
19
|
this._changeDetectorRef = _changeDetectorRef;
|
|
21
20
|
this._calendarService = _calendarService;
|
|
22
21
|
this._dateTimeFormats = _dateTimeFormats;
|
|
23
22
|
this._dateTimeAdapter = _dateTimeAdapter;
|
|
24
|
-
this._calendarI18nLabels = _calendarI18nLabels;
|
|
25
23
|
/** An event fired when a new month is selected */
|
|
26
24
|
this.monthClicked = new EventEmitter();
|
|
27
25
|
/**
|
|
@@ -74,29 +72,6 @@ export class CalendarMonthViewComponent {
|
|
|
74
72
|
get viewId() {
|
|
75
73
|
return this.id + '-month-view';
|
|
76
74
|
}
|
|
77
|
-
/**
|
|
78
|
-
* @hidden
|
|
79
|
-
* Today cell label.
|
|
80
|
-
* Is used in conjunction with cell date itself
|
|
81
|
-
*/
|
|
82
|
-
get _todayAriaLabel() {
|
|
83
|
-
return this._calendarI18nLabels.todayLabel;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* @hidden
|
|
87
|
-
* Selected date cell label.
|
|
88
|
-
* Is used in conjunction with cell date itself
|
|
89
|
-
*/
|
|
90
|
-
get _selectedDateAriaLabel() {
|
|
91
|
-
return this._calendarI18nLabels.dateSelectedLabel;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* @hidden
|
|
95
|
-
* View description
|
|
96
|
-
*/
|
|
97
|
-
get _viewRoleDescription() {
|
|
98
|
-
return this._calendarI18nLabels.calendarMonthViewDescription;
|
|
99
|
-
}
|
|
100
75
|
/**
|
|
101
76
|
* @hidden
|
|
102
77
|
* Today cell label ID
|
|
@@ -231,18 +206,18 @@ export class CalendarMonthViewComponent {
|
|
|
231
206
|
_focusOnCellByIndex(index) {
|
|
232
207
|
this._focusElementBySelector(`#${this._getId(index)}`);
|
|
233
208
|
}
|
|
234
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }
|
|
235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarMonthViewComponent, isStandalone: true, selector: "fd-calendar-month-view", inputs: { id: "id", monthSelected: "monthSelected", focusEscapeFunction: "focusEscapeFunction", year: "year" }, outputs: { monthClicked: "monthClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"
|
|
209
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
210
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarMonthViewComponent, isStandalone: true, selector: "fd-calendar-month-view", inputs: { id: "id", monthSelected: "monthSelected", focusEscapeFunction: "focusEscapeFunction", year: "year" }, outputs: { monthClicked: "monthClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\" *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
236
211
|
}
|
|
237
212
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarMonthViewComponent, decorators: [{
|
|
238
213
|
type: Component,
|
|
239
214
|
args: [{ selector: 'fd-calendar-month-view', encapsulation: ViewEncapsulation.None, host: {
|
|
240
215
|
'[attr.id]': 'viewId'
|
|
241
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, ButtonModule], template: "<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"
|
|
216
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, ButtonModule, FdTranslatePipe], template: "<table\n class=\"fd-calendar__content fd-calendar__content--months\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\" *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n" }]
|
|
242
217
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: undefined, decorators: [{
|
|
243
218
|
type: Inject,
|
|
244
219
|
args: [DATE_TIME_FORMATS]
|
|
245
|
-
}] }, { type: i2.DatetimeAdapter }
|
|
220
|
+
}] }, { type: i2.DatetimeAdapter }]; }, propDecorators: { id: [{
|
|
246
221
|
type: Input
|
|
247
222
|
}], monthSelected: [{
|
|
248
223
|
type: Input
|
|
@@ -253,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
253
228
|
}], monthClicked: [{
|
|
254
229
|
type: Output
|
|
255
230
|
}] } });
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFVBQVUsRUFHVixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBRXhDLDZEQUE2RDtBQWE3RCxNQUFNLE9BQU8sMEJBQTBCO0lBOENuQyxjQUFjO0lBQ2QsWUFDWSxLQUFpQixFQUNqQixrQkFBcUMsRUFDckMsZ0JBQWlDLEVBQ04sZ0JBQWlDLEVBQzVELGdCQUFvQyxFQUNwQyxtQkFBdUM7UUFMdkMsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDTixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQzVELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQXBDbkQsa0RBQWtEO1FBRXpDLGlCQUFZLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFRekU7OztXQUdHO1FBQ2MsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUMsY0FBYztRQUNHLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQUNoRCxjQUFjO1FBQ0csa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFM0M7OztXQUdHO1FBQ2MsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVsRSxjQUFjO1FBQ04sZUFBVSxHQUFHLEtBQUssQ0FBQztJQVV4QixDQUFDO0lBRUosY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxFQUFFO1lBQ3pGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksc0JBQXNCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDO0lBQ2hELENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsV0FBVyxDQUFDLFNBQXdCLEVBQUUsS0FBa0I7UUFDcEQsSUFBSSxLQUFLLEVBQUU7WUFDUCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1YsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQ0FBaUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsS0FBb0IsRUFBRSxLQUFhO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLGVBQXVCO1FBQzNDLE1BQU0sY0FBYyxHQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUYsSUFBSSxjQUFjLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEVBQVU7UUFDakIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsRUFBVTtRQUNsQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG1CQUFtQjtRQUN2QixNQUFNLFVBQVUsR0FBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFFLE1BQU0sU0FBUyxHQUFvQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUIsRUFBRTtZQUNsRixNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN2QyxPQUFPO2dCQUNILEtBQUs7Z0JBQ0wsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FDL0M7Z0JBQ0QsS0FBSztnQkFDTCxRQUFRLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhO2dCQUN0QyxPQUFPLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNwQyxRQUFRLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xELENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsdUJBQXVCO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2xELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUVyRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTthQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO2FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhO1FBQ2pCLE9BQXlCLEVBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsY0FBYztJQUNOLG1CQUFtQixDQUFDLEtBQWE7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0FyUlEsMEJBQTBCLDRHQW1EdkIsaUJBQWlCO2tHQW5EcEIsMEJBQTBCLGlUQ3hDdkMsOHpFQXNEQSwwRERoQmMsS0FBSyxrSEFBRSxZQUFZOzsyRkFFcEIsMEJBQTBCO2tCQVp0QyxTQUFTOytCQUNJLHdCQUF3QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQzs7MEJBcUR6QixNQUFNOzJCQUFDLGlCQUFpQjsyR0FoRDdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLRyxZQUFZO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEYXRlVGltZUZvcm1hdHMsIERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyTW9udGggfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXItbW9udGgnO1xuaW1wb3J0IHsgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5LCBFc2NhcGVGb2N1c0Z1bmN0aW9uLCBGb2N1c2FibGVDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4uLy4uL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKiBDb21wb25lbnQgcmVwcmVzZW50aW5nIHRoZSBtb250aCB2aWV3IG9mIHRoZSBjYWxlbmRhci4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXItbW9udGgtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICd2aWV3SWQnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgQnV0dG9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB7XG4gICAgLyoqIFRoZSBpZCBvZiB0aGUgY2FsZW5kYXIgcGFzc2VkIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogQSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgbW9udGggKi9cbiAgICBASW5wdXQoKVxuICAgIG1vbnRoU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBlc2NhcGUgZm9jdXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogQSB5ZWFyIHRoZSBtb250aCB2aWV3IGlzIHJlZmVycmluZyB0byAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhcjogbnVtYmVyO1xuXG4gICAgLyoqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBtb250aENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9udGggZ3JpZCB0YWJsZVxuICAgICAqL1xuICAgIF9jYWxlbmRhck1vbnRoTGlzdEdyaWQ6IENhbGVuZGFyTW9udGhbXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEEgbnVtYmVyIG9mZnNldCB1c2VkIHRvIGFjaGlldmUgdGhlIDEtMTIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNhbGVuZGFyXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9udGhPZmZzZXQ6IG51bWJlciA9IDE7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbW91bnRPZkNvbFBlclJvdzogbnVtYmVyID0gMztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Ftb3VudE9mUm93czogbnVtYmVyID0gNDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhckkxOG5MYWJlbHM6IENhbGVuZGFySTE4bkxhYmVsc1xuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCdtb250aFNlbGVjdGVkJyBpbiBjaGFuZ2VzIHx8ICd5ZWFyJyBpbiBjaGFuZ2VzIHx8ICdpZCcgaW4gY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgbnVtYmVyICgxLTEyKSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbW9udGggICovXG4gICAgZ2V0IGN1cnJlbnRNb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICB9XG5cbiAgICAvKiogIEdldHRlciBmb3IgdGhlIHByaXZhdGUgY2xhc3MgbWVtYmVyIF9tb250aE9mZnNldCAqL1xuICAgIGdldCBtb250aE9mZnNldCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhPZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy1tb250aC12aWV3JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbC5cbiAgICAgKiBJcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggY2VsbCBkYXRlIGl0c2VsZlxuICAgICAqL1xuICAgIGdldCBfdG9kYXlBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy50b2RheUxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGNlbGwgbGFiZWwuXG4gICAgICogSXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNlbGwgZGF0ZSBpdHNlbGZcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmRhdGVTZWxlY3RlZExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWaWV3IGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgZ2V0IF92aWV3Um9sZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMuY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfdG9kYXlMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctdG9kYXktbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0ZWQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIG1vdXNlIGNsaWNrIGV2ZW50IHdoZW4gYSBtb250aCBpcyBzZWxlY3RlZCAgKi9cbiAgICBzZWxlY3RNb250aChtb250aENlbGw6IENhbGVuZGFyTW9udGgsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCA9IG1vbnRoQ2VsbC5tb250aDtcbiAgICAgICAgdGhpcy5tb250aENsaWNrZWQuZW1pdCh0aGlzLm1vbnRoU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0TW9udGhMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBldmVudHMgKGExMXkpXG4gICAgICovXG4gICAgX29uS2V5ZG93bk1vbnRoSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGlkIG9mIG1vbnRoIGNlbGxcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHBhcmFtIGluZGV4IG1vbnRoIGdyaWQgY2VsbCBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1tb250aC0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGlzIGlzIGN1cnJlbnQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNDdXJyZW50KGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkICsgdGhpcy5fbW9udGhPZmZzZXQgPT09IHRoaXMuY3VycmVudE1vbnRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjaGVjayBpZiB0aGlzIGlzIHNlbGVjdGVkIG1vbnRoXG4gICAgICovXG4gICAgX2lzU2VsZWN0ZWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5tb250aFNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjcmVhdGUgbW9udGggZ3JpZCB3aXRoIHJlcXVpcmVkIG1ldGEgZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdE1vbnRoR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnc2hvcnQnKTtcblxuICAgICAgICBjb25zdCBtb250aExpc3Q6IENhbGVuZGFyTW9udGhbXSA9IG1vbnRoTmFtZXMubWFwKChtb250aE5hbWUsIGluZGV4KTogQ2FsZW5kYXJNb250aCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGluZGV4ICsgdGhpcy5tb250aE9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IG1vbnRoTmFtZSxcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMueWVhciwgbW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5tb250aEExMXlMYWJlbFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgY3VycmVudDogbW9udGggPT09IHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgICAgICAgICAgIHRhYkluZGV4OiBtb250aCA9PT0gdGhpcy5tb250aFNlbGVjdGVkID8gMCA6IC0xXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQgPSBbXTtcbiAgICAgICAgLyoqIENyZWF0aW5nIDJkIGdyaWQgKi9cbiAgICAgICAgd2hpbGUgKG1vbnRoTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZC5wdXNoKG1vbnRoTGlzdC5zcGxpY2UoMCwgdGhpcy5fYW1vdW50T2ZDb2xQZXJSb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZC5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgobW9udGhDZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCA9IHRoaXMuX2dldElkKHRoaXMuX2dldEluZGV4KHJvd0luZGV4LCBjb2xJbmRleCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gcHV0IGNvbmZpZ3VyYXRpb24gYW5kIGxpc3RlbmVycyBvbiBjYWxlbmRhciBrZXlib2FyZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBLZXlib2FyZFNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLl9hbW91bnRPZlJvd3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLl9hbW91bnRPZkNvbFBlclJvdztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uRm9jdXNJZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuc2VsZWN0TW9udGgodGhpcy5fZ2V0TW9udGhMaXN0KClbaW5kZXhdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCBtb250aCBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1vbnRoTGlzdCgpOiBDYWxlbmRhck1vbnRoW10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhck1vbnRoW10+W10pLmNvbmNhdCguLi50aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLW1vbnRoc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIl92aWV3Um9sZURlc2NyaXB0aW9uXCJcbj5cbiAgICA8dGJvZHkgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiIHJvbGU9XCJyb3dcIiAqbmdGb3I9XCJsZXQgY29sTW9udGhzIG9mIF9jYWxlbmRhck1vbnRoTGlzdEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aENlbGwgb2YgY29sTW9udGhzOyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19teS1pdGVtLS1jdXJyZW50XT1cIm1vbnRoQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cIm1vbnRoQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGFiSW5kZXhdPVwibW9udGhDZWxsLnRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJtb250aENlbGwuaWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwibW9udGhDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm1vbnRoQ2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci1tb250aF09XCJtb250aENlbGwubW9udGhcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25Nb250aEhhbmRsZXIoJGV2ZW50LCBtb250aENlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGhDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGhDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJtb250aENlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L3RhYmxlPlxuXG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7IF90b2RheUFyaWFMYWJlbCB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyBfc2VsZWN0ZWREYXRlQXJpYUxhYmVsIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBRXBILDZEQUE2RDtBQWE3RCxNQUFNLE9BQU8sMEJBQTBCO0lBOENuQyxjQUFjO0lBQ2QsWUFDWSxLQUFpQixF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QXNCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsY0FBYztJQUNOLG1CQUFtQixDQUFDLEtBQWE7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0ExUFEsMEJBQTBCLDRHQW1EdkIsaUJBQWlCO2tHQW5EcEIsMEJBQTBCLGlUQ3hDdkMsbTVFQXNEQSwwRERoQmMsS0FBSyxrSEFBRSxZQUFZLG9LQUFFLGVBQWU7OzJGQUVyQywwQkFBMEI7a0JBWnRDLFNBQVM7K0JBQ0ksd0JBQXdCLGlCQUduQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLFdBQVcsRUFBRSxRQUFRO3FCQUN4QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQzs7MEJBcUQxQyxNQUFNOzJCQUFDLGlCQUFpQjswRUFoRDdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLRyxZQUFZO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyTW9udGggfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXItbW9udGgnO1xuaW1wb3J0IHsgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5LCBFc2NhcGVGb2N1c0Z1bmN0aW9uLCBGb2N1c2FibGVDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uJztcblxuLyoqIENvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIG1vbnRoIHZpZXcgb2YgdGhlIGNhbGVuZGFyLiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1tb250aC12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBCdXR0b25Nb2R1bGUsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEEgbnVtYmVyICgxLTEyKSByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIG1vbnRoICovXG4gICAgQElucHV0KClcbiAgICBtb250aFNlbGVjdGVkOiBudW1iZXI7XG5cbiAgICAvKiogQSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXNjYXBlIGZvY3VzICovXG4gICAgQElucHV0KClcbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uOiBFc2NhcGVGb2N1c0Z1bmN0aW9uO1xuXG4gICAgLyoqIEEgeWVhciB0aGUgbW9udGggdmlldyBpcyByZWZlcnJpbmcgdG8gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXI6IG51bWJlcjtcblxuICAgIC8qKiBBbiBldmVudCBmaXJlZCB3aGVuIGEgbmV3IG1vbnRoIGlzIHNlbGVjdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9udGhDbGlja2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1vbnRoIGdyaWQgdGFibGVcbiAgICAgKi9cbiAgICBfY2FsZW5kYXJNb250aExpc3RHcmlkOiBDYWxlbmRhck1vbnRoW11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBIG51bWJlciBvZmZzZXQgdXNlZCB0byBhY2hpZXZlIHRoZSAxLTEyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vbnRoT2Zmc2V0OiBudW1iZXIgPSAxO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZDb2xQZXJSb3c6IG51bWJlciA9IDM7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbW91bnRPZlJvd3M6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWF0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPlxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCdtb250aFNlbGVjdGVkJyBpbiBjaGFuZ2VzIHx8ICd5ZWFyJyBpbiBjaGFuZ2VzIHx8ICdpZCcgaW4gY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgbnVtYmVyICgxLTEyKSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbW9udGggICovXG4gICAgZ2V0IGN1cnJlbnRNb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICB9XG5cbiAgICAvKiogIEdldHRlciBmb3IgdGhlIHByaXZhdGUgY2xhc3MgbWVtYmVyIF9tb250aE9mZnNldCAqL1xuICAgIGdldCBtb250aE9mZnNldCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhPZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy1tb250aC12aWV3JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfdG9kYXlMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctdG9kYXktbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0ZWQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIG1vdXNlIGNsaWNrIGV2ZW50IHdoZW4gYSBtb250aCBpcyBzZWxlY3RlZCAgKi9cbiAgICBzZWxlY3RNb250aChtb250aENlbGw6IENhbGVuZGFyTW9udGgsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCA9IG1vbnRoQ2VsbC5tb250aDtcbiAgICAgICAgdGhpcy5tb250aENsaWNrZWQuZW1pdCh0aGlzLm1vbnRoU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0TW9udGhMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBldmVudHMgKGExMXkpXG4gICAgICovXG4gICAgX29uS2V5ZG93bk1vbnRoSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGlkIG9mIG1vbnRoIGNlbGxcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHBhcmFtIGluZGV4IG1vbnRoIGdyaWQgY2VsbCBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1tb250aC0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGlzIGlzIGN1cnJlbnQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNDdXJyZW50KGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkICsgdGhpcy5fbW9udGhPZmZzZXQgPT09IHRoaXMuY3VycmVudE1vbnRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjaGVjayBpZiB0aGlzIGlzIHNlbGVjdGVkIG1vbnRoXG4gICAgICovXG4gICAgX2lzU2VsZWN0ZWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5tb250aFNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjcmVhdGUgbW9udGggZ3JpZCB3aXRoIHJlcXVpcmVkIG1ldGEgZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdE1vbnRoR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnc2hvcnQnKTtcblxuICAgICAgICBjb25zdCBtb250aExpc3Q6IENhbGVuZGFyTW9udGhbXSA9IG1vbnRoTmFtZXMubWFwKChtb250aE5hbWUsIGluZGV4KTogQ2FsZW5kYXJNb250aCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGluZGV4ICsgdGhpcy5tb250aE9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IG1vbnRoTmFtZSxcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMueWVhciwgbW9udGgsIDEpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5tb250aEExMXlMYWJlbFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgY3VycmVudDogbW9udGggPT09IHRoaXMuY3VycmVudE1vbnRoLFxuICAgICAgICAgICAgICAgIHRhYkluZGV4OiBtb250aCA9PT0gdGhpcy5tb250aFNlbGVjdGVkID8gMCA6IC0xXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQgPSBbXTtcbiAgICAgICAgLyoqIENyZWF0aW5nIDJkIGdyaWQgKi9cbiAgICAgICAgd2hpbGUgKG1vbnRoTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZC5wdXNoKG1vbnRoTGlzdC5zcGxpY2UoMCwgdGhpcy5fYW1vdW50T2ZDb2xQZXJSb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZC5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgobW9udGhDZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCA9IHRoaXMuX2dldElkKHRoaXMuX2dldEluZGV4KHJvd0luZGV4LCBjb2xJbmRleCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gcHV0IGNvbmZpZ3VyYXRpb24gYW5kIGxpc3RlbmVycyBvbiBjYWxlbmRhciBrZXlib2FyZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBLZXlib2FyZFNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLl9hbW91bnRPZlJvd3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLl9hbW91bnRPZkNvbFBlclJvdztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uRm9jdXNJZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuc2VsZWN0TW9udGgodGhpcy5fZ2V0TW9udGhMaXN0KClbaW5kZXhdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCBtb250aCBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1vbnRoTGlzdCgpOiBDYWxlbmRhck1vbnRoW10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhck1vbnRoW10+W10pLmNvbmNhdCguLi50aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLW1vbnRoc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4+XG4gICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIiByb2xlPVwicm93XCIgKm5nRm9yPVwibGV0IGNvbE1vbnRocyBvZiBfY2FsZW5kYXJNb250aExpc3RHcmlkOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbXktaXRlbVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbW9udGhDZWxsIG9mIGNvbE1vbnRoczsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJtb250aENlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYkluZGV4XT1cIm1vbnRoQ2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIm1vbnRoQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJtb250aENlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItbW9udGhdPVwibW9udGhDZWxsLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duTW9udGhIYW5kbGVyKCRldmVudCwgbW9udGhDZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1vbnRoKG1vbnRoQ2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwibW9udGhDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhDZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhDZWxsLnNlbGVjdGVkID8gX3NlbGVjdGVkRGF0ZUxhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoQ2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtb250aENlbGwuYXJpYUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG48ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl90b2RheUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLnRvZGF5TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RlZERhdGVMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci5kYXRlU2VsZWN0ZWRMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,42 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { takeUntil } from 'rxjs/operators';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
3
2
|
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
|
|
5
|
+
import { NgFor } from '@angular/common';
|
|
6
|
+
import { ButtonModule } from '@fundamental-ngx/core/button';
|
|
7
|
+
import { FdTranslatePipe } from '@fundamental-ngx/i18n';
|
|
5
8
|
import { CalendarService } from '../../calendar.service';
|
|
6
9
|
import { DefaultCalendarActiveCellStrategy } from '../../models/common';
|
|
7
|
-
import { CalendarI18nLabels } from '../../i18n/calendar-i18n-labels';
|
|
8
|
-
import { ButtonModule } from '@fundamental-ngx/core/button';
|
|
9
|
-
import { NgFor } from '@angular/common';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "../../calendar.service";
|
|
12
12
|
import * as i2 from "@fundamental-ngx/core/datetime";
|
|
13
|
-
import * as i3 from "
|
|
14
|
-
import * as i4 from "@fundamental-ngx/core/button";
|
|
13
|
+
import * as i3 from "@fundamental-ngx/core/button";
|
|
15
14
|
/** Component representing the YearView of the Calendar Component. */
|
|
16
15
|
export class CalendarYearViewComponent {
|
|
17
|
-
/**
|
|
18
|
-
* @hidden
|
|
19
|
-
* Today cell label.
|
|
20
|
-
* Is used in conjunction with cell date itself
|
|
21
|
-
*/
|
|
22
|
-
get _todayAriaLabel() {
|
|
23
|
-
return this._calendarI18nLabels.todayLabel;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* @hidden
|
|
27
|
-
* Selected date cell label.
|
|
28
|
-
* Is used in conjunction with cell date itself
|
|
29
|
-
*/
|
|
30
|
-
get _selectedDateAriaLabel() {
|
|
31
|
-
return this._calendarI18nLabels.dateSelectedLabel;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* @hidden
|
|
35
|
-
* View description
|
|
36
|
-
*/
|
|
37
|
-
get _viewRoleDescription() {
|
|
38
|
-
return this._calendarI18nLabels.calendarYearsViewDescription;
|
|
39
|
-
}
|
|
40
16
|
/** View ID */
|
|
41
17
|
get viewId() {
|
|
42
18
|
return this.id + '-year-view';
|
|
@@ -56,13 +32,12 @@ export class CalendarYearViewComponent {
|
|
|
56
32
|
return this.viewId + '-selected-date-label';
|
|
57
33
|
}
|
|
58
34
|
/** @hidden */
|
|
59
|
-
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats
|
|
35
|
+
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {
|
|
60
36
|
this._eRef = _eRef;
|
|
61
37
|
this._changeDetectorRef = _changeDetectorRef;
|
|
62
38
|
this._calendarService = _calendarService;
|
|
63
39
|
this._dateTimeAdapter = _dateTimeAdapter;
|
|
64
40
|
this._dateTimeFormats = _dateTimeFormats;
|
|
65
|
-
this._calendarI18nLabels = _calendarI18nLabels;
|
|
66
41
|
/** Event fired when a year is selected. */
|
|
67
42
|
this.yearClicked = new EventEmitter();
|
|
68
43
|
/**
|
|
@@ -275,18 +250,18 @@ export class CalendarYearViewComponent {
|
|
|
275
250
|
_focusOnCellByIndex(index) {
|
|
276
251
|
this._focusElementBySelector(`#${this._getId(index)}`);
|
|
277
252
|
}
|
|
278
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }
|
|
279
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarYearViewComponent, isStandalone: true, selector: "fd-calendar-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", yearViewGrid: "yearViewGrid" }, outputs: { yearClicked: "yearClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"
|
|
253
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
254
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarYearViewComponent, isStandalone: true, selector: "fd-calendar-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", yearViewGrid: "yearViewGrid" }, outputs: { yearClicked: "yearClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\" *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
280
255
|
}
|
|
281
256
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarYearViewComponent, decorators: [{
|
|
282
257
|
type: Component,
|
|
283
258
|
args: [{ selector: 'fd-calendar-year-view', encapsulation: ViewEncapsulation.None, host: {
|
|
284
259
|
'[attr.id]': 'viewId'
|
|
285
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, ButtonModule], template: "<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"
|
|
260
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgFor, ButtonModule, FdTranslatePipe], template: "<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" role=\"row\" *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n</table>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n</div>\n" }]
|
|
286
261
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{
|
|
287
262
|
type: Inject,
|
|
288
263
|
args: [DATE_TIME_FORMATS]
|
|
289
|
-
}] }
|
|
264
|
+
}] }]; }, propDecorators: { id: [{
|
|
290
265
|
type: Input
|
|
291
266
|
}], focusEscapeFunction: [{
|
|
292
267
|
type: Input
|
|
@@ -297,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
297
272
|
}], yearClicked: [{
|
|
298
273
|
type: Output
|
|
299
274
|
}] } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXIteWVhci12aWV3L2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixVQUFVLEVBRVYsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUV4QyxxRUFBcUU7QUFhckUsTUFBTSxPQUFPLHlCQUF5QjtJQStDbEM7Ozs7T0FJRztJQUNILElBQUksZUFBZTtR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QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sbUJBQW1CLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzhHQTdWUSx5QkFBeUIsMklBNkd0QixpQkFBaUI7a0dBN0dwQix5QkFBeUIsNFRDeEN0QyxreUVBc0RBLDBERGhCYyxLQUFLLGtIQUFFLFlBQVk7OzJGQUVwQix5QkFBeUI7a0JBWnJDLFNBQVM7K0JBQ0ksdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLFdBQVcsRUFBRSxRQUFRO3FCQUN4QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDOzswQkErR3pCLE1BQU07MkJBQUMsaUJBQWlCOzZFQTFHN0IsRUFBRTtzQkFERCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtHLFdBQVc7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgT3V0cHV0LFxuICAgIElucHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGVUaW1lRm9ybWF0cywgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyR3JpZCwgQ2FsZW5kYXJZZWFyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgQ2FsZW5kYXJJMThuTGFiZWxzIH0gZnJvbSAnLi4vLi4vaTE4bi9jYWxlbmRhci1pMThuLWxhYmVscyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqIENvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIFllYXJWaWV3IG9mIHRoZSBDYWxlbmRhciBDb21wb25lbnQuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLXllYXItdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdGb3IsIEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB7XG4gICAgLyoqIFRoZSBpZCBvZiB0aGUgY2FsZW5kYXIgcGFzc2VkIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9jdXMgd291bGQgZXNjYXBlIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgeWVhciB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJWaWV3R3JpZDogQ2FsZW5kYXJZZWFyR3JpZDtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGEgeWVhciBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB5ZWFyQ2xpY2tlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIHllYXIgZnJvbSBjYWxlbmRhclllYXJMaXN0IHNob3VsZCBiZSBmb2N1c2FibGUgYnkgdGFiIGtleVxuICAgICAqL1xuICAgIF9hY3RpdmVZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHRoYXQgc3RvcmVzIHRoZSBkb3plbiBvZiB5ZWFycyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIF9jYWxlbmRhclllYXJMaXN0R3JpZDogQ2FsZW5kYXJZZWFyW11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgX2ZpcnN0WWVhckluTGlzdDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZGF5IGNlbGwgbGFiZWwuXG4gICAgICogSXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNlbGwgZGF0ZSBpdHNlbGZcbiAgICAgKi9cbiAgICBnZXQgX3RvZGF5QXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMudG9kYXlMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0ZWQgZGF0ZSBjZWxsIGxhYmVsLlxuICAgICAqIElzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjZWxsIGRhdGUgaXRzZWxmXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0ZWRMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmlldyBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIGdldCBfdmlld1JvbGVEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy15ZWFyLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWF0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfY2FsZW5kYXJJMThuTGFiZWxzOiBDYWxlbmRhckkxOG5MYWJlbHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy5fY3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLnllYXJTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHwgJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgcHJldmlvdXMge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ICs9IHRoaXMuX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IHt7Y29sICogcm93fX0geWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWRQcmV2aW91c1llYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgLT0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHNlbmRzIHRoZSB5ZWFyIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdoZW4gaXQgaXMgY2xpY2tlZC4gKi9cbiAgICBzZWxlY3RZZWFyKHNlbGVjdGVkWWVhcjogQ2FsZW5kYXJZZWFyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZCA9IHNlbGVjdGVkWWVhci55ZWFyO1xuICAgICAgICB0aGlzLnllYXJDbGlja2VkLmVtaXQodGhpcy55ZWFyU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0WWVhckxpc3QoKSk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7Y2VsbFRvRm9jdXMuaWR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAgICovXG4gICAgX29uS2V5ZG93blllYXJIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGFsbG93cyB0byBmb2N1cyBlbGVtZW50cyBpbnNpZGUgdGhpcyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBfZm9jdXNFbGVtZW50QnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgPSB0aGlzLl9lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFN0YW5kYXJkaXplZCBtZXRob2QgdG8gY2FsY3VsYXRlIGdyaWQgW3hdW3ldIHRvIGluZGV4IG51bWJlciBvZiBmbGF0dGVuIGxpc3RcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGdyaWQgY2VsbCBpZCBiZSBpbmRleFxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFyLScgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIHllYXIsIHJldHVybiBzZWxlY3RlZCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgeWVhciwgYnV0IHRoZXJlIGlzIGN1cnJlbnQgeWVhciwgcmV0dXJuIGN1cnJlbnQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgeWVhciwgb3Igc2VsZWN0ZWQsIHJldHVybiBmaXJzdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVZZWFyKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRZZWFyQ2VsbC55ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhckxpc3QoKS5maW5kKCh7IHllYXIgfSkgPT4geWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIpO1xuICAgICAgICBpZiAoY3VycmVudFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDogbnVtYmVyID0gdGhpcy55ZWFyVmlld0dyaWQuY29scyAqIHRoaXMueWVhclZpZXdHcmlkLnJvd3M7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyWWVhckxpc3Q6IENhbGVuZGFyWWVhcltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDsgKyt4KSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgeDtcbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fZ2V0WWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHllYXIgPT09IHRoaXMuX2N1cnJlbnRZZWFyLFxuICAgICAgICAgICAgICAgIGluZGV4OiB4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKiogQ3JlYXRpbmcgMmQgZ3JpZCAqL1xuICAgICAgICB3aGlsZSAoY2FsZW5kYXJZZWFyTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLnB1c2goY2FsZW5kYXJZZWFyTGlzdC5zcGxpY2UoMCwgdGhpcy55ZWFyVmlld0dyaWQuY29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlWWVhciA9IHRoaXMuX2dldEFjdGl2ZVllYXIoKTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZC5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgoY2VsbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmlkID0gdGhpcy5fZ2V0SWQodGhpcy5fZ2V0SW5kZXgocm93SW5kZXgsIGNvbEluZGV4KSk7XG4gICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9IGNlbGwueWVhciA9PT0gdGhpcy5fYWN0aXZlWWVhciA/IDAgOiAtMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhck5hbWUoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFllYXJTdHJpbmcoeWVhciwgZm9ybWF0dGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyBhcmlhIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBcmlhWWVhck5hbWUoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpLFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkueWVhckExMXlMYWJlbFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSB0YWtpbmcgaW50byBhY2NvdW50IHllYXJNYXBwaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJTdHJpbmcoeWVhcjogbnVtYmVyLCBkZWZhdWx0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMueWVhclZpZXdHcmlkLnllYXJNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcoeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCB5ZWFyIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhckxpc3QoKTogQ2FsZW5kYXJZZWFyW10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhclllYXJbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBbW91bnRPZlllYXJzU2hvd25BdE9uY2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhclZpZXdHcmlkLnJvd3MgKiB0aGlzLnllYXJWaWV3R3JpZC5jb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gcHV0IGNvbmZpZ3VyYXRpb24gYW5kIGxpc3RlbmVycyBvbiBjYWxlbmRhciBrZXlib2FyZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBLZXlib2FyZFNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5jb2xzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy55ZWFyVmlld0dyaWQucm93cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uRm9jdXNJZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuc2VsZWN0WWVhcih0aGlzLl9nZXRZZWFyTGlzdCgpW2luZGV4XSkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPHRhYmxlXG4gICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudCBmZC1jYWxlbmRhcl9fY29udGVudC0teWVhcnNcIlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCJfdmlld1JvbGVEZXNjcmlwdGlvblwiXG4+XG4gICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIiByb2xlPVwicm93XCIgKm5nRm9yPVwibGV0IGNvbFllYXJzIG9mIF9jYWxlbmRhclllYXJMaXN0R3JpZDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXJDZWxsIG9mIGNvbFllYXJzOyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19teS1pdGVtLS1jdXJyZW50XT1cInllYXJDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInllYXJDZWxsLmlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ5ZWFyQ2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ5ZWFyQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ5ZWFyQ2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci15ZWFyXT1cInllYXJDZWxsLnllYXJcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIHllYXJDZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhckNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cInllYXJDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5jdXJyZW50ID8gX3RvZGF5TGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHllYXJDZWxsLnNlbGVjdGVkID8gX3NlbGVjdGVkRGF0ZUxhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHllYXJDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZCArICctYXJpYS1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgeWVhckNlbGwuYXJpYUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG48ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl90b2RheUxhYmVsSWRcIj57eyBfdG9kYXlBcmlhTGFiZWwgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RlZERhdGVMYWJlbElkXCI+e3sgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCB9fTwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXIteWVhci12aWV3L2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDOzs7OztBQUVwSCxxRUFBcUU7QUFhckUsTUFBTSxPQUFPLHlCQUF5QjtJQStDbEMsY0FBYztJQUNkLElBQUksTUFBTTtRQUNOLE9B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QztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sbUJBQW1CLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzhHQWxVUSx5QkFBeUIsMklBbUZ0QixpQkFBaUI7a0dBbkZwQix5QkFBeUIsNFRDeEN0Qyx1M0VBc0RBLDBERGhCYyxLQUFLLGtIQUFFLFlBQVksb0tBQUUsZUFBZTs7MkZBRXJDLHlCQUF5QjtrQkFackMsU0FBUzsrQkFDSSx1QkFBdUIsaUJBR2xCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0YsV0FBVyxFQUFFLFFBQVE7cUJBQ3hCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDOzswQkFxRjFDLE1BQU07MkJBQUMsaUJBQWlCOzRDQWhGN0IsRUFBRTtzQkFERCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtHLFdBQVc7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRlVGltZUZvcm1hdHMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyLCBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuXG4vKiogQ29tcG9uZW50IHJlcHJlc2VudGluZyB0aGUgWWVhclZpZXcgb2YgdGhlIENhbGVuZGFyIENvbXBvbmVudC4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXIteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICd2aWV3SWQnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgQnV0dG9uTW9kdWxlLCBGZFRyYW5zbGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGZvY3VzIHdvdWxkIGVzY2FwZSB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogUGFyYW1ldGVyIGhvbGRpbmcgdGhlIHllYXIgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBhIHllYXIgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgeWVhckNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSB3aGljaCB5ZWFyIGZyb20gY2FsZW5kYXJZZWFyTGlzdCBzaG91bGQgYmUgZm9jdXNhYmxlIGJ5IHRhYiBrZXlcbiAgICAgKi9cbiAgICBfYWN0aXZlWWVhcjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhcmFtZXRlciB0aGF0IHN0b3JlcyB0aGUgZG96ZW4gb2YgeWVhcnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC5cbiAgICAgKi9cbiAgICBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ6IENhbGVuZGFyWWVhcltdW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgdGhlIHllYXIgb2YgdGhlIHByZXNlbnQgZGF5LlxuICAgICAqL1xuICAgIF9jdXJyZW50WWVhcjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhcmFtZXRlciBzdG9yaW5nIGZpcnN0IHNob3duIHllYXIgb24gbGlzdFxuICAgICAqL1xuICAgIF9maXJzdFllYXJJbkxpc3Q6IG51bWJlcjtcblxuICAgIC8qKiBWaWV3IElEICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICcteWVhci12aWV3JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfdG9kYXlMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctdG9kYXktbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0ZWQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy5fY3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLnllYXJTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHwgJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgcHJldmlvdXMge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ICs9IHRoaXMuX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IHt7Y29sICogcm93fX0geWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWRQcmV2aW91c1llYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgLT0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHNlbmRzIHRoZSB5ZWFyIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdoZW4gaXQgaXMgY2xpY2tlZC4gKi9cbiAgICBzZWxlY3RZZWFyKHNlbGVjdGVkWWVhcjogQ2FsZW5kYXJZZWFyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZCA9IHNlbGVjdGVkWWVhci55ZWFyO1xuICAgICAgICB0aGlzLnllYXJDbGlja2VkLmVtaXQodGhpcy55ZWFyU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0WWVhckxpc3QoKSk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7Y2VsbFRvRm9jdXMuaWR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAgICovXG4gICAgX29uS2V5ZG93blllYXJIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGFsbG93cyB0byBmb2N1cyBlbGVtZW50cyBpbnNpZGUgdGhpcyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBfZm9jdXNFbGVtZW50QnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgPSB0aGlzLl9lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFN0YW5kYXJkaXplZCBtZXRob2QgdG8gY2FsY3VsYXRlIGdyaWQgW3hdW3ldIHRvIGluZGV4IG51bWJlciBvZiBmbGF0dGVuIGxpc3RcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGdyaWQgY2VsbCBpZCBiZSBpbmRleFxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFyLScgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIHllYXIsIHJldHVybiBzZWxlY3RlZCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgeWVhciwgYnV0IHRoZXJlIGlzIGN1cnJlbnQgeWVhciwgcmV0dXJuIGN1cnJlbnQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgeWVhciwgb3Igc2VsZWN0ZWQsIHJldHVybiBmaXJzdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVZZWFyKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRZZWFyQ2VsbC55ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhckxpc3QoKS5maW5kKCh7IHllYXIgfSkgPT4geWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIpO1xuICAgICAgICBpZiAoY3VycmVudFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDogbnVtYmVyID0gdGhpcy55ZWFyVmlld0dyaWQuY29scyAqIHRoaXMueWVhclZpZXdHcmlkLnJvd3M7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyWWVhckxpc3Q6IENhbGVuZGFyWWVhcltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDsgKyt4KSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgeDtcbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fZ2V0WWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHllYXIgPT09IHRoaXMuX2N1cnJlbnRZZWFyLFxuICAgICAgICAgICAgICAgIGluZGV4OiB4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKiogQ3JlYXRpbmcgMmQgZ3JpZCAqL1xuICAgICAgICB3aGlsZSAoY2FsZW5kYXJZZWFyTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLnB1c2goY2FsZW5kYXJZZWFyTGlzdC5zcGxpY2UoMCwgdGhpcy55ZWFyVmlld0dyaWQuY29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlWWVhciA9IHRoaXMuX2dldEFjdGl2ZVllYXIoKTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZC5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgoY2VsbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmlkID0gdGhpcy5fZ2V0SWQodGhpcy5fZ2V0SW5kZXgocm93SW5kZXgsIGNvbEluZGV4KSk7XG4gICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9IGNlbGwueWVhciA9PT0gdGhpcy5fYWN0aXZlWWVhciA/IDAgOiAtMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhck5hbWUoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFllYXJTdHJpbmcoeWVhciwgZm9ybWF0dGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyBhcmlhIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBcmlhWWVhck5hbWUoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpLFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkueWVhckExMXlMYWJlbFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSB0YWtpbmcgaW50byBhY2NvdW50IHllYXJNYXBwaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJTdHJpbmcoeWVhcjogbnVtYmVyLCBkZWZhdWx0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMueWVhclZpZXdHcmlkLnllYXJNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcoeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCB5ZWFyIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhckxpc3QoKTogQ2FsZW5kYXJZZWFyW10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhclllYXJbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBbW91bnRPZlllYXJzU2hvd25BdE9uY2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhclZpZXdHcmlkLnJvd3MgKiB0aGlzLnllYXJWaWV3R3JpZC5jb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gcHV0IGNvbmZpZ3VyYXRpb24gYW5kIGxpc3RlbmVycyBvbiBjYWxlbmRhciBrZXlib2FyZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBLZXlib2FyZFNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5jb2xzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy55ZWFyVmlld0dyaWQucm93cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uRm9jdXNJZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHRoaXMuc2VsZWN0WWVhcih0aGlzLl9nZXRZZWFyTGlzdCgpW2luZGV4XSkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPHRhYmxlXG4gICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudCBmZC1jYWxlbmRhcl9fY29udGVudC0teWVhcnNcIlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgcm9sZT1cInJvd1wiICpuZ0Zvcj1cImxldCBjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyQ2VsbCBvZiBjb2xZZWFyczsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cInllYXJDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwieWVhckNlbGwudGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwieWVhckNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwieWVhckNlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXIteWVhcl09XCJ5ZWFyQ2VsbC55ZWFyXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duWWVhckhhbmRsZXIoJGV2ZW50LCB5ZWFyQ2VsbC5pbmRleClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RZZWFyKHllYXJDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhckNlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeWVhckNlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5zZWxlY3RlZCA/IF9zZWxlY3RlZERhdGVMYWJlbElkIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyQ2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwieWVhckNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHllYXJDZWxsLmFyaWFMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfdG9kYXlMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0ZWREYXRlTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbjwvZGl2PlxuIl19
|