@fundamental-ngx/core 0.46.2-rc.0 → 0.46.2-rc.10
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/combobox/combobox-item.directive.d.ts +16 -0
- package/combobox/combobox.component.d.ts +10 -6
- package/combobox/combobox.interface.d.ts +4 -0
- package/combobox/combobox.module.d.ts +3 -2
- package/combobox/index.d.ts +1 -0
- package/esm2022/avatar/avatar.component.mjs +1 -1
- package/esm2022/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2022/button/button.component.mjs +1 -1
- 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/esm2022/combobox/combobox-item.directive.mjs +24 -0
- package/esm2022/combobox/combobox.component.mjs +14 -7
- package/esm2022/combobox/combobox.interface.mjs +1 -1
- package/esm2022/combobox/combobox.module.mjs +5 -4
- package/esm2022/combobox/index.mjs +2 -1
- package/esm2022/dialog/dialog-close-button/dialog-close-button.component.mjs +1 -1
- package/esm2022/dialog/dialog-full-screen-toggler-button/dialog-full-screen-toggler-button.component.mjs +1 -1
- package/esm2022/form/form-label/form-label.component.mjs +2 -2
- package/esm2022/grid-list/components/grid-list-filter-bar/grid-list-filter-bar.component.mjs +2 -2
- package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +2 -2
- package/esm2022/icon/icon.component.mjs +77 -28
- package/esm2022/info-label/info-label.component.mjs +1 -1
- package/esm2022/list/list-navigation-item/list-navigation-item.component.mjs +1 -1
- package/esm2022/message-strip/message-strip.component.mjs +1 -1
- package/esm2022/micro-process-flow/components/micro-process-flow-icon/micro-process-flow-icon.component.mjs +1 -1
- package/esm2022/multi-combobox/index.mjs +2 -1
- package/esm2022/multi-combobox/multi-announcer/multi-announcer.directive.mjs +74 -0
- package/esm2022/multi-combobox/multi-combobox.component.mjs +6 -4
- package/esm2022/multi-combobox/multi-combobox.module.mjs +5 -4
- package/esm2022/multi-input/multi-input.component.mjs +16 -5
- package/esm2022/nested-list/nested-list-directives.mjs +2 -2
- package/esm2022/object-status/object-status.component.mjs +2 -2
- package/esm2022/select/select.component.mjs +2 -2
- package/esm2022/shellbar/product-menu/product-menu.component.mjs +1 -1
- package/esm2022/splitter/splitter-resizer/splitter-resizer.component.mjs +1 -1
- package/esm2022/table/table-wrapper.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +2 -2
- package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +2 -2
- package/esm2022/tabs/tab-utils/tab-directives.mjs +1 -1
- package/esm2022/timeline/components/timeline-node/timeline-node.component.mjs +1 -1
- package/esm2022/tree/components/tree-item/tree-item.component.mjs +2 -2
- package/esm2022/wizard/wizard-step-indicator/wizard-step-indicator.component.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-calendar.mjs +150 -288
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs +38 -10
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-grid-list.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-icon.mjs +77 -28
- package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-info-label.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +82 -11
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +15 -4
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-timeline.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
- package/fundamental-ngx-core-v0.46.2-rc.10.tgz +0 -0
- package/icon/icon.component.d.ts +26 -9
- package/multi-combobox/index.d.ts +1 -0
- package/multi-combobox/multi-announcer/multi-announcer.directive.d.ts +23 -0
- package/multi-combobox/multi-combobox.module.d.ts +2 -1
- package/multi-input/multi-input.component.d.ts +2 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.46.2-rc.0.tgz +0 -0
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { takeUntil } from 'rxjs/operators';
|
|
3
2
|
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { DatetimeAdapter } from '@fundamental-ngx/core/datetime';
|
|
5
|
-
import { CalendarI18nLabels } from '../i18n/calendar-i18n-labels';
|
|
6
|
-
import { CalendarService } from '../calendar.service';
|
|
7
5
|
import { NgIf } from '@angular/common';
|
|
8
6
|
import { ButtonModule } from '@fundamental-ngx/core/button';
|
|
7
|
+
import { FdTranslatePipe } from '@fundamental-ngx/i18n';
|
|
8
|
+
import { CalendarService } from '../calendar.service';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../
|
|
11
|
-
import * as i2 from "
|
|
12
|
-
import * as i3 from "@fundamental-ngx/core/
|
|
13
|
-
import * as i4 from "@fundamental-ngx/core/button";
|
|
10
|
+
import * as i1 from "../calendar.service";
|
|
11
|
+
import * as i2 from "@fundamental-ngx/core/datetime";
|
|
12
|
+
import * as i3 from "@fundamental-ngx/core/button";
|
|
14
13
|
/**
|
|
15
14
|
* Internal use only.
|
|
16
15
|
* Header of the calendar component.
|
|
@@ -23,6 +22,24 @@ export class CalendarHeaderComponent {
|
|
|
23
22
|
this._amountOfYearsPerPeriod = yearGrid.cols * yearGrid.rows - 1;
|
|
24
23
|
this._calculateSelectAggregatedYearLabel();
|
|
25
24
|
}
|
|
25
|
+
/** Aria label for the previous button. Depends on the active view. */
|
|
26
|
+
get previousAriaLabel() {
|
|
27
|
+
return this.isOnDayView ? 'coreCalendar.previousMonthLabel' : 'coreCalendar.previousYearLabel';
|
|
28
|
+
}
|
|
29
|
+
/** Aria label for the next button. Depends on the active view. */
|
|
30
|
+
get nextAriaLabel() {
|
|
31
|
+
return this.isOnDayView ? 'coreCalendar.nextMonthLabel' : 'coreCalendar.nextYearLabel';
|
|
32
|
+
}
|
|
33
|
+
/** Button aria label to open month selection view. */
|
|
34
|
+
get selectMonthAriaLabel() {
|
|
35
|
+
return this.isOnMonthView ? 'coreCalendar.dateSelectionLabel' : 'coreCalendar.monthSelectionLabel';
|
|
36
|
+
}
|
|
37
|
+
/** Button aria label to open aggregated years selection view. */
|
|
38
|
+
get selectAggregatedYearAriaLabel() {
|
|
39
|
+
return this.isOnAggregatedYearsView
|
|
40
|
+
? 'coreCalendar.dateSelectionLabel'
|
|
41
|
+
: 'coreCalendar.yearsRangeSelectionLabel';
|
|
42
|
+
}
|
|
26
43
|
/** Get information is calendar is on aggregated years view */
|
|
27
44
|
get isOnAggregatedYearsView() {
|
|
28
45
|
return this.activeView === 'aggregatedYear';
|
|
@@ -102,8 +119,7 @@ export class CalendarHeaderComponent {
|
|
|
102
119
|
return this.viewId + '-select-years-range-aria-label';
|
|
103
120
|
}
|
|
104
121
|
/** @hidden */
|
|
105
|
-
constructor(
|
|
106
|
-
this._calendarI18nLabels = _calendarI18nLabels;
|
|
122
|
+
constructor(_changeDetRef, _calendarService, _dateTimeAdapter) {
|
|
107
123
|
this._changeDetRef = _changeDetRef;
|
|
108
124
|
this._calendarService = _calendarService;
|
|
109
125
|
this._dateTimeAdapter = _dateTimeAdapter;
|
|
@@ -132,7 +148,6 @@ export class CalendarHeaderComponent {
|
|
|
132
148
|
if ((changes.currentlyDisplayed && !changes.currentlyDisplayed.firstChange) ||
|
|
133
149
|
(changes.activeView && !changes.activeView.firstChange)) {
|
|
134
150
|
this._calculateLabels();
|
|
135
|
-
this._calculateAriaLabels();
|
|
136
151
|
}
|
|
137
152
|
}
|
|
138
153
|
/** @hidden */
|
|
@@ -140,9 +155,7 @@ export class CalendarHeaderComponent {
|
|
|
140
155
|
this._calendarService.leftArrowId = this._prevButtonId;
|
|
141
156
|
this._calculateMonthNames();
|
|
142
157
|
this._calculateLabels();
|
|
143
|
-
this._calculateAriaLabels();
|
|
144
158
|
this._listenToLocaleChanges();
|
|
145
|
-
this._listenToCalendarLabelsChanges();
|
|
146
159
|
}
|
|
147
160
|
/**
|
|
148
161
|
* Focus on focusable control within the header
|
|
@@ -167,55 +180,12 @@ export class CalendarHeaderComponent {
|
|
|
167
180
|
});
|
|
168
181
|
}
|
|
169
182
|
/** @hidden */
|
|
170
|
-
_listenToCalendarLabelsChanges() {
|
|
171
|
-
this._calendarI18nLabels.labelsChange.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
|
|
172
|
-
this._calculateAriaLabels();
|
|
173
|
-
this._changeDetRef.markForCheck();
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
/** @hidden */
|
|
177
|
-
_calculateAriaLabels() {
|
|
178
|
-
this._calculatePreviousAriaLabel();
|
|
179
|
-
this._calculateNextAriaLabel();
|
|
180
|
-
this._calculateSelectMonthAriaLabel();
|
|
181
|
-
this._calculateSelectYearAriaLabel();
|
|
182
|
-
this._calculateSelectAggregatedYearAriaLabel();
|
|
183
|
-
}
|
|
184
|
-
/** @hidden */
|
|
185
183
|
_calculateLabels() {
|
|
186
184
|
this._calculateSelectMonthLabel();
|
|
187
185
|
this._calculateSelectYearLabel();
|
|
188
186
|
this._calculateSelectAggregatedYearLabel();
|
|
189
187
|
}
|
|
190
188
|
/** @hidden */
|
|
191
|
-
_calculatePreviousAriaLabel() {
|
|
192
|
-
this.previousAriaLabel = this.isOnDayView
|
|
193
|
-
? this._calendarI18nLabels.previousMonthLabel
|
|
194
|
-
: this._calendarI18nLabels.previousYearLabel;
|
|
195
|
-
}
|
|
196
|
-
/** @hidden */
|
|
197
|
-
_calculateNextAriaLabel() {
|
|
198
|
-
this.nextAriaLabel = this.isOnDayView
|
|
199
|
-
? this._calendarI18nLabels.nextMonthLabel
|
|
200
|
-
: this._calendarI18nLabels.nextYearLabel;
|
|
201
|
-
}
|
|
202
|
-
/** @hidden */
|
|
203
|
-
_calculateSelectMonthAriaLabel() {
|
|
204
|
-
this.selectMonthAriaLabel = this.isOnMonthView
|
|
205
|
-
? this._calendarI18nLabels.dateSelectionLabel
|
|
206
|
-
: this._calendarI18nLabels.monthSelectionLabel;
|
|
207
|
-
}
|
|
208
|
-
/** @hidden */
|
|
209
|
-
_calculateSelectYearAriaLabel() {
|
|
210
|
-
this.selectYearAriaLabel = this._calendarI18nLabels.yearSelectionLabel;
|
|
211
|
-
}
|
|
212
|
-
/** @hidden */
|
|
213
|
-
_calculateSelectAggregatedYearAriaLabel() {
|
|
214
|
-
this.selectAggregatedYearAriaLabel = this.isOnAggregatedYearsView
|
|
215
|
-
? this._calendarI18nLabels.dateSelectionLabel
|
|
216
|
-
: this._calendarI18nLabels.yearsRangeSelectionLabel;
|
|
217
|
-
}
|
|
218
|
-
/** @hidden */
|
|
219
189
|
_calculateSelectMonthLabel() {
|
|
220
190
|
this.selectMonthLabel = this._monthNames[this.currentlyDisplayed.month - 1];
|
|
221
191
|
}
|
|
@@ -235,15 +205,15 @@ export class CalendarHeaderComponent {
|
|
|
235
205
|
_getYearName(year) {
|
|
236
206
|
return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));
|
|
237
207
|
}
|
|
238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarHeaderComponent, deps: [{ token:
|
|
239
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarHeaderComponent, isStandalone: true, selector: "fd-calendar-header", inputs: { activeView: "activeView", currentlyDisplayed: "currentlyDisplayed", previousButtonDisabled: "previousButtonDisabled", nextButtonDisabled: "nextButtonDisabled", calendarYearGrid: "calendarYearGrid", id: "id", mobileLandscape: "mobileLandscape" }, outputs: { activeViewChange: "activeViewChange", previousClicked: "previousClicked", nextClicked: "nextClicked" }, host: { properties: { "attr.id": "viewId" } }, viewQueries: [{ propertyName: "_prevButtonComponent", first: true, predicate: ["prevButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{
|
|
208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarHeaderComponent, isStandalone: true, selector: "fd-calendar-header", inputs: { activeView: "activeView", currentlyDisplayed: "currentlyDisplayed", previousButtonDisabled: "previousButtonDisabled", nextButtonDisabled: "nextButtonDisabled", calendarYearGrid: "calendarYearGrid", id: "id", mobileLandscape: "mobileLandscape" }, outputs: { activeViewChange: "activeViewChange", previousClicked: "previousClicked", nextClicked: "nextClicked" }, host: { properties: { "attr.id": "viewId" } }, viewQueries: [{ propertyName: "_prevButtonComponent", first: true, predicate: ["prevButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel | fdTranslate\"\n [ariaLabel]=\"previousAriaLabel | fdTranslate\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel | fdTranslate\"\n [ariaLabel]=\"nextAriaLabel | fdTranslate\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
240
210
|
}
|
|
241
211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarHeaderComponent, decorators: [{
|
|
242
212
|
type: Component,
|
|
243
213
|
args: [{ selector: 'fd-calendar-header', encapsulation: ViewEncapsulation.None, host: {
|
|
244
214
|
'[attr.id]': 'viewId'
|
|
245
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ButtonModule, NgIf], template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel\"\n [ariaLabel]=\"previousAriaLabel\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel\"\n [ariaLabel]=\"nextAriaLabel\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{
|
|
246
|
-
}], ctorParameters: function () { return [{ type:
|
|
215
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ButtonModule, NgIf, FdTranslatePipe], template: "<header class=\"fd-calendar__navigation\" [class.fd-calendar__navigation--main]=\"mobileLandscape\">\n <div class=\"fd-calendar__action fd-calendar__action--arrow-left\">\n <button\n #prevButton\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-left\"\n [attr.id]=\"_prevButtonId\"\n [disabled]=\"previousButtonDisabled\"\n [attr.title]=\"previousAriaLabel | fdTranslate\"\n [ariaLabel]=\"previousAriaLabel | fdTranslate\"\n type=\"button\"\n (click)=\"previousClicked.emit()\"\n ></button>\n </div>\n <ng-container *ngIf=\"isOnDayView || isOnMonthView\">\n <div class=\"fd-calendar__action\">\n <!-- Select month button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\"\n [attr.data-fd-calendar-month]=\"currentlyDisplayed.month\"\n (click)=\"_processViewChange('month', $event)\"\n >\n <span [attr.id]=\"_monthButtonLabelId\">{{ selectMonthLabel }}</span>\n </button>\n </div>\n <div class=\"fd-calendar__action\">\n <!-- Select year button -->\n <button\n fd-button\n type=\"button\"\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\"\n [attr.data-fd-calendar-year]=\"currentlyDisplayed.year\"\n (click)=\"_processViewChange('year', $event)\"\n >\n <span [attr.id]=\"_yearButtonLabelId\">{{ selectYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isOnAggregatedYearsView || isOnYearView\">\n <div class=\"fd-calendar__action\" aria-live=\"polite\">\n <button\n fd-button\n fdType=\"transparent\"\n [attr.aria-labelledby]=\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\"\n (click)=\"_processViewChange('aggregatedYear', $event)\"\n type=\"button\"\n >\n <span [attr.id]=\"_yearsRangeButtonLabelId\">{{ selectAggregatedYearLabel }}</span>\n </button>\n </div>\n </ng-container>\n <div class=\"fd-calendar__action fd-calendar__action--arrow-right\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"slim-arrow-right\"\n [attr.id]=\"_nextButtonId\"\n [disabled]=\"nextButtonDisabled\"\n [attr.title]=\"nextAriaLabel | fdTranslate\"\n [ariaLabel]=\"nextAriaLabel | fdTranslate\"\n (click)=\"nextClicked.emit()\"\n type=\"button\"\n ></button>\n </div>\n</header>\n\n<!-- Hidden elements for aria purposes -->\n<div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_selectMonthButtonAriaLabelId\">{{ selectMonthAriaLabel | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearButtonAriaLabelId\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectYearsRangeButtonAriaLabelId\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\n</div>\n" }]
|
|
216
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }]; }, propDecorators: { activeView: [{
|
|
247
217
|
type: Input
|
|
248
218
|
}], currentlyDisplayed: [{
|
|
249
219
|
type: Input
|
|
@@ -267,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
267
237
|
type: ViewChild,
|
|
268
238
|
args: ['prevButton', { read: ElementRef }]
|
|
269
239
|
}] } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7QUFFNUQ7OztHQUdHO0FBYUgsTUFBTSxPQUFPLHVCQUF1QjtJQWlCaEM7O09BRUc7SUFDSCxJQUNJLGdCQUFnQixDQUFDLFFBQTBCO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQ0FBbUMs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QUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4uL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuaW1wb3J0IHsgRmRDYWxlbmRhclZpZXcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuLi9tb2RlbHMvY2FsZW5kYXItY3VycmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5cbi8qKlxuICogSW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBIZWFkZXIgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0J1dHRvbk1vZHVsZSwgTmdJZl1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogQ3VycmVudGx5IGFjdGl2ZSB2aWV3LiBOZWVkZWQgZm9yIGExMXkgbGFiZWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXc7XG5cbiAgICAvKiogQ3VycmVudGx5IGRpc3BsYXllZCBkYXRlIG9uIHRoZSBjYWxlbmRhci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqIHdoZXRoZXIgcHJldmlvdXMgbmF2aWdhdGlvbiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIHdoZXRoZXIgbmV4dCBuYXZpZ2F0aW9uIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4gdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FsZW5kYXJZZWFyR3JpZCh5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCkge1xuICAgICAgICB0aGlzLl9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0geWVhckdyaWQuY29scyAqIHllYXJHcmlkLnJvd3MgLSAxO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIENhbGVuZGFyIElEICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgc2hvdWxkIGJlIHJlbmRlcmVkIGluIG1vYmlsZSBsYW5kc2NhcGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYWN0aXZlIHZpZXcgc2hvdWxkIGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHByZXZpb3VzIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHByZXZpb3VzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbmV4dCBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBuZXh0Q2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24uIERlcGVuZHMgb24gdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIHByZXZpb3VzQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIG5leHQgYnV0dG9uLiBEZXBlbmRzIG9uIHRoZSBhY3RpdmUgdmlldy4gKi9cbiAgICBuZXh0QXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RNb250aEFyaWFMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBhcmlhIGxhYmVsIHRvIG9wZW4geWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0TW9udGhMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBsYWJlbCB0byBvcGVuIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0WWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4gYWdncmVnYXRlZCB5ZWFycyBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGFnZ3JlZ2F0ZWQgeWVhcnMgdmlldyAqL1xuICAgIGdldCBpc09uQWdncmVnYXRlZFllYXJzVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ2FnZ3JlZ2F0ZWRZZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIHllYXIgdmlldyAqL1xuICAgIGdldCBpc09uWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09ICd5ZWFyJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIG1vbnRoIHZpZXcgKi9cbiAgICBnZXQgaXNPbk1vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ21vbnRoJztcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIGRheSB2aWV3ICovXG4gICAgZ2V0IGlzT25EYXlWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSAnZGF5JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgaWRcbiAgICAgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy1oZWFkZXInO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQcmV2aW91cyBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX3ByZXZCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWxlZnQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZXh0IGJ1dHRvbiBpZFxuICAgICAqL1xuICAgIGdldCBfbmV4dEJ1dHRvbklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctcmlnaHQtYXJyb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb250aCBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfbW9udGhCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctbW9udGgtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgbW9udGggYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC1tb250aC1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogWWVhciBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhckJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFyLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXIgYXJpYSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0LXllYXItYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXJzIHJhbmdlIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF95ZWFyc1JhbmdlQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXllYXJzLXJhbmdlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IHllYXJzIHJhbmdlIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFycy1yYW5nZS1hcmlhLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3ByZXZCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBfcHJldkJ1dHRvbkNvbXBvbmVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIE1vbnRoIG5hbWVzICovXG4gICAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBhdCBvbmNlIG9uIHllYXIgdmlldyAgKi9cbiAgICBwcml2YXRlIF9hbW91bnRPZlllYXJzUGVyUGVyaW9kID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2hhbmdlcy5jdXJyZW50bHlEaXNwbGF5ZWQgJiYgIWNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgICAgICAgKGNoYW5nZXMuYWN0aXZlVmlldyAmJiAhY2hhbmdlcy5hY3RpdmVWaWV3LmZpcnN0Q2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUxhYmVscygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlQXJpYUxhYmVscygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxlZnRBcnJvd0lkID0gdGhpcy5fcHJldkJ1dHRvbklkO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZU1vbnRoTmFtZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBvbiBmb2N1c2FibGUgY29udHJvbCB3aXRoaW4gdGhlIGhlYWRlclxuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2QnV0dG9uQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvY2Vzc1ZpZXdDaGFuZ2UodHlwZTogRmRDYWxlbmRhclZpZXcsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gdHlwZSA9PT0gdGhpcy5hY3RpdmVWaWV3ID8gJ2RheScgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9DYWxlbmRhckxhYmVsc0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5sYWJlbHNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVBcmlhTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQXJpYUxhYmVscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNBcmlhTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTmV4dEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aEFyaWFMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVMYWJlbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlU2VsZWN0WWVhckxhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVByZXZpb3VzQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQXJpYUxhYmVsID0gdGhpcy5pc09uRGF5Vmlld1xuICAgICAgICAgICAgPyB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMucHJldmlvdXNNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5wcmV2aW91c1llYXJMYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZU5leHRBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV4dEFyaWFMYWJlbCA9IHRoaXMuaXNPbkRheVZpZXdcbiAgICAgICAgICAgID8gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm5leHRNb250aExhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5uZXh0WWVhckxhYmVsO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoQXJpYUxhYmVsID0gdGhpcy5pc09uTW9udGhWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLm1vbnRoU2VsZWN0aW9uTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RZZWFyQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdFllYXJBcmlhTGFiZWwgPSB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMueWVhclNlbGVjdGlvbkxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwgPSB0aGlzLmlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3XG4gICAgICAgICAgICA/IHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5kYXRlU2VsZWN0aW9uTGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdE1vbnRoTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9udGhMYWJlbCA9IHRoaXMuX21vbnRoTmFtZXNbdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RZZWFyTGFiZWwgPSB0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCA9IGAke3RoaXMuX2dldFllYXJOYW1lKHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIpfS0ke3RoaXMuX2dldFllYXJOYW1lKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciArIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2RcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTW9udGhOYW1lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDEsIDEpKTtcbiAgICB9XG59XG4iLCI8aGVhZGVyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX25hdmlnYXRpb25cIiBbY2xhc3MuZmQtY2FsZW5kYXJfX25hdmlnYXRpb24tLW1haW5dPVwibW9iaWxlTGFuZHNjYXBlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb24gZmQtY2FsZW5kYXJfX2FjdGlvbi0tYXJyb3ctbGVmdFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjcHJldkJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cInNsaW0tYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfcHJldkJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmV2aW91c0J1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInByZXZpb3VzQXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNBcmlhTGFiZWxcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPbkRheVZpZXcgfHwgaXNPbk1vbnRoVmlld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiPlxuICAgICAgICAgICAgPCEtLSBTZWxlY3QgbW9udGggYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX21vbnRoQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RNb250aEJ1dHRvbkFyaWFMYWJlbElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLW1vbnRoXT1cImN1cnJlbnRseURpc3BsYXllZC5tb250aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnbW9udGgnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfbW9udGhCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0TW9udGhMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgIDwhLS0gU2VsZWN0IHllYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci15ZWFyXT1cImN1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0WWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09uQWdncmVnYXRlZFllYXJzVmlldyB8fCBpc09uWWVhclZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl95ZWFyc1JhbmdlQnV0dG9uTGFiZWxJZCArICcgJyArIF9zZWxlY3RZZWFyc1JhbmdlQnV0dG9uQXJpYUxhYmVsSWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfcHJvY2Vzc1ZpZXdDaGFuZ2UoJ2FnZ3JlZ2F0ZWRZZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1yaWdodFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1yaWdodFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfbmV4dEJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibmV4dEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm5leHRBcmlhTGFiZWxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9oZWFkZXI+XG5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdE1vbnRoQXJpYUxhYmVsIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0WWVhckFyaWFMYWJlbCB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFLdEQ7OztHQUdHO0FBYUgsTUFBTSxPQUFPLHVCQUF1QjtJQWlCaEM7O09BRUc7SUFDSCxJQUNJLGdCQUFnQixDQUFDLFFBQTBCO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQ0FBbUMsRUFB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RG5CLE1BQU07Z0JBK0hQLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDdXJyZW50IH0gZnJvbSAnLi4vbW9kZWxzL2NhbGVuZGFyLWN1cnJlbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJZZWFyR3JpZCB9IGZyb20gJy4uL21vZGVscy9jYWxlbmRhci15ZWFyLWdyaWQnO1xuaW1wb3J0IHsgRmRDYWxlbmRhclZpZXcgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBIZWFkZXIgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0J1dHRvbk1vZHVsZSwgTmdJZiwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhlYWRlckNvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBDdXJyZW50bHkgYWN0aXZlIHZpZXcuIE5lZWRlZCBmb3IgYTExeSBsYWJlbHMuICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldztcblxuICAgIC8qKiBDdXJyZW50bHkgZGlzcGxheWVkIGRhdGUgb24gdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudGx5RGlzcGxheWVkOiBDYWxlbmRhckN1cnJlbnQ7XG5cbiAgICAvKiogd2hldGhlciBwcmV2aW91cyBuYXZpZ2F0aW9uIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4gdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogd2hldGhlciBuZXh0IG5hdmlnYXRpb24gYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB0aGUgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV4dEJ1dHRvbkRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYWxlbmRhclllYXJHcmlkKHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkKSB7XG4gICAgICAgIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2QgPSB5ZWFyR3JpZC5jb2xzICogeWVhckdyaWQucm93cyAtIDE7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FsZW5kYXIgSUQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBjYWxlbmRhciBzaG91bGQgYmUgcmVuZGVyZWQgaW4gbW9iaWxlIGxhbmRzY2FwZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlTGFuZHNjYXBlID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBhY3RpdmUgdmlldyBzaG91bGQgY2hhbmdlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcHJldmlvdXMgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcHJldmlvdXNDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG5leHRDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIGJ1dHRvbi4gRGVwZW5kcyBvbiB0aGUgYWN0aXZlIHZpZXcuICovXG4gICAgZ2V0IHByZXZpb3VzQXJpYUxhYmVsKCk6ICdjb3JlQ2FsZW5kYXIucHJldmlvdXNNb250aExhYmVsJyB8ICdjb3JlQ2FsZW5kYXIucHJldmlvdXNZZWFyTGFiZWwnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPbkRheVZpZXcgPyAnY29yZUNhbGVuZGFyLnByZXZpb3VzTW9udGhMYWJlbCcgOiAnY29yZUNhbGVuZGFyLnByZXZpb3VzWWVhckxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIG5leHQgYnV0dG9uLiBEZXBlbmRzIG9uIHRoZSBhY3RpdmUgdmlldy4gKi9cbiAgICBnZXQgbmV4dEFyaWFMYWJlbCgpOiAnY29yZUNhbGVuZGFyLm5leHRNb250aExhYmVsJyB8ICdjb3JlQ2FsZW5kYXIubmV4dFllYXJMYWJlbCcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09uRGF5VmlldyA/ICdjb3JlQ2FsZW5kYXIubmV4dE1vbnRoTGFiZWwnIDogJ2NvcmVDYWxlbmRhci5uZXh0WWVhckxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBnZXQgc2VsZWN0TW9udGhBcmlhTGFiZWwoKTogJ2NvcmVDYWxlbmRhci5tb250aFNlbGVjdGlvbkxhYmVsJyB8ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGlvbkxhYmVsJyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT25Nb250aFZpZXcgPyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCcgOiAnY29yZUNhbGVuZGFyLm1vbnRoU2VsZWN0aW9uTGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBCdXR0b24gYXJpYSBsYWJlbCB0byBvcGVuIGFnZ3JlZ2F0ZWQgeWVhcnMgc2VsZWN0aW9uIHZpZXcuICovXG4gICAgZ2V0IHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsKCk6ICdjb3JlQ2FsZW5kYXIueWVhcnNSYW5nZVNlbGVjdGlvbkxhYmVsJyB8ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGlvbkxhYmVsJyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3XG4gICAgICAgICAgICA/ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGlvbkxhYmVsJ1xuICAgICAgICAgICAgOiAnY29yZUNhbGVuZGFyLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEJ1dHRvbiBsYWJlbCB0byBvcGVuIG1vbnRoIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdE1vbnRoTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBCdXR0b24gbGFiZWwgdG8gb3BlbiB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdFllYXJMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEJ1dHRvbiBsYWJlbCB0byBvcGVuIGFnZ3JlZ2F0ZWQgeWVhcnMgc2VsZWN0aW9uIHZpZXcuICovXG4gICAgc2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiBhZ2dyZWdhdGVkIHllYXJzIHZpZXcgKi9cbiAgICBnZXQgaXNPbkFnZ3JlZ2F0ZWRZZWFyc1ZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09ICdhZ2dyZWdhdGVkWWVhcic7XG4gICAgfVxuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiB5ZWFyIHZpZXcgKi9cbiAgICBnZXQgaXNPblllYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSAneWVhcic7XG4gICAgfVxuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiBtb250aCB2aWV3ICovXG4gICAgZ2V0IGlzT25Nb250aFZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09ICdtb250aCc7XG4gICAgfVxuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiBkYXkgdmlldyAqL1xuICAgIGdldCBpc09uRGF5VmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gJ2RheSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IGlkXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICctaGVhZGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJldmlvdXMgYnV0dG9uIGlkXG4gICAgICovXG4gICAgZ2V0IF9wcmV2QnV0dG9uSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1sZWZ0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTmV4dCBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX25leHRCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXJpZ2h0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9udGggbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX21vbnRoQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLW1vbnRoLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IG1vbnRoIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdE1vbnRoQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QtbW9udGgtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXIgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3llYXJCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICcteWVhci1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFyIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFyLWFyaWEtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBZZWFycyByYW5nZSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFycy1yYW5nZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFycyByYW5nZSBhcmlhIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RZZWFyc1JhbmdlQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QteWVhcnMtcmFuZ2UtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdwcmV2QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgX3ByZXZCdXR0b25Db21wb25lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBNb250aCBuYW1lcyAqL1xuICAgIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGFib3V0IGFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgYXQgb25jZSBvbiB5ZWFyIHZpZXcgICovXG4gICAgcHJpdmF0ZSBfYW1vdW50T2ZZZWFyc1BlclBlcmlvZCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2hhbmdlcy5jdXJyZW50bHlEaXNwbGF5ZWQgJiYgIWNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgICAgICAgKGNoYW5nZXMuYWN0aXZlVmlldyAmJiAhY2hhbmdlcy5hY3RpdmVWaWV3LmZpcnN0Q2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUxhYmVscygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxlZnRBcnJvd0lkID0gdGhpcy5fcHJldkJ1dHRvbklkO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZU1vbnRoTmFtZXMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBvbiBmb2N1c2FibGUgY29udHJvbCB3aXRoaW4gdGhlIGhlYWRlclxuICAgICAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2QnV0dG9uQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJvY2Vzc1ZpZXdDaGFuZ2UodHlwZTogRmRDYWxlbmRhclZpZXcsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gdHlwZSA9PT0gdGhpcy5hY3RpdmVWaWV3ID8gJ2RheScgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFiZWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoTGFiZWwgPSB0aGlzLl9tb250aE5hbWVzW3RoaXMuY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RZZWFyTGFiZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0WWVhckxhYmVsID0gdGhpcy5fZ2V0WWVhck5hbWUodGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWwgPSBgJHt0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKX0tJHt0aGlzLl9nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyB0aGlzLl9hbW91bnRPZlllYXJzUGVyUGVyaW9kXG4gICAgICAgICl9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZU1vbnRoTmFtZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21vbnRoTmFtZXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhck5hbWUoeWVhcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSk7XG4gICAgfVxufVxuIiwiPGhlYWRlciBjbGFzcz1cImZkLWNhbGVuZGFyX19uYXZpZ2F0aW9uXCIgW2NsYXNzLmZkLWNhbGVuZGFyX19uYXZpZ2F0aW9uLS1tYWluXT1cIm1vYmlsZUxhbmRzY2FwZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fYWN0aW9uIGZkLWNhbGVuZGFyX19hY3Rpb24tLWFycm93LWxlZnRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgI3ByZXZCdXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LWxlZnRcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiX3ByZXZCdXR0b25JZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJldmlvdXNCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJwcmV2aW91c0FyaWFMYWJlbCB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwicHJldmlvdXNBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c0NsaWNrZWQuZW1pdCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09uRGF5VmlldyB8fCBpc09uTW9udGhWaWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fYWN0aW9uXCI+XG4gICAgICAgICAgICA8IS0tIFNlbGVjdCBtb250aCBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfbW9udGhCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdE1vbnRoQnV0dG9uQXJpYUxhYmVsSWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItbW9udGhdPVwiY3VycmVudGx5RGlzcGxheWVkLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCdtb250aCcsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmlkXT1cIl9tb250aEJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RNb250aExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiPlxuICAgICAgICAgICAgPCEtLSBTZWxlY3QgeWVhciBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfeWVhckJ1dHRvbkxhYmVsSWQgKyAnICcgKyBfc2VsZWN0WWVhckJ1dHRvbkFyaWFMYWJlbElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJdPVwiY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfcHJvY2Vzc1ZpZXdDaGFuZ2UoJ3llYXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfeWVhckJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RZZWFyTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3IHx8IGlzT25ZZWFyVmlld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnYWdncmVnYXRlZFllYXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fYWN0aW9uIGZkLWNhbGVuZGFyX19hY3Rpb24tLWFycm93LXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIl9uZXh0QnV0dG9uSWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5leHRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJuZXh0QXJpYUxhYmVsIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJuZXh0QXJpYUxhYmVsIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9oZWFkZXI+XG5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdE1vbnRoQXJpYUxhYmVsIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RZZWFyQnV0dG9uQXJpYUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLnllYXJTZWxlY3Rpb25MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiPnt7IHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyQXJpYUxhYmVsIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -2,40 +2,16 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Even
|
|
|
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
|
export class CalendarAggregatedYearViewComponent {
|
|
16
|
-
/**
|
|
17
|
-
* @hidden
|
|
18
|
-
* Today cell label.
|
|
19
|
-
* Is used in conjunction with cell date itself
|
|
20
|
-
*/
|
|
21
|
-
get _todayAriaLabel() {
|
|
22
|
-
return this._calendarI18nLabels.todayLabel;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* @hidden
|
|
26
|
-
* Selected date cell label.
|
|
27
|
-
* Is used in conjunction with cell date itself
|
|
28
|
-
*/
|
|
29
|
-
get _selectedDateAriaLabel() {
|
|
30
|
-
return this._calendarI18nLabels.dateSelectedLabel;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* @hidden
|
|
34
|
-
* View description
|
|
35
|
-
*/
|
|
36
|
-
get _viewRoleDescription() {
|
|
37
|
-
return this._calendarI18nLabels.calendarYearsRangeViewDescription;
|
|
38
|
-
}
|
|
39
15
|
/**
|
|
40
16
|
* View ID
|
|
41
17
|
*/
|
|
@@ -57,13 +33,12 @@ export class CalendarAggregatedYearViewComponent {
|
|
|
57
33
|
return this.viewId + '-selected-date-label';
|
|
58
34
|
}
|
|
59
35
|
/** @hidden */
|
|
60
|
-
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats
|
|
36
|
+
constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {
|
|
61
37
|
this._eRef = _eRef;
|
|
62
38
|
this._changeDetectorRef = _changeDetectorRef;
|
|
63
39
|
this._calendarService = _calendarService;
|
|
64
40
|
this._dateTimeAdapter = _dateTimeAdapter;
|
|
65
41
|
this._dateTimeFormats = _dateTimeFormats;
|
|
66
|
-
this._calendarI18nLabels = _calendarI18nLabels;
|
|
67
42
|
/** Event fired when a year is selected. */
|
|
68
43
|
this.yearsClicked = new EventEmitter();
|
|
69
44
|
/**
|
|
@@ -305,18 +280,18 @@ export class CalendarAggregatedYearViewComponent {
|
|
|
305
280
|
_focusOnCellByIndex(index) {
|
|
306
281
|
this._focusElementBySelector(`#${this._getId(index)}`);
|
|
307
282
|
}
|
|
308
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarAggregatedYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }
|
|
309
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarAggregatedYearViewComponent, isStandalone: true, selector: "fd-calendar-aggregated-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", aggregatedYearsViewGrid: "aggregatedYearsViewGrid", yearViewGrid: "yearViewGrid" }, outputs: { yearsClicked: "yearsClicked" }, 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]=\"
|
|
283
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarAggregatedYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
284
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: CalendarAggregatedYearViewComponent, isStandalone: true, selector: "fd-calendar-aggregated-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", aggregatedYearsViewGrid: "aggregatedYearsViewGrid", yearViewGrid: "yearViewGrid" }, outputs: { yearsClicked: "yearsClicked" }, 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.calendarYearsRangeViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let cell of colYears; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"cell.current\"\n [class.is-active]=\"cell.selected\"\n [attr.id]=\"cell.id\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.data-fd-calendar-years]=\"cell.years.startYear + '-' + cell.years.endYear\"\n (keydown)=\"_onKeydownYearHandler($event, cell.index)\"\n (click)=\"selectYear(cell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"cell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ cell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.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 }); }
|
|
310
285
|
}
|
|
311
286
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CalendarAggregatedYearViewComponent, decorators: [{
|
|
312
287
|
type: Component,
|
|
313
288
|
args: [{ selector: 'fd-calendar-aggregated-year-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
314
289
|
'[attr.id]': 'viewId'
|
|
315
|
-
}, standalone: true, imports: [NgFor, ButtonModule], template: "<table\n class=\"fd-calendar__content fd-calendar__content--years\"\n role=\"grid\"\n [attr.aria-roledescription]=\"
|
|
290
|
+
}, 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.calendarYearsRangeViewDescription' | fdTranslate\"\n>\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr class=\"fd-calendar__row\" *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\">\n <td\n class=\"fd-calendar__my-item\"\n role=\"gridcell\"\n *ngFor=\"let cell of colYears; let colIndex = index\"\n [class.fd-calendar__my-item--current]=\"cell.current\"\n [class.is-active]=\"cell.selected\"\n [attr.id]=\"cell.id\"\n [attr.tabindex]=\"cell.tabIndex\"\n [attr.data-fd-calendar-years]=\"cell.years.startYear + '-' + cell.years.endYear\"\n (keydown)=\"_onKeydownYearHandler($event, cell.index)\"\n (click)=\"selectYear(cell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__my-item-button\"\n [class.is-active]=\"cell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n cell.id +\n '-aria-label ' +\n (cell.current ? _todayLabelId + ' ' : '') +\n (cell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ cell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"cell.id + '-aria-label'\">\n {{ cell.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" }]
|
|
316
291
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{
|
|
317
292
|
type: Inject,
|
|
318
293
|
args: [DATE_TIME_FORMATS]
|
|
319
|
-
}] }
|
|
294
|
+
}] }]; }, propDecorators: { id: [{
|
|
320
295
|
type: Input
|
|
321
296
|
}], focusEscapeFunction: [{
|
|
322
297
|
type: Input
|
|
@@ -329,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
329
304
|
}], yearsClicked: [{
|
|
330
305
|
type: Output
|
|
331
306
|
}] } });
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRU4saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBbUIsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBOEMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFjeEMsTUFBTSxP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SUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0E5WlEsbUNBQW1DLDJJQTJIaEMsaUJBQWlCO2tHQTNIcEIsbUNBQW1DLDZYQ3hDaEQsMm9FQW9EQSwwRERkYyxLQUFLLGtIQUFFLFlBQVk7OzJGQUVwQixtQ0FBbUM7a0JBWi9DLFNBQVM7K0JBQ0ksa0NBQWtDLGlCQUc3QixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLFdBQVcsRUFBRSxRQUFRO3FCQUN4QixjQUNXLElBQUksV0FDUCxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7OzBCQTZIekIsTUFBTTsyQkFBQyxpQkFBaUI7NkVBeEg3QixFQUFFO3NCQURELEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFPTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtHLFlBQVk7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERhdGVUaW1lRm9ybWF0cywgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRlZFllYXIsIENhbGVuZGFyQWdncmVnYXRlZFllYXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWdncmVnYXRlZC15ZWFyJztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhckkxOG5MYWJlbHMgfSBmcm9tICcuLi8uLi9pMThuL2NhbGVuZGFyLWkxOG4tbGFiZWxzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdGb3IsIEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBQYXJhbWV0ZXIgdXNlZCBpbiBpZCBvZiB5ZWFycyB1c2VkIGZvciBoZWxwIHdpdGggZm9jdXNpbmcgb24gdGhlIGNvcnJlY3QgZWxlbWVudCBkdXJpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9jdXMgd291bGQgZXNjYXBlIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgeWVhciB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJzVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhclZpZXdHcmlkOiBDYWxlbmRhclllYXJHcmlkO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEFnZ3JlZ2F0ZWRZZWFyPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWdncmVnYXRlZFllYXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbC5cbiAgICAgKiBJcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggY2VsbCBkYXRlIGl0c2VsZlxuICAgICAqL1xuICAgIGdldCBfdG9kYXlBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy50b2RheUxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGNlbGwgbGFiZWwuXG4gICAgICogSXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNlbGwgZGF0ZSBpdHNlbGZcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmRhdGVTZWxlY3RlZExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWaWV3IGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgZ2V0IF92aWV3Um9sZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMuY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZpZXcgSURcbiAgICAgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy15ZWFycy1yYW5nZS12aWV3JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfdG9kYXlMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctdG9kYXktbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0ZWQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIHllYXIgZnJvbSBjYWxlbmRhclllYXJMaXN0IHNob3VsZCBiZSBmb2N1c2FibGUgYnkgdGFiIGtleVxuICAgICAqL1xuICAgIF9hY3RpdmVZZWFyOiBBZ2dyZWdhdGVkWWVhcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgUGFyYW1ldGVyIHRoYXQgc3RvcmVzIHRoZSBkb3plbiBvZiB5ZWFycyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIF9jYWxlbmRhclllYXJMaXN0R3JpZDogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhcltdW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VycmVudCBwZXJpb2Qgb2YgeWVhcnMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBfeWVhcnNTZWxlY3RlZDogQWdncmVnYXRlZFllYXIgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhcmFtZXRlciBzdG9yaW5nIHRoZSB5ZWFyIG9mIHRoZSBwcmVzZW50IGRheS5cbiAgICAgKi9cbiAgICBfY3VycmVudFllYXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyBmaXJzdCBzaG93biB5ZWFyIG9uIGxpc3RcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maXJzdFllYXJJbkxpc3Q6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhckkxOG5MYWJlbHM6IENhbGVuZGFySTE4bkxhYmVsc1xuICAgICkge1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLl9jdXJyZW50WWVhciA9IF9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihfZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYXRlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fc2V0dXBLZXlib2FyZFNlcnZpY2UoKTtcblxuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLnllYXJTZWxlY3RlZCAtIHRoaXMuX3llYXJzSW5PbmVQZXJpb2QoKTtcblxuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJzR3JpZCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9pbml0aWF0ZWQgJiZcbiAgICAgICAgICAgICgneWVhclNlbGVjdGVkJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAgICAgJ2FnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAgICAgJ3llYXJWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICdpZCcgaW4gY2hhbmdlcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHNlbmRzIHRoZSB5ZWFyIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdoZW4gaXQgaXMgY2xpY2tlZC4gKi9cbiAgICBzZWxlY3RZZWFyKHNlbGVjdGVkWWVhcjogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhciwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5feWVhcnNTZWxlY3RlZCA9IHNlbGVjdGVkWWVhci55ZWFycztcbiAgICAgICAgdGhpcy55ZWFyc0NsaWNrZWQuZW1pdCh0aGlzLl95ZWFyc1NlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgcHJldmlvdXMgMTIgeWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWROZXh0WWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgKz0gdGhpcy5fcGVyaW9kc0Ftb3VudCgpICogdGhpcy5feWVhcnNJbk9uZVBlcmlvZCgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgbmV4dCAxMiB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZFByZXZpb3VzWWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgLT0gdGhpcy5fcGVyaW9kc0Ftb3VudCgpICogdGhpcy5feWVhcnNJbk9uZVBlcmlvZCgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZm9jdXMgb24gbW9udGggY2VsbC5cbiAgICAgKiBJdCBjYW4gYmUgYSBzZWxlY3RlZCBjZWxsLCBjdXJyZW50IG1vbnRoIGNlbGwgb3IgZmlyc3QgY2VsbCBpbiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHNldEZvY3VzT25DZWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IG5ldyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3koKS5nZXRBY3RpdmVDZWxsKHRoaXMuX2dldFllYXJzTGlzdCgpKTtcbiAgICAgICAgaWYgKCFjZWxsVG9Gb2N1cz8uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHtjZWxsVG9Gb2N1cy5pZH1gKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBoYW5kbGluZyB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgICBfb25LZXlkb3duWWVhckhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5ZG93bkhhbmRsZXIoZXZlbnQsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgYWxsb3dzIHRvIGZvY3VzIGVsZW1lbnRzIGluc2lkZSB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuICAgIF9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcik7XG4gICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cz8uZm9jdXMpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHJldHVybmluZyBpbmRleCBvZiBhZ2dyZWdhdGVkIHllYXIgaW5kZXggY2VsbFxuICAgICAqL1xuICAgIF9nZXRJbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHZXQgaWQgb2YgY2FsZW5kYXIncyBhZ2dyZWdhdGVkIHllYXIgaXRlbVxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1hZ2dyZWdhdGVkLXllYXJzLScgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2sgaWYgc3BlY2lmaWVkIHllYXIgaXMgYmV0d2VlbiBzdGFydCB5ZWFyIGFuZCBlbmQgeWVhcilcbiAgICAgKi9cbiAgICBfaXNCZXR3ZWVuKGFnZ3JlZ2F0ZWRZZWFyOiBBZ2dyZWdhdGVkWWVhciwgeWVhclRvQ2hlY2s6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWdncmVnYXRlZFllYXIuZW5kWWVhciA+PSB5ZWFyVG9DaGVjayAmJiBhZ2dyZWdhdGVkWWVhci5zdGFydFllYXIgPD0geWVhclRvQ2hlY2s7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RZZWFyc0dyaWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZFllYXJzQW1vdW50OiBudW1iZXIgPSB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLmNvbHMgKiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnJvd3M7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyWWVhckxpc3Q6IENhbGVuZGFyQWdncmVnYXRlZFllYXJbXSA9IFtdO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZCA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDsgKytpbmRleCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZW5lcmF0ZXMgb2JqZWN0IHdpdGggY2VydGFpbiBwZXJpb2Qgb2YgeWVhcnMsXG4gICAgICAgICAgICAgKiB3aGljaCBkZXBlbmRzIG9uIGFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgaW4geWVhciB2aWV3XG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgY29uc3QgeWVhcnM6IEFnZ3JlZ2F0ZWRZZWFyID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0WWVhcjogdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgdGhpcy5feWVhcnNJbk9uZVBlcmlvZCgpICogaW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kWWVhcjogdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgdGhpcy5feWVhcnNJbk9uZVBlcmlvZCgpICogKGluZGV4ICsgMSkgLSAxXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjYWxlbmRhclllYXJMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9nZXRZZWFyc05hbWUoeWVhcnMpLFxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZ2V0QXJpYVllYXJzTmFtZSh5ZWFycyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuX2lzQmV0d2Vlbih5ZWFycywgdGhpcy55ZWFyU2VsZWN0ZWQpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHRoaXMuX2lzQmV0d2Vlbih5ZWFycywgdGhpcy5fY3VycmVudFllYXIpLFxuICAgICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChjYWxlbmRhclllYXJMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQucHVzaChjYWxlbmRhclllYXJMaXN0LnNwbGljZSgwLCB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLmNvbHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHllYXJzQ2VsbFNlbGVjdGVkID0gY2FsZW5kYXJZZWFyTGlzdC5maW5kKChjZWxsKSA9PiB0aGlzLl9pc0JldHdlZW4oY2VsbC55ZWFycywgdGhpcy55ZWFyU2VsZWN0ZWQpKTtcbiAgICAgICAgdGhpcy5feWVhcnNTZWxlY3RlZCA9IHllYXJzQ2VsbFNlbGVjdGVkID8geWVhcnNDZWxsU2VsZWN0ZWQueWVhcnMgOiBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmVZZWFyID0gdGhpcy5fZ2V0QWN0aXZlWWVhcigpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gY2VsbC55ZWFycyA9PT0gdGhpcy5fYWN0aXZlWWVhciA/IDAgOiAtMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJzTmFtZSh5ZWFyczogQWdncmVnYXRlZFllYXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdGFydFllYXJGb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFycy5zdGFydFllYXIsIDEsIDEpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZFllYXJGb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFycy5lbmRZZWFyLCAxLCAxKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFycy5zdGFydFllYXIsIHN0YXJ0WWVhckZvcm1hdHRlZCl9IC0gJHt0aGlzLl9nZXRZZWFyU3RyaW5nKFxuICAgICAgICAgICAgeWVhcnMuZW5kWWVhcixcbiAgICAgICAgICAgIGVuZFllYXJGb3JtYXR0ZWRcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGFyaWEgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFyaWFZZWFyc05hbWUoeWVhcnM6IEFnZ3JlZ2F0ZWRZZWFyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnRZZWFyRm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLnN0YXJ0WWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZFllYXJGb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhcnMuZW5kWWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXJzLnN0YXJ0WWVhciwgc3RhcnRZZWFyRm9ybWF0dGVkKX0gLSAke3RoaXMuX2dldFllYXJTdHJpbmcoXG4gICAgICAgICAgICB5ZWFycy5lbmRZZWFyLFxuICAgICAgICAgICAgZW5kWWVhckZvcm1hdHRlZFxuICAgICAgICApfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIHRha2luZyBpbnRvIGFjY291bnQgeWVhck1hcHBpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhclN0cmluZyh5ZWFyOiBudW1iZXIsIGRlZmF1bHRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC55ZWFyTWFwcGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQueWVhck1hcHBpbmcoeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgaW4geWVhciB2aWV3XG4gICAgICovXG4gICAgcHJpdmF0ZSBfeWVhcnNJbk9uZVBlcmlvZCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy55ZWFyVmlld0dyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJWaWV3R3JpZC5jb2xzICogdGhpcy55ZWFyVmlld0dyaWQucm93cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIGFnZ3JlZ2F0ZWQgeWVhciB2aWV3XG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGVyaW9kc0Ftb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5jb2xzICogdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5yb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFjdGl2ZSBjZWxsLCB3aGljaCBtZWFuczpcbiAgICAgKiBpZiB0aGVyZSBpcyBhbnkgc2VsZWN0ZWQgeWVhciwgcmV0dXJuIHNlbGVjdGVkIHllYXJcbiAgICAgKiBpZiB0aGVyZSBpcyBubyBzZWxlY3RlZCB5ZWFyLCBidXQgdGhlcmUgaXMgY3VycmVudCB5ZWFyLCByZXR1cm4gY3VycmVudCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gY3VycmVudCB5ZWFyLCBvciBzZWxlY3RlZCwgcmV0dXJuIGZpcnN0IG9uZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZVllYXIoKTogQWdncmVnYXRlZFllYXIge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhcnNMaXN0KCkuZmluZCgoeyB5ZWFycyB9KSA9PiB0aGlzLl9pc0JldHdlZW4oeWVhcnMsIHRoaXMueWVhclNlbGVjdGVkKSk7XG4gICAgICAgIGlmIChzZWxlY3RlZFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRZZWFyQ2VsbC55ZWFycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyQ2VsbCA9IHRoaXMuX2dldFllYXJzTGlzdCgpLmZpbmQoKHsgeWVhcnMgfSkgPT4gdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLl9jdXJyZW50WWVhcikpO1xuICAgICAgICBpZiAoY3VycmVudFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFllYXJDZWxsLnllYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkWzBdWzBdLnllYXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHRyYW5zZm9ybWVkIDFkIGFycmF5IGZyb20gMmQgeWVhciBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJzTGlzdCgpOiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyW10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyW10+W10pLmNvbmNhdCguLi50aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnJvd0Ftb3VudCA9IHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQucm93cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scztcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlTZWxlY3RcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGluZGV4KSA9PiB0aGlzLnNlbGVjdFllYXIodGhpcy5fZ2V0WWVhcnNMaXN0KClbaW5kZXhdKSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdFN0YXJ0QXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyc0xpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLXllYXJzXCJcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiX3ZpZXdSb2xlRGVzY3JpcHRpb25cIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgKm5nRm9yPVwibGV0IGNvbFllYXJzIG9mIF9jYWxlbmRhclllYXJMaXN0R3JpZDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2YgY29sWWVhcnM7IGxldCBjb2xJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX215LWl0ZW0tLWN1cnJlbnRdPVwiY2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cImNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNlbGwudGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXIteWVhcnNdPVwiY2VsbC55ZWFycy5zdGFydFllYXIgKyAnLScgKyBjZWxsLnllYXJzLmVuZFllYXJcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIGNlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcihjZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJjZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFyaWEtbGFiZWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLnNlbGVjdGVkID8gX3NlbGVjdGVkRGF0ZUxhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNlbGwubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmlkXT1cImNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNlbGwuYXJpYUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG48ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl90b2RheUxhYmVsSWRcIj57eyBfdG9kYXlBcmlhTGFiZWwgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RlZERhdGVMYWJlbElkXCI+e3sgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCB9fTwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRU4saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBOEMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFjcEgsTUFBTSxPQUFP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LFlBQVksRUFBRSxlQUFlLENBQUM7OzBCQW1HMUMsTUFBTTsyQkFBQyxpQkFBaUI7NENBOUY3QixFQUFFO3NCQURELEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFPTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtHLFlBQVk7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRlVGltZUZvcm1hdHMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRlZFllYXIsIENhbGVuZGFyQWdncmVnYXRlZFllYXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWdncmVnYXRlZC15ZWFyJztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICd2aWV3SWQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgQnV0dG9uTW9kdWxlLCBGZFRyYW5zbGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICAvKiogUGFyYW1ldGVyIHVzZWQgaW4gaWQgb2YgeWVhcnMgdXNlZCBmb3IgaGVscCB3aXRoIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IGVsZW1lbnQgZHVyaW5nIGtleWJvYXJkIG5hdmlnYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGZvY3VzIHdvdWxkIGVzY2FwZSB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogUGFyYW1ldGVyIGhvbGRpbmcgdGhlIHllYXIgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkOiBDYWxlbmRhclllYXJHcmlkO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJWaWV3R3JpZDogQ2FsZW5kYXJZZWFyR3JpZDtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGEgeWVhciBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB5ZWFyc0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxBZ2dyZWdhdGVkWWVhcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFnZ3JlZ2F0ZWRZZWFyPigpO1xuXG4gICAgLyoqXG4gICAgICogVmlldyBJRFxuICAgICAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLXllYXJzLXJhbmdlLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBkZWZpbmUgd2hpY2ggeWVhciBmcm9tIGNhbGVuZGFyWWVhckxpc3Qgc2hvdWxkIGJlIGZvY3VzYWJsZSBieSB0YWIga2V5XG4gICAgICovXG4gICAgX2FjdGl2ZVllYXI6IEFnZ3JlZ2F0ZWRZZWFyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqICBQYXJhbWV0ZXIgdGhhdCBzdG9yZXMgdGhlIGRvemVuIG9mIHllYXJzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgX2NhbGVuZGFyWWVhckxpc3RHcmlkOiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyW11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXJyZW50IHBlcmlvZCBvZiB5ZWFycyBzZWxlY3RlZFxuICAgICAqL1xuICAgIF95ZWFyc1NlbGVjdGVkOiBBZ2dyZWdhdGVkWWVhciB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgdGhlIHllYXIgb2YgdGhlIHByZXNlbnQgZGF5LlxuICAgICAqL1xuICAgIF9jdXJyZW50WWVhcjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhcmFtZXRlciBzdG9yaW5nIGZpcnN0IHNob3duIHllYXIgb24gbGlzdFxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpcnN0WWVhckluTGlzdDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy55ZWFyU2VsZWN0ZWQgLSB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG5cbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5faW5pdGlhdGVkICYmXG4gICAgICAgICAgICAoJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICdhZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICAgICAnaWQnIGluIGNoYW5nZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBzZW5kcyB0aGUgeWVhciB0byB0aGUgcGFyZW50IGNvbXBvbmVudCB3aGVuIGl0IGlzIGNsaWNrZWQuICovXG4gICAgc2VsZWN0WWVhcihzZWxlY3RlZFllYXI6IENhbGVuZGFyQWdncmVnYXRlZFllYXIsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3llYXJzU2VsZWN0ZWQgPSBzZWxlY3RlZFllYXIueWVhcnM7XG4gICAgICAgIHRoaXMueWVhcnNDbGlja2VkLmVtaXQodGhpcy5feWVhcnNTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB1c2VkIHRvIGxvYWQgdGhlIHByZXZpb3VzIDEyIHllYXJzIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBsb2FkTmV4dFllYXJzTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ICs9IHRoaXMuX3BlcmlvZHNBbW91bnQoKSAqIHRoaXMuX3llYXJzSW5PbmVQZXJpb2QoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB1c2VkIHRvIGxvYWQgdGhlIG5leHQgMTIgeWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWRQcmV2aW91c1llYXJzTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0IC09IHRoaXMuX3BlcmlvZHNBbW91bnQoKSAqIHRoaXMuX3llYXJzSW5PbmVQZXJpb2QoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIG1vbnRoIGNlbGwuXG4gICAgICogSXQgY2FuIGJlIGEgc2VsZWN0ZWQgY2VsbCwgY3VycmVudCBtb250aCBjZWxsIG9yIGZpcnN0IGNlbGwgaW4gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5KCkuZ2V0QWN0aXZlQ2VsbCh0aGlzLl9nZXRZZWFyc0xpc3QoKSk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7Y2VsbFRvRm9jdXMuaWR9YCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24uICovXG4gICAgX29uS2V5ZG93blllYXJIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGFsbG93cyB0byBmb2N1cyBlbGVtZW50cyBpbnNpZGUgdGhpcyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBfZm9jdXNFbGVtZW50QnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgPSB0aGlzLl9lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCByZXR1cm5pbmcgaW5kZXggb2YgYWdncmVnYXRlZCB5ZWFyIGluZGV4IGNlbGxcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGlkIG9mIGNhbGVuZGFyJ3MgYWdncmVnYXRlZCB5ZWFyIGl0ZW1cbiAgICAgKi9cbiAgICBfZ2V0SWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctYWdncmVnYXRlZC15ZWFycy0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoZWNrIGlmIHNwZWNpZmllZCB5ZWFyIGlzIGJldHdlZW4gc3RhcnQgeWVhciBhbmQgZW5kIHllYXIpXG4gICAgICovXG4gICAgX2lzQmV0d2VlbihhZ2dyZWdhdGVkWWVhcjogQWdncmVnYXRlZFllYXIsIHllYXJUb0NoZWNrOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZWRZZWFyLmVuZFllYXIgPj0geWVhclRvQ2hlY2sgJiYgYWdncmVnYXRlZFllYXIuc3RhcnRZZWFyIDw9IHllYXJUb0NoZWNrO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0WWVhcnNHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDogbnVtYmVyID0gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5jb2xzICogdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5yb3dzO1xuICAgICAgICBjb25zdCBjYWxlbmRhclllYXJMaXN0OiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyW10gPSBbXTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGlzcGxheWVkWWVhcnNBbW91bnQ7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2VuZXJhdGVzIG9iamVjdCB3aXRoIGNlcnRhaW4gcGVyaW9kIG9mIHllYXJzLFxuICAgICAgICAgICAgICogd2hpY2ggZGVwZW5kcyBvbiBhbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGNvbnN0IHllYXJzOiBBZ2dyZWdhdGVkWWVhciA9IHtcbiAgICAgICAgICAgICAgICBzdGFydFllYXI6IHRoaXMuX2ZpcnN0WWVhckluTGlzdCArIHRoaXMuX3llYXJzSW5PbmVQZXJpb2QoKSAqIGluZGV4LFxuICAgICAgICAgICAgICAgIGVuZFllYXI6IHRoaXMuX2ZpcnN0WWVhckluTGlzdCArIHRoaXMuX3llYXJzSW5PbmVQZXJpb2QoKSAqIChpbmRleCArIDEpIC0gMVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2FsZW5kYXJZZWFyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fZ2V0WWVhcnNOYW1lKHllYXJzKSxcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuX2dldEFyaWFZZWFyc05hbWUoeWVhcnMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLl9pc0JldHdlZW4oeWVhcnMsIHRoaXMueWVhclNlbGVjdGVkKSxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiB0aGlzLl9pc0JldHdlZW4oeWVhcnMsIHRoaXMuX2N1cnJlbnRZZWFyKSxcbiAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogQ3JlYXRpbmcgMmQgZ3JpZCAqL1xuICAgICAgICB3aGlsZSAoY2FsZW5kYXJZZWFyTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLnB1c2goY2FsZW5kYXJZZWFyTGlzdC5zcGxpY2UoMCwgdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5jb2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB5ZWFyc0NlbGxTZWxlY3RlZCA9IGNhbGVuZGFyWWVhckxpc3QuZmluZCgoY2VsbCkgPT4gdGhpcy5faXNCZXR3ZWVuKGNlbGwueWVhcnMsIHRoaXMueWVhclNlbGVjdGVkKSk7XG4gICAgICAgIHRoaXMuX3llYXJzU2VsZWN0ZWQgPSB5ZWFyc0NlbGxTZWxlY3RlZCA/IHllYXJzQ2VsbFNlbGVjdGVkLnllYXJzIDogbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlWWVhciA9IHRoaXMuX2dldEFjdGl2ZVllYXIoKTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZC5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgoY2VsbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmlkID0gdGhpcy5fZ2V0SWQodGhpcy5fZ2V0SW5kZXgocm93SW5kZXgsIGNvbEluZGV4KSk7XG4gICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9IGNlbGwueWVhcnMgPT09IHRoaXMuX2FjdGl2ZVllYXIgPyAwIDogLTE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyc05hbWUoeWVhcnM6IEFnZ3JlZ2F0ZWRZZWFyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnRZZWFyRm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhcnMuc3RhcnRZZWFyLCAxLCAxKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbmRZZWFyRm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhcnMuZW5kWWVhciwgMSwgMSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2dldFllYXJTdHJpbmcoeWVhcnMuc3RhcnRZZWFyLCBzdGFydFllYXJGb3JtYXR0ZWQpfSAtICR7dGhpcy5fZ2V0WWVhclN0cmluZyhcbiAgICAgICAgICAgIHllYXJzLmVuZFllYXIsXG4gICAgICAgICAgICBlbmRZZWFyRm9ybWF0dGVkXG4gICAgICAgICl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyBhcmlhIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBcmlhWWVhcnNOYW1lKHllYXJzOiBBZ2dyZWdhdGVkWWVhcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFycy5zdGFydFllYXIsIDEsIDEpLFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkueWVhckExMXlMYWJlbFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbmRZZWFyRm9ybWF0dGVkID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLmVuZFllYXIsIDEsIDEpLFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkueWVhckExMXlMYWJlbFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFycy5zdGFydFllYXIsIHN0YXJ0WWVhckZvcm1hdHRlZCl9IC0gJHt0aGlzLl9nZXRZZWFyU3RyaW5nKFxuICAgICAgICAgICAgeWVhcnMuZW5kWWVhcixcbiAgICAgICAgICAgIGVuZFllYXJGb3JtYXR0ZWRcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSB0YWtpbmcgaW50byBhY2NvdW50IHllYXJNYXBwaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFllYXJTdHJpbmcoeWVhcjogbnVtYmVyLCBkZWZhdWx0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQueWVhck1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnllYXJNYXBwaW5nKHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0U3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX3llYXJzSW5PbmVQZXJpb2QoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMueWVhclZpZXdHcmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQuY29scyAqIHRoaXMueWVhclZpZXdHcmlkLnJvd3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiBhZ2dyZWdhdGVkIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX3BlcmlvZHNBbW91bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scyAqIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQucm93cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIHllYXIsIHJldHVybiBzZWxlY3RlZCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgeWVhciwgYnV0IHRoZXJlIGlzIGN1cnJlbnQgeWVhciwgcmV0dXJuIGN1cnJlbnQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgeWVhciwgb3Igc2VsZWN0ZWQsIHJldHVybiBmaXJzdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVZZWFyKCk6IEFnZ3JlZ2F0ZWRZZWFyIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyQ2VsbCA9IHRoaXMuX2dldFllYXJzTGlzdCgpLmZpbmQoKHsgeWVhcnMgfSkgPT4gdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLnllYXJTZWxlY3RlZCkpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRZZWFyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkWWVhckNlbGwueWVhcnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50WWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyc0xpc3QoKS5maW5kKCh7IHllYXJzIH0pID0+IHRoaXMuX2lzQmV0d2Vlbih5ZWFycywgdGhpcy5fY3VycmVudFllYXIpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRZZWFyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRZZWFyQ2VsbC55ZWFycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZFswXVswXS55ZWFycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIHllYXIgZ3JpZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyc0xpc3QoKTogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhcltdIHtcbiAgICAgICAgcmV0dXJuICg8Q2FsZW5kYXJBZ2dyZWdhdGVkWWVhcltdPltdKS5jb25jYXQoLi4udGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gcHV0IGNvbmZpZ3VyYXRpb24gYW5kIGxpc3RlbmVycyBvbiBjYWxlbmRhciBrZXlib2FyZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0dXBLZXlib2FyZFNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnJvd3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLmNvbHM7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uRm9jdXNJZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5U2VsZWN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5zZWxlY3RZZWFyKHRoaXMuX2dldFllYXJzTGlzdCgpW2luZGV4XSkpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcmV2aW91c1llYXJzTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdEVuZEFwcHJvYWNoLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWROZXh0WWVhcnNMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke3RoaXMuX2dldElkKGluZGV4KX1gKTtcbiAgICB9XG59XG4iLCI8dGFibGVcbiAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19jb250ZW50IGZkLWNhbGVuZGFyX19jb250ZW50LS15ZWFyc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uJyB8IGZkVHJhbnNsYXRlXCJcbj5cbiAgICA8dGJvZHkgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiICpuZ0Zvcj1cImxldCBjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjZWxsIG9mIGNvbFllYXJzOyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19teS1pdGVtLS1jdXJyZW50XT1cImNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJjZWxsLmlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjZWxsLnRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJzXT1cImNlbGwueWVhcnMuc3RhcnRZZWFyICsgJy0nICsgY2VsbC55ZWFycy5lbmRZZWFyXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duWWVhckhhbmRsZXIoJGV2ZW50LCBjZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiY2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbC5zZWxlY3RlZCA/IF9zZWxlY3RlZERhdGVMYWJlbElkIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJjZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLmFyaWFMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfdG9kYXlMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0ZWREYXRlTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbjwvZGl2PlxuIl19
|